From 4b06e7c0620b1143ffd7379a489e9550dce1184c Mon Sep 17 00:00:00 2001 From: Bel Curcio Date: Tue, 25 May 2021 15:16:17 -0300 Subject: [PATCH] Changes --- .editorconfig | 23 + .env.example | 7 - .env.template | 12 + .gitignore | 3 +- .prettierignore | 3 + .prettierrc | 6 + .vercelignore | 1 - .vscode/extensions.json | 3 + README.md | 124 +- assets/base.css | 130 + assets/chrome-bug.css | 12 + assets/components.css | 3 + assets/font.css | 628 -- assets/global.css | 194 - assets/main.css | 7 + codegen.json | 11 +- commerce.config.json | 6 + components/auth/ForgotPassword.tsx | 78 + components/auth/LoginView.tsx | 104 + components/auth/SignUpView.tsx | 114 + components/auth/index.ts | 3 + components/cart/CartItem/CartItem.module.css | 43 + components/cart/CartItem/CartItem.tsx | 187 + components/cart/CartItem/index.ts | 1 + .../CartSidebarView.module.css | 16 + .../cart/CartSidebarView/CartSidebarView.tsx | 156 + components/cart/CartSidebarView/index.ts | 1 + components/cart/index.ts | 2 + .../CheckoutSidebarView.module.css | 16 + .../CheckoutSidebarView.tsx | 185 + .../checkout/CheckoutSidebarView/index.ts | 1 + .../PaymentMethodView.module.css} | 0 .../PaymentMethodView/PaymentMethodView.tsx | 40 + .../checkout/PaymentMethodView/index.ts | 1 + components/checkout/README.md | 12 + .../ShippingView/ShippingView.module.css | 2 + .../checkout/ShippingView/ShippingView.tsx | 40 + components/checkout/ShippingView/index.ts | 1 + components/common/Avatar/Avatar.tsx | 24 + components/common/Avatar/index.ts | 1 + .../common/FeatureBar/FeatureBar.module.css | 7 + components/common/FeatureBar/FeatureBar.tsx | 39 + components/common/FeatureBar/index.ts | 1 + components/common/Footer/Footer.module.css | 9 + components/common/Footer/Footer.tsx | 159 + components/common/Footer/index.ts | 1 + components/common/Head/Head.tsx | 18 + components/common/Head/index.ts | 1 + .../HomeAllProductsGrid.module.css | 23 + .../HomeAllProductsGrid.tsx | 73 + .../common/HomeAllProductsGrid/index.ts | 1 + .../common/I18nWidget/I18nWidget.module.css | 42 + components/common/I18nWidget/I18nWidget.tsx | 101 + components/common/I18nWidget/index.ts | 1 + components/common/Layout/Layout.module.css | 4 + components/common/Layout/Layout.tsx | 99 + components/common/Layout/index.ts | 1 + components/common/Navbar/Navbar.module.css | 24 + components/common/Navbar/Navbar.tsx | 50 + components/common/Navbar/NavbarRoot.tsx | 33 + components/common/Navbar/index.ts | 1 + .../common/Searchbar/Searchbar.module.css | 19 + components/common/Searchbar/Searchbar.tsx | 66 + components/common/Searchbar/index.ts | 1 + .../common/UserNav/DropdownMenu.module.css | 24 + components/common/UserNav/DropdownMenu.tsx | 125 + components/common/UserNav/UserNav.module.css | 40 + components/common/UserNav/UserNav.tsx | 61 + components/common/UserNav/index.ts | 1 + components/common/index.ts | 9 + components/core/Avatar/Avatar.tsx | 23 - components/core/Avatar/index.ts | 1 - .../core/Featurebar/Featurebar.module.css | 21 - components/core/Featurebar/Featurebar.tsx | 26 - components/core/Featurebar/index.ts | 1 - components/core/Footer/Footer.module.css | 7 - components/core/Footer/Footer.tsx | 20 - components/core/Footer/index.ts | 1 - components/core/Layout/Layout.module.css | 3 - components/core/Layout/Layout.tsx | 26 - components/core/Layout/index.ts | 1 - components/core/Navbar/Navbar.module.css | 3 - components/core/Navbar/Navbar.tsx | 0 components/core/Navbar/index.ts | 1 - .../core/Searchbar/Searchbar.module.css | 24 - components/core/Searchbar/Searchbar.tsx | 32 - components/core/Searchbar/index.ts | 1 - components/core/index.ts | 0 components/icon/Bag.tsx | 0 components/icon/Heart.tsx | 0 components/icon/Trash.tsx | 0 components/icon/index.ts | 0 components/icons/ArrowLeft.tsx | 27 + components/icons/Bag.tsx | 33 + components/icons/Check.tsx | 21 + components/icons/ChevronLeft.tsx | 20 + components/icons/ChevronUp.tsx | 20 + components/icons/CreditCard.tsx | 20 + components/icons/Cross.tsx | 21 + components/icons/DoubleChevron.tsx | 22 + components/icons/Github.tsx | 20 + components/icons/Heart.tsx | 22 + components/icons/Info.tsx | 22 + components/icons/MapPin.tsx | 20 + components/icons/Minus.tsx | 15 + components/icons/Moon.tsx | 20 + components/icons/Plus.tsx | 22 + components/icons/RightArrow.tsx | 29 + components/icons/Sun.tsx | 28 + components/icons/Trash.tsx | 43 + components/icons/Vercel.tsx | 40 + components/icons/index.ts | 19 + .../ProductCard/ProductCard.module.css | 136 + .../product/ProductCard/ProductCard.tsx | 88 + components/product/ProductCard/index.ts | 1 + .../ProductSlider/ProductSlider.module.css | 82 + .../product/ProductSlider/ProductSlider.tsx | 119 + components/product/ProductSlider/index.ts | 1 + .../ProductView/ProductView.module.css | 96 + .../product/ProductView/ProductView.tsx | 176 + components/product/ProductView/index.ts | 2 +- components/product/Swatch/Swatch.module.css | 33 + components/product/Swatch/Swatch.tsx | 55 + components/product/Swatch/index.ts | 1 + components/product/helpers.ts | 18 + components/product/index.ts | 5 +- components/ui/Button/Button.module.css | 39 + components/ui/Button/Button.tsx | 115 +- components/ui/Button/index.ts | 3 +- components/ui/Container/Container.module.css | 5 - components/ui/Container/Container.tsx | 34 +- components/ui/Container/index.ts | 2 +- components/ui/Grid/Grid.module.css | 149 + components/ui/Grid/Grid.tsx | 34 + components/ui/Grid/index.ts | 1 + components/ui/Hero/Hero.module.css | 6 + components/ui/Hero/Hero.tsx | 37 + components/ui/Hero/index.ts | 1 + components/ui/Input/Input.module.css | 7 + components/ui/Input/Input.tsx | 37 + components/ui/Input/index.ts | 1 + components/ui/Link/Link.tsx | 11 + components/ui/Link/index.ts | 1 + .../ui/LoadingDots/LoadingDots.module.css | 32 + components/ui/LoadingDots/LoadingDots.tsx | 13 + components/ui/LoadingDots/index.ts | 1 + components/ui/Logo/Logo.tsx | 45 +- components/ui/Logo/index.ts | 2 +- components/ui/Marquee/Marquee.module.css | 22 + components/ui/Marquee/Marquee.tsx | 35 + components/ui/Marquee/index.ts | 1 + components/ui/Modal/Modal.module.css | 12 + components/ui/Modal/Modal.tsx | 66 + components/ui/Modal/index.ts | 1 + components/ui/README.md | 2 +- components/ui/Sidebar/Sidebar.module.css | 3 + components/ui/Sidebar/Sidebar.tsx | 55 + components/ui/Sidebar/index.ts | 1 + components/ui/Skeleton/Skeleton.module.css | 48 + components/ui/Skeleton/Skeleton.tsx | 57 + components/ui/Skeleton/index.ts | 1 + components/ui/Text/Text.module.css | 15 + components/ui/Text/Text.tsx | 67 + components/ui/Text/index.ts | 1 + components/ui/_BLANK/Featurebar.tsx | 15 - components/ui/_BLANK/index.ts | 1 - components/ui/context.tsx | 226 + components/ui/index.ts | 17 +- .../WishlistButton/WishlistButton.tsx | 78 + components/wishlist/WishlistButton/index.ts | 1 + .../WishlistCard/WishlistCard.module.css | 21 + .../wishlist/WishlistCard/WishlistCard.tsx | 101 + components/wishlist/WishlistCard/index.ts | 1 + components/wishlist/index.ts | 2 + config/seo.json | 26 + framework/bigcommerce/.env.template | 8 + framework/bigcommerce/README.md | 59 + .../bigcommerce/api/cart/handlers/add-item.ts | 45 + .../bigcommerce/api/cart/handlers/get-cart.ts | 32 + .../api/cart/handlers/remove-item.ts | 33 + .../api/cart/handlers/update-item.ts | 35 + framework/bigcommerce/api/cart/index.ts | 78 + .../api/catalog/handlers/get-products.ts | 79 + framework/bigcommerce/api/catalog/products.ts | 48 + framework/bigcommerce/api/checkout.ts | 77 + .../handlers/get-logged-in-customer.ts | 59 + .../api/customers/handlers/login.ts | 49 + .../api/customers/handlers/logout.ts | 23 + .../api/customers/handlers/signup.ts | 62 + framework/bigcommerce/api/customers/index.ts | 46 + framework/bigcommerce/api/customers/login.ts | 45 + framework/bigcommerce/api/customers/logout.ts | 42 + framework/bigcommerce/api/customers/signup.ts | 50 + .../bigcommerce/api/definitions/catalog.ts | 2993 +++++ .../api/definitions/store-content.ts | 329 + .../bigcommerce/api/definitions/wishlist.ts | 142 + .../api/fragments/category-tree.ts | 9 + .../bigcommerce/api/fragments/product.ts | 113 + framework/bigcommerce/api/index.ts | 88 + .../bigcommerce/api/utils/concat-cookie.ts | 14 + .../api/utils/create-api-handler.ts | 58 + framework/bigcommerce/api/utils/errors.ts | 25 + .../api/utils/fetch-graphql-api.ts | 38 + .../bigcommerce/api/utils/fetch-store-api.ts | 71 + framework/bigcommerce/api/utils/fetch.ts | 3 + .../bigcommerce/api/utils/filter-edges.ts | 5 + .../bigcommerce/api/utils/get-cart-cookie.ts | 20 + .../api/utils/is-allowed-method.ts | 28 + framework/bigcommerce/api/utils/parse-item.ts | 28 + .../api/utils/set-product-locale-meta.ts | 21 + framework/bigcommerce/api/utils/types.ts | 7 + .../api/wishlist/handlers/add-item.ts | 56 + .../api/wishlist/handlers/get-wishlist.ts | 37 + .../api/wishlist/handlers/remove-item.ts | 39 + framework/bigcommerce/api/wishlist/index.ts | 104 + framework/bigcommerce/auth/index.ts | 3 + framework/bigcommerce/auth/login.ts | 73 + framework/bigcommerce/auth/use-login.tsx | 40 + framework/bigcommerce/auth/use-logout.tsx | 25 + framework/bigcommerce/auth/use-signup.tsx | 44 + framework/bigcommerce/cart/index.ts | 4 + framework/bigcommerce/cart/use-add-item.tsx | 50 + framework/bigcommerce/cart/use-cart.tsx | 41 + .../bigcommerce/cart/use-remove-item.tsx | 71 + .../bigcommerce/cart/use-update-item.tsx | 97 + framework/bigcommerce/commerce.config.json | 6 + framework/bigcommerce/common/get-all-pages.ts | 43 + framework/bigcommerce/common/get-page.ts | 53 + framework/bigcommerce/common/get-site-info.ts | 106 + .../bigcommerce/customer/get-customer-id.ts | 34 + .../customer/get-customer-wishlist.ts | 88 + framework/bigcommerce/customer/index.ts | 1 + .../bigcommerce/customer/use-customer.tsx | 24 + framework/bigcommerce/fetcher.ts | 41 + framework/bigcommerce/index.tsx | 35 + framework/bigcommerce/lib/immutability.ts | 13 + framework/bigcommerce/lib/normalize.ts | 113 + framework/bigcommerce/next.config.js | 8 + .../product/get-all-product-paths.ts | 71 + .../bigcommerce/product/get-all-products.ts | 135 + framework/bigcommerce/product/get-product.ts | 121 + framework/bigcommerce/product/index.ts | 4 + framework/bigcommerce/product/use-price.tsx | 2 + framework/bigcommerce/product/use-search.tsx | 53 + framework/bigcommerce/provider.ts | 34 + framework/bigcommerce/schema.d.ts | 2064 ++++ framework/bigcommerce/schema.graphql | 2422 +++++ .../scripts/generate-definitions.js | 49 + framework/bigcommerce/types.ts | 58 + framework/bigcommerce/wishlist/index.ts | 3 + .../bigcommerce/wishlist/use-add-item.tsx | 37 + .../bigcommerce/wishlist/use-remove-item.tsx | 44 + .../bigcommerce/wishlist/use-wishlist.tsx | 60 + framework/commerce/README.md | 334 + framework/commerce/api/index.ts | 34 + framework/commerce/auth/use-login.tsx | 19 + framework/commerce/auth/use-logout.tsx | 19 + framework/commerce/auth/use-signup.tsx | 19 + framework/commerce/cart/use-add-item.tsx | 23 + framework/commerce/cart/use-cart.tsx | 41 + framework/commerce/cart/use-remove-item.tsx | 35 + framework/commerce/cart/use-update-item.tsx | 38 + framework/commerce/config.js | 66 + framework/commerce/customer/use-customer.tsx | 20 + framework/commerce/index.tsx | 88 + framework/commerce/new-provider.md | 239 + framework/commerce/product/use-price.tsx | 64 + framework/commerce/product/use-search.tsx | 20 + framework/commerce/types.ts | 204 + framework/commerce/utils/default-fetcher.ts | 12 + framework/commerce/utils/define-property.ts | 37 + framework/commerce/utils/errors.ts | 48 + framework/commerce/utils/types.ts | 131 + framework/commerce/utils/use-data.tsx | 77 + framework/commerce/utils/use-hook.ts | 50 + framework/commerce/wishlist/index.ts | 3 + framework/commerce/wishlist/use-add-item.tsx | 19 + .../commerce/wishlist/use-remove-item.tsx | 28 + framework/commerce/wishlist/use-wishlist.tsx | 25 + framework/shopify/.env.template | 4 + framework/shopify/README.md | 123 + framework/shopify/api/cart/index.ts | 1 + framework/shopify/api/catalog/index.ts | 1 + framework/shopify/api/catalog/products.ts | 1 + framework/shopify/api/checkout/index.ts | 46 + framework/shopify/api/customer.ts | 1 + framework/shopify/api/customers/index.ts | 1 + framework/shopify/api/customers/login.ts | 1 + framework/shopify/api/customers/logout.ts | 1 + framework/shopify/api/customers/signup.ts | 1 + framework/shopify/api/index.ts | 61 + .../shopify/api/utils/create-api-handler.ts | 58 + .../shopify/api/utils/fetch-all-products.ts | 41 + .../shopify/api/utils/fetch-graphql-api.ts | 45 + framework/shopify/api/utils/fetch.ts | 2 + .../shopify/api/utils/is-allowed-method.ts | 28 + framework/shopify/api/wishlist/index.tsx | 2 + framework/shopify/auth/use-login.tsx | 71 + framework/shopify/auth/use-logout.tsx | 36 + framework/shopify/auth/use-signup.tsx | 70 + framework/shopify/cart/index.ts | 4 + framework/shopify/cart/use-add-item.tsx | 60 + framework/shopify/cart/use-cart.tsx | 59 + framework/shopify/cart/use-remove-item.tsx | 71 + framework/shopify/cart/use-update-item.tsx | 107 + framework/shopify/commerce.config.json | 6 + framework/shopify/common/get-all-pages.ts | 42 + framework/shopify/common/get-page.ts | 37 + framework/shopify/common/get-site-info.ts | 31 + framework/shopify/const.ts | 13 + framework/shopify/customer/get-customer-id.ts | 24 + framework/shopify/customer/index.ts | 1 + framework/shopify/customer/use-customer.tsx | 27 + framework/shopify/fetcher.ts | 23 + framework/shopify/index.tsx | 39 + framework/shopify/next.config.js | 8 + .../shopify/product/get-all-collections.ts | 29 + .../shopify/product/get-all-product-paths.ts | 42 + framework/shopify/product/get-all-products.ts | 40 + framework/shopify/product/get-product.ts | 32 + framework/shopify/product/use-price.tsx | 2 + framework/shopify/product/use-search.tsx | 78 + framework/shopify/provider.ts | 27 + framework/shopify/schema.d.ts | 4985 +++++++++ framework/shopify/schema.graphql | 9631 +++++++++++++++++ framework/shopify/types.ts | 43 + framework/shopify/utils/checkout-create.ts | 33 + framework/shopify/utils/checkout-to-cart.ts | 48 + framework/shopify/utils/customer-token.ts | 21 + framework/shopify/utils/get-categories.ts | 29 + framework/shopify/utils/get-checkout-id.ts | 8 + .../shopify/utils/get-search-variables.ts | 27 + framework/shopify/utils/get-sort-variables.ts | 32 + framework/shopify/utils/get-vendors.ts | 40 + .../utils/handle-account-activation.ts | 30 + .../shopify/utils/handle-fetch-response.ts | 27 + framework/shopify/utils/handle-login.ts | 36 + framework/shopify/utils/index.ts | 15 + .../associate-customer-with-checkout.ts | 18 + .../utils/mutations/checkout-create.ts | 17 + .../utils/mutations/checkout-line-item-add.ts | 17 + .../mutations/checkout-line-item-remove.ts | 20 + .../mutations/checkout-line-item-update.ts | 17 + .../mutations/customer-access-token-create.ts | 16 + .../mutations/customer-access-token-delete.ts | 14 + .../mutations/customer-activate-by-url.ts | 19 + .../utils/mutations/customer-activate.ts | 19 + .../utils/mutations/customer-create.ts | 15 + framework/shopify/utils/mutations/index.ts | 9 + framework/shopify/utils/normalize.ts | 160 + .../queries/get-all-collections-query.ts | 14 + .../utils/queries/get-all-pages-query.ts | 14 + .../queries/get-all-product-vendors-query.ts | 17 + .../queries/get-all-products-paths-query.ts | 17 + .../utils/queries/get-all-products-query.ts | 56 + .../utils/queries/get-checkout-query.ts | 69 + .../queries/get-collection-products-query.ts | 24 + .../utils/queries/get-customer-id-query.ts | 8 + .../utils/queries/get-customer-query.ts | 16 + .../shopify/utils/queries/get-page-query.ts | 14 + .../utils/queries/get-product-query.ts | 69 + framework/shopify/utils/queries/index.ts | 10 + framework/shopify/utils/throw-user-errors.ts | 38 + framework/shopify/wishlist/use-add-item.tsx | 13 + .../shopify/wishlist/use-remove-item.tsx | 17 + framework/shopify/wishlist/use-wishlist.tsx | 46 + global.d.ts | 2 + lib/bigcommerce/api/index.ts | 84 - .../api/operations/get-all-products.ts | 79 - lib/bigcommerce/cart.tsx | 14 - lib/bigcommerce/index.tsx | 47 - lib/bigcommerce/schema.d.ts | 1733 --- lib/bigcommerce/schema.graphql | 1529 --- lib/cart.js | 105 - lib/click-outside/click-outside.tsx | 42 + lib/click-outside/has-parent.js | 5 + lib/click-outside/index.ts | 1 + lib/click-outside/is-in-dom.js | 3 + lib/colors.ts | 202 + lib/commerce/api/index.ts | 24 - lib/commerce/cart.tsx | 37 - lib/commerce/index.tsx | 29 - lib/defaults.ts | 14 + lib/focus-trap.tsx | 64 + lib/get-slug.ts | 5 + lib/hooks/useAcceptCookies.ts | 24 + lib/hooks/useUserAvatar.ts | 26 + lib/range-map.ts | 7 + lib/search.tsx | 52 + lib/to-pixels.ts | 13 + lib/usage-warns.ts | 26 + license.md | 21 + next.config.js | 48 + package-lock.json | 6710 ------------ package.json | 126 +- pages/[...pages].tsx | 74 + pages/_app.tsx | 30 +- pages/_document.tsx | 15 +- pages/api/bigcommerce/cart.ts | 3 + pages/api/bigcommerce/catalog/products.ts | 3 + pages/api/bigcommerce/checkout.ts | 3 + pages/api/bigcommerce/customers/index.ts | 3 + pages/api/bigcommerce/customers/login.ts | 3 + pages/api/bigcommerce/customers/logout.ts | 3 + pages/api/bigcommerce/customers/signup.ts | 3 + pages/api/bigcommerce/wishlist.ts | 3 + pages/blog.tsx | 97 + pages/cart.tsx | 181 + pages/checkout/new-shipping.tsx | 42 + pages/index.tsx | 123 +- pages/orders.tsx | 38 + pages/product/[id].tsx | 42 - pages/product/[slug].tsx | 71 + pages/profile.tsx | 44 + pages/search.tsx | 470 + pages/wishlist.tsx | 68 + postcss.config.js | 3 +- public/bg-products.svg | 7 + public/card.png | Bin 0 -> 6286 bytes public/cursor-left.png | Bin 0 -> 1162 bytes public/cursor-right.png | Bin 0 -> 1165 bytes public/favicon.ico | Bin 0 -> 535 bytes public/flag-en-us.svg | 1 + public/flag-es-ar.svg | 20 + public/flag-es-co.svg | 10 + public/flag-es.svg | 1 + public/icon-144x144.png | Bin 0 -> 4150 bytes public/icon-192x192.png | Bin 0 -> 6030 bytes public/icon-512x512.png | Bin 0 -> 10832 bytes public/icon.png | Bin 0 -> 1058 bytes public/jacket.png | Bin 0 -> 772153 bytes public/product-img-placeholder.svg | 7 + public/site.webmanifest | 22 + public/slider-arrows.png | Bin 0 -> 1739 bytes public/vercel.svg | 9 + tailwind.config.js | 78 +- tsconfig.json | 13 +- yarn.lock | 6997 ++++++------ 438 files changed, 40493 insertions(+), 15387 deletions(-) create mode 100644 .editorconfig delete mode 100644 .env.example create mode 100644 .env.template create mode 100644 .prettierignore create mode 100644 .prettierrc delete mode 100644 .vercelignore create mode 100644 .vscode/extensions.json create mode 100644 assets/base.css create mode 100644 assets/chrome-bug.css create mode 100644 assets/components.css delete mode 100644 assets/font.css delete mode 100644 assets/global.css create mode 100644 assets/main.css create mode 100644 commerce.config.json create mode 100644 components/auth/ForgotPassword.tsx create mode 100644 components/auth/LoginView.tsx create mode 100644 components/auth/SignUpView.tsx create mode 100644 components/auth/index.ts create mode 100644 components/cart/CartItem/CartItem.module.css create mode 100644 components/cart/CartItem/CartItem.tsx create mode 100644 components/cart/CartItem/index.ts create mode 100644 components/cart/CartSidebarView/CartSidebarView.module.css create mode 100644 components/cart/CartSidebarView/CartSidebarView.tsx create mode 100644 components/cart/CartSidebarView/index.ts create mode 100644 components/cart/index.ts create mode 100644 components/checkout/CheckoutSidebarView/CheckoutSidebarView.module.css create mode 100644 components/checkout/CheckoutSidebarView/CheckoutSidebarView.tsx create mode 100644 components/checkout/CheckoutSidebarView/index.ts rename components/{core/Avatar/Avatar.module.css => checkout/PaymentMethodView/PaymentMethodView.module.css} (100%) create mode 100644 components/checkout/PaymentMethodView/PaymentMethodView.tsx create mode 100644 components/checkout/PaymentMethodView/index.ts create mode 100644 components/checkout/README.md create mode 100644 components/checkout/ShippingView/ShippingView.module.css create mode 100644 components/checkout/ShippingView/ShippingView.tsx create mode 100644 components/checkout/ShippingView/index.ts create mode 100644 components/common/Avatar/Avatar.tsx create mode 100644 components/common/Avatar/index.ts create mode 100644 components/common/FeatureBar/FeatureBar.module.css create mode 100644 components/common/FeatureBar/FeatureBar.tsx create mode 100644 components/common/FeatureBar/index.ts create mode 100644 components/common/Footer/Footer.module.css create mode 100644 components/common/Footer/Footer.tsx create mode 100644 components/common/Footer/index.ts create mode 100644 components/common/Head/Head.tsx create mode 100644 components/common/Head/index.ts create mode 100644 components/common/HomeAllProductsGrid/HomeAllProductsGrid.module.css create mode 100644 components/common/HomeAllProductsGrid/HomeAllProductsGrid.tsx create mode 100644 components/common/HomeAllProductsGrid/index.ts create mode 100644 components/common/I18nWidget/I18nWidget.module.css create mode 100644 components/common/I18nWidget/I18nWidget.tsx create mode 100644 components/common/I18nWidget/index.ts create mode 100644 components/common/Layout/Layout.module.css create mode 100644 components/common/Layout/Layout.tsx create mode 100644 components/common/Layout/index.ts create mode 100644 components/common/Navbar/Navbar.module.css create mode 100644 components/common/Navbar/Navbar.tsx create mode 100644 components/common/Navbar/NavbarRoot.tsx create mode 100644 components/common/Navbar/index.ts create mode 100644 components/common/Searchbar/Searchbar.module.css create mode 100644 components/common/Searchbar/Searchbar.tsx create mode 100644 components/common/Searchbar/index.ts create mode 100644 components/common/UserNav/DropdownMenu.module.css create mode 100644 components/common/UserNav/DropdownMenu.tsx create mode 100644 components/common/UserNav/UserNav.module.css create mode 100644 components/common/UserNav/UserNav.tsx create mode 100644 components/common/UserNav/index.ts create mode 100644 components/common/index.ts delete mode 100644 components/core/Avatar/Avatar.tsx delete mode 100644 components/core/Avatar/index.ts delete mode 100644 components/core/Featurebar/Featurebar.module.css delete mode 100644 components/core/Featurebar/Featurebar.tsx delete mode 100644 components/core/Featurebar/index.ts delete mode 100644 components/core/Footer/Footer.module.css delete mode 100644 components/core/Footer/Footer.tsx delete mode 100644 components/core/Footer/index.ts delete mode 100644 components/core/Layout/Layout.module.css delete mode 100644 components/core/Layout/Layout.tsx delete mode 100644 components/core/Layout/index.ts delete mode 100644 components/core/Navbar/Navbar.module.css delete mode 100644 components/core/Navbar/Navbar.tsx delete mode 100644 components/core/Navbar/index.ts delete mode 100644 components/core/Searchbar/Searchbar.module.css delete mode 100644 components/core/Searchbar/Searchbar.tsx delete mode 100644 components/core/Searchbar/index.ts delete mode 100644 components/core/index.ts delete mode 100644 components/icon/Bag.tsx delete mode 100644 components/icon/Heart.tsx delete mode 100644 components/icon/Trash.tsx delete mode 100644 components/icon/index.ts create mode 100644 components/icons/ArrowLeft.tsx create mode 100644 components/icons/Bag.tsx create mode 100644 components/icons/Check.tsx create mode 100644 components/icons/ChevronLeft.tsx create mode 100644 components/icons/ChevronUp.tsx create mode 100644 components/icons/CreditCard.tsx create mode 100644 components/icons/Cross.tsx create mode 100644 components/icons/DoubleChevron.tsx create mode 100644 components/icons/Github.tsx create mode 100644 components/icons/Heart.tsx create mode 100644 components/icons/Info.tsx create mode 100644 components/icons/MapPin.tsx create mode 100644 components/icons/Minus.tsx create mode 100644 components/icons/Moon.tsx create mode 100644 components/icons/Plus.tsx create mode 100644 components/icons/RightArrow.tsx create mode 100644 components/icons/Sun.tsx create mode 100644 components/icons/Trash.tsx create mode 100644 components/icons/Vercel.tsx create mode 100644 components/icons/index.ts create mode 100644 components/product/ProductCard/ProductCard.module.css create mode 100644 components/product/ProductCard/ProductCard.tsx create mode 100644 components/product/ProductCard/index.ts create mode 100644 components/product/ProductSlider/ProductSlider.module.css create mode 100644 components/product/ProductSlider/ProductSlider.tsx create mode 100644 components/product/ProductSlider/index.ts create mode 100644 components/product/Swatch/Swatch.module.css create mode 100644 components/product/Swatch/Swatch.tsx create mode 100644 components/product/Swatch/index.ts create mode 100644 components/product/helpers.ts delete mode 100644 components/ui/Container/Container.module.css create mode 100644 components/ui/Grid/Grid.module.css create mode 100644 components/ui/Grid/Grid.tsx create mode 100644 components/ui/Grid/index.ts create mode 100644 components/ui/Hero/Hero.module.css create mode 100644 components/ui/Hero/Hero.tsx create mode 100644 components/ui/Hero/index.ts create mode 100644 components/ui/Input/Input.module.css create mode 100644 components/ui/Input/Input.tsx create mode 100644 components/ui/Input/index.ts create mode 100644 components/ui/Link/Link.tsx create mode 100644 components/ui/Link/index.ts create mode 100644 components/ui/LoadingDots/LoadingDots.module.css create mode 100644 components/ui/LoadingDots/LoadingDots.tsx create mode 100644 components/ui/LoadingDots/index.ts create mode 100644 components/ui/Marquee/Marquee.module.css create mode 100644 components/ui/Marquee/Marquee.tsx create mode 100644 components/ui/Marquee/index.ts create mode 100644 components/ui/Modal/Modal.module.css create mode 100644 components/ui/Modal/Modal.tsx create mode 100644 components/ui/Modal/index.ts create mode 100644 components/ui/Sidebar/Sidebar.module.css create mode 100644 components/ui/Sidebar/Sidebar.tsx create mode 100644 components/ui/Sidebar/index.ts create mode 100644 components/ui/Skeleton/Skeleton.module.css create mode 100644 components/ui/Skeleton/Skeleton.tsx create mode 100644 components/ui/Skeleton/index.ts create mode 100644 components/ui/Text/Text.module.css create mode 100644 components/ui/Text/Text.tsx create mode 100644 components/ui/Text/index.ts delete mode 100644 components/ui/_BLANK/Featurebar.tsx delete mode 100644 components/ui/_BLANK/index.ts create mode 100644 components/ui/context.tsx create mode 100644 components/wishlist/WishlistButton/WishlistButton.tsx create mode 100644 components/wishlist/WishlistButton/index.ts create mode 100644 components/wishlist/WishlistCard/WishlistCard.module.css create mode 100644 components/wishlist/WishlistCard/WishlistCard.tsx create mode 100644 components/wishlist/WishlistCard/index.ts create mode 100644 components/wishlist/index.ts create mode 100644 config/seo.json create mode 100644 framework/bigcommerce/.env.template create mode 100644 framework/bigcommerce/README.md create mode 100644 framework/bigcommerce/api/cart/handlers/add-item.ts create mode 100644 framework/bigcommerce/api/cart/handlers/get-cart.ts create mode 100644 framework/bigcommerce/api/cart/handlers/remove-item.ts create mode 100644 framework/bigcommerce/api/cart/handlers/update-item.ts create mode 100644 framework/bigcommerce/api/cart/index.ts create mode 100644 framework/bigcommerce/api/catalog/handlers/get-products.ts create mode 100644 framework/bigcommerce/api/catalog/products.ts create mode 100644 framework/bigcommerce/api/checkout.ts create mode 100644 framework/bigcommerce/api/customers/handlers/get-logged-in-customer.ts create mode 100644 framework/bigcommerce/api/customers/handlers/login.ts create mode 100644 framework/bigcommerce/api/customers/handlers/logout.ts create mode 100644 framework/bigcommerce/api/customers/handlers/signup.ts create mode 100644 framework/bigcommerce/api/customers/index.ts create mode 100644 framework/bigcommerce/api/customers/login.ts create mode 100644 framework/bigcommerce/api/customers/logout.ts create mode 100644 framework/bigcommerce/api/customers/signup.ts create mode 100644 framework/bigcommerce/api/definitions/catalog.ts create mode 100644 framework/bigcommerce/api/definitions/store-content.ts create mode 100644 framework/bigcommerce/api/definitions/wishlist.ts create mode 100644 framework/bigcommerce/api/fragments/category-tree.ts create mode 100644 framework/bigcommerce/api/fragments/product.ts create mode 100644 framework/bigcommerce/api/index.ts create mode 100644 framework/bigcommerce/api/utils/concat-cookie.ts create mode 100644 framework/bigcommerce/api/utils/create-api-handler.ts create mode 100644 framework/bigcommerce/api/utils/errors.ts create mode 100644 framework/bigcommerce/api/utils/fetch-graphql-api.ts create mode 100644 framework/bigcommerce/api/utils/fetch-store-api.ts create mode 100644 framework/bigcommerce/api/utils/fetch.ts create mode 100644 framework/bigcommerce/api/utils/filter-edges.ts create mode 100644 framework/bigcommerce/api/utils/get-cart-cookie.ts create mode 100644 framework/bigcommerce/api/utils/is-allowed-method.ts create mode 100644 framework/bigcommerce/api/utils/parse-item.ts create mode 100644 framework/bigcommerce/api/utils/set-product-locale-meta.ts create mode 100644 framework/bigcommerce/api/utils/types.ts create mode 100644 framework/bigcommerce/api/wishlist/handlers/add-item.ts create mode 100644 framework/bigcommerce/api/wishlist/handlers/get-wishlist.ts create mode 100644 framework/bigcommerce/api/wishlist/handlers/remove-item.ts create mode 100644 framework/bigcommerce/api/wishlist/index.ts create mode 100644 framework/bigcommerce/auth/index.ts create mode 100644 framework/bigcommerce/auth/login.ts create mode 100644 framework/bigcommerce/auth/use-login.tsx create mode 100644 framework/bigcommerce/auth/use-logout.tsx create mode 100644 framework/bigcommerce/auth/use-signup.tsx create mode 100644 framework/bigcommerce/cart/index.ts create mode 100644 framework/bigcommerce/cart/use-add-item.tsx create mode 100644 framework/bigcommerce/cart/use-cart.tsx create mode 100644 framework/bigcommerce/cart/use-remove-item.tsx create mode 100644 framework/bigcommerce/cart/use-update-item.tsx create mode 100644 framework/bigcommerce/commerce.config.json create mode 100644 framework/bigcommerce/common/get-all-pages.ts create mode 100644 framework/bigcommerce/common/get-page.ts create mode 100644 framework/bigcommerce/common/get-site-info.ts create mode 100644 framework/bigcommerce/customer/get-customer-id.ts create mode 100644 framework/bigcommerce/customer/get-customer-wishlist.ts create mode 100644 framework/bigcommerce/customer/index.ts create mode 100644 framework/bigcommerce/customer/use-customer.tsx create mode 100644 framework/bigcommerce/fetcher.ts create mode 100644 framework/bigcommerce/index.tsx create mode 100644 framework/bigcommerce/lib/immutability.ts create mode 100644 framework/bigcommerce/lib/normalize.ts create mode 100644 framework/bigcommerce/next.config.js create mode 100644 framework/bigcommerce/product/get-all-product-paths.ts create mode 100644 framework/bigcommerce/product/get-all-products.ts create mode 100644 framework/bigcommerce/product/get-product.ts create mode 100644 framework/bigcommerce/product/index.ts create mode 100644 framework/bigcommerce/product/use-price.tsx create mode 100644 framework/bigcommerce/product/use-search.tsx create mode 100644 framework/bigcommerce/provider.ts create mode 100644 framework/bigcommerce/schema.d.ts create mode 100644 framework/bigcommerce/schema.graphql create mode 100644 framework/bigcommerce/scripts/generate-definitions.js create mode 100644 framework/bigcommerce/types.ts create mode 100644 framework/bigcommerce/wishlist/index.ts create mode 100644 framework/bigcommerce/wishlist/use-add-item.tsx create mode 100644 framework/bigcommerce/wishlist/use-remove-item.tsx create mode 100644 framework/bigcommerce/wishlist/use-wishlist.tsx create mode 100644 framework/commerce/README.md create mode 100644 framework/commerce/api/index.ts create mode 100644 framework/commerce/auth/use-login.tsx create mode 100644 framework/commerce/auth/use-logout.tsx create mode 100644 framework/commerce/auth/use-signup.tsx create mode 100644 framework/commerce/cart/use-add-item.tsx create mode 100644 framework/commerce/cart/use-cart.tsx create mode 100644 framework/commerce/cart/use-remove-item.tsx create mode 100644 framework/commerce/cart/use-update-item.tsx create mode 100644 framework/commerce/config.js create mode 100644 framework/commerce/customer/use-customer.tsx create mode 100644 framework/commerce/index.tsx create mode 100644 framework/commerce/new-provider.md create mode 100644 framework/commerce/product/use-price.tsx create mode 100644 framework/commerce/product/use-search.tsx create mode 100644 framework/commerce/types.ts create mode 100644 framework/commerce/utils/default-fetcher.ts create mode 100644 framework/commerce/utils/define-property.ts create mode 100644 framework/commerce/utils/errors.ts create mode 100644 framework/commerce/utils/types.ts create mode 100644 framework/commerce/utils/use-data.tsx create mode 100644 framework/commerce/utils/use-hook.ts create mode 100644 framework/commerce/wishlist/index.ts create mode 100644 framework/commerce/wishlist/use-add-item.tsx create mode 100644 framework/commerce/wishlist/use-remove-item.tsx create mode 100644 framework/commerce/wishlist/use-wishlist.tsx create mode 100644 framework/shopify/.env.template create mode 100644 framework/shopify/README.md create mode 100644 framework/shopify/api/cart/index.ts create mode 100644 framework/shopify/api/catalog/index.ts create mode 100644 framework/shopify/api/catalog/products.ts create mode 100644 framework/shopify/api/checkout/index.ts create mode 100644 framework/shopify/api/customer.ts create mode 100644 framework/shopify/api/customers/index.ts create mode 100644 framework/shopify/api/customers/login.ts create mode 100644 framework/shopify/api/customers/logout.ts create mode 100644 framework/shopify/api/customers/signup.ts create mode 100644 framework/shopify/api/index.ts create mode 100644 framework/shopify/api/utils/create-api-handler.ts create mode 100644 framework/shopify/api/utils/fetch-all-products.ts create mode 100644 framework/shopify/api/utils/fetch-graphql-api.ts create mode 100644 framework/shopify/api/utils/fetch.ts create mode 100644 framework/shopify/api/utils/is-allowed-method.ts create mode 100644 framework/shopify/api/wishlist/index.tsx create mode 100644 framework/shopify/auth/use-login.tsx create mode 100644 framework/shopify/auth/use-logout.tsx create mode 100644 framework/shopify/auth/use-signup.tsx create mode 100644 framework/shopify/cart/index.ts create mode 100644 framework/shopify/cart/use-add-item.tsx create mode 100644 framework/shopify/cart/use-cart.tsx create mode 100644 framework/shopify/cart/use-remove-item.tsx create mode 100644 framework/shopify/cart/use-update-item.tsx create mode 100644 framework/shopify/commerce.config.json create mode 100644 framework/shopify/common/get-all-pages.ts create mode 100644 framework/shopify/common/get-page.ts create mode 100644 framework/shopify/common/get-site-info.ts create mode 100644 framework/shopify/const.ts create mode 100644 framework/shopify/customer/get-customer-id.ts create mode 100644 framework/shopify/customer/index.ts create mode 100644 framework/shopify/customer/use-customer.tsx create mode 100644 framework/shopify/fetcher.ts create mode 100644 framework/shopify/index.tsx create mode 100644 framework/shopify/next.config.js create mode 100644 framework/shopify/product/get-all-collections.ts create mode 100644 framework/shopify/product/get-all-product-paths.ts create mode 100644 framework/shopify/product/get-all-products.ts create mode 100644 framework/shopify/product/get-product.ts create mode 100644 framework/shopify/product/use-price.tsx create mode 100644 framework/shopify/product/use-search.tsx create mode 100644 framework/shopify/provider.ts create mode 100644 framework/shopify/schema.d.ts create mode 100644 framework/shopify/schema.graphql create mode 100644 framework/shopify/types.ts create mode 100644 framework/shopify/utils/checkout-create.ts create mode 100644 framework/shopify/utils/checkout-to-cart.ts create mode 100644 framework/shopify/utils/customer-token.ts create mode 100644 framework/shopify/utils/get-categories.ts create mode 100644 framework/shopify/utils/get-checkout-id.ts create mode 100644 framework/shopify/utils/get-search-variables.ts create mode 100644 framework/shopify/utils/get-sort-variables.ts create mode 100644 framework/shopify/utils/get-vendors.ts create mode 100644 framework/shopify/utils/handle-account-activation.ts create mode 100644 framework/shopify/utils/handle-fetch-response.ts create mode 100644 framework/shopify/utils/handle-login.ts create mode 100644 framework/shopify/utils/index.ts create mode 100644 framework/shopify/utils/mutations/associate-customer-with-checkout.ts create mode 100644 framework/shopify/utils/mutations/checkout-create.ts create mode 100644 framework/shopify/utils/mutations/checkout-line-item-add.ts create mode 100644 framework/shopify/utils/mutations/checkout-line-item-remove.ts create mode 100644 framework/shopify/utils/mutations/checkout-line-item-update.ts create mode 100644 framework/shopify/utils/mutations/customer-access-token-create.ts create mode 100644 framework/shopify/utils/mutations/customer-access-token-delete.ts create mode 100644 framework/shopify/utils/mutations/customer-activate-by-url.ts create mode 100644 framework/shopify/utils/mutations/customer-activate.ts create mode 100644 framework/shopify/utils/mutations/customer-create.ts create mode 100644 framework/shopify/utils/mutations/index.ts create mode 100644 framework/shopify/utils/normalize.ts create mode 100644 framework/shopify/utils/queries/get-all-collections-query.ts create mode 100644 framework/shopify/utils/queries/get-all-pages-query.ts create mode 100644 framework/shopify/utils/queries/get-all-product-vendors-query.ts create mode 100644 framework/shopify/utils/queries/get-all-products-paths-query.ts create mode 100644 framework/shopify/utils/queries/get-all-products-query.ts create mode 100644 framework/shopify/utils/queries/get-checkout-query.ts create mode 100644 framework/shopify/utils/queries/get-collection-products-query.ts create mode 100644 framework/shopify/utils/queries/get-customer-id-query.ts create mode 100644 framework/shopify/utils/queries/get-customer-query.ts create mode 100644 framework/shopify/utils/queries/get-page-query.ts create mode 100644 framework/shopify/utils/queries/get-product-query.ts create mode 100644 framework/shopify/utils/queries/index.ts create mode 100644 framework/shopify/utils/throw-user-errors.ts create mode 100644 framework/shopify/wishlist/use-add-item.tsx create mode 100644 framework/shopify/wishlist/use-remove-item.tsx create mode 100644 framework/shopify/wishlist/use-wishlist.tsx create mode 100644 global.d.ts delete mode 100644 lib/bigcommerce/api/index.ts delete mode 100644 lib/bigcommerce/api/operations/get-all-products.ts delete mode 100644 lib/bigcommerce/cart.tsx delete mode 100644 lib/bigcommerce/index.tsx delete mode 100644 lib/bigcommerce/schema.d.ts delete mode 100644 lib/bigcommerce/schema.graphql delete mode 100644 lib/cart.js create mode 100644 lib/click-outside/click-outside.tsx create mode 100644 lib/click-outside/has-parent.js create mode 100644 lib/click-outside/index.ts create mode 100644 lib/click-outside/is-in-dom.js create mode 100644 lib/colors.ts delete mode 100644 lib/commerce/api/index.ts delete mode 100644 lib/commerce/cart.tsx delete mode 100644 lib/commerce/index.tsx create mode 100644 lib/defaults.ts create mode 100644 lib/focus-trap.tsx create mode 100644 lib/get-slug.ts create mode 100644 lib/hooks/useAcceptCookies.ts create mode 100644 lib/hooks/useUserAvatar.ts create mode 100644 lib/range-map.ts create mode 100644 lib/search.tsx create mode 100644 lib/to-pixels.ts create mode 100644 lib/usage-warns.ts create mode 100644 license.md create mode 100644 next.config.js delete mode 100644 package-lock.json create mode 100644 pages/[...pages].tsx create mode 100644 pages/api/bigcommerce/cart.ts create mode 100644 pages/api/bigcommerce/catalog/products.ts create mode 100644 pages/api/bigcommerce/checkout.ts create mode 100644 pages/api/bigcommerce/customers/index.ts create mode 100644 pages/api/bigcommerce/customers/login.ts create mode 100644 pages/api/bigcommerce/customers/logout.ts create mode 100644 pages/api/bigcommerce/customers/signup.ts create mode 100644 pages/api/bigcommerce/wishlist.ts create mode 100644 pages/blog.tsx create mode 100644 pages/cart.tsx create mode 100644 pages/checkout/new-shipping.tsx create mode 100644 pages/orders.tsx delete mode 100644 pages/product/[id].tsx create mode 100644 pages/product/[slug].tsx create mode 100644 pages/profile.tsx create mode 100644 pages/search.tsx create mode 100644 pages/wishlist.tsx create mode 100644 public/bg-products.svg create mode 100644 public/card.png create mode 100644 public/cursor-left.png create mode 100644 public/cursor-right.png create mode 100644 public/favicon.ico create mode 100644 public/flag-en-us.svg create mode 100644 public/flag-es-ar.svg create mode 100644 public/flag-es-co.svg create mode 100644 public/flag-es.svg create mode 100644 public/icon-144x144.png create mode 100644 public/icon-192x192.png create mode 100644 public/icon-512x512.png create mode 100644 public/icon.png create mode 100644 public/jacket.png create mode 100644 public/product-img-placeholder.svg create mode 100644 public/site.webmanifest create mode 100644 public/slider-arrows.png create mode 100644 public/vercel.svg diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..11ebf4e4e --- /dev/null +++ b/.editorconfig @@ -0,0 +1,23 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +tab_width = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false + +[*.js] +quote_type = single + +[{*.c,*.cc,*.h,*.hh,*.cpp,*.hpp,*.m,*.mm,*.mpp,*.js,*.java,*.go,*.rs,*.php,*.ng,*.jsx,*.ts,*.d,*.cs,*.swift}] +curly_bracket_next_line = false +spaces_around_operators = true +spaces_around_brackets = outside +# close enough to 1TB +indent_brace_style = K&R diff --git a/.env.example b/.env.example deleted file mode 100644 index 9dff2e5ea..000000000 --- a/.env.example +++ /dev/null @@ -1,7 +0,0 @@ -BIGCOMMERCE_STOREFRONT_API_URL=https://your-site.mybigcommerce.com/graphql -BIGCOMMERCE_STOREFRONT_API_TOKEN= -BIGCOMMERCE_STORE_API_URL=https://api.bigcommerce.com/stores/xxxxxxxxxxx -BIGCOMMERCE_STORE_API_CLIENT_ID= -BIGCOMMERCE_STORE_API_SECRET= -BIGCOMMERCE_STORE_API_TOKEN= -BIGCOMMERCE_TOKEN_SECRET="this-is-a-secret-value-with-at-least-32-characters" \ No newline at end of file diff --git a/.env.template b/.env.template new file mode 100644 index 000000000..9e42e2f31 --- /dev/null +++ b/.env.template @@ -0,0 +1,12 @@ +# Available providers: bigcommerce, shopify +COMMERCE_PROVIDER=bigcommerce + +BIGCOMMERCE_STOREFRONT_API_URL= +BIGCOMMERCE_STOREFRONT_API_TOKEN= +BIGCOMMERCE_STORE_API_URL= +BIGCOMMERCE_STORE_API_TOKEN= +BIGCOMMERCE_STORE_API_CLIENT_ID= +BIGCOMMERCE_CHANNEL_ID= + +NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN= +NEXT_PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN= diff --git a/.gitignore b/.gitignore index b5232955b..50d4285ba 100644 --- a/.gitignore +++ b/.gitignore @@ -25,10 +25,11 @@ yarn-debug.log* yarn-error.log* # local env files +.env .env.local .env.development.local .env.test.local .env.production.local # vercel -.vercel \ No newline at end of file +.vercel diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..105738ca9 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +node_modules +.next +public \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..e1076edfa --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "useTabs": false +} diff --git a/.vercelignore b/.vercelignore deleted file mode 100644 index a65b41774..000000000 --- a/.vercelignore +++ /dev/null @@ -1 +0,0 @@ -lib diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 000000000..c83e26348 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["esbenp.prettier-vscode"] +} diff --git a/README.md b/README.md index e942c01d6..941b1699b 100644 --- a/README.md +++ b/README.md @@ -1 +1,123 @@ -# e-comm-example \ No newline at end of file +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/git/external?repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fcommerce&project-name=commerce&repo-name=commerce&demo-title=Next.js%20Commerce&demo-description=An%20all-in-one%20starter%20kit%20for%20high-performance%20e-commerce%20sites.&demo-url=https%3A%2F%2Fdemo.vercel.store&demo-image=https%3A%2F%2Fbigcommerce-demo-asset-ksvtgfvnd.vercel.app%2Fbigcommerce.png&integration-ids=oac_MuWZiE4jtmQ2ejZQaQ7ncuDT) + +# Next.js Commerce + +The all-in-one starter kit for high-performance e-commerce sites. With a few clicks, Next.js developers can clone, deploy and fully customize their own store. +Start right now at [nextjs.org/commerce](https://nextjs.org/commerce) + +Demo live at: [demo.vercel.store](https://demo.vercel.store/) + +- Shopify Demo: https://shopify.demo.vercel.store/ +- BigCommerce Demo: https://bigcommerce.demo.vercel.store/ + +## Features + +- Performant by default +- SEO Ready +- Internationalization +- Responsive +- UI Components +- Theming +- Standardized Data Hooks +- Integrations - Integrate seamlessly with the most common ecommerce platforms. +- Dark Mode Support + +## Integrations + +Next.js Commerce integrates out-of-the-box with BigCommerce and Shopify. We plan to support all major ecommerce backends. + +## Considerations + +- `framework/commerce` contains all types, helpers and functions to be used as base to build a new **provider**. +- **Providers** live under `framework`'s root folder and they will extend Next.js Commerce types and functionality (`framework/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. +- **Providers don't depend on anything that's specific to the application they're used in**. They only depend on `framework/commerce`, on their own framework folder and on some dependencies included in `package.json` + +## Configuration + +### How to change providers + +Open `.env.local` and change the value of `COMMERCE_PROVIDER` to the provider you would like to use, then set the environment variables for that provider (use `.env.template` as the base). + +### Features + +Every provider defines the features that it supports under `framework/{provider}/commerce.config.json` + +#### 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) + +- Open `commerce.config.json` +- You'll see a config file like this: + ```json + { + "features": { + "wishlist": false + } + } + ``` +- Turn wishlist on by setting wishlist to true. +- Run the app and the wishlist functionality should be back on. + +### How to create a new provider + +Follow our docs for [Adding a new Commerce Provider](framework/commerce/new-provider.md). + +If you succeeded building a provider, submit a PR with a valid demo and we'll review it asap. + +## Contribute + +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 yarn: `npm install -g yarn` +4. Install the dependencies: `yarn` +5. Duplicate `.env.template` and rename it to `.env.local` +6. Add proper store values to `.env.local` +7. Run `yarn dev` to build and watch for code changes + +## Work in progress + +We're using Github Projects to keep track of issues in progress and todo's. Here is our [Board](https://github.com/vercel/commerce/projects/1) + +People actively working on this project: @okbel & @lfades. + +## Troubleshoot + +
+I already own a BigCommerce store. What should I do? +
+First thing you do is: set your environment variables +
+
+.env.local + +```sh +BIGCOMMERCE_STOREFRONT_API_URL=<> +BIGCOMMERCE_STOREFRONT_API_TOKEN=<> +BIGCOMMERCE_STORE_API_URL=<> +BIGCOMMERCE_STORE_API_TOKEN=<> +BIGCOMMERCE_STORE_API_CLIENT_ID=<> +BIGCOMMERCE_CHANNEL_ID=<> +``` + +If your project was started with a "Deploy with Vercel" button, you can use Vercel's CLI to retrieve these credentials. + +1. Install Vercel CLI: `npm i -g vercel` +2. Link local instance with Vercel and Github accounts (creates .vercel file): `vercel link` +3. Download your environment variables: `vercel env pull .env.local` + +Next, you're free to customize the starter. More updates coming soon. Stay tuned. + +
+ +
+BigCommerce shows a Coming Soon page and requests a Preview Code +
+After Email confirmation, Checkout should be manually enabled through BigCommerce platform. Look for "Review & test your store" section through BigCommerce's dashboard. +
+
+BigCommerce team has been notified and they plan to add more detailed about this subject. +
diff --git a/assets/base.css b/assets/base.css new file mode 100644 index 000000000..dfdaf1475 --- /dev/null +++ b/assets/base.css @@ -0,0 +1,130 @@ +:root { + --primary: #ffffff; + --primary-2: #f1f3f5; + --secondary: #000000; + --secondary-2: #111; + --selection: var(--cyan); + + --text-base: #000000; + --text-primary: #000000; + --text-secondary: white; + + --hover: rgba(0, 0, 0, 0.075); + --hover-1: rgba(0, 0, 0, 0.15); + --hover-2: rgba(0, 0, 0, 0.25); + --cyan: #22b8cf; + --green: #37b679; + --red: #da3c3c; + --pink: #e64980; + --purple: #f81ce5; + --blue: #0070f3; + --violet: #5f3dc4; + --violet-light: #7048e8; + --accents-0: #f8f9fa; + --accents-1: #f1f3f5; + --accents-2: #e9ecef; + --accents-3: #dee2e6; + --accents-4: #ced4da; + --accents-5: #adb5bd; + --accents-6: #868e96; + --accents-7: #495057; + --accents-8: #343a40; + --accents-9: #212529; + --font-sans: -apple-system, system-ui, BlinkMacSystemFont, 'Helvetica Neue', + 'Helvetica', sans-serif; +} + +[data-theme='dark'] { + --primary: #000000; + --primary-2: #111; + --secondary: #ffffff; + --secondary-2: #f1f3f5; + --hover: rgba(255, 255, 255, 0.075); + --hover-1: rgba(255, 255, 255, 0.15); + --hover-2: rgba(255, 255, 255, 0.25); + --selection: var(--purple); + + --text-base: white; + --text-primary: white; + --text-secondary: black; + + --accents-0: #212529; + --accents-1: #343a40; + --accents-2: #495057; + --accents-3: #868e96; + --accents-4: #adb5bd; + --accents-5: #ced4da; + --accents-6: #dee2e6; + --accents-7: #e9ecef; + --accents-8: #f1f3f5; + --accents-9: #f8f9fa; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +html { + height: 100%; + box-sizing: border-box; + touch-action: manipulation; + font-feature-settings: 'case' 1, 'rlig' 1, 'calt' 0; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +html, +body { + font-family: var(--font-sans); + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + background-color: var(--primary); + color: var(--text-primary); +} + +body { + position: relative; + min-height: 100%; + margin: 0; +} + +a { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +.animated { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + +.fadeIn { + -webkit-animation-name: fadeIn; + animation-name: fadeIn; +} + +@-webkit-keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + diff --git a/assets/chrome-bug.css b/assets/chrome-bug.css new file mode 100644 index 000000000..245ec8f09 --- /dev/null +++ b/assets/chrome-bug.css @@ -0,0 +1,12 @@ +/** + * Chrome has a bug with transitions on load since 2012! + * + * To prevent a "pop" of content, you have to disable all transitions until + * the page is done loading. + * + * https://lab.laukstein.com/bug/input + * https://twitter.com/timer150/status/1345217126680899584 + */ +body.loading * { + transition: none !important; +} diff --git a/assets/components.css b/assets/components.css new file mode 100644 index 000000000..8c4c5a357 --- /dev/null +++ b/assets/components.css @@ -0,0 +1,3 @@ +.fit { + min-height: calc(100vh - 88px); +} \ No newline at end of file diff --git a/assets/font.css b/assets/font.css deleted file mode 100644 index b9e1847f7..000000000 --- a/assets/font.css +++ /dev/null @@ -1,628 +0,0 @@ -/* latin */ -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 100; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587415301/fonts/2/inter-var-latin.woff2) - format("woff2"); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, - U+FEFF, U+FFFD; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 200; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587415301/fonts/2/inter-var-latin.woff2) - format("woff2"); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, - U+FEFF, U+FFFD; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 300; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587415301/fonts/2/inter-var-latin.woff2) - format("woff2"); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, - U+FEFF, U+FFFD; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 400; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587415301/fonts/2/inter-var-latin.woff2) - format("woff2"); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, - U+FEFF, U+FFFD; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 500; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587415301/fonts/2/inter-var-latin.woff2) - format("woff2"); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, - U+FEFF, U+FFFD; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 600; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587415301/fonts/2/inter-var-latin.woff2) - format("woff2"); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, - U+FEFF, U+FFFD; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 700; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587415301/fonts/2/inter-var-latin.woff2) - format("woff2"); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, - U+FEFF, U+FFFD; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 800; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587415301/fonts/2/inter-var-latin.woff2) - format("woff2"); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, - U+FEFF, U+FFFD; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 900; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587415301/fonts/2/inter-var-latin.woff2) - format("woff2"); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, - U+FEFF, U+FFFD; -} - -/* these other fonts are only used and downloaded when a special chars is shown -in most cases, they are not downloaded at all */ - -/* latin-ext */ -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 100; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-latin-ext.woff2) - format("woff2"); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, - U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 200; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-latin-ext.woff2) - format("woff2"); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, - U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 300; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-latin-ext.woff2) - format("woff2"); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, - U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-latin-ext.woff2) - format("woff2"); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, - U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-latin-ext.woff2) - format("woff2"); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, - U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 600; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-latin-ext.woff2) - format("woff2"); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, - U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 700; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-latin-ext.woff2) - format("woff2"); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, - U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 800; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-latin-ext.woff2) - format("woff2"); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, - U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 900; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-latin-ext.woff2) - format("woff2"); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, - U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} - -/* cyrillic */ -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 100; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-cyrillic.woff2) - format("woff2"); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 200; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-cyrillic.woff2) - format("woff2"); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 300; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-cyrillic.woff2) - format("woff2"); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-cyrillic.woff2) - format("woff2"); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-cyrillic.woff2) - format("woff2"); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 600; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-cyrillic.woff2) - format("woff2"); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 700; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-cyrillic.woff2) - format("woff2"); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 800; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-cyrillic.woff2) - format("woff2"); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 900; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-cyrillic.woff2) - format("woff2"); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} - -/* cyrillic-ext */ -@font-face { - font-family: "Inter"; - font-style: swap; - font-weight: 100; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587418127/fonts/2/inter-var-cyrillic-ext.woff2) - format("woff2"); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, - U+FE2E-FE2F; -} -@font-face { - font-family: "Inter"; - font-style: swap; - font-weight: 200; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587418127/fonts/2/inter-var-cyrillic-ext.woff2) - format("woff2"); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, - U+FE2E-FE2F; -} -@font-face { - font-family: "Inter"; - font-style: swap; - font-weight: 300; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587418127/fonts/2/inter-var-cyrillic-ext.woff2) - format("woff2"); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, - U+FE2E-FE2F; -} -@font-face { - font-family: "Inter"; - font-style: swap; - font-weight: 400; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587418127/fonts/2/inter-var-cyrillic-ext.woff2) - format("woff2"); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, - U+FE2E-FE2F; -} -@font-face { - font-family: "Inter"; - font-style: swap; - font-weight: 500; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587418127/fonts/2/inter-var-cyrillic-ext.woff2) - format("woff2"); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, - U+FE2E-FE2F; -} -@font-face { - font-family: "Inter"; - font-style: swap; - font-weight: 600; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587418127/fonts/2/inter-var-cyrillic-ext.woff2) - format("woff2"); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, - U+FE2E-FE2F; -} -@font-face { - font-family: "Inter"; - font-style: swap; - font-weight: 700; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587418127/fonts/2/inter-var-cyrillic-ext.woff2) - format("woff2"); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, - U+FE2E-FE2F; -} -@font-face { - font-family: "Inter"; - font-style: swap; - font-weight: 800; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587418127/fonts/2/inter-var-cyrillic-ext.woff2) - format("woff2"); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, - U+FE2E-FE2F; -} -@font-face { - font-family: "Inter"; - font-style: swap; - font-weight: 900; - font-display: block; - src: url(https://assets.vercel.com/raw/upload/v1587418127/fonts/2/inter-var-cyrillic-ext.woff2) - format("woff2"); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, - U+FE2E-FE2F; -} - -/* greek */ -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 100; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-greek.woff2) - format("woff2"); - unicode-range: U+0370-03FF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 200; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-greek.woff2) - format("woff2"); - unicode-range: U+0370-03FF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 300; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-greek.woff2) - format("woff2"); - unicode-range: U+0370-03FF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-greek.woff2) - format("woff2"); - unicode-range: U+0370-03FF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-greek.woff2) - format("woff2"); - unicode-range: U+0370-03FF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 600; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-greek.woff2) - format("woff2"); - unicode-range: U+0370-03FF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 700; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-greek.woff2) - format("woff2"); - unicode-range: U+0370-03FF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 800; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-greek.woff2) - format("woff2"); - unicode-range: U+0370-03FF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 900; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418276/fonts/2/inter-var-greek.woff2) - format("woff2"); - unicode-range: U+0370-03FF; -} - -/* greek-ext */ -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 100; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-greek-ext.woff2) - format("woff2"); - unicode-range: U+1F00-1FFF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 200; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-greek-ext.woff2) - format("woff2"); - unicode-range: U+1F00-1FFF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 300; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-greek-ext.woff2) - format("woff2"); - unicode-range: U+1F00-1FFF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-greek-ext.woff2) - format("woff2"); - unicode-range: U+1F00-1FFF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-greek-ext.woff2) - format("woff2"); - unicode-range: U+1F00-1FFF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 600; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-greek-ext.woff2) - format("woff2"); - unicode-range: U+1F00-1FFF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 700; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-greek-ext.woff2) - format("woff2"); - unicode-range: U+1F00-1FFF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 800; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-greek-ext.woff2) - format("woff2"); - unicode-range: U+1F00-1FFF; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 900; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-greek-ext.woff2) - format("woff2"); - unicode-range: U+1F00-1FFF; -} - -/* vietnamese */ -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 100; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-vietnamese.woff2) - format("woff2"); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 200; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-vietnamese.woff2) - format("woff2"); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 300; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-vietnamese.woff2) - format("woff2"); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-vietnamese.woff2) - format("woff2"); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-vietnamese.woff2) - format("woff2"); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 600; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-vietnamese.woff2) - format("woff2"); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 700; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-vietnamese.woff2) - format("woff2"); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 800; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-vietnamese.woff2) - format("woff2"); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 900; - font-display: swap; - src: url(https://assets.vercel.com/raw/upload/v1587418275/fonts/2/inter-var-vietnamese.woff2) - format("woff2"); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} diff --git a/assets/global.css b/assets/global.css deleted file mode 100644 index 9d50fcd5e..000000000 --- a/assets/global.css +++ /dev/null @@ -1,194 +0,0 @@ -@import "./font.css"; -@tailwind base; -@tailwind components; - -:root { - /* Spacing variables */ - --geist-space: 4px; - --geist-space-2x: 8px; - --geist-space-4x: 16px; - --geist-space-8x: 32px; - --geist-space-16x: 64px; - --geist-space-24x: 96px; - --geist-space-32x: 128px; - --geist-space-48x: 192px; - --geist-space-64x: 256px; - - --geist-space-small: 32px; - --geist-space-medium: 40px; - --geist-space-large: 48px; - - --geist-space-gap: 24px; - --geist-space-gap-half: 12px; - --geist-space-gap-quarter: var(--geist-space-2x); - - --geist-gap: var(--geist-space-gap); - --geist-gap-half: var(--geist-space-gap-half); - --geist-gap-quarter: var(--geist-space-gap-quarter); - --geist-gap-double: var(--geist-space-large); - - /* Negative values */ - --geist-space-negative: -4px; - --geist-space-2x-negative: -8px; - --geist-space-4x-negative: -16px; - --geist-space-8x-negative: -32px; - --geist-space-16x-negative: -64px; - --geist-space-24x-negative: -96px; - --geist-space-32x-negative: -128px; - --geist-space-48x-negative: -192px; - --geist-space-64x-negative: -256px; - - --geist-space-small-negative: -32px; - --geist-space-medium-negative: -40px; - --geist-space-large-negative: -48px; - - --geist-space-gap-negative: -24px; - --geist-space-gap-half-negative: -12px; - --geist-space-gap-quarter-negative: var(--geist-space-2x-negative); - - --geist-gap-negative: var(--geist-space-gap-negative); - --geist-gap-half-negative: var(--geist-space-gap-half-negative); - --geist-gap-quarter-negative: var(--geist-space-gap-quarter-negative); - --geist-gap-double-negative: var(--geist-space-large-negative); - - /* Page values */ - --geist-page-margin: var(--geist-space-gap); - --geist-page-width: 1000px; - --geist-page-width-with-margin: 1048px; /* 1000px + (2 * page margin) */ - - /* Appearance */ - --geist-radius: 5px; - --geist-marketing-radius: 8px; - - /* Fonts */ - --font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", - "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", - sans-serif; - --font-mono: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, - Bitstream Vera Sans Mono, Courier New, monospace; - - /* Header */ - --header-height: 64px; - --header-border-bottom: inset 0 -1px 0 0 rgba(0, 0, 0, 0.1); - --header-background: rgba(255, 255, 255, 0.8); - - /* Form sizing */ - --geist-form-large-font: 1rem; - --geist-form-large-line-height: 1.5rem; - --geist-form-large-height: var(--geist-space-large); - - --geist-form-small-font: 0.875rem; - --geist-form-small-line-height: 0.875rem; - --geist-form-small-height: var(--geist-space-small); - - --geist-form-font: 0.875rem; - --geist-form-line-height: 1.25rem; - --geist-form-height: var(--geist-space-medium); - - --geist-success-lighter: #d3e5ff; - --geist-success-light: #3291ff; - --geist-success: #0070f3; - --geist-success-dark: #0761d1; - - --geist-error-lighter: #f7d4d6; - --geist-error-light: #ff1a1a; - --geist-error: #ee0000; - --geist-error-dark: #c50000; - - --geist-warning-lighter: #ffefcf; - --geist-warning-light: #f7b955; - --geist-warning: #f5a623; - --geist-warning-dark: #ab570a; - - --geist-violet-lighter: #e3d7fc; - --geist-violet-light: #8a63d2; - --geist-violet: #7928ca; - --geist-violet-dark: #4c2889; - - --geist-cyan-lighter: #aaffec; - --geist-cyan-light: #79ffe1; - --geist-cyan: #50e3c2; - --geist-cyan-dark: #29bc9b; - - --geist-highlight-purple: #f81ce5; - --geist-highlight-magenta: #eb367f; - --geist-highlight-pink: #ff0080; - - --geist-foreground: #000; - --geist-background: #fff; - --geist-selection: var(--geist-cyan-light); - --accents-1: #fafafa; - --accents-2: #eaeaea; - --accents-3: #999999; - --accents-4: #888888; - --accents-5: #666666; - --accents-6: #444444; - --accents-7: #333333; - --accents-8: #111111; - - --geist-link-color: var(--geist-success); - --geist-marketing-gray: #fafbfc; - --geist-code: var(--geist-highlight-purple); - - /* Secondary (Gray) */ - --geist-secondary-lighter: var(--accents-2); - --geist-secondary-light: var(--accents-3); - --geist-secondary: var(--accents-5); - --geist-secondary-dark: var(--accents-7); - - /* Shadows and other values */ - - --dropdown-box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.02); - --dropdown-triangle-stroke: #fff; - - --scroller-start: rgba(255, 255, 255, 1); - --scroller-end: rgba(255, 255, 255, 0); - - --shadow-smallest: 0px 4px 8px rgba(0, 0, 0, 0.12); - --shadow-small: 0 5px 10px rgba(0, 0, 0, 0.12); - --shadow-medium: 0 8px 30px rgba(0, 0, 0, 0.12); - --shadow-large: 0 30px 60px rgba(0, 0, 0, 0.12); - --shadow-hover: 0 30px 60px rgba(0, 0, 0, 0.12); - - --shadow-sticky: 0 12px 10px -10px rgba(0, 0, 0, 0.12); - --portal-opacity: 0.25; -} - -*, -*:before, -*:after { - box-sizing: inherit; -} - -html { - height: 100%; - box-sizing: border-box; - touch-action: manipulation; - font-feature-settings: "case" 1, "rlig" 1, "calt" 0; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -html, -body { - font-family: var(--font-sans); - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - background-color: var(--geist-background); - color: var(--geist-foreground); - scroll-padding-top: var(--header-height); -} - -body { - position: relative; - min-height: 100%; - margin: 0; -} - -a { - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - -@tailwind utilities; diff --git a/assets/main.css b/assets/main.css new file mode 100644 index 000000000..54dd1e50f --- /dev/null +++ b/assets/main.css @@ -0,0 +1,7 @@ +@tailwind base; +@import './base.css'; + +@tailwind components; +@import './components.css'; + +@tailwind utilities; diff --git a/codegen.json b/codegen.json index 77c40ade9..1f14e88ac 100644 --- a/codegen.json +++ b/codegen.json @@ -2,23 +2,26 @@ "schema": { "https://buybutton.store/graphql": { "headers": { - "Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJlYXQiOjE3NjcxMzkyMDAsInN1Yl90eXBlIjoyLCJ0b2tlbl90eXBlIjoxLCJjb3JzIjpbImh0dHBzOi8vZGV2ZWxvcGVyLmJpZ2NvbW1lcmNlLmNvbSJdLCJjaWQiOjEsImlhdCI6MTU3NjI1MzgyNCwic3ViIjoiM3dtZThrcWtrNjQwNzZueWljMGkzamk0NG5wajQ2byIsInNpZCI6OTk5MzMxNzg0LCJpc3MiOiJCQyJ9.Rqt6hNI2W-XSOzHl4pqtfhAOygwka6atCIaIZ_WAa9v3dOctnBlZpBV5wzd3ICCy4sTCOZ9mJwcFH5_CHmJpNQ" + "Authorization": "Bearer xzy" } } }, "documents": [ { - "./lib/bigcommerce/api/queries/**/*.ts": { + "./framework/bigcommerce/api/**/*.ts": { "noRequire": true } } ], "generates": { - "./lib/bigcommerce/schema.d.ts": { + "./framework/bigcommerce/schema.d.ts": { "plugins": ["typescript", "typescript-operations"] }, - "./lib/bigcommerce/schema.graphql": { + "./framework/bigcommerce/schema.graphql": { "plugins": ["schema-ast"] } + }, + "hooks": { + "afterAllFileWrite": ["prettier --write"] } } diff --git a/commerce.config.json b/commerce.config.json new file mode 100644 index 000000000..9b62830ac --- /dev/null +++ b/commerce.config.json @@ -0,0 +1,6 @@ +{ + "features": { + "wishlist": true, + "checkout": true + } +} diff --git a/components/auth/ForgotPassword.tsx b/components/auth/ForgotPassword.tsx new file mode 100644 index 000000000..597ee328e --- /dev/null +++ b/components/auth/ForgotPassword.tsx @@ -0,0 +1,78 @@ +import { FC, useEffect, useState, useCallback } from 'react' +import { validate } from 'email-validator' +import { useUI } from '@components/ui/context' +import { Logo, Button, Input } from '@components/ui' + +interface Props {} + +const ForgotPassword: FC = () => { + // Form State + const [email, setEmail] = useState('') + const [loading, setLoading] = useState(false) + const [message, setMessage] = useState('') + const [dirty, setDirty] = useState(false) + const [disabled, setDisabled] = useState(false) + + const { setModalView, closeModal } = useUI() + + const handleResetPassword = async (e: React.SyntheticEvent) => { + e.preventDefault() + + if (!dirty && !disabled) { + setDirty(true) + handleValidation() + } + } + + const handleValidation = useCallback(() => { + // Unable to send form unless fields are valid. + if (dirty) { + setDisabled(!validate(email)) + } + }, [email, dirty]) + + useEffect(() => { + handleValidation() + }, [handleValidation]) + + return ( +
+
+ +
+
+ {message && ( +
{message}
+ )} + + +
+ +
+ + + Do you have an account? + {` `} + setModalView('LOGIN_VIEW')} + > + Log In + + +
+
+ ) +} + +export default ForgotPassword diff --git a/components/auth/LoginView.tsx b/components/auth/LoginView.tsx new file mode 100644 index 000000000..89d5bf893 --- /dev/null +++ b/components/auth/LoginView.tsx @@ -0,0 +1,104 @@ +import { FC, 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' +import { validate } from 'email-validator' + +interface Props {} + +const LoginView: FC = () => { + // Form State + const [email, setEmail] = useState('') + const [password, setPassword] = useState('') + const [loading, setLoading] = useState(false) + const [message, setMessage] = useState('') + const [dirty, setDirty] = useState(false) + const [disabled, setDisabled] = useState(false) + const { setModalView, closeModal } = useUI() + + const login = useLogin() + + const handleLogin = async (e: React.SyntheticEvent) => { + e.preventDefault() + + if (!dirty && !disabled) { + setDirty(true) + handleValidation() + } + + try { + setLoading(true) + setMessage('') + await login({ + email, + password, + }) + setLoading(false) + closeModal() + } catch ({ errors }) { + setMessage(errors[0].message) + 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) + } + }, [email, password, dirty]) + + useEffect(() => { + handleValidation() + }, [handleValidation]) + + return ( +
+
+ +
+
+ {message && ( + + )} + + + + +
+ Don't have an account? + {` `} + setModalView('SIGNUP_VIEW')} + > + Sign Up + +
+
+
+ ) +} + +export default LoginView diff --git a/components/auth/SignUpView.tsx b/components/auth/SignUpView.tsx new file mode 100644 index 000000000..1b619828b --- /dev/null +++ b/components/auth/SignUpView.tsx @@ -0,0 +1,114 @@ +import { FC, useEffect, useState, useCallback } from 'react' +import { validate } from 'email-validator' +import { Info } from '@components/icons' +import { useUI } from '@components/ui/context' +import { Logo, Button, Input } from '@components/ui' +import useSignup from '@framework/auth/use-signup' + +interface Props {} + +const SignUpView: FC = () => { + // Form State + const [email, setEmail] = useState('') + const [password, setPassword] = useState('') + const [firstName, setFirstName] = useState('') + const [lastName, setLastName] = useState('') + const [loading, setLoading] = useState(false) + const [message, setMessage] = useState('') + const [dirty, setDirty] = useState(false) + const [disabled, setDisabled] = useState(false) + + const signup = useSignup() + const { setModalView, closeModal } = useUI() + + const handleSignup = async (e: React.SyntheticEvent) => { + e.preventDefault() + + if (!dirty && !disabled) { + setDirty(true) + handleValidation() + } + + try { + setLoading(true) + setMessage('') + await signup({ + email, + firstName, + lastName, + password, + }) + setLoading(false) + closeModal() + } catch ({ errors }) { + setMessage(errors[0].message) + 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) + } + }, [email, password, dirty]) + + useEffect(() => { + handleValidation() + }, [handleValidation]) + + return ( +
+
+ +
+
+ {message && ( +
{message}
+ )} + + + + + + + + {' '} + + Info: Passwords must be longer than 7 chars and + include numbers.{' '} + + +
+ +
+ + + Do you have an account? + {` `} + setModalView('LOGIN_VIEW')} + > + Log In + + +
+
+ ) +} + +export default SignUpView diff --git a/components/auth/index.ts b/components/auth/index.ts new file mode 100644 index 000000000..11571fac7 --- /dev/null +++ b/components/auth/index.ts @@ -0,0 +1,3 @@ +export { default as LoginView } from './LoginView' +export { default as SignUpView } from './SignUpView' +export { default as ForgotPassword } from './ForgotPassword' diff --git a/components/cart/CartItem/CartItem.module.css b/components/cart/CartItem/CartItem.module.css new file mode 100644 index 000000000..7054909fa --- /dev/null +++ b/components/cart/CartItem/CartItem.module.css @@ -0,0 +1,43 @@ +.root { + @apply flex flex-col py-4; +} + +.root:first-child { + padding-top: 0; +} + +.actions { + @apply flex p-1 border-accents-3 border items-center justify-center w-12 text-accents-7; + transition-property: border-color, background, color, transform, box-shadow; + transition-duration: 0.15s; + transition-timing-function: ease; +} + +.actions:hover { + @apply bg-accents-1 border-accents-4 text-accents-9; + transition: border-color; + z-index: 10; +} + +.actions:focus { + @apply bg-accents-2 outline-none; +} + +.quantity { + appearance: textfield; + @apply w-8 border-accents-2 border mx-3 rounded text-center text-sm text-black; +} + +.quantity::-webkit-outer-spin-button, +.quantity::-webkit-inner-spin-button { + @apply appearance-none m-0; +} + +.productImage { + position: absolute; + transform: scale(1.9); + width: 100%; + height: 100%; + left: 30% !important; + top: 30% !important; +} diff --git a/components/cart/CartItem/CartItem.tsx b/components/cart/CartItem/CartItem.tsx new file mode 100644 index 000000000..22b57c1bb --- /dev/null +++ b/components/cart/CartItem/CartItem.tsx @@ -0,0 +1,187 @@ +import { ChangeEvent, useEffect, useState } from 'react' +import cn from 'classnames' +import Image from 'next/image' +import Link from 'next/link' +import s from './CartItem.module.css' +import { Trash, Plus, Minus, Cross } from '@components/icons' +import { useUI } from '@components/ui/context' +import type { LineItem } from '@framework/types' +import usePrice from '@framework/product/use-price' +import useUpdateItem from '@framework/cart/use-update-item' +import useRemoveItem from '@framework/cart/use-remove-item' + +type ItemOption = { + name: string + nameId: number + value: string + valueId: number +} + +const CartItem = ({ + item, + currencyCode, + ...rest +}: { + item: LineItem + currencyCode: string +}) => { + const { closeSidebarIfPresent } = useUI() + + const { price } = usePrice({ + amount: item.variant.price * item.quantity, + baseAmount: item.variant.listPrice * item.quantity, + currencyCode, + }) + + const updateItem = useUpdateItem({ item }) + const removeItem = useRemoveItem() + const [quantity, setQuantity] = useState(item.quantity) + const [removing, setRemoving] = useState(false) + + const updateQuantity = async (val: number) => { + await updateItem({ quantity: val }) + } + + const handleQuantity = (e: ChangeEvent) => { + const val = Number(e.target.value) + + if (Number.isInteger(val) && val >= 0) { + setQuantity(Number(e.target.value)) + } + } + + const handleBlur = () => { + const val = Number(quantity) + + if (val !== item.quantity) { + updateQuantity(val) + } + } + + const increaseQuantity = (n = 1) => { + const val = Number(quantity) + n + + if (Number.isInteger(val) && val >= 0) { + setQuantity(val) + updateQuantity(val) + } + } + + const handleRemove = async () => { + setRemoving(true) + + try { + // If this action succeeds then there's no need to do `setRemoving(true)` + // because the component will be removed from the view + await removeItem(item) + } catch (error) { + setRemoving(false) + } + } + // TODO: Add a type for this + const options = (item as any).options + + useEffect(() => { + // Reset the quantity state if the item quantity changes + if (item.quantity !== Number(quantity)) { + setQuantity(item.quantity) + } + }, [item.quantity]) + + return ( +
  • +
    +
    + + closeSidebarIfPresent()} + className={s.productImage} + width={150} + height={150} + src={item.variant.image!.url} + alt={item.variant.image!.altText} + unoptimized + /> + +
    +
    + + closeSidebarIfPresent()} + > + {item.name} + + + {options && options.length > 0 ? ( +
    + {options.map((option: ItemOption, i: number) => ( +
    + {option.name} + {option.name === 'Color' ? ( + + ) : ( + + {option.value} + + )} + {i === options.length - 1 ? '' : } +
    + ))} +
    + ) : null} +
    +
    + {price} +
    +
    +
    + + + + +
    +
  • + ) +} + +export default CartItem diff --git a/components/cart/CartItem/index.ts b/components/cart/CartItem/index.ts new file mode 100644 index 000000000..b5f6dc52f --- /dev/null +++ b/components/cart/CartItem/index.ts @@ -0,0 +1 @@ +export { default } from './CartItem' diff --git a/components/cart/CartSidebarView/CartSidebarView.module.css b/components/cart/CartSidebarView/CartSidebarView.module.css new file mode 100644 index 000000000..bd55c233f --- /dev/null +++ b/components/cart/CartSidebarView/CartSidebarView.module.css @@ -0,0 +1,16 @@ +.root { + @apply h-full flex flex-col relative w-full; + height: calc(100vh + 300px); +} + +.root.empty { + @apply bg-secondary text-secondary; +} + +.root.success { + @apply bg-green text-white; +} + +.root.error { + @apply bg-red text-white; +} diff --git a/components/cart/CartSidebarView/CartSidebarView.tsx b/components/cart/CartSidebarView/CartSidebarView.tsx new file mode 100644 index 000000000..56e3e4e11 --- /dev/null +++ b/components/cart/CartSidebarView/CartSidebarView.tsx @@ -0,0 +1,156 @@ +import cn from 'classnames' +import Link from 'next/link' +import { FC } from 'react' +import s from './CartSidebarView.module.css' +import CartItem from '../CartItem' +import { Button } from '@components/ui' +import { UserNav } from '@components/common' +import { useUI } from '@components/ui/context' +import { Bag, Cross, Check } from '@components/icons' +import useCart from '@framework/cart/use-cart' +import usePrice from '@framework/product/use-price' + +const CartSidebarView: FC = () => { + const { closeSidebar, setSidebarView } = useUI() + const { data, isLoading, isEmpty } = useCart() + + const { price: subTotal } = usePrice( + data && { + amount: Number(data.subtotalPrice), + currencyCode: data.currency.code, + } + ) + const { price: total } = usePrice( + data && { + amount: Number(data.totalPrice), + currencyCode: data.currency.code, + } + ) + const handleClose = () => closeSidebar() + const goToCheckout = () => setSidebarView('CHECKOUT_VIEW') + + const error = null + const success = null + + return ( +
    +
    +
    +
    + +
    +
    + +
    +
    +
    + + {isLoading || isEmpty ? ( +
    + + + +

    + Your cart is empty +

    +

    + Biscuit oat cake wafer icing ice cream tiramisu pudding cupcake. +

    +
    + ) : error ? ( +
    + + + +

    + We couldn’t process the purchase. Please check your card information + and try again. +

    +
    + ) : success ? ( +
    + + + +

    + Thank you for your order. +

    +
    + ) : ( + <> +
    + +

    + My Cart +

    + +
      + {data!.lineItems.map((item: any) => ( + + ))} +
    +
    + +
    +
      +
    • + Subtotal + {subTotal} +
    • +
    • + Taxes + Calculated at checkout +
    • +
    • + Shipping + FREE +
    • +
    +
    + Total + {total} +
    +
    + {process.env.COMMERCE_CHECKOUT_ENABLED ? ( + + ) : ( + + )} +
    +
    + + )} +
    + ) +} + +export default CartSidebarView diff --git a/components/cart/CartSidebarView/index.ts b/components/cart/CartSidebarView/index.ts new file mode 100644 index 000000000..0262e448e --- /dev/null +++ b/components/cart/CartSidebarView/index.ts @@ -0,0 +1 @@ +export { default } from './CartSidebarView' diff --git a/components/cart/index.ts b/components/cart/index.ts new file mode 100644 index 000000000..3e53fa34a --- /dev/null +++ b/components/cart/index.ts @@ -0,0 +1,2 @@ +export { default as CartSidebarView } from './CartSidebarView' +export { default as CartItem } from './CartItem' diff --git a/components/checkout/CheckoutSidebarView/CheckoutSidebarView.module.css b/components/checkout/CheckoutSidebarView/CheckoutSidebarView.module.css new file mode 100644 index 000000000..bd55c233f --- /dev/null +++ b/components/checkout/CheckoutSidebarView/CheckoutSidebarView.module.css @@ -0,0 +1,16 @@ +.root { + @apply h-full flex flex-col relative w-full; + height: calc(100vh + 300px); +} + +.root.empty { + @apply bg-secondary text-secondary; +} + +.root.success { + @apply bg-green text-white; +} + +.root.error { + @apply bg-red text-white; +} diff --git a/components/checkout/CheckoutSidebarView/CheckoutSidebarView.tsx b/components/checkout/CheckoutSidebarView/CheckoutSidebarView.tsx new file mode 100644 index 000000000..251329a65 --- /dev/null +++ b/components/checkout/CheckoutSidebarView/CheckoutSidebarView.tsx @@ -0,0 +1,185 @@ +import cn from 'classnames' +import Link from 'next/link' +import { FC } from 'react' +import s from './CheckoutSidebarView.module.css' +import CartItem from '@components/cart/CartItem' +import { Button } from '@components/ui' +import { UserNav } from '@components/common' +import { useUI } from '@components/ui/context' +import { + Bag, + Cross, + Check, + MapPin, + CreditCard, + ChevronLeft, +} from '@components/icons' +import useCart from '@framework/cart/use-cart' +import usePrice from '@framework/product/use-price' + +const CheckoutSidebarView: FC = () => { + const { closeSidebar, setSidebarView } = useUI() + const { data, isLoading, isEmpty } = useCart() + + const { price: subTotal } = usePrice( + data && { + amount: Number(data.subtotalPrice), + currencyCode: data.currency.code, + } + ) + const { price: total } = usePrice( + data && { + amount: Number(data.totalPrice), + currencyCode: data.currency.code, + } + ) + const handleClose = () => closeSidebar() + + const error = null + const success = null + + return ( +
    +
    +
    +
    + +
    +
    + +
    +
    +
    + + {isLoading || isEmpty ? ( +
    + + + +

    + Your cart is empty +

    +

    + Biscuit oat cake wafer icing ice cream tiramisu pudding cupcake. +

    +
    + ) : error ? ( +
    + + + +

    + We couldn’t process the purchase. Please check your card information + and try again. +

    +
    + ) : success ? ( +
    + + + +

    + Thank you for your order. +

    +
    + ) : ( + <> +
    + +

    + Checkout +

    + + + {/* Payment Method */} + {/* Only available with checkout set to true - Meaning that the provider does offer checkout functionality. */} +
    setSidebarView('PAYMENT_VIEW')} + className="rounded-md border border-accents-2 px-6 py-6 mb-4 text-center flex items-center justify-center cursor-pointer hover:border-accents-4" + > +
    + +
    +
    + Add Payment Method + {/* VISA #### #### #### 2345 */} +
    +
    + + {/* Shipping Address */} + {/* Only available with checkout set to true - Meaning that the provider does offer checkout functionality. */} +
    setSidebarView('SHIPPING_VIEW')} + className="rounded-md border border-accents-2 px-6 py-6 mb-4 text-center flex items-center justify-center cursor-pointer hover:border-accents-4" + > +
    + +
    +
    + Add Shipping Address + {/* + 1046 Kearny Street.
    + San Franssisco, California +
    */} +
    +
    + +
      + {data!.lineItems.map((item: any) => ( + + ))} +
    +
    + +
    +
      +
    • + Subtotal + {subTotal} +
    • +
    • + Taxes + Calculated at checkout +
    • +
    • + Shipping + FREE +
    • +
    +
    + Total + {total} +
    +
    + +
    +
    + + )} +
    + ) +} + +export default CheckoutSidebarView diff --git a/components/checkout/CheckoutSidebarView/index.ts b/components/checkout/CheckoutSidebarView/index.ts new file mode 100644 index 000000000..168bc58f4 --- /dev/null +++ b/components/checkout/CheckoutSidebarView/index.ts @@ -0,0 +1 @@ +export { default } from './CheckoutSidebarView' diff --git a/components/core/Avatar/Avatar.module.css b/components/checkout/PaymentMethodView/PaymentMethodView.module.css similarity index 100% rename from components/core/Avatar/Avatar.module.css rename to components/checkout/PaymentMethodView/PaymentMethodView.module.css diff --git a/components/checkout/PaymentMethodView/PaymentMethodView.tsx b/components/checkout/PaymentMethodView/PaymentMethodView.tsx new file mode 100644 index 000000000..056a787c0 --- /dev/null +++ b/components/checkout/PaymentMethodView/PaymentMethodView.tsx @@ -0,0 +1,40 @@ +import { FC } from 'react' +import s from './PaymentMethodView.module.css' +import { ChevronLeft } from '@components/icons' +import { UserNav } from '@components/common' +import { useUI } from '@components/ui/context' + +const PaymentMethodView: FC = () => { + const { setSidebarView } = useUI() + + return ( +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +

    + Payment Method +

    +
    +
    + ) +} + +export default PaymentMethodView diff --git a/components/checkout/PaymentMethodView/index.ts b/components/checkout/PaymentMethodView/index.ts new file mode 100644 index 000000000..951b3c318 --- /dev/null +++ b/components/checkout/PaymentMethodView/index.ts @@ -0,0 +1 @@ +export { default } from './PaymentMethodView' diff --git a/components/checkout/README.md b/components/checkout/README.md new file mode 100644 index 000000000..326f98fd5 --- /dev/null +++ b/components/checkout/README.md @@ -0,0 +1,12 @@ +# Checkout + +Checkout is only enabled in those providers that specify Custom Checkout to be enabled. + +This feature enables: + +- Shipping +- Payment + +``` +COMMERCE_CHECKOUT_ENABLED +``` diff --git a/components/checkout/ShippingView/ShippingView.module.css b/components/checkout/ShippingView/ShippingView.module.css new file mode 100644 index 000000000..c3a2af639 --- /dev/null +++ b/components/checkout/ShippingView/ShippingView.module.css @@ -0,0 +1,2 @@ +.root { +} diff --git a/components/checkout/ShippingView/ShippingView.tsx b/components/checkout/ShippingView/ShippingView.tsx new file mode 100644 index 000000000..f1c8d5c4b --- /dev/null +++ b/components/checkout/ShippingView/ShippingView.tsx @@ -0,0 +1,40 @@ +import { FC } from 'react' +import s from './ShippingView.module.css' +import { ChevronLeft } from '@components/icons' +import { UserNav } from '@components/common' +import { useUI } from '@components/ui/context' + +const PaymentMethodView: FC = () => { + const { setSidebarView } = useUI() + + return ( +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +

    + Shipping +

    +
    +
    + ) +} + +export default PaymentMethodView diff --git a/components/checkout/ShippingView/index.ts b/components/checkout/ShippingView/index.ts new file mode 100644 index 000000000..428e7e4fe --- /dev/null +++ b/components/checkout/ShippingView/index.ts @@ -0,0 +1 @@ +export { default } from './ShippingView' diff --git a/components/common/Avatar/Avatar.tsx b/components/common/Avatar/Avatar.tsx new file mode 100644 index 000000000..f78aa1d01 --- /dev/null +++ b/components/common/Avatar/Avatar.tsx @@ -0,0 +1,24 @@ +import { FC, useRef, useEffect } from 'react' +import { useUserAvatar } from '@lib/hooks/useUserAvatar' + +interface Props { + className?: string + children?: any +} + +const Avatar: FC = ({}) => { + let ref = useRef() as React.MutableRefObject + let { userAvatar } = useUserAvatar() + + return ( +
    + {/* Add an image - We're generating a gradient as placeholder */} +
    + ) +} + +export default Avatar diff --git a/components/common/Avatar/index.ts b/components/common/Avatar/index.ts new file mode 100644 index 000000000..a4600ec77 --- /dev/null +++ b/components/common/Avatar/index.ts @@ -0,0 +1 @@ +export { default } from './Avatar' diff --git a/components/common/FeatureBar/FeatureBar.module.css b/components/common/FeatureBar/FeatureBar.module.css new file mode 100644 index 000000000..a3cb61cd2 --- /dev/null +++ b/components/common/FeatureBar/FeatureBar.module.css @@ -0,0 +1,7 @@ +.root { + @apply text-center p-6 bg-primary text-sm flex-row justify-center items-center font-medium fixed bottom-0 w-full z-30 transition-all duration-300 ease-out; + + @screen md { + @apply flex text-left; + } +} diff --git a/components/common/FeatureBar/FeatureBar.tsx b/components/common/FeatureBar/FeatureBar.tsx new file mode 100644 index 000000000..8923a721e --- /dev/null +++ b/components/common/FeatureBar/FeatureBar.tsx @@ -0,0 +1,39 @@ +import cn from 'classnames' +import s from './FeatureBar.module.css' + +interface FeatureBarProps { + className?: string + title: string + description?: string + hide?: boolean + action?: React.ReactNode +} + +const FeatureBar: React.FC = ({ + title, + description, + className, + action, + hide, +}) => { + const rootClassName = cn( + s.root, + { + transform: true, + 'translate-y-0 opacity-100': !hide, + 'translate-y-full opacity-0': hide, + }, + className + ) + return ( +
    + {title} + + {description} + + {action && action} +
    + ) +} + +export default FeatureBar diff --git a/components/common/FeatureBar/index.ts b/components/common/FeatureBar/index.ts new file mode 100644 index 000000000..d78bc9d20 --- /dev/null +++ b/components/common/FeatureBar/index.ts @@ -0,0 +1 @@ +export { default } from './FeatureBar' diff --git a/components/common/Footer/Footer.module.css b/components/common/Footer/Footer.module.css new file mode 100644 index 000000000..259318ecf --- /dev/null +++ b/components/common/Footer/Footer.module.css @@ -0,0 +1,9 @@ +.link { + & > svg { + @apply transform duration-75 ease-linear; + } + + &:hover > svg { + @apply scale-110; + } +} diff --git a/components/common/Footer/Footer.tsx b/components/common/Footer/Footer.tsx new file mode 100644 index 000000000..75b2806ef --- /dev/null +++ b/components/common/Footer/Footer.tsx @@ -0,0 +1,159 @@ +import { FC } from 'react' +import cn from 'classnames' +import Link from 'next/link' +import { useRouter } from 'next/router' +import type { Page } from '@framework/common/get-all-pages' +import getSlug from '@lib/get-slug' +import { Github, Vercel } from '@components/icons' +import { Logo, Container } from '@components/ui' +import { I18nWidget } from '@components/common' +import s from './Footer.module.css' + +interface Props { + className?: string + children?: any + pages?: Page[] +} + +const LEGAL_PAGES = ['terms-of-use', 'shipping-returns', 'privacy-policy'] + +const Footer: FC = ({ className, pages }) => { + const { sitePages, legalPages } = usePages(pages) + const rootClassName = cn(className) + + return ( + + ) +} + +function usePages(pages?: Page[]) { + const { locale } = useRouter() + const sitePages: Page[] = [] + const legalPages: Page[] = [] + + if (pages) { + pages.forEach((page) => { + const slug = page.url && getSlug(page.url) + + if (!slug) return + if (locale && !slug.startsWith(`${locale}/`)) return + + if (isLegalPage(slug, locale)) { + legalPages.push(page) + } else { + sitePages.push(page) + } + }) + } + + return { + sitePages: sitePages.sort(bySortOrder), + legalPages: legalPages.sort(bySortOrder), + } +} + +const isLegalPage = (slug: string, locale?: string) => + locale + ? LEGAL_PAGES.some((p) => `${locale}/${p}` === slug) + : LEGAL_PAGES.includes(slug) + +// Sort pages by the sort order assigned in the BC dashboard +function bySortOrder(a: Page, b: Page) { + return (a.sort_order ?? 0) - (b.sort_order ?? 0) +} + +export default Footer diff --git a/components/common/Footer/index.ts b/components/common/Footer/index.ts new file mode 100644 index 000000000..5d06e9b71 --- /dev/null +++ b/components/common/Footer/index.ts @@ -0,0 +1 @@ +export { default } from './Footer' diff --git a/components/common/Head/Head.tsx b/components/common/Head/Head.tsx new file mode 100644 index 000000000..b2c0c997b --- /dev/null +++ b/components/common/Head/Head.tsx @@ -0,0 +1,18 @@ +import { FC } from 'react' +import NextHead from 'next/head' +import { DefaultSeo } from 'next-seo' +import config from '@config/seo.json' + +const Head: FC = () => { + return ( + <> + + + + + + + ) +} + +export default Head diff --git a/components/common/Head/index.ts b/components/common/Head/index.ts new file mode 100644 index 000000000..b317a124b --- /dev/null +++ b/components/common/Head/index.ts @@ -0,0 +1 @@ +export { default } from './Head' diff --git a/components/common/HomeAllProductsGrid/HomeAllProductsGrid.module.css b/components/common/HomeAllProductsGrid/HomeAllProductsGrid.module.css new file mode 100644 index 000000000..ec2f8ea49 --- /dev/null +++ b/components/common/HomeAllProductsGrid/HomeAllProductsGrid.module.css @@ -0,0 +1,23 @@ +.root { + @apply py-12 flex flex-col w-full px-6; + + @screen md { + @apply flex-row; + } + + & .asideWrapper { + @apply pr-3 w-full relative; + + @screen md { + @apply w-48; + } + } + + & .aside { + @apply flex flex-row w-full justify-around mb-12; + + @screen md { + @apply mb-0 block sticky top-32; + } + } +} diff --git a/components/common/HomeAllProductsGrid/HomeAllProductsGrid.tsx b/components/common/HomeAllProductsGrid/HomeAllProductsGrid.tsx new file mode 100644 index 000000000..423048f75 --- /dev/null +++ b/components/common/HomeAllProductsGrid/HomeAllProductsGrid.tsx @@ -0,0 +1,73 @@ +import { FC } from 'react' +import Link from 'next/link' +import type { Product } from '@commerce/types' +import { Grid } from '@components/ui' +import { ProductCard } from '@components/product' +import s from './HomeAllProductsGrid.module.css' +import { getCategoryPath, getDesignerPath } from '@lib/search' + +interface Props { + categories?: any + brands?: any + products?: Product[] +} + +const HomeAllProductsGrid: FC = ({ + categories, + brands, + products = [], +}) => { + return ( +
    +
    +
    + + +
    +
    +
    + + {products.map((product) => ( + + ))} + +
    +
    + ) +} + +export default HomeAllProductsGrid diff --git a/components/common/HomeAllProductsGrid/index.ts b/components/common/HomeAllProductsGrid/index.ts new file mode 100644 index 000000000..31d313d16 --- /dev/null +++ b/components/common/HomeAllProductsGrid/index.ts @@ -0,0 +1 @@ +export { default } from './HomeAllProductsGrid' diff --git a/components/common/I18nWidget/I18nWidget.module.css b/components/common/I18nWidget/I18nWidget.module.css new file mode 100644 index 000000000..b216f5706 --- /dev/null +++ b/components/common/I18nWidget/I18nWidget.module.css @@ -0,0 +1,42 @@ +.root { + @apply relative; +} + +.button { + @apply h-10 px-2 rounded-md border border-accents-2 flex items-center justify-center; +} + +.button:hover { + @apply border-accents-4 shadow-sm; +} + +.button:focus { + @apply outline-none; +} + +.dropdownMenu { + @apply fixed right-0 top-12 mt-2 origin-top-right outline-none bg-primary z-40 w-full h-full; + + @screen lg { + @apply absolute border border-accents-1 shadow-lg w-56 h-auto; + } +} + +.closeButton { + @screen md { + @apply hidden; + } +} + +.item { + @apply flex cursor-pointer px-6 py-3 transition ease-in-out duration-150 text-primary leading-6 font-medium items-center; + text-transform: capitalize; +} + +.item:hover { + @apply bg-accents-1; +} + +.icon { + transform: rotate(180deg); +} diff --git a/components/common/I18nWidget/I18nWidget.tsx b/components/common/I18nWidget/I18nWidget.tsx new file mode 100644 index 000000000..fbe67a4c1 --- /dev/null +++ b/components/common/I18nWidget/I18nWidget.tsx @@ -0,0 +1,101 @@ +import cn from 'classnames' +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 ClickOutside from '@lib/click-outside' +interface LOCALE_DATA { + name: string + img: { + filename: string + alt: string + } +} + +const LOCALES_MAP: Record = { + es: { + name: 'Español', + img: { + filename: 'flag-es-co.svg', + alt: 'Bandera Colombiana', + }, + }, + 'en-US': { + name: 'English', + img: { + filename: 'flag-en-us.svg', + alt: 'US Flag', + }, + }, +} + +const I18nWidget: FC = () => { + const [display, setDisplay] = useState(false) + const { + locale, + locales, + defaultLocale = 'en-US', + asPath: currentPath, + } = useRouter() + + const options = locales?.filter((val) => val !== locale) + const currentLocale = locale || defaultLocale + + return ( + setDisplay(false)}> + + + ) +} + +export default I18nWidget diff --git a/components/common/I18nWidget/index.ts b/components/common/I18nWidget/index.ts new file mode 100644 index 000000000..46525c3d4 --- /dev/null +++ b/components/common/I18nWidget/index.ts @@ -0,0 +1 @@ +export { default } from './I18nWidget' diff --git a/components/common/Layout/Layout.module.css b/components/common/Layout/Layout.module.css new file mode 100644 index 000000000..bb90675a6 --- /dev/null +++ b/components/common/Layout/Layout.module.css @@ -0,0 +1,4 @@ +.root { + @apply h-full bg-primary mx-auto transition-colors duration-150; + max-width: 2460px; +} diff --git a/components/common/Layout/Layout.tsx b/components/common/Layout/Layout.tsx new file mode 100644 index 000000000..01aeac8ea --- /dev/null +++ b/components/common/Layout/Layout.tsx @@ -0,0 +1,99 @@ +import cn from 'classnames' +import dynamic from 'next/dynamic' +import s from './Layout.module.css' +import { useRouter } from 'next/router' +import React, { FC } from 'react' +import { useUI } from '@components/ui/context' +import { Navbar, Footer } from '@components/common' +import { useAcceptCookies } from '@lib/hooks/useAcceptCookies' +import { Sidebar, Button, Modal, LoadingDots } from '@components/ui' +import CartSidebarView from '@components/cart/CartSidebarView' +import CheckoutSidebarView from '@components/checkout/CheckoutSidebarView' +import PaymentMethodView from '@components/checkout/PaymentMethodView' +import ShippingView from '@components/checkout/ShippingView' + +import LoginView from '@components/auth/LoginView' +import { CommerceProvider } from '@framework' +import type { Page } from '@framework/common/get-all-pages' + +const Loading = () => ( +
    + +
    +) + +const dynamicProps = { + loading: () => , +} + +const SignUpView = dynamic( + () => import('@components/auth/SignUpView'), + dynamicProps +) + +const ForgotPassword = dynamic( + () => import('@components/auth/ForgotPassword'), + dynamicProps +) + +const FeatureBar = dynamic( + () => import('@components/common/FeatureBar'), + dynamicProps +) + +interface Props { + pageProps: { + pages?: Page[] + commerceFeatures: Record + } +} + +const Layout: FC = ({ + children, + pageProps: { commerceFeatures, ...pageProps }, +}) => { + const { + displaySidebar, + displayModal, + closeSidebar, + closeModal, + modalView, + sidebarView, + } = useUI() + const { acceptedCookies, onAcceptCookies } = useAcceptCookies() + const { locale = 'en-US' } = useRouter() + return ( + +
    + +
    {children}
    +
    + + + {modalView === 'LOGIN_VIEW' && } + {modalView === 'SIGNUP_VIEW' && } + {modalView === 'FORGOT_VIEW' && } + + + + {sidebarView === 'CART_VIEW' && } + {sidebarView === 'CHECKOUT_VIEW' && } + {sidebarView === 'PAYMENT_VIEW' && } + {sidebarView === 'SHIPPING_VIEW' && } + + + onAcceptCookies()}> + Accept cookies + + } + /> +
    +
    + ) +} + +export default Layout diff --git a/components/common/Layout/index.ts b/components/common/Layout/index.ts new file mode 100644 index 000000000..0e2737eee --- /dev/null +++ b/components/common/Layout/index.ts @@ -0,0 +1 @@ +export { default } from './Layout' diff --git a/components/common/Navbar/Navbar.module.css b/components/common/Navbar/Navbar.module.css new file mode 100644 index 000000000..753bdbf18 --- /dev/null +++ b/components/common/Navbar/Navbar.module.css @@ -0,0 +1,24 @@ +.root { + @apply sticky top-0 bg-primary z-40 transition-all duration-150; +} + +.link { + @apply inline-flex items-center text-primary leading-6 font-medium transition ease-in-out duration-75 cursor-pointer text-accents-6; +} + +.link:hover { + @apply text-accents-9; +} + +.link:focus { + @apply outline-none text-accents-8; +} + +.logo { + @apply cursor-pointer rounded-full border transform duration-100 ease-in-out; + + &:hover { + @apply shadow-md; + transform: scale(1.05); + } +} diff --git a/components/common/Navbar/Navbar.tsx b/components/common/Navbar/Navbar.tsx new file mode 100644 index 000000000..fcf9f1e10 --- /dev/null +++ b/components/common/Navbar/Navbar.tsx @@ -0,0 +1,50 @@ +import { FC } from 'react' +import Link from 'next/link' +import { Logo, Container } from '@components/ui' +import { Searchbar, UserNav } from '@components/common' +import NavbarRoot from './NavbarRoot' +import s from './Navbar.module.css' + +const Navbar: FC = () => ( + + +
    +
    + + + + + + +
    + +
    + +
    + +
    + +
    +
    + +
    + +
    +
    +
    +) + +export default Navbar diff --git a/components/common/Navbar/NavbarRoot.tsx b/components/common/Navbar/NavbarRoot.tsx new file mode 100644 index 000000000..2eb8c5429 --- /dev/null +++ b/components/common/Navbar/NavbarRoot.tsx @@ -0,0 +1,33 @@ +import { FC, useState, useEffect } from 'react' +import throttle from 'lodash.throttle' +import cn from 'classnames' +import s from './Navbar.module.css' + +const NavbarRoot: FC = ({ children }) => { + const [hasScrolled, setHasScrolled] = useState(false) + + useEffect(() => { + const handleScroll = throttle(() => { + const offset = 0 + const { scrollTop } = document.documentElement + const scrolled = scrollTop > offset + + if (hasScrolled !== scrolled) { + setHasScrolled(scrolled) + } + }, 200) + + document.addEventListener('scroll', handleScroll) + return () => { + document.removeEventListener('scroll', handleScroll) + } + }, [hasScrolled]) + + return ( +
    + {children} +
    + ) +} + +export default NavbarRoot diff --git a/components/common/Navbar/index.ts b/components/common/Navbar/index.ts new file mode 100644 index 000000000..e6400ae40 --- /dev/null +++ b/components/common/Navbar/index.ts @@ -0,0 +1 @@ +export { default } from './Navbar' diff --git a/components/common/Searchbar/Searchbar.module.css b/components/common/Searchbar/Searchbar.module.css new file mode 100644 index 000000000..071a14ef0 --- /dev/null +++ b/components/common/Searchbar/Searchbar.module.css @@ -0,0 +1,19 @@ +.input { + @apply bg-transparent px-3 py-2 appearance-none w-full transition duration-150 ease-in-out pr-10; + + @screen sm { + min-width: 300px; + } +} + +.input:focus { + @apply outline-none shadow-outline-normal; +} + +.iconContainer { + @apply absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none; +} + +.icon { + @apply h-5 w-5; +} diff --git a/components/common/Searchbar/Searchbar.tsx b/components/common/Searchbar/Searchbar.tsx new file mode 100644 index 000000000..c091a5ef2 --- /dev/null +++ b/components/common/Searchbar/Searchbar.tsx @@ -0,0 +1,66 @@ +import { FC, useEffect, useMemo } from 'react' +import cn from 'classnames' +import s from './Searchbar.module.css' +import { useRouter } from 'next/router' + +interface Props { + className?: string + id?: string +} + +const Searchbar: FC = ({ className, id = 'search' }) => { + const router = useRouter() + + useEffect(() => { + router.prefetch('/search') + }, []) + + return useMemo( + () => ( +
    + + { + e.preventDefault() + + if (e.key === 'Enter') { + const q = e.currentTarget.value + + router.push( + { + pathname: `/search`, + query: q ? { q } : {}, + }, + undefined, + { shallow: true } + ) + } + }} + /> +
    + + + +
    +
    + ), + [] + ) +} + +export default Searchbar diff --git a/components/common/Searchbar/index.ts b/components/common/Searchbar/index.ts new file mode 100644 index 000000000..e6c0e36c8 --- /dev/null +++ b/components/common/Searchbar/index.ts @@ -0,0 +1 @@ +export { default } from './Searchbar' diff --git a/components/common/UserNav/DropdownMenu.module.css b/components/common/UserNav/DropdownMenu.module.css new file mode 100644 index 000000000..404726bc5 --- /dev/null +++ b/components/common/UserNav/DropdownMenu.module.css @@ -0,0 +1,24 @@ +.dropdownMenu { + @apply fixed right-0 mt-2 origin-top-right outline-none bg-primary z-40 w-full h-full; + + @screen lg { + @apply absolute top-10 border border-accents-1 shadow-lg w-56 h-auto; + } +} + +.link { + @apply text-primary flex cursor-pointer px-6 py-3 flex transition ease-in-out duration-150 leading-6 font-medium items-center; + text-transform: capitalize; +} + +.link:hover { + @apply bg-accents-1; +} + +.link.active { + @apply font-bold bg-accents-2; +} + +.off { + @apply hidden; +} diff --git a/components/common/UserNav/DropdownMenu.tsx b/components/common/UserNav/DropdownMenu.tsx new file mode 100644 index 000000000..43f842009 --- /dev/null +++ b/components/common/UserNav/DropdownMenu.tsx @@ -0,0 +1,125 @@ +import cn from 'classnames' +import Link from 'next/link' +import { FC, useRef, useState, useEffect } from 'react' +import { useTheme } from 'next-themes' +import { useRouter } from 'next/router' +import s from './DropdownMenu.module.css' +import { Avatar } from '@components/common' +import { Moon, Sun } from '@components/icons' +import { useUI } from '@components/ui/context' +import ClickOutside from '@lib/click-outside' +import useLogout from '@framework/auth/use-logout' + +import { + disableBodyScroll, + enableBodyScroll, + clearAllBodyScrollLocks, +} from 'body-scroll-lock' + +interface DropdownMenuProps { + open?: boolean +} + +const LINKS = [ + { + name: 'My Orders', + href: '/orders', + }, + { + name: 'My Profile', + href: '/profile', + }, + { + name: 'My Cart', + href: '/cart', + }, +] + +const DropdownMenu: FC = ({ open = false }) => { + const logout = useLogout() + const { pathname } = useRouter() + const { theme, setTheme } = useTheme() + const [display, setDisplay] = useState(false) + const { closeSidebarIfPresent } = useUI() + const ref = useRef() as React.MutableRefObject + + useEffect(() => { + if (ref.current) { + if (display) { + disableBodyScroll(ref.current) + } else { + enableBodyScroll(ref.current) + } + } + return () => { + clearAllBodyScrollLocks() + } + }, [display]) + + return ( + setDisplay(false)}> + + + ) +} + +export default DropdownMenu diff --git a/components/common/UserNav/UserNav.module.css b/components/common/UserNav/UserNav.module.css new file mode 100644 index 000000000..cd1a6ce1f --- /dev/null +++ b/components/common/UserNav/UserNav.module.css @@ -0,0 +1,40 @@ +.root { + @apply relative; +} + +.list { + @apply flex flex-row items-center justify-items-end h-full; +} + +.item { + @apply mr-6 cursor-pointer relative transition ease-in-out duration-100 flex items-center outline-none text-primary; + + &:hover { + @apply text-accents-6 transition scale-110 duration-100; + } + + &:last-child { + @apply mr-0; + } + + &:focus, + &:active { + @apply outline-none; + } +} + +.bagCount { + @apply border border-accents-1 bg-secondary text-secondary absolute rounded-full right-3 top-3 flex items-center justify-center font-bold text-xs; + padding-left: 2.5px; + padding-right: 2.5px; + min-width: 1.25rem; + min-height: 1.25rem; +} + +.avatarButton { + @apply inline-flex justify-center rounded-full; +} + +.avatarButton:focus { + @apply outline-none; +} diff --git a/components/common/UserNav/UserNav.tsx b/components/common/UserNav/UserNav.tsx new file mode 100644 index 000000000..4d00970a9 --- /dev/null +++ b/components/common/UserNav/UserNav.tsx @@ -0,0 +1,61 @@ +import { FC } from 'react' +import Link from 'next/link' +import cn from 'classnames' +import type { LineItem } from '@framework/types' +import useCart from '@framework/cart/use-cart' +import useCustomer from '@framework/customer/use-customer' +import { Avatar } from '@components/common' +import { Heart, Bag } from '@components/icons' +import { useUI } from '@components/ui/context' +import DropdownMenu from './DropdownMenu' +import s from './UserNav.module.css' + +interface Props { + className?: string +} + +const countItem = (count: number, item: LineItem) => count + item.quantity + +const UserNav: FC = ({ className }) => { + const { data } = useCart() + const { data: customer } = useCustomer() + const { toggleSidebar, closeSidebarIfPresent, openModal } = useUI() + const itemsCount = data?.lineItems.reduce(countItem, 0) ?? 0 + + return ( + + ) +} + +export default UserNav diff --git a/components/common/UserNav/index.ts b/components/common/UserNav/index.ts new file mode 100644 index 000000000..9e35ac018 --- /dev/null +++ b/components/common/UserNav/index.ts @@ -0,0 +1 @@ +export { default } from './UserNav' diff --git a/components/common/index.ts b/components/common/index.ts new file mode 100644 index 000000000..98dd3394b --- /dev/null +++ b/components/common/index.ts @@ -0,0 +1,9 @@ +export { default as Avatar } from './Avatar' +export { default as FeatureBar } from './FeatureBar' +export { default as Footer } from './Footer' +export { default as Layout } from './Layout' +export { default as Navbar } from './Navbar' +export { default as Searchbar } from './Searchbar' +export { default as UserNav } from './UserNav' +export { default as Head } from './Head' +export { default as I18nWidget } from './I18nWidget' diff --git a/components/core/Avatar/Avatar.tsx b/components/core/Avatar/Avatar.tsx deleted file mode 100644 index 8e7e57c5d..000000000 --- a/components/core/Avatar/Avatar.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import cn from "classnames"; -import React, { FunctionComponent } from "react"; -import s from "./Avatar.module.css"; - -interface Props { - className?: string; - children?: any; -} - -const Avatar: FunctionComponent = ({ className }) => { - const rootClassName = cn(s.root, className); - return ( -
    - -
    - ); -}; - -export default Avatar; diff --git a/components/core/Avatar/index.ts b/components/core/Avatar/index.ts deleted file mode 100644 index 279f4682f..000000000 --- a/components/core/Avatar/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from "./Avatar"; diff --git a/components/core/Featurebar/Featurebar.module.css b/components/core/Featurebar/Featurebar.module.css deleted file mode 100644 index 806d4a40c..000000000 --- a/components/core/Featurebar/Featurebar.module.css +++ /dev/null @@ -1,21 +0,0 @@ -.root { - @apply py-4 px-6 bg-black text-white flex flex-row justify-center items-center; -} - -.title { - @apply text-white font-medium; -} - -.separator { - @apply mx-3 bg-white; - width: 1px; - height: 20px; -} - -.separator:before { - content: ""; -} - -.description { - @apply text-white font-medium; -} diff --git a/components/core/Featurebar/Featurebar.tsx b/components/core/Featurebar/Featurebar.tsx deleted file mode 100644 index 56e3d9e22..000000000 --- a/components/core/Featurebar/Featurebar.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import cn from "classnames"; -import { FunctionComponent } from "react"; -import s from "./Featurebar.module.css"; - -interface Props { - className?: string; - title: string; - description: string; -} - -const Featurebar: FunctionComponent = ({ - title, - description, - className, -}) => { - const rootClassName = cn(s.root, className); - return ( -
    - {title} - - {description} -
    - ); -}; - -export default Featurebar; diff --git a/components/core/Featurebar/index.ts b/components/core/Featurebar/index.ts deleted file mode 100644 index 158415285..000000000 --- a/components/core/Featurebar/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from "./Featurebar"; diff --git a/components/core/Footer/Footer.module.css b/components/core/Footer/Footer.module.css deleted file mode 100644 index 3a80ec3fd..000000000 --- a/components/core/Footer/Footer.module.css +++ /dev/null @@ -1,7 +0,0 @@ -.root { - @apply p-0; -} - -.container { - @apply flex justify-between items-center flex-row px-4 py-5; -} diff --git a/components/core/Footer/Footer.tsx b/components/core/Footer/Footer.tsx deleted file mode 100644 index ef662e61b..000000000 --- a/components/core/Footer/Footer.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import cn from "classnames"; -import React, { FunctionComponent } from "react"; -import s from "./Footer.module.css"; -import { Container } from "@components/ui"; - -interface Props { - className?: string; - children?: any; -} - -const Footer: FunctionComponent = ({ className }) => { - const rootClassName = cn(s.root, className); - return ( -
    - -
    - ); -}; - -export default Footer; diff --git a/components/core/Footer/index.ts b/components/core/Footer/index.ts deleted file mode 100644 index 3738288b0..000000000 --- a/components/core/Footer/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from "./Footer"; diff --git a/components/core/Layout/Layout.module.css b/components/core/Layout/Layout.module.css deleted file mode 100644 index 984ca54c8..000000000 --- a/components/core/Layout/Layout.module.css +++ /dev/null @@ -1,3 +0,0 @@ -.root { - @apply h-full border-indigo-900; -} diff --git a/components/core/Layout/Layout.tsx b/components/core/Layout/Layout.tsx deleted file mode 100644 index 71f3e6668..000000000 --- a/components/core/Layout/Layout.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import cn from "classnames"; -import React, { FunctionComponent } from "react"; -import s from "./Layout.module.css"; -import { Navbar, Featurebar } from "@components/core"; -import { Container } from "@components/ui"; - -interface Props { - className?: string; - children?: any; -} - -const Layout: FunctionComponent = ({ className, children }) => { - const rootClassName = cn(s.root, className); - return ( - - - -
    {children}
    -
    - ); -}; - -export default Layout; diff --git a/components/core/Layout/index.ts b/components/core/Layout/index.ts deleted file mode 100644 index d4dca0dc6..000000000 --- a/components/core/Layout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from "./Layout"; diff --git a/components/core/Navbar/Navbar.module.css b/components/core/Navbar/Navbar.module.css deleted file mode 100644 index 7f08b4c9c..000000000 --- a/components/core/Navbar/Navbar.module.css +++ /dev/null @@ -1,3 +0,0 @@ -.root { - @apply flex justify-between items-center flex-row px-6 h-20 relative; -} diff --git a/components/core/Navbar/Navbar.tsx b/components/core/Navbar/Navbar.tsx deleted file mode 100644 index e69de29bb..000000000 diff --git a/components/core/Navbar/index.ts b/components/core/Navbar/index.ts deleted file mode 100644 index 8d95d6656..000000000 --- a/components/core/Navbar/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from "./Navbar"; diff --git a/components/core/Searchbar/Searchbar.module.css b/components/core/Searchbar/Searchbar.module.css deleted file mode 100644 index e1e8e55e8..000000000 --- a/components/core/Searchbar/Searchbar.module.css +++ /dev/null @@ -1,24 +0,0 @@ -.root { - @apply px-4 flex items-center; -} - -.container { - @apply relative rounded-lg flex flex-row text-sm items-center bg-accent-1; -} - -.input { - @apply bg-transparent px-3 py-2 appearance-none w-full transition duration-150 ease-in-out rounded-lg text-accent-1 placeholder-accent-4; - min-width: 300px; -} - -.input:focus { - @apply outline-none shadow-outline-gray; -} - -.iconContainer { - @apply absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none; -} - -.icon { - @apply h-5 w-5; -} diff --git a/components/core/Searchbar/Searchbar.tsx b/components/core/Searchbar/Searchbar.tsx deleted file mode 100644 index 5b43ef09a..000000000 --- a/components/core/Searchbar/Searchbar.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import cn from "classnames"; -import React, { FunctionComponent } from "react"; -import s from "./Searchbar.module.css"; - -interface Props { - className?: string; - children?: any; -} - -const Searchbar: FunctionComponent = ({ className }) => { - const rootClassName = cn(s.root, className); - return ( -
    -
    -
    - -
    - - - -
    -
    -
    -
    - ); -}; - -export default Searchbar; diff --git a/components/core/Searchbar/index.ts b/components/core/Searchbar/index.ts deleted file mode 100644 index 94891f2fa..000000000 --- a/components/core/Searchbar/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from "./Searchbar"; diff --git a/components/core/index.ts b/components/core/index.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/components/icon/Bag.tsx b/components/icon/Bag.tsx deleted file mode 100644 index e69de29bb..000000000 diff --git a/components/icon/Heart.tsx b/components/icon/Heart.tsx deleted file mode 100644 index e69de29bb..000000000 diff --git a/components/icon/Trash.tsx b/components/icon/Trash.tsx deleted file mode 100644 index e69de29bb..000000000 diff --git a/components/icon/index.ts b/components/icon/index.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/components/icons/ArrowLeft.tsx b/components/icons/ArrowLeft.tsx new file mode 100644 index 000000000..8cc1e1294 --- /dev/null +++ b/components/icons/ArrowLeft.tsx @@ -0,0 +1,27 @@ +const ArrowLeft = ({ ...props }) => { + return ( + + + + + ) +} + +export default ArrowLeft diff --git a/components/icons/Bag.tsx b/components/icons/Bag.tsx new file mode 100644 index 000000000..de2cde0d1 --- /dev/null +++ b/components/icons/Bag.tsx @@ -0,0 +1,33 @@ +const Bag = ({ ...props }) => { + return ( + + + + + + ) +} + +export default Bag diff --git a/components/icons/Check.tsx b/components/icons/Check.tsx new file mode 100644 index 000000000..89c91a1e3 --- /dev/null +++ b/components/icons/Check.tsx @@ -0,0 +1,21 @@ +const Check = ({ ...props }) => { + return ( + + + + ) +} + +export default Check diff --git a/components/icons/ChevronLeft.tsx b/components/icons/ChevronLeft.tsx new file mode 100644 index 000000000..0d3a01940 --- /dev/null +++ b/components/icons/ChevronLeft.tsx @@ -0,0 +1,20 @@ +const ChevronUp = ({ ...props }) => { + return ( + + + + ) +} + +export default ChevronUp diff --git a/components/icons/ChevronUp.tsx b/components/icons/ChevronUp.tsx new file mode 100644 index 000000000..69b9959b8 --- /dev/null +++ b/components/icons/ChevronUp.tsx @@ -0,0 +1,20 @@ +const ChevronUp = ({ ...props }) => { + return ( + + + + ) +} + +export default ChevronUp diff --git a/components/icons/CreditCard.tsx b/components/icons/CreditCard.tsx new file mode 100644 index 000000000..85504d8ba --- /dev/null +++ b/components/icons/CreditCard.tsx @@ -0,0 +1,20 @@ +const CreditCard = ({ ...props }) => { + return ( + + + + + ) +} + +export default CreditCard diff --git a/components/icons/Cross.tsx b/components/icons/Cross.tsx new file mode 100644 index 000000000..12e115ac9 --- /dev/null +++ b/components/icons/Cross.tsx @@ -0,0 +1,21 @@ +const Cross = ({ ...props }) => { + return ( + + + + + ) +} + +export default Cross diff --git a/components/icons/DoubleChevron.tsx b/components/icons/DoubleChevron.tsx new file mode 100644 index 000000000..198c30464 --- /dev/null +++ b/components/icons/DoubleChevron.tsx @@ -0,0 +1,22 @@ +const DoubleChevron = ({ ...props }) => { + return ( + + + + ) +} + +export default DoubleChevron diff --git a/components/icons/Github.tsx b/components/icons/Github.tsx new file mode 100644 index 000000000..1195a3c3a --- /dev/null +++ b/components/icons/Github.tsx @@ -0,0 +1,20 @@ +const Github = ({ ...props }) => { + return ( + + + + ) +} + +export default Github diff --git a/components/icons/Heart.tsx b/components/icons/Heart.tsx new file mode 100644 index 000000000..afa2f6aaa --- /dev/null +++ b/components/icons/Heart.tsx @@ -0,0 +1,22 @@ +const Heart = ({ ...props }) => { + return ( + + + + ) +} + +export default Heart diff --git a/components/icons/Info.tsx b/components/icons/Info.tsx new file mode 100644 index 000000000..67c79cf27 --- /dev/null +++ b/components/icons/Info.tsx @@ -0,0 +1,22 @@ +const Info = ({ ...props }) => { + return ( + + + + + + ) +} + +export default Info diff --git a/components/icons/MapPin.tsx b/components/icons/MapPin.tsx new file mode 100644 index 000000000..6323b9c1c --- /dev/null +++ b/components/icons/MapPin.tsx @@ -0,0 +1,20 @@ +const MapPin = ({ ...props }) => { + return ( + + + + + ) +} + +export default MapPin diff --git a/components/icons/Minus.tsx b/components/icons/Minus.tsx new file mode 100644 index 000000000..1e9411dda --- /dev/null +++ b/components/icons/Minus.tsx @@ -0,0 +1,15 @@ +const Minus = ({ ...props }) => { + return ( + + + + ) +} + +export default Minus diff --git a/components/icons/Moon.tsx b/components/icons/Moon.tsx new file mode 100644 index 000000000..e02f2a30d --- /dev/null +++ b/components/icons/Moon.tsx @@ -0,0 +1,20 @@ +const Moon = ({ ...props }) => { + return ( + + + + ) +} + +export default Moon diff --git a/components/icons/Plus.tsx b/components/icons/Plus.tsx new file mode 100644 index 000000000..ad030b92e --- /dev/null +++ b/components/icons/Plus.tsx @@ -0,0 +1,22 @@ +const Plus = ({ ...props }) => { + return ( + + + + + ) +} + +export default Plus diff --git a/components/icons/RightArrow.tsx b/components/icons/RightArrow.tsx new file mode 100644 index 000000000..b7a1579c8 --- /dev/null +++ b/components/icons/RightArrow.tsx @@ -0,0 +1,29 @@ +const RightArrow = ({ ...props }) => { + return ( + + + + + ) +} + +export default RightArrow diff --git a/components/icons/Sun.tsx b/components/icons/Sun.tsx new file mode 100644 index 000000000..d3684bcb9 --- /dev/null +++ b/components/icons/Sun.tsx @@ -0,0 +1,28 @@ +const Sun = ({ ...props }) => { + return ( + + + + + + + + + + + + ) +} + +export default Sun diff --git a/components/icons/Trash.tsx b/components/icons/Trash.tsx new file mode 100644 index 000000000..b005ea892 --- /dev/null +++ b/components/icons/Trash.tsx @@ -0,0 +1,43 @@ +const Trash = ({ ...props }) => { + return ( + + + + + + + ) +} + +export default Trash diff --git a/components/icons/Vercel.tsx b/components/icons/Vercel.tsx new file mode 100644 index 000000000..96e619fdf --- /dev/null +++ b/components/icons/Vercel.tsx @@ -0,0 +1,40 @@ +const Vercel = ({ ...props }) => { + return ( + + + + + + + + + + ) +} + +export default Vercel diff --git a/components/icons/index.ts b/components/icons/index.ts new file mode 100644 index 000000000..4b0292e22 --- /dev/null +++ b/components/icons/index.ts @@ -0,0 +1,19 @@ +export { default as Bag } from './Bag' +export { default as Heart } from './Heart' +export { default as Trash } from './Trash' +export { default as Cross } from './Cross' +export { default as ArrowLeft } from './ArrowLeft' +export { default as Plus } from './Plus' +export { default as Minus } from './Minus' +export { default as Check } from './Check' +export { default as Sun } from './Sun' +export { default as Moon } from './Moon' +export { default as Github } from './Github' +export { default as RightArrow } from './RightArrow' +export { default as Info } from './Info' +export { default as Vercel } from './Vercel' +export { default as MapPin } from './MapPin' +export { default as CreditCard } from './CreditCard' +export { default as ChevronUp } from './ChevronUp' +export { default as ChevronLeft } from './ChevronLeft' +export { default as DoubleChevron } from './DoubleChevron' diff --git a/components/product/ProductCard/ProductCard.module.css b/components/product/ProductCard/ProductCard.module.css new file mode 100644 index 000000000..1484cfaa4 --- /dev/null +++ b/components/product/ProductCard/ProductCard.module.css @@ -0,0 +1,136 @@ +.root { + @apply relative max-h-full w-full box-border overflow-hidden + bg-no-repeat bg-center bg-cover transition-transform + ease-linear cursor-pointer; + height: 100% !important; + + &:hover { + & .squareBg:before { + transform: scale(0.98); + } + + & .productImage { + transform: scale(1.2625); + } + + & .productTitle > span, + & .productPrice, + & .wishlistButton { + @apply bg-secondary text-secondary; + } + + &:nth-child(6n + 1) .productTitle > span, + &:nth-child(6n + 1) .productPrice, + &:nth-child(6n + 1) .wishlistButton { + @apply bg-violet text-white; + } + + &:nth-child(6n + 5) .productTitle > span, + &:nth-child(6n + 5) .productPrice, + &:nth-child(6n + 5) .wishlistButton { + @apply bg-blue text-white; + } + + &:nth-child(6n + 3) .productTitle > span, + &:nth-child(6n + 3) .productPrice, + &:nth-child(6n + 3) .wishlistButton { + @apply bg-pink text-white; + } + + &:nth-child(6n + 6) .productTitle > span, + &:nth-child(6n + 6) .productPrice, + &:nth-child(6n + 6) .wishlistButton { + @apply bg-cyan text-white; + } + } + + &:nth-child(6n + 1) .squareBg { + @apply bg-violet; + } + + &:nth-child(6n + 5) .squareBg { + @apply bg-blue; + } + + &:nth-child(6n + 3) .squareBg { + @apply bg-pink; + } + + &:nth-child(6n + 6) .squareBg { + @apply bg-cyan; + } +} + +.squareBg, +.productTitle > span, +.productPrice, +.wishlistButton { + @apply transition-colors ease-in-out duration-500; +} + +.squareBg { + @apply transition-colors absolute inset-0 z-0; + background-color: #212529; +} + +.squareBg:before { + @apply transition ease-in-out duration-500 bg-repeat-space w-full h-full block; + background-image: url('/bg-products.svg'); + content: ''; +} + +.simple { + & .squareBg { + @apply bg-accents-0 !important; + background-image: url('/bg-products.svg'); + } + + & .productTitle { + @apply pt-2; + font-size: 1rem; + + & span { + @apply leading-extra-loose; + } + } + + & .productPrice { + @apply text-sm; + } +} + +.productTitle { + @apply pt-0 max-w-full w-full leading-extra-loose; + font-size: 2rem; + letter-spacing: 0.4px; + + & span { + @apply py-4 px-6 bg-primary text-primary font-bold; + font-size: inherit; + letter-spacing: inherit; + box-decoration-break: clone; + -webkit-box-decoration-break: clone; + } +} + +.productPrice { + @apply py-4 px-6 bg-primary text-primary font-semibold inline-block text-sm leading-6; + letter-spacing: 0.4px; +} + +.wishlistButton { + @apply w-10 h-10 flex ml-auto items-center justify-center bg-primary text-primary font-semibold text-xs leading-6 cursor-pointer; +} + +.imageContainer { + @apply flex items-center justify-center; + overflow: hidden; + + & > div { + min-width: 100%; + } +} + +.productImage { + @apply transform transition-transform duration-500 object-cover scale-120; +} diff --git a/components/product/ProductCard/ProductCard.tsx b/components/product/ProductCard/ProductCard.tsx new file mode 100644 index 000000000..ade53380c --- /dev/null +++ b/components/product/ProductCard/ProductCard.tsx @@ -0,0 +1,88 @@ +import { FC } from 'react' +import cn from 'classnames' +import Link from 'next/link' +import type { Product } from '@commerce/types' +import s from './ProductCard.module.css' +import Image, { ImageProps } from 'next/image' +import WishlistButton from '@components/wishlist/WishlistButton' + +interface Props { + className?: string + product: Product + variant?: 'slim' | 'simple' + imgProps?: Omit +} + +const placeholderImg = '/product-img-placeholder.svg' + +const ProductCard: FC = ({ + className, + product, + variant, + imgProps, + ...props +}) => ( + + + {variant === 'slim' ? ( +
    +
    + + {product.name} + +
    + {product?.images && ( + {product.name + )} +
    + ) : ( + <> +
    +
    +
    +

    + {product.name} +

    + + {product.price.value} +   + {product.price.currencyCode} + +
    + {process.env.COMMERCE_WISHLIST_ENABLED && ( + + )} +
    +
    + {product?.images && ( + {product.name + )} +
    + + )} +
    + +) + +export default ProductCard diff --git a/components/product/ProductCard/index.ts b/components/product/ProductCard/index.ts new file mode 100644 index 000000000..4559faa14 --- /dev/null +++ b/components/product/ProductCard/index.ts @@ -0,0 +1 @@ +export { default } from './ProductCard' diff --git a/components/product/ProductSlider/ProductSlider.module.css b/components/product/ProductSlider/ProductSlider.module.css new file mode 100644 index 000000000..259d15801 --- /dev/null +++ b/components/product/ProductSlider/ProductSlider.module.css @@ -0,0 +1,82 @@ +.root { + @apply relative w-full h-full; + overflow-y: hidden; +} + +.leftControl, +.rightControl { + @apply absolute top-1/2 -translate-x-1/2 z-20 w-16 h-16 flex items-center justify-center bg-hover-1 rounded-full; +} + +.leftControl:hover, +.rightControl:hover { + @apply bg-hover-2; +} + +.leftControl:hover, +.rightControl:hover { + @apply outline-none shadow-outline-normal; +} + +.leftControl { + @apply bg-cover left-10; + background-image: url('public/cursor-left.png'); + + @screen md { + @apply left-6; + } +} + +.rightControl { + @apply bg-cover right-10; + background-image: url('public/cursor-right.png'); + + @screen md { + @apply right-6; + } +} + +.control { + @apply opacity-0 transition duration-150; +} + +.root:hover .control { + @apply opacity-100; +} + +.positionIndicatorsContainer { + @apply hidden; + + @screen sm { + @apply block absolute bottom-6 left-1/2; + transform: translateX(-50%); + } +} + +.positionIndicator { + @apply rounded-full p-2; +} + +.dot { + @apply bg-hover-1 transition w-3 h-3 rounded-full; +} + +.positionIndicator:hover .dot { + @apply bg-hover-2; +} + +.positionIndicator:focus { + @apply outline-none; +} + +.positionIndicator:focus .dot { + @apply shadow-outline-normal; +} + +.positionIndicatorActive .dot { + @apply bg-white; +} + +.positionIndicatorActive:hover .dot { + @apply bg-white; +} diff --git a/components/product/ProductSlider/ProductSlider.tsx b/components/product/ProductSlider/ProductSlider.tsx new file mode 100644 index 000000000..02244f5ba --- /dev/null +++ b/components/product/ProductSlider/ProductSlider.tsx @@ -0,0 +1,119 @@ +import { useKeenSlider } from 'keen-slider/react' +import React, { + Children, + FC, + isValidElement, + useState, + useRef, + useEffect, +} from 'react' +import cn from 'classnames' + +import s from './ProductSlider.module.css' + +const ProductSlider: FC = ({ children }) => { + const [currentSlide, setCurrentSlide] = useState(0) + const [isMounted, setIsMounted] = useState(false) + const sliderContainerRef = useRef(null) + + const [ref, slider] = useKeenSlider({ + loop: true, + slidesPerView: 1, + mounted: () => setIsMounted(true), + slideChanged(s) { + setCurrentSlide(s.details().relativeSlide) + }, + }) + + // Stop the history navigation gesture on touch devices + useEffect(() => { + const preventNavigation = (event: TouchEvent) => { + // Center point of the touch area + const touchXPosition = event.touches[0].pageX + // Size of the touch area + const touchXRadius = event.touches[0].radiusX || 0 + + // We set a threshold (10px) on both sizes of the screen, + // if the touch area overlaps with the screen edges + // it's likely to trigger the navigation. We prevent the + // touchstart event in that case. + if ( + touchXPosition - touchXRadius < 10 || + touchXPosition + touchXRadius > window.innerWidth - 10 + ) + event.preventDefault() + } + + sliderContainerRef.current!.addEventListener( + 'touchstart', + preventNavigation + ) + + return () => { + if (sliderContainerRef.current) { + sliderContainerRef.current!.removeEventListener( + 'touchstart', + preventNavigation + ) + } + } + }, []) + + return ( +
    + + ) + })} +
    + )} +
    + ) +} + +export default ProductSlider diff --git a/components/product/ProductSlider/index.ts b/components/product/ProductSlider/index.ts new file mode 100644 index 000000000..504440410 --- /dev/null +++ b/components/product/ProductSlider/index.ts @@ -0,0 +1 @@ +export { default } from './ProductSlider' diff --git a/components/product/ProductView/ProductView.module.css b/components/product/ProductView/ProductView.module.css index e69de29bb..198fbc747 100644 --- a/components/product/ProductView/ProductView.module.css +++ b/components/product/ProductView/ProductView.module.css @@ -0,0 +1,96 @@ +.root { + @apply relative grid items-start gap-1 grid-cols-1 overflow-x-hidden; + + @screen lg { + @apply grid-cols-12; + } +} + +.productDisplay { + @apply relative flex px-0 pb-0 box-border col-span-1 bg-violet; + min-height: 600px; + + @screen md { + min-height: 700px; + } + + @screen lg { + margin-right: -2rem; + margin-left: -2rem; + @apply mx-0 col-span-8; + min-height: 100%; + height: 100%; + } +} + +.squareBg { + @apply absolute inset-0 bg-violet z-0 h-full; +} + +.nameBox { + @apply absolute top-6 left-0 z-20 pr-16; + + @screen lg { + @apply left-6 pr-16; + } + + & .name { + @apply px-6 py-2 bg-primary text-primary font-bold; + font-size: 2rem; + letter-spacing: 0.4px; + } + + & .price { + @apply px-6 py-2 pb-4 bg-primary text-primary font-bold inline-block tracking-wide; + } + + @screen lg { + & .name, + & .price { + @apply bg-violet-light text-white; + } + } +} + +.sidebar { + @apply flex flex-col col-span-1 mx-auto max-w-8xl px-6 w-full h-full; + + @screen lg { + @apply col-span-4 py-12; + } +} + +.sliderContainer { + @apply absolute z-10 inset-0 flex items-center justify-center overflow-x-hidden; +} + +.imageContainer { + & > div { + @apply h-full; + & > div { + @apply h-full; + } + } +} + +.img { + @apply w-full h-auto max-h-full object-cover; +} + +.button { + text-align: center; + width: 100%; + max-width: 300px; + + @screen sm { + min-width: 300px; + } +} + +.wishlistButton { + @apply absolute z-30 top-6 right-0 bg-primary text-primary w-10 h-10 flex items-center justify-center font-semibold leading-6 cursor-pointer; + + @screen lg { + @apply right-0 top-0 text-black bg-white w-14 h-14; + } +} diff --git a/components/product/ProductView/ProductView.tsx b/components/product/ProductView/ProductView.tsx index e69de29bb..ee1a15e0c 100644 --- a/components/product/ProductView/ProductView.tsx +++ b/components/product/ProductView/ProductView.tsx @@ -0,0 +1,176 @@ +import cn from 'classnames' +import Image from 'next/image' +import { NextSeo } from 'next-seo' +import { FC, useEffect, useState } from 'react' +import s from './ProductView.module.css' +import { Swatch, ProductSlider } from '@components/product' +import { Button, Container, Text, useUI } from '@components/ui' +import type { Product } from '@commerce/types' +import usePrice from '@framework/product/use-price' +import { useAddItem } from '@framework/cart' +import { getVariant, SelectedOptions } from '../helpers' +import WishlistButton from '@components/wishlist/WishlistButton' + +interface Props { + children?: any + product: Product + className?: string +} + +const ProductView: FC = ({ product }) => { + const addItem = useAddItem() + const { price } = usePrice({ + amount: product.price.value, + baseAmount: product.price.retailPrice, + currencyCode: product.price.currencyCode!, + }) + const { openSidebar } = useUI() + const [loading, setLoading] = useState(false) + const [choices, setChoices] = useState({}) + + useEffect(() => { + // Selects the default option + product.variants[0].options?.forEach((v) => { + setChoices((choices) => ({ + ...choices, + [v.displayName.toLowerCase()]: v.values[0].label.toLowerCase(), + })) + }) + }, []) + + const variant = getVariant(product, choices) + + const addToCart = async () => { + setLoading(true) + try { + await addItem({ + productId: String(product.id), + variantId: String(variant ? variant.id : product.variants[0].id), + }) + openSidebar() + setLoading(false) + } catch (err) { + setLoading(false) + } + } + + return ( + + +
    +
    +
    +

    {product.name}

    +
    + {price} + {` `} + {product.price?.currencyCode} +
    +
    + +
    + + {product.images.map((image, i) => ( +
    + {image.alt +
    + ))} +
    +
    + {process.env.COMMERCE_WISHLIST_ENABLED && ( + + )} +
    +
    +
    + {product.options?.map((opt) => ( +
    +

    {opt.displayName}

    +
    + {opt.values.map((v, i: number) => { + const active = (choices as any)[ + opt.displayName.toLowerCase() + ] + + return ( + { + setChoices((choices) => { + return { + ...choices, + [opt.displayName.toLowerCase()]: v.label.toLowerCase(), + } + }) + }} + /> + ) + })} +
    +
    + ))} + +
    + +
    + +
    Stars and reviews.
    +
    +
    + +
    + +
    +
      +
    • + Details +
    • +
    +
    +
    +
    +
    + ) +} + +export default ProductView diff --git a/components/product/ProductView/index.ts b/components/product/ProductView/index.ts index 0885bc92e..9ac144801 100644 --- a/components/product/ProductView/index.ts +++ b/components/product/ProductView/index.ts @@ -1 +1 @@ -export { default } from "./ProductView"; +export { default } from './ProductView' diff --git a/components/product/Swatch/Swatch.module.css b/components/product/Swatch/Swatch.module.css new file mode 100644 index 000000000..051435afd --- /dev/null +++ b/components/product/Swatch/Swatch.module.css @@ -0,0 +1,33 @@ +.root { + composes: root from 'components/ui/Button/Button.module.css'; + @apply h-12 w-12 bg-primary text-primary rounded-full mr-3 inline-flex + items-center justify-center cursor-pointer transition duration-150 ease-in-out + p-0 shadow-none border-gray-200 border box-border; + + & > span { + @apply absolute; + } + + &:hover { + @apply transform scale-110 bg-hover; + } +} + +.color { + @apply text-black transition duration-150 ease-in-out; + + &:hover { + @apply text-black; + } + + &.dark, + &.dark:hover { + color: white !important; + } +} + +.active { + &.size { + @apply border-accents-9 border-2; + } +} diff --git a/components/product/Swatch/Swatch.tsx b/components/product/Swatch/Swatch.tsx new file mode 100644 index 000000000..34244321f --- /dev/null +++ b/components/product/Swatch/Swatch.tsx @@ -0,0 +1,55 @@ +import cn from 'classnames' +import { FC } from 'react' +import s from './Swatch.module.css' +import { Check } from '@components/icons' +import Button, { ButtonProps } from '@components/ui/Button' +import { isDark } from '@lib/colors' +interface Props { + active?: boolean + children?: any + className?: string + label?: string + variant?: 'size' | 'color' | string + color?: string +} + +const Swatch: FC & Props> = ({ + className, + color = '', + label, + variant = 'size', + active, + ...props +}) => { + variant = variant?.toLowerCase() + label = label?.toLowerCase() + + const rootClassName = cn( + s.root, + { + [s.active]: active, + [s.size]: variant === 'size', + [s.color]: color, + [s.dark]: color ? isDark(color) : false, + }, + className + ) + + return ( + + ) +} + +export default Swatch diff --git a/components/product/Swatch/index.ts b/components/product/Swatch/index.ts new file mode 100644 index 000000000..c8a795498 --- /dev/null +++ b/components/product/Swatch/index.ts @@ -0,0 +1 @@ +export { default } from './Swatch' diff --git a/components/product/helpers.ts b/components/product/helpers.ts new file mode 100644 index 000000000..a0ceb7aa5 --- /dev/null +++ b/components/product/helpers.ts @@ -0,0 +1,18 @@ +import type { Product } from '@commerce/types' +export type SelectedOptions = Record + +export function getVariant(product: Product, opts: SelectedOptions) { + const variant = product.variants.find((variant) => { + return Object.entries(opts).every(([key, value]) => + variant.options.find((option) => { + if ( + option.__typename === 'MultipleChoiceOption' && + option.displayName.toLowerCase() === key.toLowerCase() + ) { + return option.values.find((v) => v.label.toLowerCase() === value) + } + }) + ) + }) + return variant +} diff --git a/components/product/index.ts b/components/product/index.ts index d5adcbac5..82ac6c548 100644 --- a/components/product/index.ts +++ b/components/product/index.ts @@ -1 +1,4 @@ -export { default as ProductView } from "./ProductView"; +export { default as Swatch } from './Swatch' +export { default as ProductView } from './ProductView' +export { default as ProductCard } from './ProductCard' +export { default as ProductSlider } from './ProductSlider' diff --git a/components/ui/Button/Button.module.css b/components/ui/Button/Button.module.css index e69de29bb..84396fdcc 100644 --- a/components/ui/Button/Button.module.css +++ b/components/ui/Button/Button.module.css @@ -0,0 +1,39 @@ +.root { + @apply bg-secondary text-accents-1 cursor-pointer inline-flex + px-10 rounded-sm leading-6 transition ease-in-out duration-150 + shadow-sm font-semibold text-center justify-center uppercase + py-4 border border-transparent items-center; +} + +.root:hover { + @apply bg-accents-0 text-primary border border-secondary; +} + +.root:focus { + @apply shadow-outline-normal outline-none; +} + +.root[data-active] { + @apply bg-gray-600; +} + +.loading { + @apply bg-accents-1 text-accents-3 border-accents-2 cursor-not-allowed; +} + +.slim { + @apply py-2 transform-none normal-case; +} + +.ghost { + @apply border border-accents-3 bg-accents-0 text-accents-9 text-sm; +} + +.disabled, +.disabled:hover { + @apply text-accents-4 border-accents-2 bg-accents-1 cursor-not-allowed; + filter: grayscale(1); + -webkit-transform: translateZ(0); + -webkit-perspective: 1000; + -webkit-backface-visibility: hidden; +} diff --git a/components/ui/Button/Button.tsx b/components/ui/Button/Button.tsx index 20103eae7..b29fb432a 100644 --- a/components/ui/Button/Button.tsx +++ b/components/ui/Button/Button.tsx @@ -1,54 +1,73 @@ -import cn from "classnames"; -import React, { ButtonHTMLAttributes } from "react"; -import s from "./Button.module.css"; +import cn from 'classnames' +import React, { + forwardRef, + ButtonHTMLAttributes, + JSXElementConstructor, + useRef, +} from 'react' +import mergeRefs from 'react-merge-refs' +import s from './Button.module.css' +import { LoadingDots } from '@components/ui' -interface Props extends ButtonHTMLAttributes { - href?: string; - className?: string; - variant?: "filled" | "outlined" | "flat" | "none"; - active?: boolean; - type?: "submit" | "reset" | "button"; +export interface ButtonProps extends ButtonHTMLAttributes { + href?: string + className?: string + variant?: 'flat' | 'slim' | 'ghost' + active?: boolean + type?: 'submit' | 'reset' | 'button' + Component?: string | JSXElementConstructor + width?: string | number + loading?: boolean + disabled?: boolean } -export default class Button extends React.Component { - public render() { - const { - className, - variant = "filled", - children, - disabled = false, - href, - active, - ...rest - } = this.props; +const Button: React.FC = forwardRef((props, buttonRef) => { + const { + className, + variant = 'flat', + children, + active, + width, + loading = false, + disabled = false, + style = {}, + Component = 'button', + ...rest + } = props + const ref = useRef(null) - let Component: React.ComponentType< - React.AnchorHTMLAttributes< - HTMLAnchorElement | HTMLButtonElement | HTMLDivElement - > & - React.ClassAttributes - > = "a" as any; + const rootClassName = cn( + s.root, + { + [s.ghost]: variant === 'ghost', + [s.slim]: variant === 'slim', + [s.loading]: loading, + [s.disabled]: disabled, + }, + className + ) - // Catch for buttons / span / stc. + return ( + + {children} + {loading && ( + + + + )} + + ) +}) - const rootClassName = cn( - s.root, - { - [s.filled]: variant === "filled", - }, - className - ); - - return ( - - {children} - - ); - } -} +export default Button diff --git a/components/ui/Button/index.ts b/components/ui/Button/index.ts index c4719be7c..aa076c58e 100644 --- a/components/ui/Button/index.ts +++ b/components/ui/Button/index.ts @@ -1 +1,2 @@ -export { default } from "./Button"; +export { default } from './Button' +export * from './Button' diff --git a/components/ui/Container/Container.module.css b/components/ui/Container/Container.module.css deleted file mode 100644 index 0db8285ef..000000000 --- a/components/ui/Container/Container.module.css +++ /dev/null @@ -1,5 +0,0 @@ -.root { - @apply mx-auto px-2; - display: inherit; - max-width: 1440px; -} diff --git a/components/ui/Container/Container.tsx b/components/ui/Container/Container.tsx index 9a8a05dd5..7b281a2e4 100644 --- a/components/ui/Container/Container.tsx +++ b/components/ui/Container/Container.tsx @@ -1,25 +1,23 @@ -import cn from "classnames"; -import { FunctionComponent } from "react"; -import s from "./Container.module.css"; +import cn from 'classnames' +import React, { FC } from 'react' interface Props { - className?: string; - children?: any; - el?: HTMLElement; + className?: string + children?: any + el?: HTMLElement + clean?: boolean } -const Container: FunctionComponent = ({ - children, - className, - el = "div", -}) => { - const rootClassName = cn(s.root, className); +const Container: FC = ({ children, className, el = 'div', clean }) => { + const rootClassName = cn(className, { + 'mx-auto max-w-8xl px-6': !clean, + }) - let Component: React.ComponentType> = el as any; + let Component: React.ComponentType< + React.HTMLAttributes + > = el as any - return {children}; -}; + return {children} +} -export default Container; +export default Container diff --git a/components/ui/Container/index.ts b/components/ui/Container/index.ts index c81c92aeb..9dbd596a8 100644 --- a/components/ui/Container/index.ts +++ b/components/ui/Container/index.ts @@ -1 +1 @@ -export { default } from "./Container"; +export { default } from './Container' diff --git a/components/ui/Grid/Grid.module.css b/components/ui/Grid/Grid.module.css new file mode 100644 index 000000000..d3302fc61 --- /dev/null +++ b/components/ui/Grid/Grid.module.css @@ -0,0 +1,149 @@ +.root { + --row-height: calc(100vh - 88px); + @apply grid grid-cols-1 gap-0; + min-height: var(--row-height); + + @screen lg { + @apply grid-cols-3 grid-rows-2; + } + + & > * { + @apply row-span-1 bg-transparent box-border overflow-hidden; + height: 500px; + max-height: 800px; + + @screen lg { + @apply col-span-1; + height: inherit; + } + } +} + +.default { + & > * { + @apply bg-transparent; + } +} + +.layoutNormal { + @apply gap-3; + + & > * { + min-height: 325px; + } +} + +.layoutA { + & > *:nth-child(6n + 1), + & > *:nth-child(6n + 5) { + @apply row-span-2; + height: var(--row-height); + + @screen lg { + @apply col-span-2; + } + } + + &.filled { + & > *:nth-child(6n + 1), + & > *:nth-child(6n + 5) { + @apply bg-violet; + } + + & > *:nth-child(6n + 5) { + @apply bg-blue; + } + + & > *:nth-child(6n + 3) { + @apply bg-pink; + } + + & > *:nth-child(6n + 6) { + @apply bg-cyan; + } + } +} + +.layoutB { + & > *:nth-child(6n + 2), + & > *:nth-child(6n + 4) { + @apply row-span-2; + height: var(--row-height); + + @screen lg { + @apply col-span-2; + } + } + + &.filled { + & > *:nth-child(6n + 2) { + @apply bg-blue; + } + + & > *:nth-child(6n + 4) { + @apply bg-violet; + } + + & > *:nth-child(6n + 3) { + @apply bg-pink; + } + + & > *:nth-child(6n + 6) { + @apply bg-cyan; + } + } +} + +.layoutC { + & > *:nth-child(12n + 1), + & > *:nth-child(12n + 8) { + @apply row-span-2; + height: var(--row-height); + + @screen lg { + @apply col-span-2; + } + } + + &.filled { + & > *:nth-child(12n + 1) { + @apply bg-violet; + height: var(--row-height); + } + + & > *:nth-child(12n + 8) { + @apply bg-cyan; + height: var(--row-height); + } + + & > *:nth-child(6n + 3) { + @apply bg-pink; + } + } +} + +.layoutD { + & > *:nth-child(12n + 2), + & > *:nth-child(12n + 7) { + @apply row-span-2; + height: var(--row-height); + + @screen lg { + @apply col-span-2; + } + } + + &.filled { + & > *:nth-child(12n + 2) { + @apply bg-violet; + } + + & > *:nth-child(12n + 7) { + @apply bg-cyan; + } + + & > *:nth-child(6n + 3) { + @apply bg-pink; + } + } +} diff --git a/components/ui/Grid/Grid.tsx b/components/ui/Grid/Grid.tsx new file mode 100644 index 000000000..8ca247609 --- /dev/null +++ b/components/ui/Grid/Grid.tsx @@ -0,0 +1,34 @@ +import cn from 'classnames' +import { FC, ReactNode, Component } from 'react' +import s from './Grid.module.css' + +interface Props { + className?: string + children?: ReactNode[] | Component[] | any[] + layout?: 'A' | 'B' | 'C' | 'D' | 'normal' + variant?: 'default' | 'filled' +} + +const Grid: FC = ({ + className, + layout = 'A', + children, + variant = 'default', +}) => { + const rootClassName = cn( + s.root, + { + [s.layoutA]: layout === 'A', + [s.layoutB]: layout === 'B', + [s.layoutC]: layout === 'C', + [s.layoutD]: layout === 'D', + [s.layoutNormal]: layout === 'normal', + [s.default]: variant === 'default', + [s.filled]: variant === 'filled', + }, + className + ) + return
    {children}
    +} + +export default Grid diff --git a/components/ui/Grid/index.ts b/components/ui/Grid/index.ts new file mode 100644 index 000000000..ddb51299b --- /dev/null +++ b/components/ui/Grid/index.ts @@ -0,0 +1 @@ +export { default } from './Grid' diff --git a/components/ui/Hero/Hero.module.css b/components/ui/Hero/Hero.module.css new file mode 100644 index 000000000..364ad6580 --- /dev/null +++ b/components/ui/Hero/Hero.module.css @@ -0,0 +1,6 @@ +.root { + @apply mx-auto grid grid-cols-1 py-32 gap-4; + @screen md { + @apply grid-cols-2; + } +} diff --git a/components/ui/Hero/Hero.tsx b/components/ui/Hero/Hero.tsx new file mode 100644 index 000000000..2e1f124ae --- /dev/null +++ b/components/ui/Hero/Hero.tsx @@ -0,0 +1,37 @@ +import React, { FC } from 'react' +import { Container } from '@components/ui' +import { RightArrow } from '@components/icons' +import s from './Hero.module.css' +import Link from 'next/link' +interface Props { + className?: string + headline: string + description: string +} + +const Hero: FC = ({ headline, description }) => { + return ( +
    + +
    +

    + {headline} +

    +
    +

    + {description} +

    + + + Read it here + + + +
    +
    +
    +
    + ) +} + +export default Hero diff --git a/components/ui/Hero/index.ts b/components/ui/Hero/index.ts new file mode 100644 index 000000000..b08fa5ac8 --- /dev/null +++ b/components/ui/Hero/index.ts @@ -0,0 +1 @@ +export { default } from './Hero' diff --git a/components/ui/Input/Input.module.css b/components/ui/Input/Input.module.css new file mode 100644 index 000000000..9daee1418 --- /dev/null +++ b/components/ui/Input/Input.module.css @@ -0,0 +1,7 @@ +.root { + @apply bg-primary py-2 px-6 w-full appearance-none transition duration-150 ease-in-out pr-10 border border-accents-3 text-accents-6; +} + +.root:focus { + @apply outline-none shadow-outline-normal; +} diff --git a/components/ui/Input/Input.tsx b/components/ui/Input/Input.tsx new file mode 100644 index 000000000..dc2f04a8d --- /dev/null +++ b/components/ui/Input/Input.tsx @@ -0,0 +1,37 @@ +import cn from 'classnames' +import s from './Input.module.css' +import React, { InputHTMLAttributes } from 'react' + +export interface Props extends InputHTMLAttributes { + className?: string + onChange?: (...args: any[]) => any +} + +const Input: React.FC = (props) => { + const { className, children, onChange, ...rest } = props + + const rootClassName = cn(s.root, {}, className) + + const handleOnChange = (e: any) => { + if (onChange) { + onChange(e.target.value) + } + return null + } + + return ( + + ) +} + +export default Input diff --git a/components/ui/Input/index.ts b/components/ui/Input/index.ts new file mode 100644 index 000000000..aa97178e5 --- /dev/null +++ b/components/ui/Input/index.ts @@ -0,0 +1 @@ +export { default } from './Input' diff --git a/components/ui/Link/Link.tsx b/components/ui/Link/Link.tsx new file mode 100644 index 000000000..27f30e863 --- /dev/null +++ b/components/ui/Link/Link.tsx @@ -0,0 +1,11 @@ +import NextLink, { LinkProps as NextLinkProps } from 'next/link' + +const Link: React.FC = ({ href, children, ...props }) => { + return ( + + {children} + + ) +} + +export default Link diff --git a/components/ui/Link/index.ts b/components/ui/Link/index.ts new file mode 100644 index 000000000..518d37298 --- /dev/null +++ b/components/ui/Link/index.ts @@ -0,0 +1 @@ +export { default } from './Link' diff --git a/components/ui/LoadingDots/LoadingDots.module.css b/components/ui/LoadingDots/LoadingDots.module.css new file mode 100644 index 000000000..88ce77ec6 --- /dev/null +++ b/components/ui/LoadingDots/LoadingDots.module.css @@ -0,0 +1,32 @@ +.root { + @apply inline-flex text-center items-center leading-7; + + & span { + @apply bg-accents-6 rounded-full h-2 w-2; + animation-name: blink; + animation-duration: 1.4s; + animation-iteration-count: infinite; + animation-fill-mode: both; + margin: 0 2px; + + &:nth-of-type(2) { + animation-delay: 0.2s; + } + + &:nth-of-type(3) { + animation-delay: 0.4s; + } + } +} + +@keyframes blink { + 0% { + opacity: 0.2; + } + 20% { + opacity: 1; + } + 100% { + opacity: 0.2; + } +} diff --git a/components/ui/LoadingDots/LoadingDots.tsx b/components/ui/LoadingDots/LoadingDots.tsx new file mode 100644 index 000000000..10e5bbae1 --- /dev/null +++ b/components/ui/LoadingDots/LoadingDots.tsx @@ -0,0 +1,13 @@ +import s from './LoadingDots.module.css' + +const LoadingDots: React.FC = () => { + return ( + + + + + + ) +} + +export default LoadingDots diff --git a/components/ui/LoadingDots/index.ts b/components/ui/LoadingDots/index.ts new file mode 100644 index 000000000..63df282bf --- /dev/null +++ b/components/ui/LoadingDots/index.ts @@ -0,0 +1 @@ +export { default } from './LoadingDots' diff --git a/components/ui/Logo/Logo.tsx b/components/ui/Logo/Logo.tsx index 96880c05b..f15bde40a 100644 --- a/components/ui/Logo/Logo.tsx +++ b/components/ui/Logo/Logo.tsx @@ -1,40 +1,21 @@ -const Logo = () => ( +const Logo = ({ className = '', ...props }) => ( + - - - - -); +) -export default Logo; +export default Logo diff --git a/components/ui/Logo/index.ts b/components/ui/Logo/index.ts index f252704a4..93dce23b4 100644 --- a/components/ui/Logo/index.ts +++ b/components/ui/Logo/index.ts @@ -1 +1 @@ -export { default } from "./Logo"; +export { default } from './Logo' diff --git a/components/ui/Marquee/Marquee.module.css b/components/ui/Marquee/Marquee.module.css new file mode 100644 index 000000000..1fabc2ca8 --- /dev/null +++ b/components/ui/Marquee/Marquee.module.css @@ -0,0 +1,22 @@ +.root { + @apply w-full relative; + height: 320px; + min-width: 100%; +} + +.container { + @apply flex flex-row items-center; +} + +.container > * { + @apply relative flex-1 px-16 py-4 h-full; + min-height: 320px; +} + +.primary { + @apply bg-white; +} + +.secondary { + @apply bg-black; +} diff --git a/components/ui/Marquee/Marquee.tsx b/components/ui/Marquee/Marquee.tsx new file mode 100644 index 000000000..163f29a34 --- /dev/null +++ b/components/ui/Marquee/Marquee.tsx @@ -0,0 +1,35 @@ +import cn from 'classnames' +import s from './Marquee.module.css' +import { FC, ReactNode, Component } from 'react' +import Ticker from 'react-ticker' + +interface Props { + className?: string + children?: ReactNode[] | Component[] | any[] + variant?: 'primary' | 'secondary' +} + +const Marquee: FC = ({ + className = '', + children, + variant = 'primary', +}) => { + const rootClassName = cn( + s.root, + { + [s.primary]: variant === 'primary', + [s.secondary]: variant === 'secondary', + }, + className + ) + + return ( +
    + + {() =>
    {children}
    } +
    +
    + ) +} + +export default Marquee diff --git a/components/ui/Marquee/index.ts b/components/ui/Marquee/index.ts new file mode 100644 index 000000000..b59b75568 --- /dev/null +++ b/components/ui/Marquee/index.ts @@ -0,0 +1 @@ +export { default } from './Marquee' diff --git a/components/ui/Modal/Modal.module.css b/components/ui/Modal/Modal.module.css new file mode 100644 index 000000000..693bc2d37 --- /dev/null +++ b/components/ui/Modal/Modal.module.css @@ -0,0 +1,12 @@ +.root { + @apply fixed bg-primary text-primary flex items-center inset-0 z-50 justify-center; + background-color: rgba(0, 0, 0, 0.35); +} + +.modal { + @apply bg-primary p-12 border border-accents-2 relative; +} + +.modal:focus { + @apply outline-none; +} diff --git a/components/ui/Modal/Modal.tsx b/components/ui/Modal/Modal.tsx new file mode 100644 index 000000000..300a99192 --- /dev/null +++ b/components/ui/Modal/Modal.tsx @@ -0,0 +1,66 @@ +import { FC, useRef, useEffect, useCallback } from 'react' +import Portal from '@reach/portal' +import s from './Modal.module.css' +import { Cross } from '@components/icons' +import { + disableBodyScroll, + enableBodyScroll, + clearAllBodyScrollLocks, +} from 'body-scroll-lock' +import FocusTrap from '@lib/focus-trap' +interface Props { + className?: string + children?: any + open?: boolean + onClose: () => void + onEnter?: () => void | null +} + +const Modal: FC = ({ children, open, onClose, onEnter = null }) => { + const ref = useRef() as React.MutableRefObject + + const handleKey = useCallback( + (e: KeyboardEvent) => { + if (e.key === 'Escape') { + return onClose() + } + }, + [onClose] + ) + + useEffect(() => { + if (ref.current) { + if (open) { + disableBodyScroll(ref.current) + window.addEventListener('keydown', handleKey) + } else { + enableBodyScroll(ref.current) + } + } + return () => { + window.removeEventListener('keydown', handleKey) + clearAllBodyScrollLocks() + } + }, [open, handleKey]) + + return ( + + {open ? ( +
    +
    + + {children} +
    +
    + ) : null} +
    + ) +} + +export default Modal diff --git a/components/ui/Modal/index.ts b/components/ui/Modal/index.ts new file mode 100644 index 000000000..e24753a1e --- /dev/null +++ b/components/ui/Modal/index.ts @@ -0,0 +1 @@ +export { default } from './Modal' diff --git a/components/ui/README.md b/components/ui/README.md index 87ff485d5..5bf4fe510 100644 --- a/components/ui/README.md +++ b/components/ui/README.md @@ -1,3 +1,3 @@ # UI -Building blocks to build a rich graphical interfaces. Components should be atomic and pure. Serve one purpuse. +Building blocks to build a rich graphical interfaces. Components should be atomic and pure. Serve one purpose. diff --git a/components/ui/Sidebar/Sidebar.module.css b/components/ui/Sidebar/Sidebar.module.css new file mode 100644 index 000000000..b9ba054e2 --- /dev/null +++ b/components/ui/Sidebar/Sidebar.module.css @@ -0,0 +1,3 @@ +.root { + @apply fixed inset-0 overflow-hidden h-full z-50; +} diff --git a/components/ui/Sidebar/Sidebar.tsx b/components/ui/Sidebar/Sidebar.tsx new file mode 100644 index 000000000..d1cd3ef20 --- /dev/null +++ b/components/ui/Sidebar/Sidebar.tsx @@ -0,0 +1,55 @@ +import s from './Sidebar.module.css' +import Portal from '@reach/portal' +import { FC, useEffect, useRef } from 'react' +import { + disableBodyScroll, + enableBodyScroll, + clearAllBodyScrollLocks, +} from 'body-scroll-lock' + +interface Props { + children: any + open: boolean + onClose: () => void +} + +const Sidebar: FC = ({ children, open = false, onClose }) => { + const ref = useRef() as React.MutableRefObject + + useEffect(() => { + if (ref.current) { + if (open) { + disableBodyScroll(ref.current) + } else { + enableBodyScroll(ref.current) + } + } + return () => { + clearAllBodyScrollLocks() + } + }, [open]) + + return ( + + {open ? ( +
    +
    +
    +
    +
    +
    + {children} +
    +
    +
    +
    +
    + ) : null} + + ) +} + +export default Sidebar diff --git a/components/ui/Sidebar/index.ts b/components/ui/Sidebar/index.ts new file mode 100644 index 000000000..877187ca3 --- /dev/null +++ b/components/ui/Sidebar/index.ts @@ -0,0 +1 @@ +export { default } from './Sidebar' diff --git a/components/ui/Skeleton/Skeleton.module.css b/components/ui/Skeleton/Skeleton.module.css new file mode 100644 index 000000000..5a852562b --- /dev/null +++ b/components/ui/Skeleton/Skeleton.module.css @@ -0,0 +1,48 @@ +.skeleton { + @apply block; + background-image: linear-gradient( + 270deg, + var(--accents-1), + var(--accents-2), + var(--accents-2), + var(--accents-1) + ); + background-size: 400% 100%; + animation: loading 8s ease-in-out infinite; +} + +.wrapper { + @apply block relative; + + &:not(.show)::before { + content: none; + } + + &::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 100; + background-image: linear-gradient( + 270deg, + var(--accents-1), + var(--accents-2), + var(--accents-2), + var(--accents-1) + ); + background-size: 400% 100%; + animation: loading 8s ease-in-out infinite; + } +} + +@keyframes loading { + 0% { + background-position: 200% 0; + } + 100% { + background-position: -200% 0; + } +} diff --git a/components/ui/Skeleton/Skeleton.tsx b/components/ui/Skeleton/Skeleton.tsx new file mode 100644 index 000000000..153024f18 --- /dev/null +++ b/components/ui/Skeleton/Skeleton.tsx @@ -0,0 +1,57 @@ +import React, { CSSProperties } from 'react' +import cn from 'classnames' +import px from '@lib/to-pixels' +import s from './Skeleton.module.css' + +interface Props { + width?: string | number + height?: string | number + boxHeight?: string | number + style?: CSSProperties + show?: boolean + block?: boolean + className?: string +} + +const Skeleton: React.FC = ({ + style, + width, + height, + children, + className, + show = true, + boxHeight = height, +}) => { + // Automatically calculate the size if there are children + // and no fixed sizes are specified + const shouldAutoSize = !!children && !(width || height) + + // Defaults + width = width || 24 + height = height || 24 + boxHeight = boxHeight || height + + return ( + + {children} + + ) +} + +export default Skeleton diff --git a/components/ui/Skeleton/index.ts b/components/ui/Skeleton/index.ts new file mode 100644 index 000000000..3ec6c0031 --- /dev/null +++ b/components/ui/Skeleton/index.ts @@ -0,0 +1 @@ +export { default } from './Skeleton' diff --git a/components/ui/Text/Text.module.css b/components/ui/Text/Text.module.css new file mode 100644 index 000000000..d8aa4da5a --- /dev/null +++ b/components/ui/Text/Text.module.css @@ -0,0 +1,15 @@ +.body { + @apply text-base leading-7 max-w-6xl mx-auto; +} + +.heading { + @apply text-5xl mb-12; +} + +.pageHeading { + @apply pt-1 pb-4 text-2xl leading-7 font-bold tracking-wide; +} + +.sectionHeading { + @apply pt-1 pb-2 font-semibold leading-7 tracking-wider uppercase border-b border-accents-2 mb-3; +} diff --git a/components/ui/Text/Text.tsx b/components/ui/Text/Text.tsx new file mode 100644 index 000000000..51e1cce15 --- /dev/null +++ b/components/ui/Text/Text.tsx @@ -0,0 +1,67 @@ +import React, { + FunctionComponent, + JSXElementConstructor, + CSSProperties, +} from 'react' +import cn from 'classnames' +import s from './Text.module.css' + +interface Props { + variant?: Variant + className?: string + style?: CSSProperties + children?: React.ReactNode | any + html?: string +} + +type Variant = 'heading' | 'body' | 'pageHeading' | 'sectionHeading' + +const Text: FunctionComponent = ({ + style, + className = '', + variant = 'body', + children, + html, +}) => { + const componentsMap: { + [P in Variant]: React.ComponentType | string + } = { + body: 'div', + heading: 'h1', + pageHeading: 'h1', + sectionHeading: 'h2', + } + + const Component: + | JSXElementConstructor + | React.ReactElement + | React.ComponentType + | string = componentsMap![variant!] + + const htmlContentProps = html + ? { + dangerouslySetInnerHTML: { __html: html }, + } + : {} + + return ( + + {children} + + ) +} + +export default Text diff --git a/components/ui/Text/index.ts b/components/ui/Text/index.ts new file mode 100644 index 000000000..e1e5fa74e --- /dev/null +++ b/components/ui/Text/index.ts @@ -0,0 +1 @@ +export { default } from './Text' diff --git a/components/ui/_BLANK/Featurebar.tsx b/components/ui/_BLANK/Featurebar.tsx deleted file mode 100644 index 3f1f9cd27..000000000 --- a/components/ui/_BLANK/Featurebar.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import cn from "classnames"; -import { FunctionComponent } from "react"; -import s from "./Featurebar.module.css"; - -interface Props { - className?: string; - children?: any; -} - -const Featurebar: FunctionComponent = ({ children, className }) => { - const rootClassName = cn(s.root, className); - return
    {children}
    ; -}; - -export default Featurebar; diff --git a/components/ui/_BLANK/index.ts b/components/ui/_BLANK/index.ts deleted file mode 100644 index 158415285..000000000 --- a/components/ui/_BLANK/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from "./Featurebar"; diff --git a/components/ui/context.tsx b/components/ui/context.tsx new file mode 100644 index 000000000..fae14deef --- /dev/null +++ b/components/ui/context.tsx @@ -0,0 +1,226 @@ +import React, { FC, useMemo } from 'react' +import { ThemeProvider } from 'next-themes' + +export interface State { + displaySidebar: boolean + displayDropdown: boolean + displayModal: boolean + displayToast: boolean + modalView: string + sidebarView: string + toastText: string + userAvatar: string +} + +const initialState = { + displaySidebar: false, + displayDropdown: false, + displayModal: false, + modalView: 'LOGIN_VIEW', + sidebarView: 'CART_VIEW', + displayToast: false, + toastText: '', + userAvatar: '', +} + +type Action = + | { + type: 'OPEN_SIDEBAR' + } + | { + type: 'CLOSE_SIDEBAR' + } + | { + type: 'OPEN_TOAST' + } + | { + type: 'CLOSE_TOAST' + } + | { + type: 'SET_TOAST_TEXT' + text: ToastText + } + | { + type: 'OPEN_DROPDOWN' + } + | { + type: 'CLOSE_DROPDOWN' + } + | { + type: 'OPEN_MODAL' + } + | { + type: 'CLOSE_MODAL' + } + | { + type: 'SET_MODAL_VIEW' + view: MODAL_VIEWS + } + | { + type: 'SET_SIDEBAR_VIEW' + view: SIDEBAR_VIEWS + } + | { + type: 'SET_USER_AVATAR' + value: string + } + +type MODAL_VIEWS = + | 'SIGNUP_VIEW' + | 'LOGIN_VIEW' + | 'FORGOT_VIEW' + | 'NEW_SHIPPING_ADDRESS' + | 'NEW_PAYMENT_METHOD' + +type SIDEBAR_VIEWS = 'CART_VIEW' | 'CHECKOUT_VIEW' | 'PAYMENT_METHOD_VIEW' + +type ToastText = string + +export const UIContext = React.createContext(initialState) + +UIContext.displayName = 'UIContext' + +function uiReducer(state: State, action: Action) { + switch (action.type) { + case 'OPEN_SIDEBAR': { + return { + ...state, + displaySidebar: true, + } + } + case 'CLOSE_SIDEBAR': { + return { + ...state, + displaySidebar: false, + } + } + case 'OPEN_DROPDOWN': { + return { + ...state, + displayDropdown: true, + } + } + case 'CLOSE_DROPDOWN': { + return { + ...state, + displayDropdown: false, + } + } + case 'OPEN_MODAL': { + return { + ...state, + displayModal: true, + displaySidebar: false, + } + } + case 'CLOSE_MODAL': { + return { + ...state, + displayModal: false, + } + } + case 'OPEN_TOAST': { + return { + ...state, + displayToast: true, + } + } + case 'CLOSE_TOAST': { + return { + ...state, + displayToast: false, + } + } + case 'SET_MODAL_VIEW': { + return { + ...state, + modalView: action.view, + } + } + case 'SET_SIDEBAR_VIEW': { + return { + ...state, + sidebarView: action.view, + } + } + case 'SET_TOAST_TEXT': { + return { + ...state, + toastText: action.text, + } + } + case 'SET_USER_AVATAR': { + return { + ...state, + userAvatar: action.value, + } + } + } +} + +export const UIProvider: FC = (props) => { + const [state, dispatch] = React.useReducer(uiReducer, initialState) + + const openSidebar = () => dispatch({ type: 'OPEN_SIDEBAR' }) + const closeSidebar = () => dispatch({ type: 'CLOSE_SIDEBAR' }) + const toggleSidebar = () => + state.displaySidebar + ? dispatch({ type: 'CLOSE_SIDEBAR' }) + : dispatch({ type: 'OPEN_SIDEBAR' }) + const closeSidebarIfPresent = () => + state.displaySidebar && dispatch({ type: 'CLOSE_SIDEBAR' }) + + const openDropdown = () => dispatch({ type: 'OPEN_DROPDOWN' }) + const closeDropdown = () => dispatch({ type: 'CLOSE_DROPDOWN' }) + + const openModal = () => dispatch({ type: 'OPEN_MODAL' }) + const closeModal = () => dispatch({ type: 'CLOSE_MODAL' }) + + const openToast = () => dispatch({ type: 'OPEN_TOAST' }) + const closeToast = () => dispatch({ type: 'CLOSE_TOAST' }) + + const setUserAvatar = (value: string) => + dispatch({ type: 'SET_USER_AVATAR', value }) + + const setModalView = (view: MODAL_VIEWS) => + dispatch({ type: 'SET_MODAL_VIEW', view }) + + const setSidebarView = (view: SIDEBAR_VIEWS) => + dispatch({ type: 'SET_SIDEBAR_VIEW', view }) + + const value = useMemo( + () => ({ + ...state, + openSidebar, + closeSidebar, + toggleSidebar, + closeSidebarIfPresent, + openDropdown, + closeDropdown, + openModal, + closeModal, + setModalView, + setSidebarView, + openToast, + closeToast, + setUserAvatar, + }), + [state] + ) + + return +} + +export const useUI = () => { + const context = React.useContext(UIContext) + if (context === undefined) { + throw new Error(`useUI must be used within a UIProvider`) + } + return context +} + +export const ManagedUIContext: FC = ({ children }) => ( + + {children} + +) diff --git a/components/ui/index.ts b/components/ui/index.ts index e643270a1..f2a293200 100644 --- a/components/ui/index.ts +++ b/components/ui/index.ts @@ -1,4 +1,13 @@ -export { default as Button } from "./Button"; -export { default as Container } from "./Container"; - -export { default as Logo } from "./Logo"; +export { default as Hero } from './Hero' +export { default as Logo } from './Logo' +export { default as Grid } from './Grid' +export { default as Button } from './Button' +export { default as Sidebar } from './Sidebar' +export { default as Marquee } from './Marquee' +export { default as Container } from './Container' +export { default as LoadingDots } from './LoadingDots' +export { default as Skeleton } from './Skeleton' +export { default as Modal } from './Modal' +export { default as Text } from './Text' +export { default as Input } from './Input' +export { useUI } from './context' diff --git a/components/wishlist/WishlistButton/WishlistButton.tsx b/components/wishlist/WishlistButton/WishlistButton.tsx new file mode 100644 index 000000000..6dc59b900 --- /dev/null +++ b/components/wishlist/WishlistButton/WishlistButton.tsx @@ -0,0 +1,78 @@ +import React, { FC, useState } from 'react' +import cn from 'classnames' +import { useUI } from '@components/ui' +import { Heart } from '@components/icons' +import useAddItem from '@framework/wishlist/use-add-item' +import useCustomer from '@framework/customer/use-customer' +import useWishlist from '@framework/wishlist/use-wishlist' +import useRemoveItem from '@framework/wishlist/use-remove-item' +import type { Product, ProductVariant } from '@commerce/types' + +type Props = { + productId: Product['id'] + variant: ProductVariant +} & React.ButtonHTMLAttributes + +const WishlistButton: FC = ({ + productId, + variant, + className, + ...props +}) => { + const { data } = useWishlist() + const addItem = useAddItem() + const removeItem = useRemoveItem() + const { data: customer } = useCustomer() + const { openModal, setModalView } = useUI() + const [loading, setLoading] = useState(false) + + // @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 as any) === Number(variant.id) + ) + + const handleWishlistChange = async (e: any) => { + e.preventDefault() + + if (loading) return + + // A login is required before adding an item to the wishlist + if (!customer) { + setModalView('LOGIN_VIEW') + return openModal() + } + + setLoading(true) + + try { + if (itemInWishlist) { + await removeItem({ id: itemInWishlist.id! }) + } else { + await addItem({ + productId, + variantId: variant?.id!, + }) + } + + setLoading(false) + } catch (err) { + setLoading(false) + } + } + + return ( + + ) +} + +export default WishlistButton diff --git a/components/wishlist/WishlistButton/index.ts b/components/wishlist/WishlistButton/index.ts new file mode 100644 index 000000000..66e88074b --- /dev/null +++ b/components/wishlist/WishlistButton/index.ts @@ -0,0 +1 @@ +export { default } from './WishlistButton' diff --git a/components/wishlist/WishlistCard/WishlistCard.module.css b/components/wishlist/WishlistCard/WishlistCard.module.css new file mode 100644 index 000000000..879184dac --- /dev/null +++ b/components/wishlist/WishlistCard/WishlistCard.module.css @@ -0,0 +1,21 @@ +.root { + @apply grid grid-cols-12 w-full gap-6 px-3 py-6 border-b border-accents-2 transition duration-100 ease-in-out; + + &:nth-child(3n + 1) { + & .productBg { + @apply bg-violet; + } + } + + &:nth-child(3n + 2) { + & .productBg { + @apply bg-pink; + } + } + + &:nth-child(3n + 3) { + & .productBg { + @apply bg-blue; + } + } +} diff --git a/components/wishlist/WishlistCard/WishlistCard.tsx b/components/wishlist/WishlistCard/WishlistCard.tsx new file mode 100644 index 000000000..1568d9e7e --- /dev/null +++ b/components/wishlist/WishlistCard/WishlistCard.tsx @@ -0,0 +1,101 @@ +import { FC, useState } from 'react' +import cn from 'classnames' +import Link from 'next/link' +import Image from 'next/image' +import s from './WishlistCard.module.css' +import { Trash } from '@components/icons' +import { Button, Text } from '@components/ui' + +import { useUI } from '@components/ui/context' +import type { Product } from '@commerce/types' +import usePrice from '@framework/product/use-price' +import useAddItem from '@framework/cart/use-add-item' +import useRemoveItem from '@framework/wishlist/use-remove-item' + +interface Props { + product: Product +} + +const WishlistCard: FC = ({ product }) => { + const { price } = usePrice({ + amount: product.prices?.price?.value, + baseAmount: product.prices?.retailPrice?.value, + currencyCode: product.prices?.price?.currencyCode!, + }) + // @ts-ignore Wishlist is not always enabled + const removeItem = useRemoveItem({ wishlist: { includeProducts: true } }) + const [loading, setLoading] = useState(false) + const [removing, setRemoving] = useState(false) + const addItem = useAddItem() + const { openSidebar } = useUI() + + const handleRemove = async () => { + setRemoving(true) + + try { + // If this action succeeds then there's no need to do `setRemoving(true)` + // because the component will be removed from the view + await removeItem({ id: product.id! }) + } catch (error) { + setRemoving(false) + } + } + const addToCart = async () => { + setLoading(true) + try { + await addItem({ + productId: String(product.id), + variantId: String(product.variants[0].id), + }) + openSidebar() + setLoading(false) + } catch (err) { + setLoading(false) + } + } + + return ( +
    +
    + {product.images[0].alt +
    + +
    +

    + + {product.name} + +

    +
    + +
    + +
    +
    +
    {price}
    +
    + +
    +
    +
    + ) +} + +export default WishlistCard diff --git a/components/wishlist/WishlistCard/index.ts b/components/wishlist/WishlistCard/index.ts new file mode 100644 index 000000000..ef572805f --- /dev/null +++ b/components/wishlist/WishlistCard/index.ts @@ -0,0 +1 @@ +export { default } from './WishlistCard' diff --git a/components/wishlist/index.ts b/components/wishlist/index.ts new file mode 100644 index 000000000..8aee9f816 --- /dev/null +++ b/components/wishlist/index.ts @@ -0,0 +1,2 @@ +export { default as WishlistCard } from './WishlistCard' +export { default as WishlistButton } from './WishlistButton' diff --git a/config/seo.json b/config/seo.json new file mode 100644 index 000000000..82520cf9b --- /dev/null +++ b/config/seo.json @@ -0,0 +1,26 @@ +{ + "title": "ACME Storefront | Powered by Next.js Commerce", + "titleTemplate": "%s - ACME Storefront", + "description": "Next.js Commerce - https://www.nextjs.org/commerce", + "openGraph": { + "title": "ACME Storefront | Powered by Next.js Commerce", + "description": "Next.js Commerce - https://www.nextjs.org/commerce", + "type": "website", + "locale": "en_IE", + "url": "https://nextjs.org/commerce", + "site_name": "Next.js Commerce", + "images": [ + { + "url": "/card.png", + "width": 800, + "height": 600, + "alt": "Next.js Commerce" + } + ] + }, + "twitter": { + "handle": "@nextjs", + "site": "@nextjs", + "cardType": "summary_large_image" + } +} diff --git a/framework/bigcommerce/.env.template b/framework/bigcommerce/.env.template new file mode 100644 index 000000000..2b91bc095 --- /dev/null +++ b/framework/bigcommerce/.env.template @@ -0,0 +1,8 @@ +COMMERCE_PROVIDER=bigcommerce + +BIGCOMMERCE_STOREFRONT_API_URL= +BIGCOMMERCE_STOREFRONT_API_TOKEN= +BIGCOMMERCE_STORE_API_URL= +BIGCOMMERCE_STORE_API_TOKEN= +BIGCOMMERCE_STORE_API_CLIENT_ID= +BIGCOMMERCE_CHANNEL_ID= diff --git a/framework/bigcommerce/README.md b/framework/bigcommerce/README.md new file mode 100644 index 000000000..7f62a5f3f --- /dev/null +++ b/framework/bigcommerce/README.md @@ -0,0 +1,59 @@ +# Bigcommerce Provider + +**Demo:** https://bigcommerce.demo.vercel.store/ + +With the deploy button below you'll be able to have a [BigCommerce](https://www.bigcommerce.com/) account and a store that works with this starter: + +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/git/external?repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fcommerce&project-name=commerce&repo-name=commerce&demo-title=Next.js%20Commerce&demo-description=An%20all-in-one%20starter%20kit%20for%20high-performance%20e-commerce%20sites.&demo-url=https%3A%2F%2Fdemo.vercel.store&demo-image=https%3A%2F%2Fbigcommerce-demo-asset-ksvtgfvnd.vercel.app%2Fbigcommerce.png&integration-ids=oac_MuWZiE4jtmQ2ejZQaQ7ncuDT) + +If you already have a BigCommerce account and want to use your current store, then copy the `.env.template` file in this directory to `.env.local` in the main directory (which will be ignored by Git): + +```bash +cp framework/bigcommerce/.env.template .env.local +``` + +Then, set the environment variables in `.env.local` to match the ones from your store. + +## Contribute + +Our commitment to Open Source can be found [here](https://vercel.com/oss). + +If you find an issue with the provider or want a new feature, feel free to open a PR or [create a new issue](https://github.com/vercel/commerce/issues). + +## Troubleshoot + +
    +I already own a BigCommerce store. What should I do? +
    +First thing you do is: set your environment variables +
    +
    +.env.local + +```sh +BIGCOMMERCE_STOREFRONT_API_URL=<> +BIGCOMMERCE_STOREFRONT_API_TOKEN=<> +BIGCOMMERCE_STORE_API_URL=<> +BIGCOMMERCE_STORE_API_TOKEN=<> +BIGCOMMERCE_STORE_API_CLIENT_ID=<> +BIGCOMMERCE_CHANNEL_ID=<> +``` + +If your project was started with a "Deploy with Vercel" button, you can use Vercel's CLI to retrieve these credentials. + +1. Install Vercel CLI: `npm i -g vercel` +2. Link local instance with Vercel and Github accounts (creates .vercel file): `vercel link` +3. Download your environment variables: `vercel env pull .env.local` + +Next, you're free to customize the starter. More updates coming soon. Stay tuned. + +
    + +
    +BigCommerce shows a Coming Soon page and requests a Preview Code +
    +After Email confirmation, Checkout should be manually enabled through BigCommerce platform. Look for "Review & test your store" section through BigCommerce's dashboard. +
    +
    +BigCommerce team has been notified and they plan to add more detailed about this subject. +
    diff --git a/framework/bigcommerce/api/cart/handlers/add-item.ts b/framework/bigcommerce/api/cart/handlers/add-item.ts new file mode 100644 index 000000000..c47e72cdb --- /dev/null +++ b/framework/bigcommerce/api/cart/handlers/add-item.ts @@ -0,0 +1,45 @@ +import { parseCartItem } from '../../utils/parse-item' +import getCartCookie from '../../utils/get-cart-cookie' +import type { CartHandlers } from '..' + +const addItem: CartHandlers['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({ + line_items: [parseCartItem(item)], + ...(!cartId && config.storeChannelId + ? { channel_id: config.storeChannelId } + : {}), + }), + } + const { data } = cartId + ? await config.storeApiFetch( + `/v3/carts/${cartId}/items?include=line_items.physical_items.options`, + options + ) + : await config.storeApiFetch( + '/v3/carts?include=line_items.physical_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 }) +} + +export default addItem diff --git a/framework/bigcommerce/api/cart/handlers/get-cart.ts b/framework/bigcommerce/api/cart/handlers/get-cart.ts new file mode 100644 index 000000000..890ac9997 --- /dev/null +++ b/framework/bigcommerce/api/cart/handlers/get-cart.ts @@ -0,0 +1,32 @@ +import type { BigcommerceCart } from '../../../types' +import { BigcommerceApiError } from '../../utils/errors' +import getCartCookie from '../../utils/get-cart-cookie' +import type { CartHandlers } from '../' + +// Return current cart info +const getCart: CartHandlers['getCart'] = async ({ + res, + body: { cartId }, + config, +}) => { + let result: { data?: BigcommerceCart } = {} + + if (cartId) { + try { + result = await config.storeApiFetch( + `/v3/carts/${cartId}?include=line_items.physical_items.options` + ) + } 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)) + } else { + throw error + } + } + } + + res.status(200).json({ data: result.data ?? null }) +} + +export default getCart diff --git a/framework/bigcommerce/api/cart/handlers/remove-item.ts b/framework/bigcommerce/api/cart/handlers/remove-item.ts new file mode 100644 index 000000000..c09848948 --- /dev/null +++ b/framework/bigcommerce/api/cart/handlers/remove-item.ts @@ -0,0 +1,33 @@ +import getCartCookie from '../../utils/get-cart-cookie' +import type { CartHandlers } from '..' + +const removeItem: CartHandlers['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 }) +} + +export default removeItem diff --git a/framework/bigcommerce/api/cart/handlers/update-item.ts b/framework/bigcommerce/api/cart/handlers/update-item.ts new file mode 100644 index 000000000..27b74ca20 --- /dev/null +++ b/framework/bigcommerce/api/cart/handlers/update-item.ts @@ -0,0 +1,35 @@ +import { parseCartItem } from '../../utils/parse-item' +import getCartCookie from '../../utils/get-cart-cookie' +import type { CartHandlers } from '..' + +const updateItem: CartHandlers['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( + `/v3/carts/${cartId}/items/${itemId}?include=line_items.physical_items.options`, + { + method: 'PUT', + body: JSON.stringify({ + line_item: parseCartItem(item), + }), + } + ) + + // Update the cart cookie + res.setHeader( + 'Set-Cookie', + getCartCookie(config.cartCookie, cartId, config.cartCookieMaxAge) + ) + res.status(200).json({ data }) +} + +export default updateItem diff --git a/framework/bigcommerce/api/cart/index.ts b/framework/bigcommerce/api/cart/index.ts new file mode 100644 index 000000000..4ee668895 --- /dev/null +++ b/framework/bigcommerce/api/cart/index.ts @@ -0,0 +1,78 @@ +import isAllowedMethod from '../utils/is-allowed-method' +import createApiHandler, { + BigcommerceApiHandler, + BigcommerceHandler, +} from '../utils/create-api-handler' +import { BigcommerceApiError } from '../utils/errors' +import getCart from './handlers/get-cart' +import addItem from './handlers/add-item' +import updateItem from './handlers/update-item' +import removeItem from './handlers/remove-item' +import type { + BigcommerceCart, + GetCartHandlerBody, + AddCartItemHandlerBody, + UpdateCartItemHandlerBody, + RemoveCartItemHandlerBody, +} from '../../types' + +export type CartHandlers = { + getCart: BigcommerceHandler + addItem: BigcommerceHandler + updateItem: BigcommerceHandler + removeItem: BigcommerceHandler +} + +const METHODS = ['GET', 'POST', 'PUT', 'DELETE'] + +// TODO: a complete implementation should have schema validation for `req.body` +const cartApi: BigcommerceApiHandler = async ( + req, + res, + config, + handlers +) => { + if (!isAllowedMethod(req, res, METHODS)) return + + const { cookies } = req + const cartId = cookies[config.cartCookie] + + try { + // Return current cart info + if (req.method === 'GET') { + const body = { cartId } + return await handlers['getCart']({ req, res, config, body }) + } + + // Create or add an item to the cart + if (req.method === 'POST') { + const body = { ...req.body, cartId } + return await handlers['addItem']({ req, res, config, body }) + } + + // Update item in cart + if (req.method === 'PUT') { + const body = { ...req.body, cartId } + return await handlers['updateItem']({ req, res, config, body }) + } + + // Remove an item from the cart + if (req.method === 'DELETE') { + const body = { ...req.body, cartId } + return await handlers['removeItem']({ req, res, config, body }) + } + } catch (error) { + console.error(error) + + const message = + error instanceof BigcommerceApiError + ? 'An unexpected error ocurred with the Bigcommerce API' + : 'An unexpected error ocurred' + + res.status(500).json({ data: null, errors: [{ message }] }) + } +} + +export const handlers = { getCart, addItem, updateItem, removeItem } + +export default createApiHandler(cartApi, handlers, {}) diff --git a/framework/bigcommerce/api/catalog/handlers/get-products.ts b/framework/bigcommerce/api/catalog/handlers/get-products.ts new file mode 100644 index 000000000..bedd773b0 --- /dev/null +++ b/framework/bigcommerce/api/catalog/handlers/get-products.ts @@ -0,0 +1,79 @@ +import { Product } from '@commerce/types' +import getAllProducts, { ProductEdge } from '../../../product/get-all-products' +import type { ProductsHandlers } from '../products' + +const SORT: { [key: string]: string | undefined } = { + latest: 'id', + trending: 'total_sold', + price: 'price', +} + +const LIMIT = 12 + +// Return current cart info +const getProducts: ProductsHandlers['getProducts'] = async ({ + res, + body: { search, category, brand, sort }, + config, +}) => { + // Use a dummy base as we only care about the relative path + const url = new URL('/v3/catalog/products', 'http://a') + + url.searchParams.set('is_visible', 'true') + url.searchParams.set('limit', String(LIMIT)) + + if (search) url.searchParams.set('keyword', search) + + if (category && Number.isInteger(Number(category))) + url.searchParams.set('categories:in', category) + + if (brand && Number.isInteger(Number(brand))) + url.searchParams.set('brand_id', brand) + + if (sort) { + const [_sort, direction] = sort.split('-') + const sortValue = SORT[_sort] + + if (sortValue && direction) { + url.searchParams.set('sort', sortValue) + url.searchParams.set('direction', direction) + } + } + + // We only want the id of each product + url.searchParams.set('include_fields', 'id') + + const { data } = await config.storeApiFetch<{ data: { id: number }[] }>( + url.pathname + url.search + ) + + const entityIds = data.map((p) => p.id) + const found = entityIds.length > 0 + + // We want the GraphQL version of each product + const graphqlData = await getAllProducts({ + variables: { first: LIMIT, entityIds }, + config, + }) + + // Put the products in an object that we can use to get them by id + const productsById = graphqlData.products.reduce<{ + [k: number]: Product + }>((prods, p) => { + prods[Number(p.id)] = p + return prods + }, {}) + + const products: Product[] = found ? [] : graphqlData.products + + // Populate the products array with the graphql products, in the order + // assigned by the list of entity ids + entityIds.forEach((id) => { + const product = productsById[id] + if (product) products.push(product) + }) + + res.status(200).json({ data: { products, found } }) +} + +export default getProducts diff --git a/framework/bigcommerce/api/catalog/products.ts b/framework/bigcommerce/api/catalog/products.ts new file mode 100644 index 000000000..d52b2de7e --- /dev/null +++ b/framework/bigcommerce/api/catalog/products.ts @@ -0,0 +1,48 @@ +import type { Product } from '@commerce/types' +import isAllowedMethod from '../utils/is-allowed-method' +import createApiHandler, { + BigcommerceApiHandler, + BigcommerceHandler, +} from '../utils/create-api-handler' +import { BigcommerceApiError } from '../utils/errors' +import getProducts from './handlers/get-products' + +export type SearchProductsData = { + products: Product[] + found: boolean +} + +export type ProductsHandlers = { + getProducts: BigcommerceHandler< + SearchProductsData, + { search?: string; category?: string; brand?: string; sort?: string } + > +} + +const METHODS = ['GET'] + +// TODO(lf): a complete implementation should have schema validation for `req.body` +const productsApi: BigcommerceApiHandler< + SearchProductsData, + ProductsHandlers +> = async (req, res, config, handlers) => { + if (!isAllowedMethod(req, res, METHODS)) return + + try { + const body = req.query + return await handlers['getProducts']({ req, res, config, body }) + } catch (error) { + console.error(error) + + const message = + error instanceof BigcommerceApiError + ? 'An unexpected error ocurred with the Bigcommerce API' + : 'An unexpected error ocurred' + + res.status(500).json({ data: null, errors: [{ message }] }) + } +} + +export const handlers = { getProducts } + +export default createApiHandler(productsApi, handlers, {}) diff --git a/framework/bigcommerce/api/checkout.ts b/framework/bigcommerce/api/checkout.ts new file mode 100644 index 000000000..530f4c40a --- /dev/null +++ b/framework/bigcommerce/api/checkout.ts @@ -0,0 +1,77 @@ +import isAllowedMethod from './utils/is-allowed-method' +import createApiHandler, { + BigcommerceApiHandler, +} from './utils/create-api-handler' +import { BigcommerceApiError } from './utils/errors' + +const METHODS = ['GET'] +const fullCheckout = true + +// TODO: a complete implementation should have schema validation for `req.body` +const checkoutApi: BigcommerceApiHandler = async (req, res, config) => { + if (!isAllowedMethod(req, res, METHODS)) return + + const { cookies } = req + const cartId = cookies[config.cartCookie] + + try { + if (!cartId) { + res.redirect('/cart') + return + } + + const { data } = await config.storeApiFetch( + `/v3/carts/${cartId}/redirect_urls`, + { + method: 'POST', + } + ) + + if (fullCheckout) { + res.redirect(data.checkout_url) + return + } + + // TODO: make the embedded checkout work too! + const html = ` + + + + + + Checkout + + + + +
    + + + ` + + res.status(200) + res.setHeader('Content-Type', 'text/html') + res.write(html) + res.end() + } catch (error) { + console.error(error) + + const message = + error instanceof BigcommerceApiError + ? 'An unexpected error ocurred with the Bigcommerce API' + : 'An unexpected error ocurred' + + res.status(500).json({ data: null, errors: [{ message }] }) + } +} + +export default createApiHandler(checkoutApi, {}, {}) diff --git a/framework/bigcommerce/api/customers/handlers/get-logged-in-customer.ts b/framework/bigcommerce/api/customers/handlers/get-logged-in-customer.ts new file mode 100644 index 000000000..698235dda --- /dev/null +++ b/framework/bigcommerce/api/customers/handlers/get-logged-in-customer.ts @@ -0,0 +1,59 @@ +import type { GetLoggedInCustomerQuery } from '../../../schema' +import type { CustomersHandlers } from '..' + +export const getLoggedInCustomerQuery = /* GraphQL */ ` + query getLoggedInCustomer { + customer { + entityId + firstName + lastName + email + company + customerGroupId + notes + phone + addressCount + attributeCount + storeCredit { + value + currencyCode + } + } + } +` + +export type Customer = NonNullable + +const getLoggedInCustomer: CustomersHandlers['getLoggedInCustomer'] = async ({ + req, + res, + config, +}) => { + const token = req.cookies[config.customerCookie] + + if (token) { + const { data } = await config.fetch( + getLoggedInCustomerQuery, + undefined, + { + headers: { + cookie: `${config.customerCookie}=${token}`, + }, + } + ) + const { customer } = data + + if (!customer) { + return res.status(400).json({ + data: null, + errors: [{ message: 'Customer not found', code: 'not_found' }], + }) + } + + return res.status(200).json({ data: { customer } }) + } + + res.status(200).json({ data: null }) +} + +export default getLoggedInCustomer diff --git a/framework/bigcommerce/api/customers/handlers/login.ts b/framework/bigcommerce/api/customers/handlers/login.ts new file mode 100644 index 000000000..9e019f3a0 --- /dev/null +++ b/framework/bigcommerce/api/customers/handlers/login.ts @@ -0,0 +1,49 @@ +import { FetcherError } from '@commerce/utils/errors' +import login from '../../../auth/login' +import type { LoginHandlers } from '../login' + +const invalidCredentials = /invalid credentials/i + +const loginHandler: LoginHandlers['login'] = async ({ + res, + body: { email, password }, + config, +}) => { + // 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 login({ variables: { email, password }, config, res }) + } 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 error + } + + res.status(200).json({ data: null }) +} + +export default loginHandler diff --git a/framework/bigcommerce/api/customers/handlers/logout.ts b/framework/bigcommerce/api/customers/handlers/logout.ts new file mode 100644 index 000000000..937ce0954 --- /dev/null +++ b/framework/bigcommerce/api/customers/handlers/logout.ts @@ -0,0 +1,23 @@ +import { serialize } from 'cookie' +import { LogoutHandlers } from '../logout' + +const logoutHandler: LogoutHandlers['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 }) + } +} + +export default logoutHandler diff --git a/framework/bigcommerce/api/customers/handlers/signup.ts b/framework/bigcommerce/api/customers/handlers/signup.ts new file mode 100644 index 000000000..1b24db0cc --- /dev/null +++ b/framework/bigcommerce/api/customers/handlers/signup.ts @@ -0,0 +1,62 @@ +import { BigcommerceApiError } from '../../utils/errors' +import login from '../../../auth/login' +import { SignupHandlers } from '../signup' + +const signup: SignupHandlers['signup'] = async ({ + res, + body: { firstName, lastName, email, password }, + config, +}) => { + // 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', + body: JSON.stringify([ + { + first_name: firstName, + last_name: lastName, + email, + authentication: { + new_password: password, + }, + }, + ]), + }) + } 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', + }, + ], + }) + } + } + + throw error + } + + // Login the customer right after creating it + await login({ variables: { email, password }, res, config }) + + res.status(200).json({ data: null }) +} + +export default signup diff --git a/framework/bigcommerce/api/customers/index.ts b/framework/bigcommerce/api/customers/index.ts new file mode 100644 index 000000000..5af4d1d1d --- /dev/null +++ b/framework/bigcommerce/api/customers/index.ts @@ -0,0 +1,46 @@ +import createApiHandler, { + BigcommerceApiHandler, + BigcommerceHandler, +} from '../utils/create-api-handler' +import isAllowedMethod from '../utils/is-allowed-method' +import { BigcommerceApiError } from '../utils/errors' +import getLoggedInCustomer, { + Customer, +} from './handlers/get-logged-in-customer' + +export type { Customer } + +export type CustomerData = { + customer: Customer +} + +export type CustomersHandlers = { + getLoggedInCustomer: BigcommerceHandler +} + +const METHODS = ['GET'] + +const customersApi: BigcommerceApiHandler< + CustomerData, + CustomersHandlers +> = async (req, res, config, handlers) => { + if (!isAllowedMethod(req, res, METHODS)) return + + try { + const body = null + return await handlers['getLoggedInCustomer']({ req, res, config, body }) + } catch (error) { + console.error(error) + + const message = + error instanceof BigcommerceApiError + ? 'An unexpected error ocurred with the Bigcommerce API' + : 'An unexpected error ocurred' + + res.status(500).json({ data: null, errors: [{ message }] }) + } +} + +const handlers = { getLoggedInCustomer } + +export default createApiHandler(customersApi, handlers, {}) diff --git a/framework/bigcommerce/api/customers/login.ts b/framework/bigcommerce/api/customers/login.ts new file mode 100644 index 000000000..e8f24a92d --- /dev/null +++ b/framework/bigcommerce/api/customers/login.ts @@ -0,0 +1,45 @@ +import createApiHandler, { + BigcommerceApiHandler, + BigcommerceHandler, +} from '../utils/create-api-handler' +import isAllowedMethod from '../utils/is-allowed-method' +import { BigcommerceApiError } from '../utils/errors' +import login from './handlers/login' + +export type LoginBody = { + email: string + password: string +} + +export type LoginHandlers = { + login: BigcommerceHandler> +} + +const METHODS = ['POST'] + +const loginApi: BigcommerceApiHandler = async ( + req, + res, + config, + handlers +) => { + if (!isAllowedMethod(req, res, METHODS)) return + + try { + const body = req.body ?? {} + return await handlers['login']({ req, res, config, body }) + } catch (error) { + console.error(error) + + const message = + error instanceof BigcommerceApiError + ? 'An unexpected error ocurred with the Bigcommerce API' + : 'An unexpected error ocurred' + + res.status(500).json({ data: null, errors: [{ message }] }) + } +} + +const handlers = { login } + +export default createApiHandler(loginApi, handlers, {}) diff --git a/framework/bigcommerce/api/customers/logout.ts b/framework/bigcommerce/api/customers/logout.ts new file mode 100644 index 000000000..0a4965245 --- /dev/null +++ b/framework/bigcommerce/api/customers/logout.ts @@ -0,0 +1,42 @@ +import createApiHandler, { + BigcommerceApiHandler, + BigcommerceHandler, +} from '../utils/create-api-handler' +import isAllowedMethod from '../utils/is-allowed-method' +import { BigcommerceApiError } from '../utils/errors' +import logout from './handlers/logout' + +export type LogoutHandlers = { + logout: BigcommerceHandler +} + +const METHODS = ['GET'] + +const logoutApi: BigcommerceApiHandler = async ( + req, + res, + config, + handlers +) => { + if (!isAllowedMethod(req, res, METHODS)) return + + try { + const redirectTo = req.query.redirect_to + const body = typeof redirectTo === 'string' ? { redirectTo } : {} + + return await handlers['logout']({ req, res, config, body }) + } catch (error) { + console.error(error) + + const message = + error instanceof BigcommerceApiError + ? 'An unexpected error ocurred with the Bigcommerce API' + : 'An unexpected error ocurred' + + res.status(500).json({ data: null, errors: [{ message }] }) + } +} + +const handlers = { logout } + +export default createApiHandler(logoutApi, handlers, {}) diff --git a/framework/bigcommerce/api/customers/signup.ts b/framework/bigcommerce/api/customers/signup.ts new file mode 100644 index 000000000..aa26f78cf --- /dev/null +++ b/framework/bigcommerce/api/customers/signup.ts @@ -0,0 +1,50 @@ +import createApiHandler, { + BigcommerceApiHandler, + BigcommerceHandler, +} from '../utils/create-api-handler' +import isAllowedMethod from '../utils/is-allowed-method' +import { BigcommerceApiError } from '../utils/errors' +import signup from './handlers/signup' + +export type SignupBody = { + firstName: string + lastName: string + email: string + password: string +} + +export type SignupHandlers = { + signup: BigcommerceHandler> +} + +const METHODS = ['POST'] + +const signupApi: BigcommerceApiHandler = async ( + req, + res, + config, + handlers +) => { + if (!isAllowedMethod(req, res, METHODS)) return + + const { cookies } = req + const cartId = cookies[config.cartCookie] + + try { + const body = { ...req.body, cartId } + return await handlers['signup']({ req, res, config, body }) + } catch (error) { + console.error(error) + + const message = + error instanceof BigcommerceApiError + ? 'An unexpected error ocurred with the Bigcommerce API' + : 'An unexpected error ocurred' + + res.status(500).json({ data: null, errors: [{ message }] }) + } +} + +const handlers = { signup } + +export default createApiHandler(signupApi, handlers, {}) diff --git a/framework/bigcommerce/api/definitions/catalog.ts b/framework/bigcommerce/api/definitions/catalog.ts new file mode 100644 index 000000000..2c483f781 --- /dev/null +++ b/framework/bigcommerce/api/definitions/catalog.ts @@ -0,0 +1,2993 @@ +/** + * This file was auto-generated by swagger-to-ts. + * Do not make direct changes to the file. + */ + +export interface definitions { + /** + * Common Modifier properties. + */ + productModifier_Base: { + /** + * BigCommerce API, which determines how it will display on the storefront. Acceptable values: `date`, `checkbox`, `file`, `text`, `multi_line_text`, `numbers_only_text`, `radio_buttons`, `rectangles`, `dropdown`, `product_list`, `product_list_with_images`, `swatch`. Required in a /POST. + */ + type: + | 'date' + | 'checkbox' + | 'file' + | 'text' + | 'multi_line_text' + | 'numbers_only_text' + | 'radio_buttons' + | 'rectangles' + | 'dropdown' + | 'product_list' + | 'product_list_with_images' + | 'swatch' + /** + * Whether or not this modifer is required or not at checkout. Required in a /POST. + */ + required: boolean + /** + * The order the modifiers display on the product detail page. + */ + sort_order?: number + config?: definitions['config_Full'] + /** + * The name of the option shown on the storefront. + */ + display_name?: string + } + /** + * Product Modifier + */ + productModifier_Full: definitions['productModifier_Base'] & { + /** + * The unique numeric ID of the modifier; increments sequentially. + */ + id?: number + /** + * The unique numeric ID of the product to which the option belongs. + */ + product_id?: number + /** + * The unique option name. Auto-generated from the display name, a timestamp, and the product ID. + */ + name?: string + option_values?: definitions['productModifierOptionValue_Full'][] + } + /** + * The model for a POST to create a modifier on a product. + */ + productModifier_Post: { + /** + * BigCommerce API, which determines how it will display on the storefront. Acceptable values: `date`, `checkbox`, `file`, `text`, `multi_line_text`, `numbers_only_text`, `radio_buttons`, `rectangles`, `dropdown`, `product_list`, `product_list_with_images`, `swatch`. Required in a /POST. + */ + type: + | 'date' + | 'checkbox' + | 'file' + | 'text' + | 'multi_line_text' + | 'numbers_only_text' + | 'radio_buttons' + | 'rectangles' + | 'dropdown' + | 'product_list' + | 'product_list_with_images' + | 'swatch' + /** + * Whether or not this modifer is required or not at checkout. Required in a /POST. + */ + required: boolean + /** + * The order the modifiers display on the product detail page. + */ + sort_order?: number + /** + * The values for option config can vary based on the Modifier created. + */ + config?: { + /** + * (date, text, multi_line_text, numbers_only_text) The default value. Shown on a date option as an ISO-8601–formatted string, or on a text option as a string. + */ + default_value?: string + /** + * (checkbox) Flag for setting the checkbox to be checked by default. + */ + checked_by_default?: boolean + /** + * (checkbox) Label displayed for the checkbox option. + */ + checkbox_label?: string + /** + * (date) Flag to limit the dates allowed to be entered on a date option. + */ + date_limited?: boolean + /** + * (date) The type of limit that is allowed to be entered on a date option. + */ + date_limit_mode?: 'earliest' | 'range' | 'latest' + /** + * (date) The earliest date allowed to be entered on the date option, as an ISO-8601 formatted string. + */ + date_earliest_value?: string + /** + * (date) The latest date allowed to be entered on the date option, as an ISO-8601 formatted string. + */ + date_latest_value?: string + /** + * (file) The kind of restriction on the file types that can be uploaded with a file upload option. Values: `specific` - restricts uploads to particular file types; `all` - allows all file types. + */ + file_types_mode?: 'specific' | 'all' + /** + * (file) The type of files allowed to be uploaded if the `file_type_option` is set to `specific`. Values: + * `images` - Allows upload of image MIME types (`bmp`, `gif`, `jpg`, `jpeg`, `jpe`, `jif`, `jfif`, `jfi`, `png`, `wbmp`, `xbm`, `tiff`). `documents` - Allows upload of document MIME types (`txt`, `pdf`, `rtf`, `doc`, `docx`, `xls`, `xlsx`, `accdb`, `mdb`, `one`, `pps`, `ppsx`, `ppt`, `pptx`, `pub`, `odt`, `ods`, `odp`, `odg`, `odf`). + * `other` - Allows file types defined in the `file_types_other` array. + */ + file_types_supported?: string[] + /** + * (file) A list of other file types allowed with the file upload option. + */ + file_types_other?: string[] + /** + * (file) The maximum size for a file that can be used with the file upload option. This will still be limited by the server. + */ + file_max_size?: number + /** + * (text, multi_line_text) Flag to validate the length of a text or multi-line text input. + */ + text_characters_limited?: boolean + /** + * (text, multi_line_text) The minimum length allowed for a text or multi-line text option. + */ + text_min_length?: number + /** + * (text, multi_line_text) The maximum length allowed for a text or multi line text option. + */ + text_max_length?: number + /** + * (multi_line_text) Flag to validate the maximum number of lines allowed on a multi-line text input. + */ + text_lines_limited?: boolean + /** + * (multi_line_text) The maximum number of lines allowed on a multi-line text input. + */ + text_max_lines?: number + /** + * (numbers_only_text) Flag to limit the value of a number option. + */ + number_limited?: boolean + /** + * (numbers_only_text) The type of limit on values entered for a number option. + */ + number_limit_mode?: 'lowest' | 'highest' | 'range' + /** + * (numbers_only_text) The lowest allowed value for a number option if `number_limited` is true. + */ + number_lowest_value?: number + /** + * (numbers_only_text) The highest allowed value for a number option if `number_limited` is true. + */ + number_highest_value?: number + /** + * (numbers_only_text) Flag to limit the input on a number option to whole numbers only. + */ + number_integers_only?: boolean + /** + * (product_list, product_list_with_images) Flag for automatically adjusting inventory on a product included in the list. + */ + product_list_adjusts_inventory?: boolean + /** + * (product_list, product_list_with_images) Flag to add the optional product's price to the main product's price. + */ + product_list_adjusts_pricing?: boolean + /** + * (product_list, product_list_with_images) How to factor the optional product's weight and package dimensions into the shipping quote. Values: `none` - don't adjust; `weight` - use shipping weight only; `package` - use weight and dimensions. + */ + product_list_shipping_calc?: 'none' | 'weight' | 'package' + } + option_values?: (({ + /** + * The flag for preselecting a value as the default on the storefront. This field is not supported for swatch options/modifiers. + */ + is_default?: boolean + /** + * The text display identifying the value on the storefront. Required in a /POST. + */ + label: string + /** + * The order in which the value will be displayed on the product page. Required in a /POST. + */ + sort_order: number + /** + * Extra data describing the value, based on the type of option or modifier with which the value is associated. The `swatch` type option can accept an array of `colors`, with up to three hexidecimal color keys; or an `image_url`, which is a full image URL path including protocol. The `product list` type option requires a `product_id`. The `checkbox` type option requires a boolean flag, called `checked_value`, to determine which value is considered to be the checked state. + */ + value_data?: { [key: string]: any } + } & { + adjusters?: { + /** + * Adjuster for Complex Rules. + */ + price?: { + /** + * The type of adjuster for either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster?: 'relative' | 'percentage' + /** + * The numeric amount by which the adjuster will change either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster_value?: number + } + /** + * Adjuster for Complex Rules. + */ + weight?: { + /** + * The type of adjuster for either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster?: 'relative' | 'percentage' + /** + * The numeric amount by which the adjuster will change either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster_value?: number + } + /** + * The URL for an image displayed on the storefront when the modifier value is selected.Limit of 8MB per file. + */ + image_url?: string + purchasing_disabled?: { + /** + * Flag for whether the modifier value disables purchasing when selected on the storefront. This can be used for temporarily disabling a particular modifier value. + */ + status?: boolean + /** + * The message displayed on the storefront when the purchasing disabled status is `true`. + */ + message?: string + } + } + }) & { + /** + * The unique numeric ID of the value; increments sequentially. + */ + id?: number + })[] + } & { + /** + * The name of the option shown on the storefront. + */ + display_name: string + } + /** + * The model for a PUT to update a modifier on a product. + */ + productModifier_Put: { + /** + * BigCommerce API, which determines how it will display on the storefront. Acceptable values: `date`, `checkbox`, `file`, `text`, `multi_line_text`, `numbers_only_text`, `radio_buttons`, `rectangles`, `dropdown`, `product_list`, `product_list_with_images`, `swatch`. Required in a /POST. + */ + type: + | 'date' + | 'checkbox' + | 'file' + | 'text' + | 'multi_line_text' + | 'numbers_only_text' + | 'radio_buttons' + | 'rectangles' + | 'dropdown' + | 'product_list' + | 'product_list_with_images' + | 'swatch' + /** + * Whether or not this modifer is required or not at checkout. Required in a /POST. + */ + required: boolean + /** + * The order the modifiers display on the product detail page. + */ + sort_order?: number + /** + * The values for option config can vary based on the Modifier created. + */ + config?: { + /** + * (date, text, multi_line_text, numbers_only_text) The default value. Shown on a date option as an ISO-8601–formatted string, or on a text option as a string. + */ + default_value?: string + /** + * (checkbox) Flag for setting the checkbox to be checked by default. + */ + checked_by_default?: boolean + /** + * (checkbox) Label displayed for the checkbox option. + */ + checkbox_label?: string + /** + * (date) Flag to limit the dates allowed to be entered on a date option. + */ + date_limited?: boolean + /** + * (date) The type of limit that is allowed to be entered on a date option. + */ + date_limit_mode?: 'earliest' | 'range' | 'latest' + /** + * (date) The earliest date allowed to be entered on the date option, as an ISO-8601 formatted string. + */ + date_earliest_value?: string + /** + * (date) The latest date allowed to be entered on the date option, as an ISO-8601 formatted string. + */ + date_latest_value?: string + /** + * (file) The kind of restriction on the file types that can be uploaded with a file upload option. Values: `specific` - restricts uploads to particular file types; `all` - allows all file types. + */ + file_types_mode?: 'specific' | 'all' + /** + * (file) The type of files allowed to be uploaded if the `file_type_option` is set to `specific`. Values: + * `images` - Allows upload of image MIME types (`bmp`, `gif`, `jpg`, `jpeg`, `jpe`, `jif`, `jfif`, `jfi`, `png`, `wbmp`, `xbm`, `tiff`). `documents` - Allows upload of document MIME types (`txt`, `pdf`, `rtf`, `doc`, `docx`, `xls`, `xlsx`, `accdb`, `mdb`, `one`, `pps`, `ppsx`, `ppt`, `pptx`, `pub`, `odt`, `ods`, `odp`, `odg`, `odf`). + * `other` - Allows file types defined in the `file_types_other` array. + */ + file_types_supported?: string[] + /** + * (file) A list of other file types allowed with the file upload option. + */ + file_types_other?: string[] + /** + * (file) The maximum size for a file that can be used with the file upload option. This will still be limited by the server. + */ + file_max_size?: number + /** + * (text, multi_line_text) Flag to validate the length of a text or multi-line text input. + */ + text_characters_limited?: boolean + /** + * (text, multi_line_text) The minimum length allowed for a text or multi-line text option. + */ + text_min_length?: number + /** + * (text, multi_line_text) The maximum length allowed for a text or multi line text option. + */ + text_max_length?: number + /** + * (multi_line_text) Flag to validate the maximum number of lines allowed on a multi-line text input. + */ + text_lines_limited?: boolean + /** + * (multi_line_text) The maximum number of lines allowed on a multi-line text input. + */ + text_max_lines?: number + /** + * (numbers_only_text) Flag to limit the value of a number option. + */ + number_limited?: boolean + /** + * (numbers_only_text) The type of limit on values entered for a number option. + */ + number_limit_mode?: 'lowest' | 'highest' | 'range' + /** + * (numbers_only_text) The lowest allowed value for a number option if `number_limited` is true. + */ + number_lowest_value?: number + /** + * (numbers_only_text) The highest allowed value for a number option if `number_limited` is true. + */ + number_highest_value?: number + /** + * (numbers_only_text) Flag to limit the input on a number option to whole numbers only. + */ + number_integers_only?: boolean + /** + * (product_list, product_list_with_images) Flag for automatically adjusting inventory on a product included in the list. + */ + product_list_adjusts_inventory?: boolean + /** + * (product_list, product_list_with_images) Flag to add the optional product's price to the main product's price. + */ + product_list_adjusts_pricing?: boolean + /** + * (product_list, product_list_with_images) How to factor the optional product's weight and package dimensions into the shipping quote. Values: `none` - don't adjust; `weight` - use shipping weight only; `package` - use weight and dimensions. + */ + product_list_shipping_calc?: 'none' | 'weight' | 'package' + } + option_values?: (({ + /** + * The flag for preselecting a value as the default on the storefront. This field is not supported for swatch options/modifiers. + */ + is_default?: boolean + /** + * The text display identifying the value on the storefront. Required in a /POST. + */ + label: string + /** + * The order in which the value will be displayed on the product page. Required in a /POST. + */ + sort_order: number + /** + * Extra data describing the value, based on the type of option or modifier with which the value is associated. The `swatch` type option can accept an array of `colors`, with up to three hexidecimal color keys; or an `image_url`, which is a full image URL path including protocol. The `product list` type option requires a `product_id`. The `checkbox` type option requires a boolean flag, called `checked_value`, to determine which value is considered to be the checked state. + */ + value_data?: { [key: string]: any } + } & { + adjusters?: { + /** + * Adjuster for Complex Rules. + */ + price?: { + /** + * The type of adjuster for either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster?: 'relative' | 'percentage' + /** + * The numeric amount by which the adjuster will change either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster_value?: number + } + /** + * Adjuster for Complex Rules. + */ + weight?: { + /** + * The type of adjuster for either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster?: 'relative' | 'percentage' + /** + * The numeric amount by which the adjuster will change either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster_value?: number + } + /** + * The URL for an image displayed on the storefront when the modifier value is selected.Limit of 8MB per file. + */ + image_url?: string + purchasing_disabled?: { + /** + * Flag for whether the modifier value disables purchasing when selected on the storefront. This can be used for temporarily disabling a particular modifier value. + */ + status?: boolean + /** + * The message displayed on the storefront when the purchasing disabled status is `true`. + */ + message?: string + } + } + }) & { + /** + * The unique numeric ID of the value; increments sequentially. + */ + id?: number + })[] + } + /** + * Common Product Modifer `option_value` properties. + */ + productModifierOptionValue_Base: { + /** + * The flag for preselecting a value as the default on the storefront. This field is not supported for swatch options/modifiers. + */ + is_default?: boolean + /** + * The text display identifying the value on the storefront. Required in a /POST. + */ + label: string + /** + * The order in which the value will be displayed on the product page. Required in a /POST. + */ + sort_order: number + /** + * Extra data describing the value, based on the type of option or modifier with which the value is associated. The `swatch` type option can accept an array of `colors`, with up to three hexidecimal color keys; or an `image_url`, which is a full image URL path including protocol. The `product list` type option requires a `product_id`. The `checkbox` type option requires a boolean flag, called `checked_value`, to determine which value is considered to be the checked state. If no data is available, returns `null`. + */ + value_data?: { [key: string]: any } + adjusters?: definitions['adjusters_Full'] + } + /** + * Product Modifer `option_value`. + */ + productModifierOptionValue_Full: definitions['productModifierOptionValue_Base'] & { + /** + * The unique numeric ID of the value; increments sequentially. + */ + id?: number + option_id?: number + } + /** + * The model for a POST to create a modifier value on a product. + */ + productModifierOptionValue_Post: { + /** + * The flag for preselecting a value as the default on the storefront. This field is not supported for swatch options/modifiers. + */ + is_default?: boolean + /** + * The text display identifying the value on the storefront. Required in a /POST. + */ + label: string + /** + * The order in which the value will be displayed on the product page. Required in a /POST. + */ + sort_order: number + /** + * Extra data describing the value, based on the type of option or modifier with which the value is associated. The `swatch` type option can accept an array of `colors`, with up to three hexidecimal color keys; or an `image_url`, which is a full image URL path including protocol. The `product list` type option requires a `product_id`. The `checkbox` type option requires a boolean flag, called `checked_value`, to determine which value is considered to be the checked state. + */ + value_data?: { [key: string]: any } + } & { + adjusters?: { + /** + * Adjuster for Complex Rules. + */ + price?: { + /** + * The type of adjuster for either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster?: 'relative' | 'percentage' + /** + * The numeric amount by which the adjuster will change either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster_value?: number + } + /** + * Adjuster for Complex Rules. + */ + weight?: { + /** + * The type of adjuster for either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster?: 'relative' | 'percentage' + /** + * The numeric amount by which the adjuster will change either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster_value?: number + } + /** + * The URL for an image displayed on the storefront when the modifier value is selected.Limit of 8MB per file. + */ + image_url?: string + purchasing_disabled?: { + /** + * Flag for whether the modifier value disables purchasing when selected on the storefront. This can be used for temporarily disabling a particular modifier value. + */ + status?: boolean + /** + * The message displayed on the storefront when the purchasing disabled status is `true`. + */ + message?: string + } + } + } + /** + * The model for a PUT to update a modifier value on a product. + */ + productModifierOptionValue_Put: ({ + /** + * The flag for preselecting a value as the default on the storefront. This field is not supported for swatch options/modifiers. + */ + is_default?: boolean + /** + * The text display identifying the value on the storefront. Required in a /POST. + */ + label: string + /** + * The order in which the value will be displayed on the product page. Required in a /POST. + */ + sort_order: number + /** + * Extra data describing the value, based on the type of option or modifier with which the value is associated. The `swatch` type option can accept an array of `colors`, with up to three hexidecimal color keys; or an `image_url`, which is a full image URL path including protocol. The `product list` type option requires a `product_id`. The `checkbox` type option requires a boolean flag, called `checked_value`, to determine which value is considered to be the checked state. + */ + value_data?: { [key: string]: any } + } & { + adjusters?: { + /** + * Adjuster for Complex Rules. + */ + price?: { + /** + * The type of adjuster for either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster?: 'relative' | 'percentage' + /** + * The numeric amount by which the adjuster will change either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster_value?: number + } + /** + * Adjuster for Complex Rules. + */ + weight?: { + /** + * The type of adjuster for either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster?: 'relative' | 'percentage' + /** + * The numeric amount by which the adjuster will change either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster_value?: number + } + /** + * The URL for an image displayed on the storefront when the modifier value is selected.Limit of 8MB per file. + */ + image_url?: string + purchasing_disabled?: { + /** + * Flag for whether the modifier value disables purchasing when selected on the storefront. This can be used for temporarily disabling a particular modifier value. + */ + status?: boolean + /** + * The message displayed on the storefront when the purchasing disabled status is `true`. + */ + message?: string + } + } + }) & { + /** + * The unique numeric ID of the value; increments sequentially. + */ + id?: number + } + resp_productionOption: { + data?: definitions['productOption_Full'] + /** + * Empty meta object; may be used later. + */ + meta?: { ''?: string } + } + /** + * Common Option properties. + */ + productOption_Base: { + /** + * The unique numerical ID of the option, increments sequentially. + */ + id?: number + /** + * The unique numerical ID of the product to which the option belongs. + */ + product_id?: number + /** + * The name of the option shown on the storefront. + */ + display_name?: string + /** + * The type of option, which determines how it will display on the storefront. Acceptable values: `radio_buttons`, `rectangles`, `dropdown`, `product_list`, `product_list_with_images`, `swatch`. For reference, the former v2 API values are: RB = radio_buttons, RT = rectangles, S = dropdown, P = product_list, PI = product_list_with_images, CS = swatch. + */ + type?: + | 'radio_buttons' + | 'rectangles' + | 'dropdown' + | 'product_list' + | 'product_list_with_images' + | 'swatch' + config?: definitions['productOptionConfig_Full'] + /** + * Order in which the option is displayed on the storefront. + */ + sort_order?: number + option_values?: definitions['productOptionOptionValue_Full'] + } + productOption_Full: definitions['productOption_Base'] & { + /** + * The unique option name, auto-generated from the display name, a timestamp, and the product ID. + */ + name?: string + } + /** + * The model for a POST to create options on a product. + */ + productOption_Post: { + /** + * The unique numerical ID of the option, increments sequentially. + */ + id?: number + /** + * The unique numerical ID of the product to which the option belongs. + */ + product_id?: number + /** + * The name of the option shown on the storefront. + */ + display_name?: string + /** + * The type of option, which determines how it will display on the storefront. Acceptable values: `radio_buttons`, `rectangles`, `dropdown`, `product_list`, `product_list_with_images`, `swatch`. For reference, the former v2 API values are: RB = radio_buttons, RT = rectangles, S = dropdown, P = product_list, PI = product_list_with_images, CS = swatch. + */ + type?: + | 'radio_buttons' + | 'rectangles' + | 'dropdown' + | 'product_list' + | 'product_list_with_images' + | 'swatch' + /** + * The values for option config can vary based on the Modifier created. + */ + config?: { + /** + * (date, text, multi_line_text, numbers_only_text) The default value. Shown on a date option as an ISO-8601–formatted string, or on a text option as a string. + */ + default_value?: string + /** + * (checkbox) Flag for setting the checkbox to be checked by default. + */ + checked_by_default?: boolean + /** + * (checkbox) Label displayed for the checkbox option. + */ + checkbox_label?: string + /** + * (date) Flag to limit the dates allowed to be entered on a date option. + */ + date_limited?: boolean + /** + * (date) The type of limit that is allowed to be entered on a date option. + */ + date_limit_mode?: 'earliest' | 'range' | 'latest' + /** + * (date) The earliest date allowed to be entered on the date option, as an ISO-8601 formatted string. + */ + date_earliest_value?: string + /** + * (date) The latest date allowed to be entered on the date option, as an ISO-8601 formatted string. + */ + date_latest_value?: string + /** + * (file) The kind of restriction on the file types that can be uploaded with a file upload option. Values: `specific` - restricts uploads to particular file types; `all` - allows all file types. + */ + file_types_mode?: 'specific' | 'all' + /** + * (file) The type of files allowed to be uploaded if the `file_type_option` is set to `specific`. Values: + * `images` - Allows upload of image MIME types (`bmp`, `gif`, `jpg`, `jpeg`, `jpe`, `jif`, `jfif`, `jfi`, `png`, `wbmp`, `xbm`, `tiff`). `documents` - Allows upload of document MIME types (`txt`, `pdf`, `rtf`, `doc`, `docx`, `xls`, `xlsx`, `accdb`, `mdb`, `one`, `pps`, `ppsx`, `ppt`, `pptx`, `pub`, `odt`, `ods`, `odp`, `odg`, `odf`). + * `other` - Allows file types defined in the `file_types_other` array. + */ + file_types_supported?: string[] + /** + * (file) A list of other file types allowed with the file upload option. + */ + file_types_other?: string[] + /** + * (file) The maximum size for a file that can be used with the file upload option. This will still be limited by the server. + */ + file_max_size?: number + /** + * (text, multi_line_text) Flag to validate the length of a text or multi-line text input. + */ + text_characters_limited?: boolean + /** + * (text, multi_line_text) The minimum length allowed for a text or multi-line text option. + */ + text_min_length?: number + /** + * (text, multi_line_text) The maximum length allowed for a text or multi line text option. + */ + text_max_length?: number + /** + * (multi_line_text) Flag to validate the maximum number of lines allowed on a multi-line text input. + */ + text_lines_limited?: boolean + /** + * (multi_line_text) The maximum number of lines allowed on a multi-line text input. + */ + text_max_lines?: number + /** + * (numbers_only_text) Flag to limit the value of a number option. + */ + number_limited?: boolean + /** + * (numbers_only_text) The type of limit on values entered for a number option. + */ + number_limit_mode?: 'lowest' | 'highest' | 'range' + /** + * (numbers_only_text) The lowest allowed value for a number option if `number_limited` is true. + */ + number_lowest_value?: number + /** + * (numbers_only_text) The highest allowed value for a number option if `number_limited` is true. + */ + number_highest_value?: number + /** + * (numbers_only_text) Flag to limit the input on a number option to whole numbers only. + */ + number_integers_only?: boolean + /** + * (product_list, product_list_with_images) Flag for automatically adjusting inventory on a product included in the list. + */ + product_list_adjusts_inventory?: boolean + /** + * (product_list, product_list_with_images) Flag to add the optional product's price to the main product's price. + */ + product_list_adjusts_pricing?: boolean + /** + * (product_list, product_list_with_images) How to factor the optional product's weight and package dimensions into the shipping quote. Values: `none` - don't adjust; `weight` - use shipping weight only; `package` - use weight and dimensions. + */ + product_list_shipping_calc?: 'none' | 'weight' | 'package' + } + /** + * Order in which the option is displayed on the storefront. + */ + sort_order?: number + option_values?: ({ + /** + * The flag for preselecting a value as the default on the storefront. This field is not supported for swatch options/modifiers. + */ + is_default?: boolean + /** + * The text display identifying the value on the storefront. Required in a /POST. + */ + label: string + /** + * The order in which the value will be displayed on the product page. Required in a /POST. + */ + sort_order: number + /** + * Extra data describing the value, based on the type of option or modifier with which the value is associated. The `swatch` type option can accept an array of `colors`, with up to three hexidecimal color keys; or an `image_url`, which is a full image URL path including protocol. The `product list` type option requires a `product_id`. The `checkbox` type option requires a boolean flag, called `checked_value`, to determine which value is considered to be the checked state. + */ + value_data?: { [key: string]: any } + } & { + /** + * The unique numeric ID of the value; increments sequentially. + */ + id?: number + })[] + /** + * Publicly available image url + */ + image_url?: string + } + /** + * The model for a PUT to update options on a product. + */ + productOption_Put: { + /** + * The unique numerical ID of the option, increments sequentially. + */ + id?: number + /** + * The unique numerical ID of the product to which the option belongs. + */ + product_id?: number + /** + * The name of the option shown on the storefront. + */ + display_name?: string + /** + * The type of option, which determines how it will display on the storefront. Acceptable values: `radio_buttons`, `rectangles`, `dropdown`, `product_list`, `product_list_with_images`, `swatch`. For reference, the former v2 API values are: RB = radio_buttons, RT = rectangles, S = dropdown, P = product_list, PI = product_list_with_images, CS = swatch. + */ + type?: + | 'radio_buttons' + | 'rectangles' + | 'dropdown' + | 'product_list' + | 'product_list_with_images' + | 'swatch' + /** + * The values for option config can vary based on the Modifier created. + */ + config?: { + /** + * (date, text, multi_line_text, numbers_only_text) The default value. Shown on a date option as an ISO-8601–formatted string, or on a text option as a string. + */ + default_value?: string + /** + * (checkbox) Flag for setting the checkbox to be checked by default. + */ + checked_by_default?: boolean + /** + * (checkbox) Label displayed for the checkbox option. + */ + checkbox_label?: string + /** + * (date) Flag to limit the dates allowed to be entered on a date option. + */ + date_limited?: boolean + /** + * (date) The type of limit that is allowed to be entered on a date option. + */ + date_limit_mode?: 'earliest' | 'range' | 'latest' + /** + * (date) The earliest date allowed to be entered on the date option, as an ISO-8601 formatted string. + */ + date_earliest_value?: string + /** + * (date) The latest date allowed to be entered on the date option, as an ISO-8601 formatted string. + */ + date_latest_value?: string + /** + * (file) The kind of restriction on the file types that can be uploaded with a file upload option. Values: `specific` - restricts uploads to particular file types; `all` - allows all file types. + */ + file_types_mode?: 'specific' | 'all' + /** + * (file) The type of files allowed to be uploaded if the `file_type_option` is set to `specific`. Values: + * `images` - Allows upload of image MIME types (`bmp`, `gif`, `jpg`, `jpeg`, `jpe`, `jif`, `jfif`, `jfi`, `png`, `wbmp`, `xbm`, `tiff`). `documents` - Allows upload of document MIME types (`txt`, `pdf`, `rtf`, `doc`, `docx`, `xls`, `xlsx`, `accdb`, `mdb`, `one`, `pps`, `ppsx`, `ppt`, `pptx`, `pub`, `odt`, `ods`, `odp`, `odg`, `odf`). + * `other` - Allows file types defined in the `file_types_other` array. + */ + file_types_supported?: string[] + /** + * (file) A list of other file types allowed with the file upload option. + */ + file_types_other?: string[] + /** + * (file) The maximum size for a file that can be used with the file upload option. This will still be limited by the server. + */ + file_max_size?: number + /** + * (text, multi_line_text) Flag to validate the length of a text or multi-line text input. + */ + text_characters_limited?: boolean + /** + * (text, multi_line_text) The minimum length allowed for a text or multi-line text option. + */ + text_min_length?: number + /** + * (text, multi_line_text) The maximum length allowed for a text or multi line text option. + */ + text_max_length?: number + /** + * (multi_line_text) Flag to validate the maximum number of lines allowed on a multi-line text input. + */ + text_lines_limited?: boolean + /** + * (multi_line_text) The maximum number of lines allowed on a multi-line text input. + */ + text_max_lines?: number + /** + * (numbers_only_text) Flag to limit the value of a number option. + */ + number_limited?: boolean + /** + * (numbers_only_text) The type of limit on values entered for a number option. + */ + number_limit_mode?: 'lowest' | 'highest' | 'range' + /** + * (numbers_only_text) The lowest allowed value for a number option if `number_limited` is true. + */ + number_lowest_value?: number + /** + * (numbers_only_text) The highest allowed value for a number option if `number_limited` is true. + */ + number_highest_value?: number + /** + * (numbers_only_text) Flag to limit the input on a number option to whole numbers only. + */ + number_integers_only?: boolean + /** + * (product_list, product_list_with_images) Flag for automatically adjusting inventory on a product included in the list. + */ + product_list_adjusts_inventory?: boolean + /** + * (product_list, product_list_with_images) Flag to add the optional product's price to the main product's price. + */ + product_list_adjusts_pricing?: boolean + /** + * (product_list, product_list_with_images) How to factor the optional product's weight and package dimensions into the shipping quote. Values: `none` - don't adjust; `weight` - use shipping weight only; `package` - use weight and dimensions. + */ + product_list_shipping_calc?: 'none' | 'weight' | 'package' + } + /** + * Order in which the option is displayed on the storefront. + */ + sort_order?: number + option_values?: ({ + /** + * The flag for preselecting a value as the default on the storefront. This field is not supported for swatch options/modifiers. + */ + is_default?: boolean + /** + * The text display identifying the value on the storefront. Required in a /POST. + */ + label: string + /** + * The order in which the value will be displayed on the product page. Required in a /POST. + */ + sort_order: number + /** + * Extra data describing the value, based on the type of option or modifier with which the value is associated. The `swatch` type option can accept an array of `colors`, with up to three hexidecimal color keys; or an `image_url`, which is a full image URL path including protocol. The `product list` type option requires a `product_id`. The `checkbox` type option requires a boolean flag, called `checked_value`, to determine which value is considered to be the checked state. + */ + value_data?: { [key: string]: any } + } & { + /** + * The unique numeric ID of the value; increments sequentially. + */ + id?: number + })[] + /** + * Publicly available image url + */ + image_url?: string + } + /** + * Returns the categories tree, a nested lineage of the categories with parent->child relationship. The Category objects returned are simplified versions of the category objects returned in the rest of this API. + */ + categoriesTree_Resp: { + data?: definitions['categoriesTreeNode_Full'][] + meta?: definitions['metaEmpty_Full'] + } + /** + * Used to reflect parent <> child category relationships. Used by Category Tree. + */ + categoriesTreeNode_Full: { + /** + * The unique numeric ID of the category; increments sequentially. + */ + id?: number + /** + * The unique numeric ID of the category's parent. This field controls where the category sits in the tree of categories that organize the catalog. + */ + parent_id?: number + /** + * The name displayed for the category. Name is unique with respect to the category's siblings. + */ + name?: string + /** + * Flag to determine whether the product should be displayed to customers browsing the store. If `true`, the category will be displayed. If `false`, the category will be hidden from view. + */ + is_visible?: boolean + /** + * The custom URL for the category on the storefront. + */ + url?: string + /** + * The list of children of the category. + */ + children?: definitions['categoriesTreeNode_Full'][] + } + /** + * Common Category object properties. + */ + category_Full: { + /** + * Unique ID of the *Category*. Increments sequentially. + * Read-Only. + */ + id?: number + /** + * The unique numeric ID of the category's parent. This field controls where the category sits in the tree of categories that organize the catalog. + * Required in a POST if creating a child category. + */ + parent_id: number + /** + * The name displayed for the category. Name is unique with respect to the category's siblings. + * Required in a POST. + */ + name: string + /** + * The product description, which can include HTML formatting. + */ + description?: string + /** + * Number of views the category has on the storefront. + */ + views?: number + /** + * Priority this category will be given when included in the menu and category pages. The lower the number, the closer to the top of the results the category will be. + */ + sort_order?: number + /** + * Custom title for the category page. If not defined, the category name will be used as the meta title. + */ + page_title?: string + /** + * A comma-separated list of keywords that can be used to locate the category when searching the store. + */ + search_keywords?: string + /** + * Custom meta keywords for the category page. If not defined, the store's default keywords will be used. Must post as an array like: ["awesome","sauce"]. + */ + meta_keywords?: string[] + /** + * Custom meta description for the category page. If not defined, the store's default meta description will be used. + */ + meta_description?: string + /** + * A valid layout file. (Please refer to [this article](https://support.bigcommerce.com/articles/Public/Creating-Custom-Template-Files/) on creating category files.) This field is writable only for stores with a Blueprint theme applied. + */ + layout_file?: string + /** + * Flag to determine whether the product should be displayed to customers browsing the store. If `true`, the category will be displayed. If `false`, the category will be hidden from view. + */ + is_visible?: boolean + /** + * Determines how the products are sorted on category page load. + */ + default_product_sort?: + | 'use_store_settings' + | 'featured' + | 'newest' + | 'best_selling' + | 'alpha_asc' + | 'alpha_desc' + | 'avg_customer_review' + | 'price_asc' + | 'price_desc' + /** + * Image URL used for this category on the storefront. Images can be uploaded via form file post to `/categories/{categoryId}/image`, or by providing a publicly accessible URL in this field. + */ + image_url?: string + custom_url?: definitions['customUrl_Full'] + } + /** + * Common Brand properties. + */ + brand_Full: { + /** + * Unique ID of the *Brand*. Read-Only. + */ + id?: number + /** + * The name of the brand. Must be unique. + * Required in POST. + */ + name: string + /** + * The title shown in the browser while viewing the brand. + */ + page_title?: string + /** + * Comma-separated list of meta keywords to include in the HTML. + */ + meta_keywords?: string[] + /** + * A meta description to include. + */ + meta_description?: string + /** + * A comma-separated list of keywords that can be used to locate this brand. + */ + 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?: string + custom_url?: definitions['customUrl_Full'] + } + /** + * Common Variant properties. + */ + productVariant_Base: { + /** + * The cost price of the variant. Not affected by Price List prices. + */ + cost_price?: number + /** + * This variant's base price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is `null`, the product's default price (set in the Product resource's `price` field) will be used as the base price. + */ + price?: number + /** + * This variant's sale price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is null, the product's sale price (set in the Product resource's `price` field) will be used as the sale price. + */ + sale_price?: number + /** + * This variant's retail price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is null, the product's retail price (set in the Product resource's `price` field) will be used as the retail price. + */ + retail_price?: number + /** + * This variant's base weight on the storefront. If this value is null, the product's default weight (set in the Product resource's weight field) will be used as the base weight. + */ + weight?: number + /** + * Width of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default width (set in the Product resource's `width` field) will be used as the base width. + */ + width?: number + /** + * Height of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default height (set in the Product resource's `height` field) will be used as the base height. + */ + height?: number + /** + * Depth of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default depth (set in the Product resource's `depth` field) will be used as the base depth. + */ + depth?: number + /** + * Flag used to indicate whether the variant has free shipping. If `true`, the shipping cost for the variant will be zero. + */ + is_free_shipping?: boolean + /** + * A fixed shipping cost for the variant. If defined, this value will be used during checkout instead of normal shipping-cost calculation. + */ + fixed_cost_shipping_price?: number + /** + * If `true`, this variant will not be purchasable on the storefront. + */ + purchasing_disabled?: boolean + /** + * If `purchasing_disabled` is `true`, this message should show on the storefront when the variant is selected. + */ + purchasing_disabled_message?: string + /** + * The UPC code used in feeds for shopping comparison sites and external channel integrations. + */ + upc?: string + /** + * Inventory level for the variant, which is used when the product's inventory_tracking is set to `variant`. + */ + inventory_level?: number + /** + * When the variant hits this inventory level, it is considered low stock. + */ + inventory_warning_level?: number + /** + * Identifies where in a warehouse the variant is located. + */ + bin_picking_number?: string + } + productVariant_Full: definitions['productVariant_Base'] & { + id?: number + product_id?: number + sku?: string + /** + * Read-only reference to v2 API's SKU ID. Null if it is a base variant. + */ + sku_id?: number + /** + * Array of option and option values IDs that make up this variant. Will be empty if the variant is the product's base variant. + */ + option_values?: definitions['productVariantOptionValue_Base'][] + /** + * The price of the variant as seen on the storefront. This price takes into account `sale_price` and any price adjustment rules that are applicable to this variant. + */ + calculated_price?: number + } + /** + * The model for a POST to create variants on a product. + */ + productVariant_Post: { + /** + * The cost price of the variant. Not affected by Price List prices. + */ + cost_price?: number + /** + * This variant's base price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is `null`, the product's default price (set in the Product resource's `price` field) will be used as the base price. + */ + price?: number + /** + * This variant's sale price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is null, the product's sale price (set in the Product resource's `price` field) will be used as the sale price. + */ + sale_price?: number + /** + * This variant's retail price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is null, the product's retail price (set in the Product resource's `price` field) will be used as the retail price. + */ + retail_price?: number + /** + * This variant's base weight on the storefront. If this value is null, the product's default weight (set in the Product resource's weight field) will be used as the base weight. + */ + weight?: number + /** + * Width of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default width (set in the Product resource's `width` field) will be used as the base width. + */ + width?: number + /** + * Height of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default height (set in the Product resource's `height` field) will be used as the base height. + */ + height?: number + /** + * Depth of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default depth (set in the Product resource's `depth` field) will be used as the base depth. + */ + depth?: number + /** + * Flag used to indicate whether the variant has free shipping. If `true`, the shipping cost for the variant will be zero. + */ + is_free_shipping?: boolean + /** + * A fixed shipping cost for the variant. If defined, this value will be used during checkout instead of normal shipping-cost calculation. + */ + fixed_cost_shipping_price?: number + /** + * If `true`, this variant will not be purchasable on the storefront. + */ + purchasing_disabled?: boolean + /** + * If `purchasing_disabled` is `true`, this message should show on the storefront when the variant is selected. + */ + purchasing_disabled_message?: string + /** + * The UPC code used in feeds for shopping comparison sites and external channel integrations. + */ + upc?: string + /** + * Inventory level for the variant, which is used when the product's inventory_tracking is set to `variant`. + */ + inventory_level?: number + /** + * When the variant hits this inventory level, it is considered low stock. + */ + inventory_warning_level?: number + /** + * Identifies where in a warehouse the variant is located. + */ + bin_picking_number?: string + } & { + product_id?: number + sku?: string + /** + * Array of option and option values IDs that make up this variant. Will be empty if the variant is the product's base variant. + */ + option_values?: { id?: number; option_id?: number }[] + } + variantCollection_Put: definitions['productVariant_Full'][] + /** + * The model for a PUT to update variants on a product. + */ + variant_Put: { + /** + * The cost price of the variant. Not affected by Price List prices. + */ + cost_price?: number + /** + * This variant's base price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is `null`, the product's default price (set in the Product resource's `price` field) will be used as the base price. + */ + price?: number + /** + * This variant's sale price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is null, the product's sale price (set in the Product resource's `price` field) will be used as the sale price. + */ + sale_price?: number + /** + * This variant's retail price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is null, the product's retail price (set in the Product resource's `price` field) will be used as the retail price. + */ + retail_price?: number + /** + * This variant's base weight on the storefront. If this value is null, the product's default weight (set in the Product resource's weight field) will be used as the base weight. + */ + weight?: number + /** + * Width of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default width (set in the Product resource's `width` field) will be used as the base width. + */ + width?: number + /** + * Height of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default height (set in the Product resource's `height` field) will be used as the base height. + */ + height?: number + /** + * Depth of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default depth (set in the Product resource's `depth` field) will be used as the base depth. + */ + depth?: number + /** + * Flag used to indicate whether the variant has free shipping. If `true`, the shipping cost for the variant will be zero. + */ + is_free_shipping?: boolean + /** + * A fixed shipping cost for the variant. If defined, this value will be used during checkout instead of normal shipping-cost calculation. + */ + fixed_cost_shipping_price?: number + /** + * If `true`, this variant will not be purchasable on the storefront. + */ + purchasing_disabled?: boolean + /** + * If `purchasing_disabled` is `true`, this message should show on the storefront when the variant is selected. + */ + purchasing_disabled_message?: string + /** + * The UPC code used in feeds for shopping comparison sites and external channel integrations. + */ + upc?: string + /** + * Inventory level for the variant, which is used when the product's inventory_tracking is set to `variant`. + */ + inventory_level?: number + /** + * When the variant hits this inventory level, it is considered low stock. + */ + inventory_warning_level?: number + /** + * Identifies where in a warehouse the variant is located. + */ + bin_picking_number?: string + } & { id?: number } + /** + * The model for a POST to create variants on a product. + */ + productVariant_Post_Product: definitions['productVariant_Base'] & { + sku?: string + option_values?: { + /** + * The name of the option. + */ + option_display_name?: string + /** + * The label of the option value. + */ + label?: string + }[] + } + /** + * The model for a PUT to update variants on a product. + */ + productVariant_Put_Product: { + /** + * The cost price of the variant. Not affected by Price List prices. + */ + cost_price?: number + /** + * This variant's base price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is `null`, the product's default price (set in the Product resource's `price` field) will be used as the base price. + */ + price?: number + /** + * This variant's sale price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is null, the product's sale price (set in the Product resource's `price` field) will be used as the sale price. + */ + sale_price?: number + /** + * This variant's retail price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is null, the product's retail price (set in the Product resource's `price` field) will be used as the retail price. + */ + retail_price?: number + /** + * This variant's base weight on the storefront. If this value is null, the product's default weight (set in the Product resource's weight field) will be used as the base weight. + */ + weight?: number + /** + * Width of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default width (set in the Product resource's `width` field) will be used as the base width. + */ + width?: number + /** + * Height of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default height (set in the Product resource's `height` field) will be used as the base height. + */ + height?: number + /** + * Depth of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default depth (set in the Product resource's `depth` field) will be used as the base depth. + */ + depth?: number + /** + * Flag used to indicate whether the variant has free shipping. If `true`, the shipping cost for the variant will be zero. + */ + is_free_shipping?: boolean + /** + * A fixed shipping cost for the variant. If defined, this value will be used during checkout instead of normal shipping-cost calculation. + */ + fixed_cost_shipping_price?: number + /** + * If `true`, this variant will not be purchasable on the storefront. + */ + purchasing_disabled?: boolean + /** + * If `purchasing_disabled` is `true`, this message should show on the storefront when the variant is selected. + */ + purchasing_disabled_message?: string + /** + * The UPC code used in feeds for shopping comparison sites and external channel integrations. + */ + upc?: string + /** + * Inventory level for the variant, which is used when the product's inventory_tracking is set to `variant`. + */ + inventory_level?: number + /** + * When the variant hits this inventory level, it is considered low stock. + */ + inventory_warning_level?: number + /** + * Identifies where in a warehouse the variant is located. + */ + bin_picking_number?: string + product_id?: number + sku?: string + } + productVariantOptionValue_Full: { + /** + * The name of the option. + */ + option_display_name?: string + /** + * The label of the option value. + */ + label?: string + } & definitions['productVariantOptionValue_Base'] + /** + * The model for a POST to create option values on a product. + */ + productOptionValue_Post_Product: { + /** + * The name of the option. + */ + option_display_name?: string + /** + * The label of the option value. + */ + label?: string + } + /** + * Common Product Variant Option properties. + */ + productVariantOptionValue_Base: { id?: number; option_id?: number } + /** + * The model for a POST to create option values on a variant. + */ + productVariantOptionValue_Post: { id?: number; option_id?: number } + resp_productOptionValue: { + data?: definitions['productOptionOptionValue_Full'] + /** + * Empty meta object; may be used later. + */ + meta?: { ''?: string } + } + /** + * Common Product Option `option_value` properties. + */ + productOptionOptionValue_Base: { + /** + * The flag for preselecting a value as the default on the storefront. This field is not supported for swatch options/modifiers. + */ + is_default?: boolean + /** + * The text display identifying the value on the storefront. Required in a /POST. + */ + label: string + /** + * The order in which the value will be displayed on the product page. Required in a /POST. + */ + sort_order: number + /** + * Extra data describing the value, based on the type of option or modifier with which the value is associated. The `swatch` type option can accept an array of `colors`, with up to three hexidecimal color keys; or an `image_url`, which is a full image URL path including protocol. The `product list` type option requires a `product_id`. The `checkbox` type option requires a boolean flag, called `checked_value`, to determine which value is considered to be the checked state. If no data is available, returns `null`. + */ + value_data?: { [key: string]: any } + } + /** + * Product Option `option_value`. + */ + productOptionOptionValue_Full: definitions['productOptionOptionValue_Base'] & { + /** + * The unique numeric ID of the value; increments sequentially. + */ + id?: number + } + /** + * The model for a POST to create option values on a product. + */ + productOptionValue_Post: { + /** + * The flag for preselecting a value as the default on the storefront. This field is not supported for swatch options/modifiers. + */ + is_default?: boolean + /** + * The text display identifying the value on the storefront. Required in a /POST. + */ + label: string + /** + * The order in which the value will be displayed on the product page. Required in a /POST. + */ + sort_order: number + /** + * Extra data describing the value, based on the type of option or modifier with which the value is associated. The `swatch` type option can accept an array of `colors`, with up to three hexidecimal color keys; or an `image_url`, which is a full image URL path including protocol. The `product list` type option requires a `product_id`. The `checkbox` type option requires a boolean flag, called `checked_value`, to determine which value is considered to be the checked state. + */ + value_data?: { [key: string]: any } + } + /** + * The model for a PUT to update option values on a product. + */ + productOptionValue_Put: { + /** + * The flag for preselecting a value as the default on the storefront. This field is not supported for swatch options/modifiers. + */ + is_default?: boolean + /** + * The text display identifying the value on the storefront. Required in a /POST. + */ + label: string + /** + * The order in which the value will be displayed on the product page. Required in a /POST. + */ + sort_order: number + /** + * Extra data describing the value, based on the type of option or modifier with which the value is associated. The `swatch` type option can accept an array of `colors`, with up to three hexidecimal color keys; or an `image_url`, which is a full image URL path including protocol. The `product list` type option requires a `product_id`. The `checkbox` type option requires a boolean flag, called `checked_value`, to determine which value is considered to be the checked state. + */ + value_data?: { [key: string]: any } + } & { + /** + * The unique numeric ID of the value; increments sequentially. + */ + id?: number + } + /** + * Common ProductImage properties. + */ + productImage_Base: { + /** + * The local path to the original image file uploaded to BigCommerce. + */ + image_file?: string + /** + * Flag for identifying whether the image is used as the product's thumbnail. + */ + is_thumbnail?: boolean + /** + * The order in which the image will be displayed on the product page. Higher integers give the image a lower priority. When updating, if the image is given a lower priority, all images with a `sort_order` the same as or greater than the image's new `sort_order` value will have their `sort_order`s reordered. + */ + sort_order?: number + /** + * The description for the image. + */ + description?: string + /** + * Must be a fully qualified URL path, including protocol. Limit of 8MB per file. + */ + image_url?: string + } + /** + * The model for a POST to create an image on a product. + */ + productImage_Post: { + /** + * The unique numeric ID of the image; increments sequentially. + */ + id?: number + /** + * The unique numeric identifier for the product with which the image is associated. + */ + product_id?: number + /** + * The local path to the original image file uploaded to BigCommerce. + */ + image_file?: string + /** + * The zoom URL for this image. By default, this is used as the zoom image on product pages when zoom images are enabled. + */ + url_zoom?: string + /** + * The standard URL for this image. By default, this is used for product-page images. + */ + url_standard?: string + /** + * The thumbnail URL for this image. By default, this is the image size used on the category page and in side panels. + */ + url_thumbnail?: string + /** + * The tiny URL for this image. By default, this is the image size used for thumbnails beneath the product image on a product page. + */ + url_tiny?: string + /** + * The date on which the product image was modified. + */ + date_modified?: string + /** + * Flag for identifying whether the image is used as the product's thumbnail. + */ + is_thumbnail?: boolean + /** + * The order in which the image will be displayed on the product page. Higher integers give the image a lower priority. When updating, if the image is given a lower priority, all images with a `sort_order` the same as or greater than the image's new `sort_order` value will have their `sort_order`s reordered. + */ + sort_order?: number + /** + * The description for the image. + */ + description?: string + } & { + /** + * Must be a fully qualified URL path, including protocol. Limit of 8MB per file. + */ + image_url?: string + /** + * Must be sent as a multipart/form-data field in the request body. + */ + image_file?: string + } + /** + * The model for a PUT to update applicable Product Image fields. + */ + productImage_Put: { + /** + * The unique numeric ID of the image; increments sequentially. + */ + id?: number + /** + * The unique numeric identifier for the product with which the image is associated. + */ + product_id?: number + /** + * The local path to the original image file uploaded to BigCommerce. + */ + image_file?: string + /** + * The zoom URL for this image. By default, this is used as the zoom image on product pages when zoom images are enabled. + */ + url_zoom?: string + /** + * The standard URL for this image. By default, this is used for product-page images. + */ + url_standard?: string + /** + * The thumbnail URL for this image. By default, this is the image size used on the category page and in side panels. + */ + url_thumbnail?: string + /** + * The tiny URL for this image. By default, this is the image size used for thumbnails beneath the product image on a product page. + */ + url_tiny?: string + /** + * The date on which the product image was modified. + */ + date_modified?: string + /** + * Flag for identifying whether the image is used as the product's thumbnail. + */ + is_thumbnail?: boolean + /** + * The order in which the image will be displayed on the product page. Higher integers give the image a lower priority. When updating, if the image is given a lower priority, all images with a `sort_order` the same as or greater than the image's new `sort_order` value will have their `sort_order`s reordered. + */ + sort_order?: number + /** + * The description for the image. + */ + description?: string + } + /** + * The model for a POST to create a video on a product. + */ + productVideo_Base: { + /** + * The title for the video. If left blank, this will be filled in according to data on a host site. + */ + title?: string + /** + * The description for the video. If left blank, this will be filled in according to data on a host site. + */ + description?: string + /** + * The order in which the video will be displayed on the product page. Higher integers give the video a lower priority. When updating, if the video is given a lower priority, all videos with a `sort_order` the same as or greater than the video's new `sort_order` value will have their `sort_order`s reordered. + */ + sort_order?: number + /** + * The video type (a short name of a host site). + */ + type?: 'youtube' + /** + * The ID of the video on a host site. + */ + video_id?: string + } + /** + * A product video model. + */ + productVideo_Full: definitions['productVideo_Base'] & { + /** + * The unique numeric ID of the product video; increments sequentially. + */ + id?: number + /** + * The unique numeric identifier for the product with which the image is associated. + */ + product_id?: number + /** + * Length of the video. This will be filled in according to data on a host site. + */ + length?: string + } + /** + * The model for a POST to create a video on a product. + */ + productVideo_Post: definitions['productVideo_Base'] + /** + * The model for a PUT to update a video on a product. + */ + productVideo_Put: definitions['productVideo_Base'] & { + /** + * The unique numeric ID of the product video; increments sequentially. + */ + id?: number + } + productReview_Base: { + /** + * The title for the product review. + * Required in /POST. + */ + title: string + /** + * The text for the product review. + */ + text?: string + /** + * The status of the product review. Must be one of `approved`, `disapproved` or `pending`. + */ + status?: string + /** + * The rating of the product review. Must be one of 0, 1, 2, 3, 4, 5. + */ + rating?: number + /** + * The email of the reviewer. Must be a valid email, or an empty string. + */ + email?: string + /** + * The name of the reviewer. + */ + name?: string + /** + * Date the product was reviewed. Required in /POST. + */ + date_reviewed: string + } + /** + * A product review model. + */ + productReview_Full: definitions['productReview_Base'] & { + /** + * The unique numeric ID of the product review; increments sequentially. + */ + id?: number + /** + * The unique numeric identifier for the product with which the review is associated. + */ + product_id?: number + /** + * Date the product review was created. + */ + date_created?: string + /** + * Date the product review was modified. + */ + date_modified?: string + } + /** + * The model for a POST to create a product review. + */ + productReview_Post: { + /** + * The title for the product review. + * Required in /POST. + */ + title: string + /** + * The text for the product review. + */ + text?: string + /** + * The status of the product review. Must be one of `approved`, `disapproved` or `pending`. + */ + status?: string + /** + * The rating of the product review. Must be one of 0, 1, 2, 3, 4, 5. + */ + rating?: number + /** + * The email of the reviewer. Must be a valid email, or an empty string. + */ + email?: string + /** + * The name of the reviewer. + */ + name?: string + /** + * Date the product was reviewed. Required in /POST. + */ + date_reviewed: string + } + /** + * The model for a PUT to update a product review. + */ + productReview_Put: { + /** + * The title for the product review. + * Required in /POST. + */ + title: string + /** + * The text for the product review. + */ + text?: string + /** + * The status of the product review. Must be one of `approved`, `disapproved` or `pending`. + */ + status?: string + /** + * The rating of the product review. Must be one of 0, 1, 2, 3, 4, 5. + */ + rating?: number + /** + * The email of the reviewer. Must be a valid email, or an empty string. + */ + email?: string + /** + * The name of the reviewer. + */ + name?: string + /** + * Date the product was reviewed. Required in /POST. + */ + date_reviewed: string + } + /** + * Image Response returns for: + * * Create Variant Image + * * Create Modifier Image + * * Create Category Image + * * Create Brand Image + */ + resp_productImage: { + data?: definitions['productImage_Full'] + /** + * Empty meta object; may be used later. + */ + meta?: { [key: string]: any } + } + /** + * An object containing a publicly accessible image URL, or a form post that contains an image file. + */ + resourceImage_Full: { + /** + * A public URL for a GIF, JPEG, or PNG image. Limit of 8MB per file. + */ + image_url?: string + } + product_Post: definitions['product_Base'] & { + variants?: definitions['productVariant_Post_Product'] + } + /** + * The model for a PUT to update a product. + */ + product_Put: { + /** + * The unique numerical ID of the product; increments sequentially. + */ + id?: number + } & definitions['product_Base'] & { + variants?: definitions['productVariant_Put_Product'] + } + /** + * Catalog Summary object describes a lightweight summary of the catalog. + */ + catalogSummary_Full: { + /** + * A count of all inventory items in the catalog. + */ + inventory_count?: number + /** + * Total value of store's inventory. + */ + inventory_value?: number + /** + * ID of the category containing the most products. + */ + primary_category_id?: number + /** + * Name of the category containing the most products. + */ + primary_category_name?: string + /** + * Total number of variants + */ + variant_count?: number + /** + * Highest priced variant + */ + highest_variant_price?: number + /** + * Average price of all variants + */ + average_variant_price?: number + /** + * Lowest priced variant in the store + */ + lowest_variant_price?: string + oldest_variant_date?: string + newest_variant_date?: string + } + /** + * Metafield for products, categories, variants, and brands. The max number of metafields allowed on each product, category, variant, or brand is fifty. For more information, see [Platform Limits](https://support.bigcommerce.com/s/article/Platform-Limits) in the Help Center. + */ + metafield_Base: { + /** + * Unique ID of the *Metafield*. Read-Only. + */ + id?: number + /** + * Determines the visibility and writeability of the field by other API consumers. + * + * |Value|Description + * |-|-| + * |`app_only`|Private to the app that owns the field| + * |`read`|Visible to other API consumers| + * |`write`|Open for reading and writing by other API consumers| + * |`read_and_sf_access`|Visible to other API consumers, including on storefront| + * |`write_and_sf_access`|Open for reading and writing by other API consumers, including on storefront| + */ + permission_set: + | 'app_only' + | 'read' + | 'write' + | 'read_and_sf_access' + | 'write_and_sf_access' + /** + * Namespace for the metafield, for organizational purposes. This is set set by the developer. Required for POST. + */ + namespace: string + /** + * The name of the field, for example: `location_id`, `color`. Required for POST. + */ + key: string + /** + * The value of the field, for example: `1`, `blue`. Required for POST. + */ + value: string + /** + * Description for the metafields. + */ + description?: string + /** + * The type of resource with which the metafield is associated. + */ + resource_type?: 'category' | 'brand' | 'product' | 'variant' + /** + * The ID for the resource with which the metafield is associated. + */ + resource_id?: number + /** + * Date and time of the metafield's creation. Read-Only. + */ + date_created?: string + /** + * Date and time when the metafield was last updated. Read-Only. + */ + date_modified?: string + } + /** + * Common ComplexRule properties. + */ + complexRule_Base: { + /** + * The unique numeric ID of the rule; increments sequentially. + * Read-Only + */ + id?: number + /** + * The unique numeric ID of the product with which the rule is associated; increments sequentially. + */ + product_id?: number + /** + * The priority to give this rule when making adjustments to the product properties. + */ + sort_order?: number + /** + * Flag for determining whether the rule is to be used when adjusting a product's price, weight, image, or availabilty. + */ + enabled?: boolean + /** + * Flag for determining whether other rules should not be applied after this rule has been applied. + */ + stop?: boolean + /** + * Flag for determining whether the rule should disable purchasing of a product when the conditions are applied. + */ + purchasing_disabled?: boolean + /** + * Message displayed on the storefront when a rule disables the purchasing of a product. + */ + purchasing_disabled_message?: string + /** + * Flag for determining whether the rule should hide purchasing of a product when the conditions are applied. + */ + purchasing_hidden?: boolean + /** + * The URL for an image displayed on the storefront when the conditions are applied. Limit of 8MB per file. + */ + image_url?: string + price_adjuster?: definitions['adjuster_Full'] + weight_adjuster?: definitions['adjuster_Full'] + conditions?: definitions['complexRuleConditionBase'][] + } + /** + * Gets custom fields associated with a product. These allow you to specify additional information that will appear on the product's page, such as a book's ISBN or a DVD's release date. + */ + productCustomField_Base: { + /** + * The unique numeric ID of the custom field; increments sequentially. + * Read-Only + */ + id?: number + /** + * The name of the field, shown on the storefront, orders, etc. Required for /POST + */ + name: string + /** + * The name of the field, shown on the storefront, orders, etc. Required for /POST + */ + value: string + } + /** + * The model for a POST to create a custom field on a product. + */ + productCustomField_Post: { + /** + * The unique numeric ID of the custom field; increments sequentially. + * Read-Only + */ + id?: number + /** + * The name of the field, shown on the storefront, orders, etc. Required for /POST + */ + name: string + /** + * The name of the field, shown on the storefront, orders, etc. Required for /POST + */ + value: string + } + /** + * The model for a PUT to update a custom field on a product. + */ + productCustomField_Put: { + /** + * The unique numeric ID of the custom field; increments sequentially. + * Read-Only + */ + id?: number + /** + * The name of the field, shown on the storefront, orders, etc. Required for /POST + */ + name: string + /** + * The name of the field, shown on the storefront, orders, etc. Required for /POST + */ + value: string + } + /** + * Complex rules may return with conditions that apply to one or more variants, or with a single modifier value (if the rules were created using the v2 API or the control panel). Complex rules created or updated in the v3 API must have conditions that either reference multiple `modifier_value_id`'s, or else reference a `modifier_value_id` and a `variant_id`. + */ + complexRuleConditionBase: { + /** + * The unique numeric ID of the rule condition; increments sequentially. Read-Only + */ + id?: number + /** + * The unique numeric ID of the rule with which the condition is associated. + * Read-Only + */ + rule_id?: number + /** + * The unique numeric ID of the modifier with which the rule condition is associated. + * Required in /POST. + */ + modifier_id: number + /** + * The unique numeric ID of the modifier value with which the rule condition is associated. + * Required in /POST. + */ + modifier_value_id: number + /** + * The unique numeric ID of the variant with which the rule condition is associated. + * Required in /POST. + */ + variant_id: number + /** + * (READ-ONLY:) The unique numeric ID of the SKU (v2 API), or Combination, with which the rule condition is associated. This is to maintain cross-compatibility between v2 and v3. + */ + combination_id?: number + } + /** + * The custom URL for the category on the storefront. + */ + customUrl_Full: { + /** + * Category URL on the storefront. + */ + url?: string + /** + * Returns `true` if the URL has been changed from its default state (the auto-assigned URL that BigCommerce provides). + */ + is_customized?: boolean + } + /** + * Common Bulk Pricing Rule properties + */ + bulkPricingRule_Full: { + /** + * Unique ID of the *Bulk Pricing Rule*. Read-Only. + */ + id?: number + /** + * The minimum inclusive quantity of a product to satisfy this rule. Must be greater than or equal to zero. + * Required in /POST. + */ + quantity_min: number + /** + * The maximum inclusive quantity of a product to satisfy this rule. Must be greater than the `quantity_min` value – unless this field has a value of 0 (zero), in which case there will be no maximum bound for this rule. + * Required in /POST. + */ + quantity_max: number + /** + * The type of adjustment that is made. Values: `price` - the adjustment amount per product; `percent` - the adjustment as a percentage of the original price; `fixed` - the adjusted absolute price of the product. + * Required in /POST. + */ + type: 'price' | 'percent' | 'fixed' + /** + * The discount can be a fixed dollar amount or a percentage. For a fixed dollar amount enter it as an integer and the response will return as an integer. For percentage enter the amount as the percentage divided by 100 using string format. For example 10% percent would be “.10”. The response will return as an integer. + * Required in /POST. + */ + amount: number + } + /** + * The values for option config can vary based on the Modifier created. + */ + productOptionConfig_Full: { + /** + * (date, text, multi_line_text, numbers_only_text) The default value. Shown on a date option as an ISO-8601–formatted string, or on a text option as a string. + */ + default_value?: string + /** + * (checkbox) Flag for setting the checkbox to be checked by default. + */ + checked_by_default?: boolean + /** + * (checkbox) Label displayed for the checkbox option. + */ + checkbox_label?: string + /** + * (date) Flag to limit the dates allowed to be entered on a date option. + */ + date_limited?: boolean + /** + * (date) The type of limit that is allowed to be entered on a date option. + */ + date_limit_mode?: 'earliest' | 'range' | 'latest' + /** + * (date) The earliest date allowed to be entered on the date option, as an ISO-8601 formatted string. + */ + date_earliest_value?: string + /** + * (date) The latest date allowed to be entered on the date option, as an ISO-8601 formatted string. + */ + date_latest_value?: string + /** + * (file) The kind of restriction on the file types that can be uploaded with a file upload option. Values: `specific` - restricts uploads to particular file types; `all` - allows all file types. + */ + file_types_mode?: 'specific' | 'all' + /** + * (file) The type of files allowed to be uploaded if the `file_type_option` is set to `specific`. Values: + * `images` - Allows upload of image MIME types (`bmp`, `gif`, `jpg`, `jpeg`, `jpe`, `jif`, `jfif`, `jfi`, `png`, `wbmp`, `xbm`, `tiff`). `documents` - Allows upload of document MIME types (`txt`, `pdf`, `rtf`, `doc`, `docx`, `xls`, `xlsx`, `accdb`, `mdb`, `one`, `pps`, `ppsx`, `ppt`, `pptx`, `pub`, `odt`, `ods`, `odp`, `odg`, `odf`). + * `other` - Allows file types defined in the `file_types_other` array. + */ + file_types_supported?: string[] + /** + * (file) A list of other file types allowed with the file upload option. + */ + file_types_other?: string[] + /** + * (file) The maximum size for a file that can be used with the file upload option. This will still be limited by the server. + */ + file_max_size?: number + /** + * (text, multi_line_text) Flag to validate the length of a text or multi-line text input. + */ + text_characters_limited?: boolean + /** + * (text, multi_line_text) The minimum length allowed for a text or multi-line text option. + */ + text_min_length?: number + /** + * (text, multi_line_text) The maximum length allowed for a text or multi line text option. + */ + text_max_length?: number + /** + * (multi_line_text) Flag to validate the maximum number of lines allowed on a multi-line text input. + */ + text_lines_limited?: boolean + /** + * (multi_line_text) The maximum number of lines allowed on a multi-line text input. + */ + text_max_lines?: number + /** + * (numbers_only_text) Flag to limit the value of a number option. + */ + number_limited?: boolean + /** + * (numbers_only_text) The type of limit on values entered for a number option. + */ + number_limit_mode?: 'lowest' | 'highest' | 'range' + /** + * (numbers_only_text) The lowest allowed value for a number option if `number_limited` is true. + */ + number_lowest_value?: number + /** + * (numbers_only_text) The highest allowed value for a number option if `number_limited` is true. + */ + number_highest_value?: number + /** + * (numbers_only_text) Flag to limit the input on a number option to whole numbers only. + */ + number_integers_only?: boolean + /** + * (product_list, product_list_with_images) Flag for automatically adjusting inventory on a product included in the list. + */ + product_list_adjusts_inventory?: boolean + /** + * (product_list, product_list_with_images) Flag to add the optional product's price to the main product's price. + */ + product_list_adjusts_pricing?: boolean + /** + * (product_list, product_list_with_images) How to factor the optional product's weight and package dimensions into the shipping quote. Values: `none` - don't adjust; `weight` - use shipping weight only; `package` - use weight and dimensions. + */ + product_list_shipping_calc?: 'none' | 'weight' | 'package' + } + /** + * Adjuster for Complex Rules. + */ + adjuster_Full: { + /** + * The type of adjuster for either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster?: 'relative' | 'percentage' + /** + * The numeric amount by which the adjuster will change either the price or the weight of the variant, when the modifier value is selected on the storefront. + */ + adjuster_value?: number + } + /** + * Errors during batch usage for the BigCommerce API. + */ + resp_variantBatchError: { + batch_errors?: (definitions['error_Base'] & { + errors?: { additionalProperties?: string } + })[] + } + /** + * Data about the response, including pagination and collection totals. + */ + metaCollection_Full: { pagination?: definitions['pagination_Full'] } + /** + * Data about the response, including pagination and collection totals. + */ + pagination_Full: { + /** + * Total number of items in the result set. + */ + total?: number + /** + * Total number of items in the collection response. + */ + count?: number + /** + * The amount of items returned in the collection per page, controlled by the limit parameter. + */ + per_page?: number + /** + * The page you are currently on within the collection. + */ + current_page?: number + /** + * The total number of pages in the collection. + */ + total_pages?: number + /** + * Pagination links for the previous and next parts of the whole collection. + */ + links?: { + /** + * Link to the previous page returned in the response. + */ + previous?: string + /** + * Link to the current page returned in the response. + */ + current?: string + /** + * Link to the next page returned in the response. + */ + next?: string + } + } + /** + * Empty meta object; may be used later. + */ + metaEmpty_Full: { [key: string]: any } + errorResponse_Full: definitions['error_Base'] & { + errors?: definitions['detailedErrors'] + } + /** + * Error payload for the BigCommerce API. + */ + error_Base: { + /** + * The HTTP status code. + */ + status?: number + /** + * The error title describing the particular error. + */ + title?: string + type?: string + instance?: string + } + /** + * Error payload for the BigCommerce API. + */ + errorNotFound: { + /** + * 404 HTTP status code. + */ + status?: number + /** + * The error title describing the particular error. + */ + title?: string + type?: string + instance?: string + } + /** + * A gift-certificate model. + */ + giftCertificate_Full: { + /** + * The gift-certificate code. + */ + code?: string + /** + * The balance on a gift certificate when it was purchased. + */ + original_balance?: number + /** + * The balance on a gift certificate at the time of this purchase. + */ + starting_balance?: number + /** + * The remaining balance on a gift certificate. + */ + remaining_balance?: number + /** + * The status of a gift certificate: `active` - gift certificate is active; `pending` - gift certificate purchase is pending; `disabled` - gift certificate is disabled; `expired` - gift certificate is expired. + */ + status?: 'active' | 'pending' | 'disabled' | 'expired' + } + /** + * No-content response for the BigCommerce API. + */ + errorNoContent: { + /** + * 204 HTTP status code. + */ + status?: number + /** + * The error title describing the situation. + */ + title?: string + type?: string + instance?: string + } + detailedErrors: { additionalProperties?: string } + product_Full: definitions['product_Base'] & { + /** + * The date on which the product was created. + */ + date_created?: string + /** + * The date on which the product was modified. + */ + date_modified?: string + /** + * ID of the product. Read Only. + */ + id?: number + /** + * The unique identifier of the base variant associated with a simple product. This value is `null` for complex products. + */ + base_variant_id?: number + /** + * The price of the product as seen on the storefront. It will be equal to the `sale_price`, if set, and the `price` if there is not a `sale_price`. + */ + calculated_price?: number + options?: definitions['productOption_Base'][] + modifiers?: definitions['productModifier_Full'][] + /** + * Minimum Advertised Price. + */ + map_price?: number + /** + * Indicates that the product is in an Option Set (legacy V2 concept). + */ + option_set_id?: number + /** + * Legacy template setting which controls if the option set shows up to the side of or below the product image and description. + */ + option_set_display?: string + } & { variants?: definitions['productVariant_Full'] } + /** + * Common ProductImage properties. + */ + productImage_Full: definitions['productImage_Base'] & { + /** + * The unique numeric ID of the image; increments sequentially. + */ + id?: number + /** + * The unique numeric identifier for the product with which the image is associated. + */ + product_id?: number + /** + * The zoom URL for this image. By default, this is used as the zoom image on product pages when zoom images are enabled. + */ + url_zoom?: string + /** + * The standard URL for this image. By default, this is used for product-page images. + */ + url_standard?: string + /** + * The thumbnail URL for this image. By default, this is the image size used on the category page and in side panels. + */ + url_thumbnail?: string + /** + * The tiny URL for this image. By default, this is the image size used for thumbnails beneath the product image on a product page. + */ + url_tiny?: string + /** + * The date on which the product image was modified. + */ + date_modified?: string + } + metafield_Post: definitions['metafield_Base'] + /** + * The model for batch updating products. + */ + product_Put_Collection: ({ + /** + * The unique numerical ID of the product; increments sequentially. Required on batch product `PUT` requests. + */ + id: number + } & definitions['product_Base'])[] + /** + * The values for option config can vary based on the Modifier created. + */ + config_Full: { + /** + * (date, text, multi_line_text, numbers_only_text) The default value. Shown on a date option as an ISO-8601–formatted string, or on a text option as a string. + */ + default_value?: string + /** + * (checkbox) Flag for setting the checkbox to be checked by default. + */ + checked_by_default?: boolean + /** + * (checkbox) Label displayed for the checkbox option. + */ + checkbox_label?: string + /** + * (date) Flag to limit the dates allowed to be entered on a date option. + */ + date_limited?: boolean + /** + * (date) The type of limit that is allowed to be entered on a date option. + */ + date_limit_mode?: 'earliest' | 'range' | 'latest' + /** + * (date) The earliest date allowed to be entered on the date option, as an ISO-8601 formatted string. + */ + date_earliest_value?: string + /** + * (date) The latest date allowed to be entered on the date option, as an ISO-8601 formatted string. + */ + date_latest_value?: string + /** + * (file) The kind of restriction on the file types that can be uploaded with a file upload option. Values: `specific` - restricts uploads to particular file types; `all` - allows all file types. + */ + file_types_mode?: 'specific' | 'all' + /** + * (file) The type of files allowed to be uploaded if the `file_type_option` is set to `specific`. Values: + * `images` - Allows upload of image MIME types (`bmp`, `gif`, `jpg`, `jpeg`, `jpe`, `jif`, `jfif`, `jfi`, `png`, `wbmp`, `xbm`, `tiff`). `documents` - Allows upload of document MIME types (`txt`, `pdf`, `rtf`, `doc`, `docx`, `xls`, `xlsx`, `accdb`, `mdb`, `one`, `pps`, `ppsx`, `ppt`, `pptx`, `pub`, `odt`, `ods`, `odp`, `odg`, `odf`). + * `other` - Allows file types defined in the `file_types_other` array. + */ + file_types_supported?: string[] + /** + * (file) A list of other file types allowed with the file upload option. + */ + file_types_other?: string[] + /** + * (file) The maximum size for a file that can be used with the file upload option. This will still be limited by the server. + */ + file_max_size?: number + /** + * (text, multi_line_text) Flag to validate the length of a text or multi-line text input. + */ + text_characters_limited?: boolean + /** + * (text, multi_line_text) The minimum length allowed for a text or multi-line text option. + */ + text_min_length?: number + /** + * (text, multi_line_text) The maximum length allowed for a text or multi line text option. + */ + text_max_length?: number + /** + * (multi_line_text) Flag to validate the maximum number of lines allowed on a multi-line text input. + */ + text_lines_limited?: boolean + /** + * (multi_line_text) The maximum number of lines allowed on a multi-line text input. + */ + text_max_lines?: number + /** + * (numbers_only_text) Flag to limit the value of a number option. + */ + number_limited?: boolean + /** + * (numbers_only_text) The type of limit on values entered for a number option. + */ + number_limit_mode?: 'lowest' | 'highest' | 'range' + /** + * (numbers_only_text) The lowest allowed value for a number option if `number_limited` is true. + */ + number_lowest_value?: number + /** + * (numbers_only_text) The highest allowed value for a number option if `number_limited` is true. + */ + number_highest_value?: number + /** + * (numbers_only_text) Flag to limit the input on a number option to whole numbers only. + */ + number_integers_only?: boolean + /** + * (product_list, product_list_with_images) Flag for automatically adjusting inventory on a product included in the list. + */ + product_list_adjusts_inventory?: boolean + /** + * (product_list, product_list_with_images) Flag to add the optional product's price to the main product's price. + */ + product_list_adjusts_pricing?: boolean + /** + * (product_list, product_list_with_images) How to factor the optional product's weight and package dimensions into the shipping quote. Values: `none` - don't adjust; `weight` - use shipping weight only; `package` - use weight and dimensions. + */ + product_list_shipping_calc?: 'none' | 'weight' | 'package' + } + adjusters_Full: { + price?: definitions['adjuster_Full'] + weight?: definitions['adjuster_Full'] + /** + * The URL for an image displayed on the storefront when the modifier value is selected.Limit of 8MB per file. + */ + image_url?: string + purchasing_disabled?: { + /** + * Flag for whether the modifier value disables purchasing when selected on the storefront. This can be used for temporarily disabling a particular modifier value. + */ + status?: boolean + /** + * The message displayed on the storefront when the purchasing disabled status is `true`. + */ + message?: string + } + } + /** + * Variant properties used on: + * * `/catalog/products/variants` + * * `/catalog/variants` + */ + variant_Base: { + /** + * The cost price of the variant. Not affected by Price List prices. + */ + cost_price?: number + /** + * This variant's base price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is `null`, the product's default price (set in the Product resource's `price` field) will be used as the base price. + */ + price?: number + /** + * This variant's sale price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is null, the product's sale price (set in the Product resource's `price` field) will be used as the sale price. + */ + sale_price?: number + /** + * This variant's retail price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is null, the product's retail price (set in the Product resource's `price` field) will be used as the retail price. + */ + retail_price?: number + /** + * This variant's base weight on the storefront. If this value is null, the product's default weight (set in the Product resource's weight field) will be used as the base weight. + */ + weight?: number + /** + * Width of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default width (set in the Product resource's `width` field) will be used as the base width. + */ + width?: number + /** + * Height of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default height (set in the Product resource's `height` field) will be used as the base height. + */ + height?: number + /** + * Depth of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default depth (set in the Product resource's `depth` field) will be used as the base depth. + */ + depth?: number + /** + * Flag used to indicate whether the variant has free shipping. If `true`, the shipping cost for the variant will be zero. + */ + is_free_shipping?: boolean + /** + * A fixed shipping cost for the variant. If defined, this value will be used during checkout instead of normal shipping-cost calculation. + */ + fixed_cost_shipping_price?: number + /** + * If `true`, this variant will not be purchasable on the storefront. + */ + purchasing_disabled?: boolean + /** + * If `purchasing_disabled` is `true`, this message should show on the storefront when the variant is selected. + */ + purchasing_disabled_message?: string + /** + * The UPC code used in feeds for shopping comparison sites and external channel integrations. + */ + upc?: string + /** + * Inventory level for the variant, which is used when the product's inventory_tracking is set to `variant`. + */ + inventory_level?: number + /** + * When the variant hits this inventory level, it is considered low stock. + */ + inventory_warning_level?: number + /** + * Identifies where in a warehouse the variant is located. + */ + bin_picking_number?: string + } + /** + * Shared `Product` properties used in: + * * `POST` + * * `PUT` + * * `GET` + */ + product_Base: { + /** + * The product name. + */ + name?: string + /** + * The product type. One of: `physical` - a physical stock unit, `digital` - a digital download. + */ + type?: 'physical' | 'digital' + /** + * User defined product code/stock keeping unit (SKU). + */ + sku?: string + /** + * The product description, which can include HTML formatting. + */ + description?: string + /** + * Weight of the product, which can be used when calculating shipping costs. This is based on the unit set on the store + */ + weight?: number + /** + * Width of the product, which can be used when calculating shipping costs. + */ + width?: number + /** + * Depth of the product, which can be used when calculating shipping costs. + */ + depth?: number + /** + * Height of the product, which can be used when calculating shipping costs. + */ + height?: number + /** + * The price of the product. The price should include or exclude tax, based on the store settings. + */ + price?: number + /** + * The cost price of the product. Stored for reference only; it is not used or displayed anywhere on the store. + */ + cost_price?: number + /** + * The retail cost of the product. If entered, the retail cost price will be shown on the product page. + */ + retail_price?: number + /** + * If entered, the sale price will be used instead of value in the price field when calculating the product's cost. + */ + sale_price?: number + /** + * The ID of the tax class applied to the product. (NOTE: Value ignored if automatic tax is enabled.) + */ + tax_class_id?: number + /** + * Accepts AvaTax System Tax Codes, which identify products and services that fall into special sales-tax categories. By using these codes, merchants who subscribe to BigCommerce's Avalara Premium integration can calculate sales taxes more accurately. Stores without Avalara Premium will ignore the code when calculating sales tax. Do not pass more than one code. The codes are case-sensitive. For details, please see Avalara's documentation. + */ + product_tax_code?: string + /** + * An array of IDs for the categories to which this product belongs. When updating a product, if an array of categories is supplied, all product categories will be overwritten. Does not accept more than 1,000 ID values. + */ + categories?: number[] + /** + * A product can be added to an existing brand during a product /PUT or /POST. + */ + brand_id?: number + /** + * Current inventory level of the product. Simple inventory tracking must be enabled (See the `inventory_tracking` field) for this to take any effect. + */ + inventory_level?: number + /** + * Inventory warning level for the product. When the product's inventory level drops below the warning level, the store owner will be informed. Simple inventory tracking must be enabled (see the `inventory_tracking` field) for this to take any effect. + */ + inventory_warning_level?: number + /** + * The type of inventory tracking for the product. Values are: `none` - inventory levels will not be tracked; `product` - inventory levels will be tracked using the `inventory_level` and `inventory_warning_level` fields; `variant` - inventory levels will be tracked based on variants, which maintain their own warning levels and inventory levels. + */ + inventory_tracking?: 'none' | 'product' | 'variant' + /** + * A fixed shipping cost for the product. If defined, this value will be used during checkout instead of normal shipping-cost calculation. + */ + fixed_cost_shipping_price?: number + /** + * Flag used to indicate whether the product has free shipping. If `true`, the shipping cost for the product will be zero. + */ + is_free_shipping?: boolean + /** + * Flag to determine whether the product should be displayed to customers browsing the store. If `true`, the product will be displayed. If `false`, the product will be hidden from view. + */ + is_visible?: boolean + /** + * Flag to determine whether the product should be included in the `featured products` panel when viewing the store. + */ + is_featured?: boolean + /** + * An array of IDs for the related products. + */ + related_products?: number[] + /** + * Warranty information displayed on the product page. Can include HTML formatting. + */ + warranty?: string + /** + * The BIN picking number for the product. + */ + bin_picking_number?: string + /** + * The layout template file used to render this product category. This field is writable only for stores with a Blueprint theme applied. + */ + layout_file?: string + /** + * The product UPC code, which is used in feeds for shopping comparison sites and external channel integrations. + */ + upc?: string + /** + * A comma-separated list of keywords that can be used to locate the product when searching the store. + */ + search_keywords?: string + /** + * Availability of the product. Availability options are: `available` - the product can be purchased on the storefront; `disabled` - the product is listed in the storefront, but cannot be purchased; `preorder` - the product is listed for pre-orders. + */ + availability?: 'available' | 'disabled' | 'preorder' + /** + * Availability text displayed on the checkout page, under the product title. Tells the customer how long it will normally take to ship this product, such as: 'Usually ships in 24 hours.' + */ + availability_description?: string + /** + * Type of gift-wrapping options. Values: `any` - allow any gift-wrapping options in the store; `none` - disallow gift-wrapping on the product; `list` – provide a list of IDs in the `gift_wrapping_options_list` field. + */ + gift_wrapping_options_type?: 'any' | 'none' | 'list' + /** + * A list of gift-wrapping option IDs. + */ + gift_wrapping_options_list?: number[] + /** + * Priority to give this product when included in product lists on category pages and in search results. Lower integers will place the product closer to the top of the results. + */ + sort_order?: number + /** + * The product condition. Will be shown on the product page if the `is_condition_shown` field's value is `true`. Possible values: `New`, `Used`, `Refurbished`. + */ + condition?: 'New' | 'Used' | 'Refurbished' + /** + * Flag used to determine whether the product condition is shown to the customer on the product page. + */ + is_condition_shown?: boolean + /** + * The minimum quantity an order must contain, to be eligible to purchase this product. + */ + order_quantity_minimum?: number + /** + * The maximum quantity an order can contain when purchasing the product. + */ + order_quantity_maximum?: number + /** + * Custom title for the product page. If not defined, the product name will be used as the meta title. + */ + page_title?: string + /** + * Custom meta keywords for the product page. If not defined, the store's default keywords will be used. + */ + meta_keywords?: string[] + /** + * Custom meta description for the product page. If not defined, the store's default meta description will be used. + */ + meta_description?: string + /** + * The number of times the product has been viewed. + */ + view_count?: number + /** + * Pre-order release date. See the `availability` field for details on setting a product's availability to accept pre-orders. + */ + preorder_release_date?: string + /** + * Custom expected-date message to display on the product page. If undefined, the message defaults to the storewide setting. Can contain the `%%DATE%%` placeholder, which will be substituted for the release date. + */ + preorder_message?: string + /** + * If set to true then on the preorder release date the preorder status will automatically be removed. + * If set to false, then on the release date the preorder status **will not** be removed. It will need to be changed manually either in the + * control panel or using the API. Using the API set `availability` to `available`. + */ + is_preorder_only?: boolean + /** + * False by default, indicating that this product's price should be shown on the product page. If set to `true`, the price is hidden. (NOTE: To successfully set `is_price_hidden` to `true`, the `availability` value must be `disabled`.) + */ + is_price_hidden?: boolean + /** + * By default, an empty string. If `is_price_hidden` is `true`, the value of `price_hidden_label` is displayed instead of the price. (NOTE: To successfully set a non-empty string value with `is_price_hidden` set to `true`, the `availability` value must be `disabled`.) + */ + price_hidden_label?: string + custom_url?: definitions['customUrl_Full'] + /** + * Type of product, defaults to `product`. + */ + open_graph_type?: + | 'product' + | 'album' + | 'book' + | 'drink' + | 'food' + | 'game' + | 'movie' + | 'song' + | 'tv_show' + /** + * Title of the product, if not specified the product name will be used instead. + */ + open_graph_title?: string + /** + * Description to use for the product, if not specified then the meta_description will be used instead. + */ + open_graph_description?: string + /** + * Flag to determine if product description or open graph description is used. + */ + open_graph_use_meta_description?: boolean + /** + * Flag to determine if product name or open graph name is used. + */ + open_graph_use_product_name?: boolean + /** + * Flag to determine if product image or open graph image is used. + */ + open_graph_use_image?: boolean + /** + * The brand can be created during a product PUT or POST request. If the brand already exists then the product will be added. If not the brand will be created and the product added. If using `brand_name` it performs a fuzzy match and adds the brand. eg. "Common Good" and "Common good" are the same. Brand name does not return as part of a product response. Only the `brand_id`. + */ + 'brand_name or brand_id'?: string + /** + * Global Trade Item Number + */ + gtin?: string + /** + * Manufacturer Part Number + */ + mpn?: string + /** + * The total rating for the product. + */ + reviews_rating_sum?: number + /** + * The number of times the product has been rated. + */ + reviews_count?: number + /** + * The total quantity of this product sold. + */ + total_sold?: number + custom_fields?: definitions['productCustomField_Put'][] + bulk_pricing_rules?: definitions['bulkPricingRule_Full'][] + images?: definitions['productImage_Full'][] + primary_image?: definitions['productImage_Full'] + videos?: definitions['productVideo_Full'][] + } + /** + * Properties for updating metafields. + */ + metafield_Put: { + /** + * Unique ID of the *Metafield*. Read-Only. + */ + id?: number + } & definitions['metafield_Base'] + metafield_Full: definitions['metafield_Put'] & { + /** + * Date and time of the metafield's creation. Read-Only. + */ + date_created?: string + /** + * Date and time when the metafield was last updated. Read-Only. + */ + date_modified?: string + } + /** + * The model for a PUT to update variants on a product. + */ + productVariant_Put: definitions['productVariant_Base'] & { + product_id?: number + sku?: string + } +} diff --git a/framework/bigcommerce/api/definitions/store-content.ts b/framework/bigcommerce/api/definitions/store-content.ts new file mode 100644 index 000000000..f00c28844 --- /dev/null +++ b/framework/bigcommerce/api/definitions/store-content.ts @@ -0,0 +1,329 @@ +/** + * This file was auto-generated by swagger-to-ts. + * Do not make direct changes to the file. + */ + +export interface definitions { + blogPost_Full: { + /** + * ID of this blog post. (READ-ONLY) + */ + id?: number + } & definitions['blogPost_Base'] + addresses: { + /** + * Full URL of where the resource is located. + */ + url?: string + /** + * Resource being accessed. + */ + resource?: string + } + formField: { + /** + * Name of the form field + */ + name?: string + /** + * Value of the form field + */ + value?: string + } + page_Full: { + /** + * ID of the page. + */ + id?: number + } & definitions['page_Base'] + redirect: { + /** + * Numeric ID of the redirect. + */ + id?: number + /** + * The path from which to redirect. + */ + path: string + forward: definitions['forward'] + /** + * URL of the redirect. READ-ONLY + */ + url?: string + } + forward: { + /** + * The type of redirect. If it is a `manual` redirect then type will always be manual. Dynamic redirects will have the type of the page. Such as product or category. + */ + type?: string + /** + * Reference of the redirect. Dynamic redirects will have the category or product number. Manual redirects will have the url that is being directed to. + */ + ref?: number + } + customer_Full: { + /** + * Unique numeric ID of this customer. This is a READ-ONLY field; do not set or modify its value in a POST or PUT request. + */ + id?: number + /** + * Not returned in any responses, but accepts up to two fields allowing you to set the customer’s password. If a password is not supplied, it is generated automatically. For further information about using this object, please see the Customers resource documentation. + */ + _authentication?: { + force_reset?: string + password?: string + password_confirmation?: string + } + /** + * The name of the company for which the customer works. + */ + company?: string + /** + * First name of the customer. + */ + first_name: string + /** + * Last name of the customer. + */ + last_name: string + /** + * Email address of the customer. + */ + email: string + /** + * Phone number of the customer. + */ + phone?: string + /** + * Date on which the customer registered from the storefront or was created in the control panel. This is a READ-ONLY field; do not set or modify its value in a POST or PUT request. + */ + date_created?: string + /** + * Date on which the customer updated their details in the storefront or was updated in the control panel. This is a READ-ONLY field; do not set or modify its value in a POST or PUT request. + */ + date_modified?: string + /** + * The amount of credit the customer has. (Float, Float as String, Integer) + */ + store_credit?: string + /** + * The customer’s IP address when they signed up. + */ + registration_ip_address?: string + /** + * The group to which the customer belongs. + */ + customer_group_id?: number + /** + * Store-owner notes on the customer. + */ + notes?: string + /** + * Used to identify customers who fall into special sales-tax categories – in particular, those who are fully or partially exempt from paying sales tax. Can be blank, or can contain a single AvaTax code. (The codes are case-sensitive.) Stores that subscribe to BigCommerce’s Avalara Premium integration will use this code to determine how/whether to apply sales tax. Does not affect sales-tax calculations for stores that do not subscribe to Avalara Premium. + */ + tax_exempt_category?: string + /** + * Records whether the customer would like to receive marketing content from this store. READ-ONLY.This is a READ-ONLY field; do not set or modify its value in a POST or PUT request. + */ + accepts_marketing?: boolean + addresses?: definitions['addresses'] + /** + * Array of custom fields. This is a READ-ONLY field; do not set or modify its value in a POST or PUT request. + */ + form_fields?: definitions['formField'][] + /** + * Force a password change on next login. + */ + reset_pass_on_login?: boolean + } + categoryAccessLevel: { + /** + * + `all` - Customers can access all categories + * + `specific` - Customers can access a specific list of categories + * + `none` - Customers are prevented from viewing any of the categories in this group. + */ + type?: 'all' | 'specific' | 'none' + /** + * Is an array of category IDs and should be supplied only if `type` is specific. + */ + categories?: string[] + } + timeZone: { + /** + * a string identifying the time zone, in the format: /. + */ + name?: string + /** + * a negative or positive number, identifying the offset from UTC/GMT, in seconds, during winter/standard time. + */ + raw_offset?: number + /** + * "-/+" offset from UTC/GMT, in seconds, during summer/daylight saving time. + */ + dst_offset?: number + /** + * a boolean indicating whether this time zone observes daylight saving time. + */ + dst_correction?: boolean + date_format?: definitions['dateFormat'] + } + count_Response: { count?: number } + dateFormat: { + /** + * string that defines dates’ display format, in the pattern: M jS Y + */ + display?: string + /** + * string that defines the CSV export format for orders, customers, and products, in the pattern: M jS Y + */ + export?: string + /** + * string that defines dates’ extended-display format, in the pattern: M jS Y @ g:i A. + */ + extended_display?: string + } + blogTags: { tag?: string; post_ids?: number[] }[] + blogPost_Base: { + /** + * Title of this blog post. + */ + title: string + /** + * URL for the public blog post. + */ + url?: string + /** + * URL to preview the blog post. (READ-ONLY) + */ + preview_url?: string + /** + * Text body of the blog post. + */ + body: string + /** + * Tags to characterize the blog post. + */ + tags?: string[] + /** + * Summary of the blog post. (READ-ONLY) + */ + summary?: string + /** + * Whether the blog post is published. + */ + is_published?: boolean + published_date?: definitions['publishedDate'] + /** + * Published date in `ISO 8601` format. + */ + published_date_iso8601?: string + /** + * Description text for this blog post’s `` element. + */ + meta_description?: string + /** + * Keywords for this blog post’s `` element. + */ + meta_keywords?: string + /** + * Name of the blog post’s author. + */ + author?: string + /** + * Local path to a thumbnail uploaded to `product_images/` via [WebDav](https://support.bigcommerce.com/s/article/File-Access-WebDAV). + */ + thumbnail_path?: string + } + publishedDate: { timezone_type?: string; date?: string; timezone?: string } + /** + * Not returned in any responses, but accepts up to two fields allowing you to set the customer’s password. If a password is not supplied, it is generated automatically. For further information about using this object, please see the Customers resource documentation. + */ + authentication: { + force_reset?: string + password?: string + password_confirmation?: string + } + customer_Base: { [key: string]: any } + page_Base: { + /** + * ID of any parent Web page. + */ + parent_id?: number + /** + * `page`: free-text page + * `link`: link to another web address + * `rss_feed`: syndicated content from an RSS feed + * `contact_form`: When the store's contact form is used. + */ + type: 'page' | 'rss_feed' | 'contact_form' | 'raw' | 'link' + /** + * Where the page’s type is a contact form: object whose members are the fields enabled (in the control panel) for storefront display. Possible members are:`fullname`: full name of the customer submitting the form; `phone`: customer’s phone number, as submitted on the form; `companyname`: customer’s submitted company name; `orderno`: customer’s submitted order number; `rma`: customer’s submitted RMA (Return Merchandise Authorization) number. + */ + contact_fields?: string + /** + * Where the page’s type is a contact form: email address that receives messages sent via the form. + */ + email?: string + /** + * Page name, as displayed on the storefront. + */ + name: string + /** + * Relative URL on the storefront for this page. + */ + url?: string + /** + * Description contained within this page’s `` element. + */ + meta_description?: string + /** + * HTML or variable that populates this page’s `` element, in default/desktop view. Required in POST if page type is `raw`. + */ + body: string + /** + * HTML to use for this page's body when viewed in the mobile template (deprecated). + */ + mobile_body?: string + /** + * If true, this page has a mobile version. + */ + has_mobile_version?: boolean + /** + * If true, this page appears in the storefront’s navigation menu. + */ + is_visible?: boolean + /** + * If true, this page is the storefront’s home page. + */ + is_homepage?: boolean + /** + * Text specified for this page’s `` element. (If empty, the value of the name property is used.) + */ + meta_title?: string + /** + * Layout template for this page. This field is writable only for stores with a Blueprint theme applied. + */ + layout_file?: string + /** + * Order in which this page should display on the storefront. (Lower integers specify earlier display.) + */ + sort_order?: number + /** + * Comma-separated list of keywords that shoppers can use to locate this page when searching the store. + */ + search_keywords?: string + /** + * Comma-separated list of SEO-relevant keywords to include in the page’s `<meta/>` element. + */ + meta_keywords?: string + /** + * If page type is `rss_feed` the n this field is visisble. Required in POST required for `rss page` type. + */ + feed: string + /** + * If page type is `link` this field is returned. Required in POST to create a `link` page. + */ + link: string + content_type?: 'application/json' | 'text/javascript' | 'text/html' + } +} diff --git a/framework/bigcommerce/api/definitions/wishlist.ts b/framework/bigcommerce/api/definitions/wishlist.ts new file mode 100644 index 000000000..6ec21c103 --- /dev/null +++ b/framework/bigcommerce/api/definitions/wishlist.ts @@ -0,0 +1,142 @@ +/** + * This file was auto-generated by swagger-to-ts. + * Do not make direct changes to the file. + */ + +export interface definitions { + wishlist_Post: { + /** + * The customer id. + */ + customer_id: number + /** + * Whether the wishlist is available to the public. + */ + is_public?: boolean + /** + * The title of the wishlist. + */ + name?: string + /** + * Array of Wishlist items. + */ + items?: { + /** + * The ID of the product. + */ + product_id?: number + /** + * The variant ID of the product. + */ + variant_id?: number + }[] + } + wishlist_Put: { + /** + * The customer id. + */ + customer_id: number + /** + * Whether the wishlist is available to the public. + */ + is_public?: boolean + /** + * The title of the wishlist. + */ + name?: string + /** + * Array of Wishlist items. + */ + items?: { + /** + * The ID of the item + */ + id?: number + /** + * The ID of the product. + */ + product_id?: number + /** + * The variant ID of the item. + */ + variant_id?: number + }[] + } + wishlist_Full: { + /** + * Wishlist ID, provided after creating a wishlist with a POST. + */ + id?: number + /** + * The ID the customer to which the wishlist belongs. + */ + customer_id?: number + /** + * The Wishlist's name. + */ + name?: string + /** + * Whether the Wishlist is available to the public. + */ + is_public?: boolean + /** + * The token of the Wishlist. This is created internally within BigCommerce. The Wishlist ID is to be used for external apps. Read-Only + */ + token?: string + /** + * Array of Wishlist items + */ + items?: definitions['wishlistItem_Full'][] + } + wishlistItem_Full: { + /** + * The ID of the item + */ + id?: number + /** + * The ID of the product. + */ + product_id?: number + /** + * The variant ID of the item. + */ + variant_id?: number + } + wishlistItem_Post: { + /** + * The ID of the product. + */ + product_id?: number + /** + * The variant ID of the product. + */ + variant_id?: number + } + /** + * Data about the response, including pagination and collection totals. + */ + pagination: { + /** + * Total number of items in the result set. + */ + total?: number + /** + * Total number of items in the collection response. + */ + count?: number + /** + * The amount of items returned in the collection per page, controlled by the limit parameter. + */ + per_page?: number + /** + * The page you are currently on within the collection. + */ + current_page?: number + /** + * The total number of pages in the collection. + */ + total_pages?: number + } + error: { status?: number; title?: string; type?: string } + metaCollection: { pagination?: definitions['pagination'] } +} diff --git a/framework/bigcommerce/api/fragments/category-tree.ts b/framework/bigcommerce/api/fragments/category-tree.ts new file mode 100644 index 000000000..e26f17195 --- /dev/null +++ b/framework/bigcommerce/api/fragments/category-tree.ts @@ -0,0 +1,9 @@ +export const categoryTreeItemFragment = /* GraphQL */ ` + fragment categoryTreeItem on CategoryTreeItem { + entityId + name + path + description + productCount + } +` diff --git a/framework/bigcommerce/api/fragments/product.ts b/framework/bigcommerce/api/fragments/product.ts new file mode 100644 index 000000000..d266b8c92 --- /dev/null +++ b/framework/bigcommerce/api/fragments/product.ts @@ -0,0 +1,113 @@ +export const productPrices = /* GraphQL */ ` + fragment productPrices on Prices { + price { + value + currencyCode + } + salePrice { + value + currencyCode + } + retailPrice { + value + currencyCode + } + } +` + +export const swatchOptionFragment = /* GraphQL */ ` + fragment swatchOption on SwatchOptionValue { + isDefault + hexColors + } +` + +export const multipleChoiceOptionFragment = /* GraphQL */ ` + fragment multipleChoiceOption on MultipleChoiceOption { + values { + edges { + node { + label + ...swatchOption + } + } + } + } + + ${swatchOptionFragment} +` + +export const productInfoFragment = /* GraphQL */ ` + fragment productInfo on Product { + entityId + name + path + brand { + entityId + } + description + prices { + ...productPrices + } + images { + edges { + node { + urlOriginal + altText + isDefault + } + } + } + variants { + edges { + node { + entityId + defaultImage { + urlOriginal + altText + isDefault + } + } + } + } + productOptions { + edges { + node { + __typename + entityId + displayName + ...multipleChoiceOption + } + } + } + localeMeta: metafields(namespace: $locale, keys: ["name", "description"]) + @include(if: $hasLocale) { + edges { + node { + key + value + } + } + } + } + + ${productPrices} + ${multipleChoiceOptionFragment} +` + +export const productConnectionFragment = /* GraphQL */ ` + fragment productConnnection on ProductConnection { + pageInfo { + startCursor + endCursor + } + edges { + cursor + node { + ...productInfo + } + } + } + + ${productInfoFragment} +` diff --git a/framework/bigcommerce/api/index.ts b/framework/bigcommerce/api/index.ts new file mode 100644 index 000000000..0216fe61b --- /dev/null +++ b/framework/bigcommerce/api/index.ts @@ -0,0 +1,88 @@ +import type { RequestInit } from '@vercel/fetch' +import type { CommerceAPIConfig } from '@commerce/api' +import fetchGraphqlApi from './utils/fetch-graphql-api' +import fetchStoreApi from './utils/fetch-store-api' + +export interface BigcommerceConfig extends CommerceAPIConfig { + // Indicates if the returned metadata with translations should be applied to the + // data or returned as it is + applyLocale?: boolean + storeApiUrl: string + storeApiToken: string + storeApiClientId: string + storeChannelId?: string + storeApiFetch<T>(endpoint: string, options?: RequestInit): Promise<T> +} + +const API_URL = process.env.BIGCOMMERCE_STOREFRONT_API_URL +const API_TOKEN = process.env.BIGCOMMERCE_STOREFRONT_API_TOKEN +const STORE_API_URL = process.env.BIGCOMMERCE_STORE_API_URL +const STORE_API_TOKEN = process.env.BIGCOMMERCE_STORE_API_TOKEN +const STORE_API_CLIENT_ID = process.env.BIGCOMMERCE_STORE_API_CLIENT_ID +const STORE_CHANNEL_ID = process.env.BIGCOMMERCE_CHANNEL_ID + +if (!API_URL) { + throw new Error( + `The environment variable BIGCOMMERCE_STOREFRONT_API_URL is missing and it's required to access your store` + ) +} + +if (!API_TOKEN) { + throw new Error( + `The environment variable BIGCOMMERCE_STOREFRONT_API_TOKEN is missing and it's required to access your store` + ) +} + +if (!(STORE_API_URL && STORE_API_TOKEN && STORE_API_CLIENT_ID)) { + throw new Error( + `The environment variables BIGCOMMERCE_STORE_API_URL, BIGCOMMERCE_STORE_API_TOKEN, BIGCOMMERCE_STORE_API_CLIENT_ID have to be set in order to access the REST API of your store` + ) +} + +export class Config { + private config: BigcommerceConfig + + constructor(config: Omit<BigcommerceConfig, 'customerCookie'>) { + this.config = { + ...config, + // The customerCookie is not customizable for now, BC sets the cookie and it's + // not important to rename it + customerCookie: 'SHOP_TOKEN', + } + } + + getConfig(userConfig: Partial<BigcommerceConfig> = {}) { + return Object.entries(userConfig).reduce<BigcommerceConfig>( + (cfg, [key, value]) => Object.assign(cfg, { [key]: value }), + { ...this.config } + ) + } + + setConfig(newConfig: Partial<BigcommerceConfig>) { + Object.assign(this.config, newConfig) + } +} + +const ONE_DAY = 60 * 60 * 24 +const config = new Config({ + commerceUrl: API_URL, + apiToken: API_TOKEN, + cartCookie: process.env.BIGCOMMERCE_CART_COOKIE ?? 'bc_cartId', + cartCookieMaxAge: ONE_DAY * 30, + fetch: fetchGraphqlApi, + applyLocale: true, + // REST API only + storeApiUrl: STORE_API_URL, + storeApiToken: STORE_API_TOKEN, + storeApiClientId: STORE_API_CLIENT_ID, + storeChannelId: STORE_CHANNEL_ID, + storeApiFetch: fetchStoreApi, +}) + +export function getConfig(userConfig?: Partial<BigcommerceConfig>) { + return config.getConfig(userConfig) +} + +export function setConfig(newConfig: Partial<BigcommerceConfig>) { + return config.setConfig(newConfig) +} diff --git a/framework/bigcommerce/api/utils/concat-cookie.ts b/framework/bigcommerce/api/utils/concat-cookie.ts new file mode 100644 index 000000000..362e12e99 --- /dev/null +++ b/framework/bigcommerce/api/utils/concat-cookie.ts @@ -0,0 +1,14 @@ +type Header = string | number | string[] | undefined + +export default function concatHeader(prev: Header, val: Header) { + if (!val) return prev + if (!prev) return val + + if (Array.isArray(prev)) return prev.concat(String(val)) + + prev = String(prev) + + if (Array.isArray(val)) return [prev].concat(val) + + return [prev, String(val)] +} diff --git a/framework/bigcommerce/api/utils/create-api-handler.ts b/framework/bigcommerce/api/utils/create-api-handler.ts new file mode 100644 index 000000000..315ec464b --- /dev/null +++ b/framework/bigcommerce/api/utils/create-api-handler.ts @@ -0,0 +1,58 @@ +import type { NextApiHandler, NextApiRequest, NextApiResponse } from 'next' +import { BigcommerceConfig, getConfig } from '..' + +export type BigcommerceApiHandler< + T = any, + H extends BigcommerceHandlers = {}, + Options extends {} = {} +> = ( + req: NextApiRequest, + res: NextApiResponse<BigcommerceApiResponse<T>>, + config: BigcommerceConfig, + handlers: H, + // Custom configs that may be used by a particular handler + options: Options +) => void | Promise<void> + +export type BigcommerceHandler<T = any, Body = null> = (options: { + req: NextApiRequest + res: NextApiResponse<BigcommerceApiResponse<T>> + config: BigcommerceConfig + body: Body +}) => void | Promise<void> + +export type BigcommerceHandlers<T = any> = { + [k: string]: BigcommerceHandler<T, any> +} + +export type BigcommerceApiResponse<T> = { + data: T | null + errors?: { message: string; code?: string }[] +} + +export default function createApiHandler< + T = any, + H extends BigcommerceHandlers = {}, + Options extends {} = {} +>( + handler: BigcommerceApiHandler<T, H, Options>, + handlers: H, + defaultOptions: Options +) { + return function getApiHandler({ + config, + operations, + options, + }: { + config?: BigcommerceConfig + operations?: Partial<H> + options?: Options extends {} ? Partial<Options> : never + } = {}): NextApiHandler { + const ops = { ...operations, ...handlers } + const opts = { ...defaultOptions, ...options } + + return function apiHandler(req, res) { + return handler(req, res, getConfig(config), ops, opts) + } + } +} diff --git a/framework/bigcommerce/api/utils/errors.ts b/framework/bigcommerce/api/utils/errors.ts new file mode 100644 index 000000000..77e2007fc --- /dev/null +++ b/framework/bigcommerce/api/utils/errors.ts @@ -0,0 +1,25 @@ +import type { Response } from '@vercel/fetch' + +// Used for GraphQL errors +export class BigcommerceGraphQLError extends Error {} + +export class BigcommerceApiError extends Error { + status: number + res: Response + data: any + + constructor(msg: string, res: Response, data?: any) { + super(msg) + this.name = 'BigcommerceApiError' + this.status = res.status + this.res = res + this.data = data + } +} + +export class BigcommerceNetworkError extends Error { + constructor(msg: string) { + super(msg) + this.name = 'BigcommerceNetworkError' + } +} diff --git a/framework/bigcommerce/api/utils/fetch-graphql-api.ts b/framework/bigcommerce/api/utils/fetch-graphql-api.ts new file mode 100644 index 000000000..a449b81e0 --- /dev/null +++ b/framework/bigcommerce/api/utils/fetch-graphql-api.ts @@ -0,0 +1,38 @@ +import { FetcherError } from '@commerce/utils/errors' +import type { GraphQLFetcher } from '@commerce/api' +import { getConfig } from '..' +import fetch from './fetch' + +const fetchGraphqlApi: GraphQLFetcher = async ( + query: string, + { variables, preview } = {}, + fetchOptions +) => { + // log.warn(query) + const config = getConfig() + const res = await fetch(config.commerceUrl + (preview ? '/preview' : ''), { + ...fetchOptions, + method: 'POST', + headers: { + Authorization: `Bearer ${config.apiToken}`, + ...fetchOptions?.headers, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + query, + variables, + }), + }) + + const json = await res.json() + if (json.errors) { + throw new FetcherError({ + errors: json.errors ?? [{ message: 'Failed to fetch Bigcommerce API' }], + status: res.status, + }) + } + + return { data: json.data, res } +} + +export default fetchGraphqlApi diff --git a/framework/bigcommerce/api/utils/fetch-store-api.ts b/framework/bigcommerce/api/utils/fetch-store-api.ts new file mode 100644 index 000000000..7e59b9f06 --- /dev/null +++ b/framework/bigcommerce/api/utils/fetch-store-api.ts @@ -0,0 +1,71 @@ +import type { RequestInit, Response } from '@vercel/fetch' +import { getConfig } from '..' +import { BigcommerceApiError, BigcommerceNetworkError } from './errors' +import fetch from './fetch' + +export default async function fetchStoreApi<T>( + endpoint: string, + options?: RequestInit +): Promise<T> { + const config = getConfig() + let res: Response + + try { + res = await fetch(config.storeApiUrl + endpoint, { + ...options, + headers: { + ...options?.headers, + 'Content-Type': 'application/json', + 'X-Auth-Token': config.storeApiToken, + 'X-Auth-Client': config.storeApiClientId, + }, + }) + } catch (error) { + throw new BigcommerceNetworkError( + `Fetch to Bigcommerce failed: ${error.message}` + ) + } + + const contentType = res.headers.get('Content-Type') + const isJSON = contentType?.includes('application/json') + + if (!res.ok) { + const data = isJSON ? await res.json() : await getTextOrNull(res) + const headers = getRawHeaders(res) + const msg = `Big Commerce API error (${ + res.status + }) \nHeaders: ${JSON.stringify(headers, null, 2)}\n${ + typeof data === 'string' ? data : JSON.stringify(data, null, 2) + }` + + throw new BigcommerceApiError(msg, res, data) + } + + if (res.status !== 204 && !isJSON) { + throw new BigcommerceApiError( + `Fetch to Bigcommerce API failed, expected JSON content but found: ${contentType}`, + res + ) + } + + // If something was removed, the response will be empty + return res.status === 204 ? null : await res.json() +} + +function getRawHeaders(res: Response) { + const headers: { [key: string]: string } = {} + + res.headers.forEach((value, key) => { + headers[key] = value + }) + + return headers +} + +function getTextOrNull(res: Response) { + try { + return res.text() + } catch (err) { + return null + } +} diff --git a/framework/bigcommerce/api/utils/fetch.ts b/framework/bigcommerce/api/utils/fetch.ts new file mode 100644 index 000000000..9d9fff3ed --- /dev/null +++ b/framework/bigcommerce/api/utils/fetch.ts @@ -0,0 +1,3 @@ +import zeitFetch from '@vercel/fetch' + +export default zeitFetch() diff --git a/framework/bigcommerce/api/utils/filter-edges.ts b/framework/bigcommerce/api/utils/filter-edges.ts new file mode 100644 index 000000000..09cd20640 --- /dev/null +++ b/framework/bigcommerce/api/utils/filter-edges.ts @@ -0,0 +1,5 @@ +export default function filterEdges<T>( + edges: (T | null | undefined)[] | null | undefined +) { + return edges?.filter((edge): edge is T => !!edge) ?? [] +} diff --git a/framework/bigcommerce/api/utils/get-cart-cookie.ts b/framework/bigcommerce/api/utils/get-cart-cookie.ts new file mode 100644 index 000000000..7ca6cd5e4 --- /dev/null +++ b/framework/bigcommerce/api/utils/get-cart-cookie.ts @@ -0,0 +1,20 @@ +import { serialize, CookieSerializeOptions } from 'cookie' + +export default function getCartCookie( + name: string, + cartId?: string, + maxAge?: number +) { + const options: CookieSerializeOptions = + cartId && maxAge + ? { + maxAge, + expires: new Date(Date.now() + maxAge * 1000), + secure: process.env.NODE_ENV === 'production', + path: '/', + sameSite: 'lax', + } + : { maxAge: -1, path: '/' } // Removes the cookie + + return serialize(name, cartId || '', options) +} diff --git a/framework/bigcommerce/api/utils/is-allowed-method.ts b/framework/bigcommerce/api/utils/is-allowed-method.ts new file mode 100644 index 000000000..78bbba568 --- /dev/null +++ b/framework/bigcommerce/api/utils/is-allowed-method.ts @@ -0,0 +1,28 @@ +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/framework/bigcommerce/api/utils/parse-item.ts b/framework/bigcommerce/api/utils/parse-item.ts new file mode 100644 index 000000000..7c8cd4728 --- /dev/null +++ b/framework/bigcommerce/api/utils/parse-item.ts @@ -0,0 +1,28 @@ +import type { ItemBody as WishlistItemBody } from '../wishlist' +import type { CartItemBody, OptionSelections } from '../../types' + +type BCWishlistItemBody = { + product_id: number + variant_id: number +} + +type BCCartItemBody = { + product_id: number + variant_id: number + quantity?: number + option_selections?: OptionSelections +} + +export const parseWishlistItem = ( + item: WishlistItemBody +): BCWishlistItemBody => ({ + product_id: Number(item.productId), + variant_id: Number(item.variantId), +}) + +export const parseCartItem = (item: CartItemBody): BCCartItemBody => ({ + quantity: item.quantity, + product_id: Number(item.productId), + variant_id: Number(item.variantId), + option_selections: item.optionSelections, +}) diff --git a/framework/bigcommerce/api/utils/set-product-locale-meta.ts b/framework/bigcommerce/api/utils/set-product-locale-meta.ts new file mode 100644 index 000000000..974a197bd --- /dev/null +++ b/framework/bigcommerce/api/utils/set-product-locale-meta.ts @@ -0,0 +1,21 @@ +import type { ProductNode } from '../../product/get-all-products' +import type { RecursivePartial } from './types' + +export default function setProductLocaleMeta( + node: RecursivePartial<ProductNode> +) { + if (node.localeMeta?.edges) { + node.localeMeta.edges = node.localeMeta.edges.filter((edge) => { + const { key, value } = edge?.node ?? {} + if (key && key in node) { + ;(node as any)[key] = value + return false + } + return true + }) + + if (!node.localeMeta.edges.length) { + delete node.localeMeta + } + } +} diff --git a/framework/bigcommerce/api/utils/types.ts b/framework/bigcommerce/api/utils/types.ts new file mode 100644 index 000000000..56f9c1728 --- /dev/null +++ b/framework/bigcommerce/api/utils/types.ts @@ -0,0 +1,7 @@ +export type RecursivePartial<T> = { + [P in keyof T]?: RecursivePartial<T[P]> +} + +export type RecursiveRequired<T> = { + [P in keyof T]-?: RecursiveRequired<T[P]> +} diff --git a/framework/bigcommerce/api/wishlist/handlers/add-item.ts b/framework/bigcommerce/api/wishlist/handlers/add-item.ts new file mode 100644 index 000000000..00d7b06bd --- /dev/null +++ b/framework/bigcommerce/api/wishlist/handlers/add-item.ts @@ -0,0 +1,56 @@ +import type { WishlistHandlers } from '..' +import getCustomerId from '../../../customer/get-customer-id' +import getCustomerWishlist from '../../../customer/get-customer-wishlist' +import { parseWishlistItem } from '../../utils/parse-item' + +// Returns the wishlist of the signed customer +const addItem: WishlistHandlers['addItem'] = async ({ + res, + body: { customerToken, item }, + config, +}) => { + if (!item) { + return res.status(400).json({ + data: null, + errors: [{ message: 'Missing item' }], + }) + } + + const customerId = + customerToken && (await getCustomerId({ customerToken, config })) + + if (!customerId) { + return res.status(400).json({ + data: null, + errors: [{ message: 'Invalid request' }], + }) + } + + const { wishlist } = await getCustomerWishlist({ + variables: { customerId }, + config, + }) + const options = { + method: 'POST', + body: JSON.stringify( + wishlist + ? { + items: [parseWishlistItem(item)], + } + : { + name: 'Wishlist', + customer_id: customerId, + items: [parseWishlistItem(item)], + is_public: false, + } + ), + } + + const { data } = wishlist + ? await config.storeApiFetch(`/v3/wishlists/${wishlist.id}/items`, options) + : await config.storeApiFetch('/v3/wishlists', options) + + res.status(200).json({ data }) +} + +export default addItem diff --git a/framework/bigcommerce/api/wishlist/handlers/get-wishlist.ts b/framework/bigcommerce/api/wishlist/handlers/get-wishlist.ts new file mode 100644 index 000000000..3737c033a --- /dev/null +++ b/framework/bigcommerce/api/wishlist/handlers/get-wishlist.ts @@ -0,0 +1,37 @@ +import getCustomerId from '../../../customer/get-customer-id' +import getCustomerWishlist from '../../../customer/get-customer-wishlist' +import type { Wishlist, WishlistHandlers } from '..' + +// Return wishlist info +const getWishlist: WishlistHandlers['getWishlist'] = async ({ + res, + body: { customerToken, includeProducts }, + config, +}) => { + 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' }], + }) + } + + const { wishlist } = await getCustomerWishlist({ + variables: { customerId }, + includeProducts, + config, + }) + + result = { data: wishlist } + } + + res.status(200).json({ data: result.data ?? null }) +} + +export default getWishlist diff --git a/framework/bigcommerce/api/wishlist/handlers/remove-item.ts b/framework/bigcommerce/api/wishlist/handlers/remove-item.ts new file mode 100644 index 000000000..a9cfd9db5 --- /dev/null +++ b/framework/bigcommerce/api/wishlist/handlers/remove-item.ts @@ -0,0 +1,39 @@ +import getCustomerId from '../../../customer/get-customer-id' +import getCustomerWishlist, { + Wishlist, +} from '../../../customer/get-customer-wishlist' +import type { WishlistHandlers } from '..' + +// Return current wishlist info +const removeItem: WishlistHandlers['removeItem'] = async ({ + res, + body: { customerToken, itemId }, + config, +}) => { + const customerId = + customerToken && (await getCustomerId({ customerToken, config })) + const { wishlist } = + (customerId && + (await getCustomerWishlist({ + variables: { customerId }, + config, + }))) || + {} + + if (!wishlist || !itemId) { + return res.status(400).json({ + data: null, + errors: [{ message: 'Invalid request' }], + }) + } + + const result = await config.storeApiFetch<{ data: Wishlist } | null>( + `/v3/wishlists/${wishlist.id}/items/${itemId}`, + { method: 'DELETE' } + ) + const data = result?.data ?? null + + res.status(200).json({ data }) +} + +export default removeItem diff --git a/framework/bigcommerce/api/wishlist/index.ts b/framework/bigcommerce/api/wishlist/index.ts new file mode 100644 index 000000000..7c700689c --- /dev/null +++ b/framework/bigcommerce/api/wishlist/index.ts @@ -0,0 +1,104 @@ +import isAllowedMethod from '../utils/is-allowed-method' +import createApiHandler, { + BigcommerceApiHandler, + BigcommerceHandler, +} from '../utils/create-api-handler' +import { BigcommerceApiError } from '../utils/errors' +import type { + Wishlist, + WishlistItem, +} from '../../customer/get-customer-wishlist' +import getWishlist from './handlers/get-wishlist' +import addItem from './handlers/add-item' +import removeItem from './handlers/remove-item' +import type { Product, ProductVariant, Customer } from '@commerce/types' + +export type { Wishlist, WishlistItem } + +export type ItemBody = { + productId: Product['id'] + variantId: ProductVariant['id'] +} + +export type AddItemBody = { item: ItemBody } + +export type RemoveItemBody = { itemId: Product['id'] } + +export type WishlistBody = { + customer_id: Customer['entityId'] + is_public: number + name: string + items: any[] +} + +export type AddWishlistBody = { wishlist: WishlistBody } + +export type WishlistHandlers = { + getWishlist: BigcommerceHandler< + Wishlist, + { customerToken?: string; includeProducts?: boolean } + > + addItem: BigcommerceHandler< + Wishlist, + { customerToken?: string } & Partial<AddItemBody> + > + removeItem: BigcommerceHandler< + Wishlist, + { customerToken?: string } & Partial<RemoveItemBody> + > +} + +const METHODS = ['GET', 'POST', 'DELETE'] + +// TODO: a complete implementation should have schema validation for `req.body` +const wishlistApi: BigcommerceApiHandler<Wishlist, WishlistHandlers> = async ( + req, + res, + config, + handlers +) => { + if (!isAllowedMethod(req, res, METHODS)) return + + const { cookies } = req + const customerToken = cookies[config.customerCookie] + + try { + // Return current wishlist info + if (req.method === 'GET') { + const body = { + customerToken, + includeProducts: req.query.products === '1', + } + return await handlers['getWishlist']({ req, res, config, body }) + } + + // Add an item to the wishlist + if (req.method === 'POST') { + const body = { ...req.body, customerToken } + return await handlers['addItem']({ req, res, config, body }) + } + + // Remove an item from the wishlist + if (req.method === 'DELETE') { + const body = { ...req.body, customerToken } + return await handlers['removeItem']({ req, res, config, body }) + } + } catch (error) { + console.error(error) + + const message = + error instanceof BigcommerceApiError + ? 'An unexpected error ocurred with the Bigcommerce API' + : 'An unexpected error ocurred' + + res.status(500).json({ data: null, errors: [{ message }] }) + } +} + +export const handlers = { + getWishlist, + addItem, + removeItem, +} + +export default createApiHandler(wishlistApi, handlers, {}) diff --git a/framework/bigcommerce/auth/index.ts b/framework/bigcommerce/auth/index.ts new file mode 100644 index 000000000..36e757a89 --- /dev/null +++ b/framework/bigcommerce/auth/index.ts @@ -0,0 +1,3 @@ +export { default as useLogin } from './use-login' +export { default as useLogout } from './use-logout' +export { default as useSignup } from './use-signup' diff --git a/framework/bigcommerce/auth/login.ts b/framework/bigcommerce/auth/login.ts new file mode 100644 index 000000000..3fef29879 --- /dev/null +++ b/framework/bigcommerce/auth/login.ts @@ -0,0 +1,73 @@ +import type { ServerResponse } from 'http' +import type { LoginMutation, LoginMutationVariables } from '../schema' +import type { RecursivePartial } from '../api/utils/types' +import concatHeader from '../api/utils/concat-cookie' +import { BigcommerceConfig, getConfig } from '../api' + +export const loginMutation = /* GraphQL */ ` + mutation login($email: String!, $password: String!) { + login(email: $email, password: $password) { + result + } + } +` + +export type LoginResult<T extends { result?: any } = { result?: string }> = T + +export type LoginVariables = LoginMutationVariables + +async function login(opts: { + variables: LoginVariables + config?: BigcommerceConfig + res: ServerResponse +}): Promise<LoginResult> + +async function login<T extends { result?: any }, V = any>(opts: { + query: string + variables: V + res: ServerResponse + config?: BigcommerceConfig +}): Promise<LoginResult<T>> + +async function login({ + query = loginMutation, + variables, + res: response, + config, +}: { + query?: string + variables: LoginVariables + res: ServerResponse + config?: BigcommerceConfig +}): Promise<LoginResult> { + config = getConfig(config) + + const { data, res } = await config.fetch<RecursivePartial<LoginMutation>>( + query, + { variables } + ) + // Bigcommerce returns a Set-Cookie header with the auth cookie + let cookie = res.headers.get('Set-Cookie') + + if (cookie && typeof cookie === 'string') { + // In development, don't set a secure cookie or the browser will ignore it + if (process.env.NODE_ENV !== 'production') { + cookie = cookie.replace('; Secure', '') + // SameSite=none can't be set unless the cookie is Secure + // bc seems to sometimes send back SameSite=None rather than none so make + // this case insensitive + cookie = cookie.replace(/; SameSite=none/gi, '; SameSite=lax') + } + + response.setHeader( + 'Set-Cookie', + concatHeader(response.getHeader('Set-Cookie'), cookie)! + ) + } + + return { + result: data.login?.result, + } +} + +export default login diff --git a/framework/bigcommerce/auth/use-login.tsx b/framework/bigcommerce/auth/use-login.tsx new file mode 100644 index 000000000..1be96a58c --- /dev/null +++ b/framework/bigcommerce/auth/use-login.tsx @@ -0,0 +1,40 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import { CommerceError } from '@commerce/utils/errors' +import useLogin, { UseLogin } from '@commerce/auth/use-login' +import type { LoginBody } from '../api/customers/login' +import useCustomer from '../customer/use-customer' + +export default useLogin as UseLogin<typeof handler> + +export const handler: MutationHook<null, {}, LoginBody> = { + fetchOptions: { + url: '/api/bigcommerce/customers/login', + method: 'POST', + }, + async fetcher({ input: { email, password }, options, fetch }) { + if (!(email && password)) { + throw new CommerceError({ + message: + 'A first name, last name, email and password are required to login', + }) + } + + return fetch({ + ...options, + body: { email, password }, + }) + }, + useHook: ({ fetch }) => () => { + const { revalidate } = useCustomer() + + return useCallback( + async function login(input) { + const data = await fetch({ input }) + await revalidate() + return data + }, + [fetch, revalidate] + ) + }, +} diff --git a/framework/bigcommerce/auth/use-logout.tsx b/framework/bigcommerce/auth/use-logout.tsx new file mode 100644 index 000000000..71015a1c1 --- /dev/null +++ b/framework/bigcommerce/auth/use-logout.tsx @@ -0,0 +1,25 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import useLogout, { UseLogout } from '@commerce/auth/use-logout' +import useCustomer from '../customer/use-customer' + +export default useLogout as UseLogout<typeof handler> + +export const handler: MutationHook<null> = { + fetchOptions: { + url: '/api/bigcommerce/customers/logout', + method: 'GET', + }, + useHook: ({ fetch }) => () => { + const { mutate } = useCustomer() + + return useCallback( + async function logout() { + const data = await fetch() + await mutate(null, false) + return data + }, + [fetch, mutate] + ) + }, +} diff --git a/framework/bigcommerce/auth/use-signup.tsx b/framework/bigcommerce/auth/use-signup.tsx new file mode 100644 index 000000000..28f7024ef --- /dev/null +++ b/framework/bigcommerce/auth/use-signup.tsx @@ -0,0 +1,44 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import { CommerceError } from '@commerce/utils/errors' +import useSignup, { UseSignup } from '@commerce/auth/use-signup' +import type { SignupBody } from '../api/customers/signup' +import useCustomer from '../customer/use-customer' + +export default useSignup as UseSignup<typeof handler> + +export const handler: MutationHook<null, {}, SignupBody, SignupBody> = { + fetchOptions: { + url: '/api/bigcommerce/customers/signup', + method: 'POST', + }, + async fetcher({ + input: { firstName, lastName, email, password }, + options, + fetch, + }) { + if (!(firstName && lastName && email && password)) { + throw new CommerceError({ + message: + 'A first name, last name, email and password are required to signup', + }) + } + + return fetch({ + ...options, + body: { firstName, lastName, email, password }, + }) + }, + useHook: ({ fetch }) => () => { + const { revalidate } = useCustomer() + + return useCallback( + async function signup(input) { + const data = await fetch({ input }) + await revalidate() + return data + }, + [fetch, revalidate] + ) + }, +} diff --git a/framework/bigcommerce/cart/index.ts b/framework/bigcommerce/cart/index.ts new file mode 100644 index 000000000..3b8ba990e --- /dev/null +++ b/framework/bigcommerce/cart/index.ts @@ -0,0 +1,4 @@ +export { default as useCart } from './use-cart' +export { default as useAddItem } from './use-add-item' +export { default as useRemoveItem } from './use-remove-item' +export { default as useUpdateItem } from './use-update-item' diff --git a/framework/bigcommerce/cart/use-add-item.tsx b/framework/bigcommerce/cart/use-add-item.tsx new file mode 100644 index 000000000..d74c23567 --- /dev/null +++ b/framework/bigcommerce/cart/use-add-item.tsx @@ -0,0 +1,50 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import { CommerceError } from '@commerce/utils/errors' +import useAddItem, { UseAddItem } from '@commerce/cart/use-add-item' +import { normalizeCart } from '../lib/normalize' +import type { + Cart, + BigcommerceCart, + CartItemBody, + AddCartItemBody, +} from '../types' +import useCart from './use-cart' + +export default useAddItem as UseAddItem<typeof handler> + +export const handler: MutationHook<Cart, {}, CartItemBody> = { + fetchOptions: { + url: '/api/bigcommerce/cart', + method: 'POST', + }, + async fetcher({ input: item, options, fetch }) { + if ( + item.quantity && + (!Number.isInteger(item.quantity) || item.quantity! < 1) + ) { + throw new CommerceError({ + message: 'The item quantity has to be a valid integer greater than 0', + }) + } + + const data = await fetch<BigcommerceCart, AddCartItemBody>({ + ...options, + body: { item }, + }) + + return normalizeCart(data) + }, + useHook: ({ fetch }) => () => { + const { mutate } = useCart() + + return useCallback( + async function addItem(input) { + const data = await fetch({ input }) + await mutate(data, false) + return data + }, + [fetch, mutate] + ) + }, +} diff --git a/framework/bigcommerce/cart/use-cart.tsx b/framework/bigcommerce/cart/use-cart.tsx new file mode 100644 index 000000000..2098e7431 --- /dev/null +++ b/framework/bigcommerce/cart/use-cart.tsx @@ -0,0 +1,41 @@ +import { useMemo } from 'react' +import { SWRHook } from '@commerce/utils/types' +import useCart, { UseCart, FetchCartInput } from '@commerce/cart/use-cart' +import { normalizeCart } from '../lib/normalize' +import type { Cart } from '../types' + +export default useCart as UseCart<typeof handler> + +export const handler: SWRHook< + Cart | null, + {}, + FetchCartInput, + { isEmpty?: boolean } +> = { + fetchOptions: { + url: '/api/bigcommerce/cart', + method: 'GET', + }, + async fetcher({ input: { cartId }, options, fetch }) { + const data = cartId ? await fetch(options) : null + return data && normalizeCart(data) + }, + 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 + }, + enumerable: true, + }, + }), + [response] + ) + }, +} diff --git a/framework/bigcommerce/cart/use-remove-item.tsx b/framework/bigcommerce/cart/use-remove-item.tsx new file mode 100644 index 000000000..186780d6a --- /dev/null +++ b/framework/bigcommerce/cart/use-remove-item.tsx @@ -0,0 +1,71 @@ +import { useCallback } from 'react' +import type { + MutationHookContext, + HookFetcherContext, +} from '@commerce/utils/types' +import { ValidationError } from '@commerce/utils/errors' +import useRemoveItem, { + RemoveItemInput as RemoveItemInputBase, + UseRemoveItem, +} from '@commerce/cart/use-remove-item' +import { normalizeCart } from '../lib/normalize' +import type { + RemoveCartItemBody, + Cart, + BigcommerceCart, + LineItem, +} from '../types' +import useCart from './use-cart' + +export type RemoveItemFn<T = any> = T extends LineItem + ? (input?: RemoveItemInput<T>) => Promise<Cart | null> + : (input: RemoveItemInput<T>) => Promise<Cart | null> + +export type RemoveItemInput<T = any> = T extends LineItem + ? Partial<RemoveItemInputBase> + : RemoveItemInputBase + +export default useRemoveItem as UseRemoveItem<typeof handler> + +export const handler = { + fetchOptions: { + url: '/api/bigcommerce/cart', + method: 'DELETE', + }, + async fetcher({ + input: { itemId }, + options, + fetch, + }: HookFetcherContext<RemoveCartItemBody>) { + const data = await fetch<BigcommerceCart>({ + ...options, + body: { itemId }, + }) + return normalizeCart(data) + }, + useHook: ({ + fetch, + }: MutationHookContext<Cart | null, RemoveCartItemBody>) => < + T extends LineItem | undefined = undefined + >( + ctx: { item?: T } = {} + ) => { + const { item } = ctx + const { mutate } = useCart() + const removeItem: RemoveItemFn<LineItem> = async (input) => { + const itemId = input?.id ?? item?.id + + if (!itemId) { + throw new ValidationError({ + message: 'Invalid input used for this operation', + }) + } + + const data = await fetch({ input: { itemId } }) + await mutate(data, false) + return data + } + + return useCallback(removeItem as RemoveItemFn<T>, [fetch, mutate]) + }, +} diff --git a/framework/bigcommerce/cart/use-update-item.tsx b/framework/bigcommerce/cart/use-update-item.tsx new file mode 100644 index 000000000..f1840f806 --- /dev/null +++ b/framework/bigcommerce/cart/use-update-item.tsx @@ -0,0 +1,97 @@ +import { useCallback } from 'react' +import debounce from 'lodash.debounce' +import type { + MutationHookContext, + HookFetcherContext, +} from '@commerce/utils/types' +import { ValidationError } from '@commerce/utils/errors' +import useUpdateItem, { + UpdateItemInput as UpdateItemInputBase, + UseUpdateItem, +} from '@commerce/cart/use-update-item' +import { normalizeCart } from '../lib/normalize' +import type { + UpdateCartItemBody, + Cart, + BigcommerceCart, + LineItem, +} from '../types' +import { handler as removeItemHandler } from './use-remove-item' +import useCart from './use-cart' + +export type UpdateItemInput<T = any> = T extends LineItem + ? Partial<UpdateItemInputBase<LineItem>> + : UpdateItemInputBase<LineItem> + +export default useUpdateItem as UseUpdateItem<typeof handler> + +export const handler = { + fetchOptions: { + url: '/api/bigcommerce/cart', + method: 'PUT', + }, + async fetcher({ + input: { itemId, item }, + options, + fetch, + }: HookFetcherContext<UpdateCartItemBody>) { + 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) { + return removeItemHandler.fetcher({ + options: removeItemHandler.fetchOptions, + input: { itemId }, + fetch, + }) + } + } else if (item.quantity) { + throw new ValidationError({ + message: 'The item quantity has to be a valid integer', + }) + } + + const data = await fetch<BigcommerceCart, UpdateCartItemBody>({ + ...options, + body: { itemId, item }, + }) + + return normalizeCart(data) + }, + useHook: ({ + fetch, + }: MutationHookContext<Cart | null, UpdateCartItemBody>) => < + T extends LineItem | undefined = undefined + >( + ctx: { + item?: T + wait?: number + } = {} + ) => { + const { item } = ctx + const { mutate } = useCart() as any + + return useCallback( + debounce(async (input: UpdateItemInput<T>) => { + 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', + }) + } + + const data = await fetch({ + input: { + itemId, + item: { productId, variantId, quantity: input.quantity }, + }, + }) + await mutate(data, false) + return data + }, ctx.wait ?? 500), + [fetch, mutate] + ) + }, +} diff --git a/framework/bigcommerce/commerce.config.json b/framework/bigcommerce/commerce.config.json new file mode 100644 index 000000000..3a8738f47 --- /dev/null +++ b/framework/bigcommerce/commerce.config.json @@ -0,0 +1,6 @@ +{ + "provider": "bigcommerce", + "features": { + "wishlist": true + } +} diff --git a/framework/bigcommerce/common/get-all-pages.ts b/framework/bigcommerce/common/get-all-pages.ts new file mode 100644 index 000000000..dc5eb15a5 --- /dev/null +++ b/framework/bigcommerce/common/get-all-pages.ts @@ -0,0 +1,43 @@ +import type { RecursivePartial, RecursiveRequired } from '../api/utils/types' +import { BigcommerceConfig, getConfig } from '../api' +import { definitions } from '../api/definitions/store-content' + +export type Page = definitions['page_Full'] + +export type GetAllPagesResult< + T extends { pages: any[] } = { pages: Page[] } +> = T + +async function getAllPages(opts?: { + config?: BigcommerceConfig + preview?: boolean +}): Promise<GetAllPagesResult> + +async function getAllPages<T extends { pages: any[] }>(opts: { + url: string + config?: BigcommerceConfig + preview?: boolean +}): Promise<GetAllPagesResult<T>> + +async function getAllPages({ + config, + preview, +}: { + url?: string + config?: BigcommerceConfig + preview?: boolean +} = {}): Promise<GetAllPagesResult> { + config = getConfig(config) + // 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 config.storeApiFetch< + RecursivePartial<{ data: Page[] }> + >('/v3/content/pages') + const pages = (data as RecursiveRequired<typeof data>) ?? [] + + return { + pages: preview ? pages : pages.filter((p) => p.is_visible), + } +} + +export default getAllPages diff --git a/framework/bigcommerce/common/get-page.ts b/framework/bigcommerce/common/get-page.ts new file mode 100644 index 000000000..932032efb --- /dev/null +++ b/framework/bigcommerce/common/get-page.ts @@ -0,0 +1,53 @@ +import type { RecursivePartial, RecursiveRequired } from '../api/utils/types' +import { BigcommerceConfig, getConfig } from '../api' +import { definitions } from '../api/definitions/store-content' + +export type Page = definitions['page_Full'] + +export type GetPageResult<T extends { page?: any } = { page?: Page }> = T + +export type PageVariables = { + id: number +} + +async function getPage(opts: { + url?: string + variables: PageVariables + config?: BigcommerceConfig + preview?: boolean +}): Promise<GetPageResult> + +async function getPage<T extends { page?: any }, V = any>(opts: { + url: string + variables: V + config?: BigcommerceConfig + preview?: boolean +}): Promise<GetPageResult<T>> + +async function getPage({ + url, + variables, + config, + preview, +}: { + url?: string + variables: PageVariables + config?: BigcommerceConfig + preview?: boolean +}): Promise<GetPageResult> { + config = getConfig(config) + // 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 config.storeApiFetch< + RecursivePartial<{ data: Page[] }> + >(url || `/v3/content/pages?id=${variables.id}&include=body`) + const firstPage = data?.[0] + const page = firstPage as RecursiveRequired<typeof firstPage> + + if (preview || page?.is_visible) { + return { page } + } + return {} +} + +export default getPage diff --git a/framework/bigcommerce/common/get-site-info.ts b/framework/bigcommerce/common/get-site-info.ts new file mode 100644 index 000000000..80cde8d82 --- /dev/null +++ b/framework/bigcommerce/common/get-site-info.ts @@ -0,0 +1,106 @@ +import type { GetSiteInfoQuery, GetSiteInfoQueryVariables } from '../schema' +import type { RecursivePartial, RecursiveRequired } from '../api/utils/types' +import filterEdges from '../api/utils/filter-edges' +import { BigcommerceConfig, getConfig } from '../api' +import { categoryTreeItemFragment } from '../api/fragments/category-tree' + +// Get 3 levels of categories +export const getSiteInfoQuery = /* GraphQL */ ` + query getSiteInfo { + site { + categoryTree { + ...categoryTreeItem + children { + ...categoryTreeItem + children { + ...categoryTreeItem + } + } + } + brands { + pageInfo { + startCursor + endCursor + } + edges { + cursor + node { + entityId + name + defaultImage { + urlOriginal + altText + } + pageTitle + metaDesc + metaKeywords + searchKeywords + path + } + } + } + } + } + ${categoryTreeItemFragment} +` + +export type CategoriesTree = NonNullable< + GetSiteInfoQuery['site']['categoryTree'] +> + +export type BrandEdge = NonNullable< + NonNullable<GetSiteInfoQuery['site']['brands']['edges']>[0] +> + +export type Brands = BrandEdge[] + +export type GetSiteInfoResult< + T extends { categories: any[]; brands: any[] } = { + categories: CategoriesTree + brands: Brands + } +> = T + +async function getSiteInfo(opts?: { + variables?: GetSiteInfoQueryVariables + config?: BigcommerceConfig + preview?: boolean +}): Promise<GetSiteInfoResult> + +async function getSiteInfo< + T extends { categories: any[]; brands: any[] }, + V = any +>(opts: { + query: string + variables?: V + config?: BigcommerceConfig + preview?: boolean +}): Promise<GetSiteInfoResult<T>> + +async function getSiteInfo({ + query = getSiteInfoQuery, + variables, + config, +}: { + query?: string + variables?: GetSiteInfoQueryVariables + config?: BigcommerceConfig + preview?: boolean +} = {}): Promise<GetSiteInfoResult> { + config = getConfig(config) + // RecursivePartial forces the method to check for every prop in the data, which is + // required in case there's a custom `query` + const { data } = await config.fetch<RecursivePartial<GetSiteInfoQuery>>( + query, + { variables } + ) + const categories = data.site?.categoryTree + const brands = data.site?.brands?.edges + + return { + categories: (categories as RecursiveRequired<typeof categories>) ?? [], + brands: filterEdges(brands as RecursiveRequired<typeof brands>), + } +} + +export default getSiteInfo diff --git a/framework/bigcommerce/customer/get-customer-id.ts b/framework/bigcommerce/customer/get-customer-id.ts new file mode 100644 index 000000000..65ce5a6a8 --- /dev/null +++ b/framework/bigcommerce/customer/get-customer-id.ts @@ -0,0 +1,34 @@ +import { GetCustomerIdQuery } from '../schema' +import { BigcommerceConfig, getConfig } from '../api' + +export const getCustomerIdQuery = /* GraphQL */ ` + query getCustomerId { + customer { + entityId + } + } +` + +async function getCustomerId({ + customerToken, + config, +}: { + customerToken: string + config?: BigcommerceConfig +}): Promise<number | undefined> { + config = getConfig(config) + + const { data } = await config.fetch<GetCustomerIdQuery>( + getCustomerIdQuery, + undefined, + { + headers: { + cookie: `${config.customerCookie}=${customerToken}`, + }, + } + ) + + return data?.customer?.entityId +} + +export default getCustomerId diff --git a/framework/bigcommerce/customer/get-customer-wishlist.ts b/framework/bigcommerce/customer/get-customer-wishlist.ts new file mode 100644 index 000000000..97e5654a9 --- /dev/null +++ b/framework/bigcommerce/customer/get-customer-wishlist.ts @@ -0,0 +1,88 @@ +import type { RecursivePartial, RecursiveRequired } from '../api/utils/types' +import { definitions } from '../api/definitions/wishlist' +import { BigcommerceConfig, getConfig } from '../api' +import getAllProducts, { ProductEdge } from '../product/get-all-products' + +export type Wishlist = Omit<definitions['wishlist_Full'], 'items'> & { + items?: WishlistItem[] +} + +export type WishlistItem = NonNullable< + definitions['wishlist_Full']['items'] +>[0] & { + product?: ProductEdge['node'] +} + +export type GetCustomerWishlistResult< + T extends { wishlist?: any } = { wishlist?: Wishlist } +> = T + +export type GetCustomerWishlistVariables = { + customerId: number +} + +async function getCustomerWishlist(opts: { + variables: GetCustomerWishlistVariables + config?: BigcommerceConfig + includeProducts?: boolean +}): Promise<GetCustomerWishlistResult> + +async function getCustomerWishlist< + T extends { wishlist?: any }, + V = any +>(opts: { + url: string + variables: V + config?: BigcommerceConfig + includeProducts?: boolean +}): Promise<GetCustomerWishlistResult<T>> + +async function getCustomerWishlist({ + config, + variables, + includeProducts, +}: { + url?: string + variables: GetCustomerWishlistVariables + config?: BigcommerceConfig + includeProducts?: boolean +}): Promise<GetCustomerWishlistResult> { + config = getConfig(config) + + const { data = [] } = await config.storeApiFetch< + RecursivePartial<{ data: Wishlist[] }> + >(`/v3/wishlists?customer_id=${variables.customerId}`) + const wishlist = data[0] + + if (includeProducts && wishlist?.items?.length) { + const entityIds = wishlist.items + ?.map((item) => item?.product_id) + .filter((id): id is number => !!id) + + if (entityIds?.length) { + const graphqlData = await getAllProducts({ + variables: { first: 100, entityIds }, + config, + }) + // Put the products in an object that we can use to get them by id + const productsById = graphqlData.products.reduce<{ + [k: number]: ProductEdge + }>((prods, p) => { + prods[Number(p.id)] = p as any + return prods + }, {}) + // Populate the wishlist items with the graphql products + wishlist.items.forEach((item) => { + const product = item && productsById[item.product_id!] + if (item && product) { + // @ts-ignore Fix this type when the wishlist type is properly defined + item.product = product + } + }) + } + } + + return { wishlist: wishlist as RecursiveRequired<typeof wishlist> } +} + +export default getCustomerWishlist diff --git a/framework/bigcommerce/customer/index.ts b/framework/bigcommerce/customer/index.ts new file mode 100644 index 000000000..6c903ecc5 --- /dev/null +++ b/framework/bigcommerce/customer/index.ts @@ -0,0 +1 @@ +export { default as useCustomer } from './use-customer' diff --git a/framework/bigcommerce/customer/use-customer.tsx b/framework/bigcommerce/customer/use-customer.tsx new file mode 100644 index 000000000..093007824 --- /dev/null +++ b/framework/bigcommerce/customer/use-customer.tsx @@ -0,0 +1,24 @@ +import { SWRHook } from '@commerce/utils/types' +import useCustomer, { UseCustomer } from '@commerce/customer/use-customer' +import type { Customer, CustomerData } from '../api/customers' + +export default useCustomer as UseCustomer<typeof handler> + +export const handler: SWRHook<Customer | null> = { + fetchOptions: { + url: '/api/bigcommerce/customers', + method: 'GET', + }, + async fetcher({ options, fetch }) { + const data = await fetch<CustomerData | null>(options) + return data?.customer ?? null + }, + useHook: ({ useData }) => (input) => { + return useData({ + swrOptions: { + revalidateOnFocus: false, + ...input?.swrOptions, + }, + }) + }, +} diff --git a/framework/bigcommerce/fetcher.ts b/framework/bigcommerce/fetcher.ts new file mode 100644 index 000000000..f8ca0c578 --- /dev/null +++ b/framework/bigcommerce/fetcher.ts @@ -0,0 +1,41 @@ +import { FetcherError } from '@commerce/utils/errors' +import type { Fetcher } from '@commerce/utils/types' + +async function getText(res: Response) { + try { + return (await res.text()) || res.statusText + } catch (error) { + return res.statusText + } +} + +async function getError(res: Response) { + if (res.headers.get('Content-Type')?.includes('application/json')) { + const data = await res.json() + return new FetcherError({ errors: data.errors, status: res.status }) + } + return new FetcherError({ message: await getText(res), status: res.status }) +} + +const fetcher: Fetcher = async ({ + url, + method = 'GET', + variables, + body: bodyObj, +}) => { + const hasBody = Boolean(variables || bodyObj) + const body = hasBody + ? JSON.stringify(variables ? { variables } : bodyObj) + : undefined + const headers = hasBody ? { 'Content-Type': 'application/json' } : undefined + const res = await fetch(url!, { method, body, headers }) + + if (res.ok) { + const { data } = await res.json() + return data + } + + throw await getError(res) +} + +export default fetcher diff --git a/framework/bigcommerce/index.tsx b/framework/bigcommerce/index.tsx new file mode 100644 index 000000000..b35785ed2 --- /dev/null +++ b/framework/bigcommerce/index.tsx @@ -0,0 +1,35 @@ +import type { ReactNode } from 'react' +import { + CommerceConfig, + CommerceProvider as CoreCommerceProvider, + useCommerce as useCoreCommerce, +} from '@commerce' +import { bigcommerceProvider, BigcommerceProvider } from './provider' + +export { bigcommerceProvider } +export type { BigcommerceProvider } + +export const bigcommerceConfig: CommerceConfig = { + locale: 'en-us', + cartCookie: 'bc_cartId', +} + +export type BigcommerceConfig = Partial<CommerceConfig> + +export type BigcommerceProps = { + children?: ReactNode + locale: string +} & BigcommerceConfig + +export function CommerceProvider({ children, ...config }: BigcommerceProps) { + return ( + <CoreCommerceProvider + provider={bigcommerceProvider} + config={{ ...bigcommerceConfig, ...config }} + > + {children} + </CoreCommerceProvider> + ) +} + +export const useCommerce = () => useCoreCommerce<BigcommerceProvider>() diff --git a/framework/bigcommerce/lib/immutability.ts b/framework/bigcommerce/lib/immutability.ts new file mode 100644 index 000000000..488d3570f --- /dev/null +++ b/framework/bigcommerce/lib/immutability.ts @@ -0,0 +1,13 @@ +import update, { Context } from 'immutability-helper' + +const c = new Context() + +c.extend('$auto', function (value, object) { + return object ? c.update(object, value) : c.update({}, value) +}) + +c.extend('$autoArray', function (value, object) { + return object ? c.update(object, value) : c.update([], value) +}) + +export default c.update diff --git a/framework/bigcommerce/lib/normalize.ts b/framework/bigcommerce/lib/normalize.ts new file mode 100644 index 000000000..cc7606099 --- /dev/null +++ b/framework/bigcommerce/lib/normalize.ts @@ -0,0 +1,113 @@ +import type { Product } from '@commerce/types' +import type { Cart, BigcommerceCart, LineItem } from '../types' +import update from './immutability' + +function normalizeProductOption(productOption: any) { + const { + node: { + entityId, + values: { edges }, + ...rest + }, + } = productOption + + return { + id: entityId, + values: edges?.map(({ node }: any) => node), + ...rest, + } +} + +export function normalizeProduct(productNode: any): Product { + const { + entityId: id, + productOptions, + prices, + path, + id: _, + options: _0, + } = 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, + 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, ''), + }, + price: { + $set: { + value: prices?.price.value, + currencyCode: prices?.price.currencyCode, + }, + }, + $unset: ['entityId'], + }) +} + +export function normalizeCart(data: BigcommerceCart): Cart { + return { + id: data.id, + customerId: String(data.customer_id), + email: data.email, + createdAt: data.created_time, + currency: data.currency, + taxesIncluded: data.tax_included, + lineItems: data.line_items.physical_items.map(normalizeLineItem), + lineItemsSubtotalPrice: data.base_amount, + subtotalPrice: data.base_amount + data.discount_amount, + totalPrice: data.cart_amount, + discounts: data.discounts?.map((discount) => ({ + value: discount.discounted_amount, + })), + } +} + +function normalizeLineItem(item: any): LineItem { + return { + id: item.id, + variantId: String(item.variant_id), + productId: String(item.product_id), + name: item.name, + quantity: item.quantity, + variant: { + id: String(item.variant_id), + sku: item.sku, + name: item.name, + image: { + url: item.image_url, + }, + requiresShipping: item.is_require_shipping, + price: item.sale_price, + listPrice: item.list_price, + }, + path: item.url.split('/')[3], + discounts: item.discounts.map((discount: any) => ({ + value: discount.discounted_amount, + })), + } +} diff --git a/framework/bigcommerce/next.config.js b/framework/bigcommerce/next.config.js new file mode 100644 index 000000000..f33b16630 --- /dev/null +++ b/framework/bigcommerce/next.config.js @@ -0,0 +1,8 @@ +const commerce = require('./commerce.config.json') + +module.exports = { + commerce, + images: { + domains: ['cdn11.bigcommerce.com'], + }, +} diff --git a/framework/bigcommerce/product/get-all-product-paths.ts b/framework/bigcommerce/product/get-all-product-paths.ts new file mode 100644 index 000000000..c1b23b38d --- /dev/null +++ b/framework/bigcommerce/product/get-all-product-paths.ts @@ -0,0 +1,71 @@ +import type { + GetAllProductPathsQuery, + GetAllProductPathsQueryVariables, +} from '../schema' +import type { RecursivePartial, RecursiveRequired } from '../api/utils/types' +import filterEdges from '../api/utils/filter-edges' +import { BigcommerceConfig, getConfig } from '../api' + +export const getAllProductPathsQuery = /* GraphQL */ ` + query getAllProductPaths($first: Int = 100) { + site { + products(first: $first) { + edges { + node { + path + } + } + } + } + } +` + +export type ProductPath = NonNullable< + NonNullable<GetAllProductPathsQuery['site']['products']['edges']>[0] +> + +export type ProductPaths = ProductPath[] + +export type { GetAllProductPathsQueryVariables } + +export type GetAllProductPathsResult< + T extends { products: any[] } = { products: ProductPaths } +> = T + +async function getAllProductPaths(opts?: { + variables?: GetAllProductPathsQueryVariables + config?: BigcommerceConfig +}): Promise<GetAllProductPathsResult> + +async function getAllProductPaths< + T extends { products: any[] }, + V = any +>(opts: { + query: string + variables?: V + config?: BigcommerceConfig +}): Promise<GetAllProductPathsResult<T>> + +async function getAllProductPaths({ + query = getAllProductPathsQuery, + variables, + config, +}: { + query?: string + variables?: GetAllProductPathsQueryVariables + config?: BigcommerceConfig +} = {}): Promise<GetAllProductPathsResult> { + config = getConfig(config) + // RecursivePartial forces the method to check for every prop in the data, which is + // required in case there's a custom `query` + const { data } = await config.fetch< + RecursivePartial<GetAllProductPathsQuery> + >(query, { variables }) + const products = data.site?.products?.edges + + return { + products: filterEdges(products as RecursiveRequired<typeof products>), + } +} + +export default getAllProductPaths diff --git a/framework/bigcommerce/product/get-all-products.ts b/framework/bigcommerce/product/get-all-products.ts new file mode 100644 index 000000000..4c563bc62 --- /dev/null +++ b/framework/bigcommerce/product/get-all-products.ts @@ -0,0 +1,135 @@ +import type { + GetAllProductsQuery, + GetAllProductsQueryVariables, +} from '../schema' +import type { Product } from '@commerce/types' +import type { RecursivePartial, RecursiveRequired } from '../api/utils/types' +import filterEdges from '../api/utils/filter-edges' +import setProductLocaleMeta from '../api/utils/set-product-locale-meta' +import { productConnectionFragment } from '../api/fragments/product' +import { BigcommerceConfig, getConfig } from '../api' +import { normalizeProduct } from '../lib/normalize' + +export const getAllProductsQuery = /* GraphQL */ ` + query getAllProducts( + $hasLocale: Boolean = false + $locale: String = "null" + $entityIds: [Int!] + $first: Int = 10 + $products: Boolean = false + $featuredProducts: Boolean = false + $bestSellingProducts: Boolean = false + $newestProducts: Boolean = false + ) { + site { + products(first: $first, entityIds: $entityIds) @include(if: $products) { + ...productConnnection + } + featuredProducts(first: $first) @include(if: $featuredProducts) { + ...productConnnection + } + bestSellingProducts(first: $first) @include(if: $bestSellingProducts) { + ...productConnnection + } + newestProducts(first: $first) @include(if: $newestProducts) { + ...productConnnection + } + } + } + + ${productConnectionFragment} +` + +export type ProductEdge = NonNullable< + NonNullable<GetAllProductsQuery['site']['products']['edges']>[0] +> + +export type ProductNode = ProductEdge['node'] + +export type GetAllProductsResult< + T extends Record<keyof GetAllProductsResult, any[]> = { + products: ProductEdge[] + } +> = T + +const FIELDS = [ + 'products', + 'featuredProducts', + 'bestSellingProducts', + 'newestProducts', +] + +export type ProductTypes = + | 'products' + | 'featuredProducts' + | 'bestSellingProducts' + | 'newestProducts' + +export type ProductVariables = { field?: ProductTypes } & Omit< + GetAllProductsQueryVariables, + ProductTypes | 'hasLocale' +> + +async function getAllProducts(opts?: { + variables?: ProductVariables + config?: BigcommerceConfig + preview?: boolean +}): Promise<{ products: Product[] }> + +async function getAllProducts< + T extends Record<keyof GetAllProductsResult, any[]>, + V = any +>(opts: { + query: string + variables?: V + config?: BigcommerceConfig + preview?: boolean +}): Promise<GetAllProductsResult<T>> + +async function getAllProducts({ + query = getAllProductsQuery, + variables: { field = 'products', ...vars } = {}, + config, +}: { + query?: string + variables?: ProductVariables + config?: BigcommerceConfig + preview?: boolean + // TODO: fix the product type here +} = {}): Promise<{ products: Product[] | any[] }> { + config = getConfig(config) + + const locale = vars.locale || config.locale + const variables: GetAllProductsQueryVariables = { + ...vars, + locale, + hasLocale: !!locale, + } + + if (!FIELDS.includes(field)) { + throw new Error( + `The field variable has to match one of ${FIELDS.join(', ')}` + ) + } + + variables[field] = true + + // RecursivePartial forces the method to check for every prop in the data, which is + // required in case there's a custom `query` + const { data } = await config.fetch<RecursivePartial<GetAllProductsQuery>>( + query, + { variables } + ) + const edges = data.site?.[field]?.edges + const products = filterEdges(edges as RecursiveRequired<typeof edges>) + + if (locale && config.applyLocale) { + products.forEach((product: RecursivePartial<ProductEdge>) => { + if (product.node) setProductLocaleMeta(product.node) + }) + } + + return { products: products.map(({ node }) => normalizeProduct(node as any)) } +} + +export default getAllProducts diff --git a/framework/bigcommerce/product/get-product.ts b/framework/bigcommerce/product/get-product.ts new file mode 100644 index 000000000..b52568b62 --- /dev/null +++ b/framework/bigcommerce/product/get-product.ts @@ -0,0 +1,121 @@ +import type { GetProductQuery, GetProductQueryVariables } from '../schema' +import setProductLocaleMeta from '../api/utils/set-product-locale-meta' +import { productInfoFragment } from '../api/fragments/product' +import { BigcommerceConfig, getConfig } from '../api' +import { normalizeProduct } from '../lib/normalize' +import type { Product } from '@commerce/types' + +export const getProductQuery = /* GraphQL */ ` + query getProduct( + $hasLocale: Boolean = false + $locale: String = "null" + $path: String! + ) { + site { + route(path: $path) { + node { + __typename + ... on Product { + ...productInfo + variants { + edges { + node { + entityId + defaultImage { + urlOriginal + altText + isDefault + } + prices { + ...productPrices + } + inventory { + aggregated { + availableToSell + warningLevel + } + isInStock + } + productOptions { + edges { + node { + __typename + entityId + displayName + ...multipleChoiceOption + } + } + } + } + } + } + } + } + } + } + } + + ${productInfoFragment} +` + +export type ProductNode = Extract< + GetProductQuery['site']['route']['node'], + { __typename: 'Product' } +> + +export type GetProductResult< + T extends { product?: any } = { product?: ProductNode } +> = T + +export type ProductVariables = { locale?: string } & ( + | { path: string; slug?: never } + | { path?: never; slug: string } +) + +async function getProduct(opts: { + variables: ProductVariables + config?: BigcommerceConfig + preview?: boolean +}): Promise<GetProductResult> + +async function getProduct<T extends { product?: any }, V = any>(opts: { + query: string + variables: V + config?: BigcommerceConfig + preview?: boolean +}): Promise<GetProductResult<T>> + +async function getProduct({ + query = getProductQuery, + variables: { slug, ...vars }, + config, +}: { + query?: string + variables: ProductVariables + config?: BigcommerceConfig + preview?: boolean +}): Promise<Product | {} | any> { + config = getConfig(config) + + const locale = vars.locale || config.locale + const variables: GetProductQueryVariables = { + ...vars, + locale, + hasLocale: !!locale, + path: slug ? `/${slug}/` : vars.path!, + } + const { data } = await config.fetch<GetProductQuery>(query, { variables }) + const product = data.site?.route?.node + + if (product?.__typename === 'Product') { + if (locale && config.applyLocale) { + setProductLocaleMeta(product) + } + + return { product: normalizeProduct(product as any) } + } + + return {} +} + +export default getProduct diff --git a/framework/bigcommerce/product/index.ts b/framework/bigcommerce/product/index.ts new file mode 100644 index 000000000..b290c189f --- /dev/null +++ b/framework/bigcommerce/product/index.ts @@ -0,0 +1,4 @@ +export { default as usePrice } from './use-price' +export { default as useSearch } from './use-search' +export { default as getProduct } from './get-product' +export { default as getAllProducts } from './get-all-products' diff --git a/framework/bigcommerce/product/use-price.tsx b/framework/bigcommerce/product/use-price.tsx new file mode 100644 index 000000000..0174faf5e --- /dev/null +++ b/framework/bigcommerce/product/use-price.tsx @@ -0,0 +1,2 @@ +export * from '@commerce/product/use-price' +export { default } from '@commerce/product/use-price' diff --git a/framework/bigcommerce/product/use-search.tsx b/framework/bigcommerce/product/use-search.tsx new file mode 100644 index 000000000..0ee135032 --- /dev/null +++ b/framework/bigcommerce/product/use-search.tsx @@ -0,0 +1,53 @@ +import { SWRHook } from '@commerce/utils/types' +import useSearch, { UseSearch } from '@commerce/product/use-search' +import type { SearchProductsData } from '../api/catalog/products' + +export default useSearch as UseSearch<typeof handler> + +export type SearchProductsInput = { + search?: string + categoryId?: number + brandId?: number + sort?: string +} + +export const handler: SWRHook< + SearchProductsData, + SearchProductsInput, + SearchProductsInput +> = { + fetchOptions: { + url: '/api/bigcommerce/catalog/products', + method: 'GET', + }, + fetcher({ input: { search, categoryId, brandId, sort }, options, fetch }) { + // Use a dummy base as we only care about the relative path + const url = new URL(options.url!, 'http://a') + + if (search) url.searchParams.set('search', search) + if (Number.isInteger(categoryId)) + url.searchParams.set('category', String(categoryId)) + if (Number.isInteger(brandId)) + url.searchParams.set('brand', String(brandId)) + if (sort) url.searchParams.set('sort', sort) + + return fetch({ + url: url.pathname + url.search, + 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, + }, + }) + }, +} diff --git a/framework/bigcommerce/provider.ts b/framework/bigcommerce/provider.ts new file mode 100644 index 000000000..196855438 --- /dev/null +++ b/framework/bigcommerce/provider.ts @@ -0,0 +1,34 @@ +import { handler as useCart } from './cart/use-cart' +import { handler as useAddItem } from './cart/use-add-item' +import { handler as useUpdateItem } from './cart/use-update-item' +import { handler as useRemoveItem } from './cart/use-remove-item' + +import { handler as useWishlist } from './wishlist/use-wishlist' +import { handler as useWishlistAddItem } from './wishlist/use-add-item' +import { handler as useWishlistRemoveItem } from './wishlist/use-remove-item' + +import { handler as useCustomer } from './customer/use-customer' +import { handler as useSearch } from './product/use-search' + +import { handler as useLogin } from './auth/use-login' +import { handler as useLogout } from './auth/use-logout' +import { handler as useSignup } from './auth/use-signup' + +import fetcher from './fetcher' + +export const bigcommerceProvider = { + locale: 'en-us', + cartCookie: 'bc_cartId', + fetcher, + cart: { useCart, useAddItem, useUpdateItem, useRemoveItem }, + wishlist: { + useWishlist, + useAddItem: useWishlistAddItem, + useRemoveItem: useWishlistRemoveItem, + }, + customer: { useCustomer }, + products: { useSearch }, + auth: { useLogin, useLogout, useSignup }, +} + +export type BigcommerceProvider = typeof bigcommerceProvider diff --git a/framework/bigcommerce/schema.d.ts b/framework/bigcommerce/schema.d.ts new file mode 100644 index 000000000..04824e263 --- /dev/null +++ b/framework/bigcommerce/schema.d.ts @@ -0,0 +1,2064 @@ +export type Maybe<T> = T | null +export type Exact<T extends { [key: string]: unknown }> = { + [K in keyof T]: T[K] +} +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: string + String: string + Boolean: boolean + Int: number + Float: number + DateTime: any + /** The `BigDecimal` scalar type represents signed fractional values with arbitrary precision. */ + BigDecimal: any + /** The `Long` scalar type represents non-fractional signed whole numeric values. Long can represent values between -(2^63) and 2^63 - 1. */ + Long: any +} + +/** Login result */ +export type LoginResult = { + __typename?: 'LoginResult' + /** The result of a login */ + result: Scalars['String'] +} + +/** Logout result */ +export type LogoutResult = { + __typename?: 'LogoutResult' + /** The result of a logout */ + result: Scalars['String'] +} + +export type Mutation = { + __typename?: 'Mutation' + login: LoginResult + logout: LogoutResult +} + +export type MutationLoginArgs = { + email: Scalars['String'] + password: Scalars['String'] +} + +/** Aggregated */ +export type Aggregated = { + __typename?: 'Aggregated' + /** Number of available products in stock. This can be 'null' if inventory is not set orif the store's Inventory Settings disable displaying stock levels on the storefront. */ + availableToSell: Scalars['Long'] + /** Indicates a threshold low-stock level. This can be 'null' if the inventory warning level is not set or if the store's Inventory Settings disable displaying stock levels on the storefront. */ + warningLevel: Scalars['Int'] +} + +/** Aggregated Product Inventory */ +export type AggregatedInventory = { + __typename?: 'AggregatedInventory' + /** Number of available products in stock. This can be 'null' if inventory is not set orif the store's Inventory Settings disable displaying stock levels on the storefront. */ + availableToSell: Scalars['Int'] + /** Indicates a threshold low-stock level. This can be 'null' if the inventory warning level is not set or if the store's Inventory Settings disable displaying stock levels on the storefront. */ + warningLevel: Scalars['Int'] +} + +/** Brand */ +export type Brand = Node & { + __typename?: 'Brand' + /** The ID of an object */ + id: Scalars['ID'] + /** Id of the brand. */ + entityId: Scalars['Int'] + /** Name of the brand. */ + name: Scalars['String'] + /** Default image for brand. */ + defaultImage?: Maybe<Image> + /** Page title for the brand. */ + pageTitle: Scalars['String'] + /** Meta description for the brand. */ + metaDesc: Scalars['String'] + /** Meta keywords for the brand. */ + metaKeywords: Array<Scalars['String']> + /** Search keywords for the brand. */ + searchKeywords: Array<Scalars['String']> + /** Path for the brand page. */ + path: Scalars['String'] + products: ProductConnection + /** Metafield data related to a brand. */ + metafields: MetafieldConnection +} + +/** Brand */ +export type BrandProductsArgs = { + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** Brand */ +export type BrandMetafieldsArgs = { + namespace: Scalars['String'] + keys?: Maybe<Array<Scalars['String']>> + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** A connection to a list of items. */ +export type BrandConnection = { + __typename?: 'BrandConnection' + /** Information to aid in pagination. */ + pageInfo: PageInfo + /** A list of edges. */ + edges?: Maybe<Array<Maybe<BrandEdge>>> +} + +/** An edge in a connection. */ +export type BrandEdge = { + __typename?: 'BrandEdge' + /** The item at the end of the edge. */ + node: Brand + /** A cursor for use in pagination. */ + cursor: Scalars['String'] +} + +/** Breadcrumb */ +export type Breadcrumb = { + __typename?: 'Breadcrumb' + /** Category id. */ + entityId: Scalars['Int'] + /** Name of the category. */ + name: Scalars['String'] +} + +/** A connection to a list of items. */ +export type BreadcrumbConnection = { + __typename?: 'BreadcrumbConnection' + /** Information to aid in pagination. */ + pageInfo: PageInfo + /** A list of edges. */ + edges?: Maybe<Array<Maybe<BreadcrumbEdge>>> +} + +/** An edge in a connection. */ +export type BreadcrumbEdge = { + __typename?: 'BreadcrumbEdge' + /** The item at the end of the edge. */ + node: Breadcrumb + /** A cursor for use in pagination. */ + cursor: Scalars['String'] +} + +/** Bulk pricing tier that sets a fixed price for the product or variant. */ +export type BulkPricingFixedPriceDiscount = BulkPricingTier & { + __typename?: 'BulkPricingFixedPriceDiscount' + /** This price will override the current product price. */ + price: Scalars['BigDecimal'] + /** Minimum item quantity that applies to this bulk pricing tier. */ + minimumQuantity: Scalars['Int'] + /** Maximum item quantity that applies to this bulk pricing tier - if not defined then the tier does not have an upper bound. */ + maximumQuantity?: Maybe<Scalars['Int']> +} + +/** Bulk pricing tier that reduces the price of the product or variant by a percentage. */ +export type BulkPricingPercentageDiscount = BulkPricingTier & { + __typename?: 'BulkPricingPercentageDiscount' + /** The percentage that will be removed from the product price. */ + percentOff: Scalars['BigDecimal'] + /** Minimum item quantity that applies to this bulk pricing tier. */ + minimumQuantity: Scalars['Int'] + /** Maximum item quantity that applies to this bulk pricing tier - if not defined then the tier does not have an upper bound. */ + maximumQuantity?: Maybe<Scalars['Int']> +} + +/** Bulk pricing tier that will subtract an amount from the price of the product or variant. */ +export type BulkPricingRelativePriceDiscount = BulkPricingTier & { + __typename?: 'BulkPricingRelativePriceDiscount' + /** The price of the product/variant will be reduced by this priceAdjustment. */ + priceAdjustment: Scalars['BigDecimal'] + /** Minimum item quantity that applies to this bulk pricing tier. */ + minimumQuantity: Scalars['Int'] + /** Maximum item quantity that applies to this bulk pricing tier - if not defined then the tier does not have an upper bound. */ + maximumQuantity?: Maybe<Scalars['Int']> +} + +/** A set of bulk pricing tiers that define price discounts which apply when purchasing specified quantities of a product or variant. */ +export type BulkPricingTier = { + /** Minimum item quantity that applies to this bulk pricing tier. */ + minimumQuantity: Scalars['Int'] + /** Maximum item quantity that applies to this bulk pricing tier - if not defined then the tier does not have an upper bound. */ + maximumQuantity?: Maybe<Scalars['Int']> +} + +/** Product Option */ +export type CatalogProductOption = { + /** Unique ID for the option. */ + entityId: Scalars['Int'] + /** Display name for the option. */ + displayName: Scalars['String'] + /** One of the option values is required to be selected for the checkout. */ + isRequired: Scalars['Boolean'] +} + +/** Product Option Value */ +export type CatalogProductOptionValue = { + /** Unique ID for the option value. */ + entityId: Scalars['Int'] + /** Label for the option value. */ + label: Scalars['String'] + /** Indicates whether this value is the chosen default selected value. */ + isDefault: Scalars['Boolean'] +} + +/** Category */ +export type Category = Node & { + __typename?: 'Category' + /** The ID of an object */ + id: Scalars['ID'] + /** Unique ID for the category. */ + entityId: Scalars['Int'] + /** Category name. */ + name: Scalars['String'] + /** Category path. */ + path: Scalars['String'] + /** Default image for the category. */ + defaultImage?: Maybe<Image> + /** Category description. */ + description: Scalars['String'] + /** Category breadcrumbs. */ + breadcrumbs: BreadcrumbConnection + products: ProductConnection + /** Metafield data related to a category. */ + metafields: MetafieldConnection +} + +/** Category */ +export type CategoryBreadcrumbsArgs = { + depth: Scalars['Int'] + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** Category */ +export type CategoryProductsArgs = { + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** Category */ +export type CategoryMetafieldsArgs = { + namespace: Scalars['String'] + keys?: Maybe<Array<Scalars['String']>> + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** A connection to a list of items. */ +export type CategoryConnection = { + __typename?: 'CategoryConnection' + /** Information to aid in pagination. */ + pageInfo: PageInfo + /** A list of edges. */ + edges?: Maybe<Array<Maybe<CategoryEdge>>> +} + +/** An edge in a connection. */ +export type CategoryEdge = { + __typename?: 'CategoryEdge' + /** The item at the end of the edge. */ + node: Category + /** A cursor for use in pagination. */ + cursor: Scalars['String'] +} + +/** An item in a tree of categories. */ +export type CategoryTreeItem = { + __typename?: 'CategoryTreeItem' + /** The id category. */ + entityId: Scalars['Int'] + /** The name of category. */ + name: Scalars['String'] + /** Path assigned to this category */ + path: Scalars['String'] + /** The description of this category. */ + description: Scalars['String'] + /** The number of products in this category. */ + productCount: Scalars['Int'] + /** Subcategories of this category */ + children: Array<CategoryTreeItem> +} + +/** A simple yes/no question represented by a checkbox. */ +export type CheckboxOption = CatalogProductOption & { + __typename?: 'CheckboxOption' + /** Indicates the default checked status. */ + checkedByDefault: Scalars['Boolean'] + /** Unique ID for the option. */ + entityId: Scalars['Int'] + /** Display name for the option. */ + displayName: Scalars['String'] + /** One of the option values is required to be selected for the checkout. */ + isRequired: Scalars['Boolean'] +} + +/** Contact field */ +export type ContactField = { + __typename?: 'ContactField' + /** Store address line. */ + address: Scalars['String'] + /** Store country. */ + country: Scalars['String'] + /** Store address type. */ + addressType: Scalars['String'] + /** Store email. */ + email: Scalars['String'] + /** Store phone number. */ + phone: Scalars['String'] +} + +/** Custom field */ +export type CustomField = { + __typename?: 'CustomField' + /** Custom field id. */ + entityId: Scalars['Int'] + /** Name of the custom field. */ + name: Scalars['String'] + /** Value of the custom field. */ + value: Scalars['String'] +} + +/** A connection to a list of items. */ +export type CustomFieldConnection = { + __typename?: 'CustomFieldConnection' + /** Information to aid in pagination. */ + pageInfo: PageInfo + /** A list of edges. */ + edges?: Maybe<Array<Maybe<CustomFieldEdge>>> +} + +/** An edge in a connection. */ +export type CustomFieldEdge = { + __typename?: 'CustomFieldEdge' + /** The item at the end of the edge. */ + node: CustomField + /** A cursor for use in pagination. */ + cursor: Scalars['String'] +} + +/** A customer that shops on a store */ +export type Customer = { + __typename?: 'Customer' + /** The ID of the customer. */ + entityId: Scalars['Int'] + /** The company name of the customer. */ + company: Scalars['String'] + /** The customer group id of the customer. */ + customerGroupId: Scalars['Int'] + /** The email address of the customer. */ + email: Scalars['String'] + /** The first name of the customer. */ + firstName: Scalars['String'] + /** The last name of the customer. */ + lastName: Scalars['String'] + /** The notes of the customer. */ + notes: Scalars['String'] + /** The phone number of the customer. */ + phone: Scalars['String'] + /** The tax exempt category of the customer. */ + taxExemptCategory: Scalars['String'] + /** Customer addresses count. */ + addressCount: Scalars['Int'] + /** Customer attributes count. */ + attributeCount: Scalars['Int'] + /** Customer store credit. */ + storeCredit: Array<Money> + /** Customer attributes. */ + attributes: CustomerAttributes +} + +/** A custom, store-specific attribute for a customer */ +export type CustomerAttribute = { + __typename?: 'CustomerAttribute' + /** The ID of the custom customer attribute */ + entityId: Scalars['Int'] + /** The value of the custom customer attribute */ + value?: Maybe<Scalars['String']> + /** The name of the custom customer attribute */ + name: Scalars['String'] +} + +/** Custom, store-specific customer attributes */ +export type CustomerAttributes = { + __typename?: 'CustomerAttributes' + attribute: CustomerAttribute +} + +/** Custom, store-specific customer attributes */ +export type CustomerAttributesAttributeArgs = { + entityId: Scalars['Int'] +} + +/** A calendar for allowing selection of a date. */ +export type DateFieldOption = CatalogProductOption & { + __typename?: 'DateFieldOption' + /** Unique ID for the option. */ + entityId: Scalars['Int'] + /** Display name for the option. */ + displayName: Scalars['String'] + /** One of the option values is required to be selected for the checkout. */ + isRequired: Scalars['Boolean'] +} + +/** Date Time Extended */ +export type DateTimeExtended = { + __typename?: 'DateTimeExtended' + /** ISO-8601 formatted date in UTC */ + utc: Scalars['DateTime'] +} + +/** Display field */ +export type DisplayField = { + __typename?: 'DisplayField' + /** Short date format. */ + shortDateFormat: Scalars['String'] + /** Extended date format. */ + extendedDateFormat: Scalars['String'] +} + +/** A form allowing selection and uploading of a file from the user's local computer. */ +export type FileUploadFieldOption = CatalogProductOption & { + __typename?: 'FileUploadFieldOption' + /** Unique ID for the option. */ + entityId: Scalars['Int'] + /** Display name for the option. */ + displayName: Scalars['String'] + /** One of the option values is required to be selected for the checkout. */ + isRequired: Scalars['Boolean'] +} + +/** Image */ +export type Image = { + __typename?: 'Image' + /** Absolute path to image using store CDN. */ + url: Scalars['String'] + /** Absolute path to original image using store CDN. */ + urlOriginal: Scalars['String'] + /** Text description of an image that can be used for SEO and/or accessibility purposes. */ + altText: Scalars['String'] + /** Indicates whether this is the primary image. */ + isDefault: Scalars['Boolean'] +} + +/** Image */ +export type ImageUrlArgs = { + width: Scalars['Int'] + height?: Maybe<Scalars['Int']> +} + +/** A connection to a list of items. */ +export type ImageConnection = { + __typename?: 'ImageConnection' + /** Information to aid in pagination. */ + pageInfo: PageInfo + /** A list of edges. */ + edges?: Maybe<Array<Maybe<ImageEdge>>> +} + +/** An edge in a connection. */ +export type ImageEdge = { + __typename?: 'ImageEdge' + /** The item at the end of the edge. */ + node: Image + /** A cursor for use in pagination. */ + cursor: Scalars['String'] +} + +/** An inventory */ +export type Inventory = { + __typename?: 'Inventory' + /** Locations */ + locations: LocationConnection +} + +/** An inventory */ +export type InventoryLocationsArgs = { + entityIds?: Maybe<Array<Scalars['Int']>> + codes?: Maybe<Array<Scalars['String']>> + typeIds?: Maybe<Array<Scalars['String']>> + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** Inventory By Locations */ +export type InventoryByLocations = { + __typename?: 'InventoryByLocations' + /** Location id. */ + locationEntityId: Scalars['Long'] + /** Number of available products in stock. */ + availableToSell: Scalars['Long'] + /** Indicates a threshold low-stock level. */ + warningLevel: Scalars['Int'] + /** Indicates whether this product is in stock. */ + isInStock: Scalars['Boolean'] +} + +/** A connection to a list of items. */ +export type LocationConnection = { + __typename?: 'LocationConnection' + /** Information to aid in pagination. */ + pageInfo: PageInfo + /** A list of edges. */ + edges?: Maybe<Array<Maybe<LocationEdge>>> +} + +/** An edge in a connection. */ +export type LocationEdge = { + __typename?: 'LocationEdge' + /** The item at the end of the edge. */ + node: InventoryByLocations + /** A cursor for use in pagination. */ + cursor: Scalars['String'] +} + +/** Logo field */ +export type LogoField = { + __typename?: 'LogoField' + /** Logo title. */ + title: Scalars['String'] + /** Store logo image. */ + image: Image +} + +/** Measurement */ +export type Measurement = { + __typename?: 'Measurement' + /** Unformatted weight measurement value. */ + value: Scalars['Float'] + /** Unit of measurement. */ + unit: Scalars['String'] +} + +/** A connection to a list of items. */ +export type MetafieldConnection = { + __typename?: 'MetafieldConnection' + /** Information to aid in pagination. */ + pageInfo: PageInfo + /** A list of edges. */ + edges?: Maybe<Array<Maybe<MetafieldEdge>>> +} + +/** An edge in a connection. */ +export type MetafieldEdge = { + __typename?: 'MetafieldEdge' + /** The item at the end of the edge. */ + node: Metafields + /** A cursor for use in pagination. */ + cursor: Scalars['String'] +} + +/** Key/Value pairs of data attached tied to a resource entity (product, brand, category, etc.) */ +export type Metafields = { + __typename?: 'Metafields' + /** The ID of an object */ + id: Scalars['ID'] + /** The ID of the metafield when referencing via our backend API. */ + entityId: Scalars['Int'] + /** A label for identifying a metafield data value. */ + key: Scalars['String'] + /** A metafield value. */ + value: Scalars['String'] +} + +/** A money object - includes currency code and a money amount */ +export type Money = { + __typename?: 'Money' + /** Currency code of the current money. */ + currencyCode: Scalars['String'] + /** The amount of money. */ + value: Scalars['BigDecimal'] +} + +/** A min and max pair of money objects */ +export type MoneyRange = { + __typename?: 'MoneyRange' + /** Minimum money object. */ + min: Money + /** Maximum money object. */ + max: Money +} + +/** A multi-line text input field, aka a text box. */ +export type MultiLineTextFieldOption = CatalogProductOption & { + __typename?: 'MultiLineTextFieldOption' + /** Unique ID for the option. */ + entityId: Scalars['Int'] + /** Display name for the option. */ + displayName: Scalars['String'] + /** One of the option values is required to be selected for the checkout. */ + isRequired: Scalars['Boolean'] +} + +/** An option type that has a fixed list of values. */ +export type MultipleChoiceOption = CatalogProductOption & { + __typename?: 'MultipleChoiceOption' + /** The chosen display style for this multiple choice option. */ + displayStyle: Scalars['String'] + /** List of option values. */ + values: ProductOptionValueConnection + /** Unique ID for the option. */ + entityId: Scalars['Int'] + /** Display name for the option. */ + displayName: Scalars['String'] + /** One of the option values is required to be selected for the checkout. */ + isRequired: Scalars['Boolean'] +} + +/** An option type that has a fixed list of values. */ +export type MultipleChoiceOptionValuesArgs = { + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** A simple multiple choice value comprised of an id and a label. */ +export type MultipleChoiceOptionValue = CatalogProductOptionValue & { + __typename?: 'MultipleChoiceOptionValue' + /** Unique ID for the option value. */ + entityId: Scalars['Int'] + /** Label for the option value. */ + label: Scalars['String'] + /** Indicates whether this value is the chosen default selected value. */ + isDefault: Scalars['Boolean'] +} + +/** An object with an ID */ +export type Node = { + /** The id of the object. */ + id: Scalars['ID'] +} + +/** A single line text input field that only accepts numbers. */ +export type NumberFieldOption = CatalogProductOption & { + __typename?: 'NumberFieldOption' + /** Unique ID for the option. */ + entityId: Scalars['Int'] + /** Display name for the option. */ + displayName: Scalars['String'] + /** One of the option values is required to be selected for the checkout. */ + isRequired: Scalars['Boolean'] +} + +/** A connection to a list of items. */ +export type OptionConnection = { + __typename?: 'OptionConnection' + /** Information to aid in pagination. */ + pageInfo: PageInfo + /** A list of edges. */ + edges?: Maybe<Array<Maybe<OptionEdge>>> +} + +/** An edge in a connection. */ +export type OptionEdge = { + __typename?: 'OptionEdge' + /** The item at the end of the edge. */ + node: ProductOption + /** A cursor for use in pagination. */ + cursor: Scalars['String'] +} + +/** A connection to a list of items. */ +export type OptionValueConnection = { + __typename?: 'OptionValueConnection' + /** Information to aid in pagination. */ + pageInfo: PageInfo + /** A list of edges. */ + edges?: Maybe<Array<Maybe<OptionValueEdge>>> +} + +/** An edge in a connection. */ +export type OptionValueEdge = { + __typename?: 'OptionValueEdge' + /** The item at the end of the edge. */ + node: ProductOptionValue + /** A cursor for use in pagination. */ + cursor: Scalars['String'] +} + +export type OptionValueId = { + optionEntityId: Scalars['Int'] + valueEntityId: Scalars['Int'] +} + +/** Information about pagination in a connection. */ +export type PageInfo = { + __typename?: 'PageInfo' + /** When paginating forwards, are there more items? */ + hasNextPage: Scalars['Boolean'] + /** When paginating backwards, are there more items? */ + hasPreviousPage: Scalars['Boolean'] + /** When paginating backwards, the cursor to continue. */ + startCursor?: Maybe<Scalars['String']> + /** When paginating forwards, the cursor to continue. */ + endCursor?: Maybe<Scalars['String']> +} + +/** The min and max range of prices that apply to this product. */ +export type PriceRanges = { + __typename?: 'PriceRanges' + /** Product price min/max range. */ + priceRange: MoneyRange + /** Product retail price min/max range. */ + retailPriceRange?: Maybe<MoneyRange> +} + +/** The various prices that can be set on a product. */ +export type Prices = { + __typename?: 'Prices' + /** Calculated price of the product. */ + price: Money + /** Sale price of the product. */ + salePrice?: Maybe<Money> + /** Original price of the product. */ + basePrice?: Maybe<Money> + /** Retail price of the product. */ + retailPrice?: Maybe<Money> + /** Minimum advertised price of the product. */ + mapPrice?: Maybe<Money> + /** Product price min/max range. */ + priceRange: MoneyRange + /** Product retail price min/max range. */ + retailPriceRange?: Maybe<MoneyRange> + /** The difference between the retail price (MSRP) and the current price, which can be presented to the shopper as their savings. */ + saved?: Maybe<Money> + /** List of bulk pricing tiers applicable to a product or variant. */ + bulkPricing: Array<BulkPricingTier> +} + +/** Product */ +export type Product = Node & { + __typename?: 'Product' + /** The ID of an object */ + id: Scalars['ID'] + /** Id of the product. */ + entityId: Scalars['Int'] + /** Default product variant when no options are selected. */ + sku: Scalars['String'] + /** Relative URL path to product page. */ + path: Scalars['String'] + /** Name of the product. */ + name: Scalars['String'] + /** Description of the product. */ + description: Scalars['String'] + /** Description of the product in plain text. */ + plainTextDescription: Scalars['String'] + /** Warranty information of the product. */ + warranty: Scalars['String'] + /** Minimum purchasable quantity for this product in a single order. */ + minPurchaseQuantity?: Maybe<Scalars['Int']> + /** Maximum purchasable quantity for this product in a single order. */ + maxPurchaseQuantity?: Maybe<Scalars['Int']> + /** Absolute URL path for adding a product to cart. */ + addToCartUrl: Scalars['String'] + /** Absolute URL path for adding a product to customer's wishlist. */ + addToWishlistUrl: Scalars['String'] + /** Prices object determined by supplied product ID, variant ID, and selected option IDs. */ + prices?: Maybe<Prices> + /** + * The minimum and maximum price of this product based on variant pricing and/or modifier price rules. + * @deprecated Use priceRanges inside prices node instead. + */ + priceRanges?: Maybe<PriceRanges> + /** Weight of the product. */ + weight?: Maybe<Measurement> + /** Height of the product. */ + height?: Maybe<Measurement> + /** Width of the product. */ + width?: Maybe<Measurement> + /** Depth of the product. */ + depth?: Maybe<Measurement> + /** Product options. */ + options: OptionConnection + /** Product options. */ + productOptions: ProductOptionConnection + /** Summary of the product reviews, includes the total number of reviews submitted and summation of the ratings on the reviews (ratings range from 0-5 per review). */ + reviewSummary: Reviews + /** Type of product, ex: physical, digital */ + type: Scalars['String'] + /** + * The availability state of the product. + * @deprecated Use status inside availabilityV2 instead. + */ + availability: Scalars['String'] + /** + * A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. + * @deprecated Use description inside availabilityV2 instead. + */ + availabilityDescription: Scalars['String'] + /** The availability state of the product. */ + availabilityV2: ProductAvailability + /** List of categories associated with the product. */ + categories: CategoryConnection + /** Brand associated with the product. */ + brand?: Maybe<Brand> + /** Variants associated with the product. */ + variants: VariantConnection + /** Custom fields of the product. */ + customFields: CustomFieldConnection + /** A list of the images for a product. */ + images: ImageConnection + /** Default image for a product. */ + defaultImage?: Maybe<Image> + /** Related products for this product. */ + relatedProducts: RelatedProductsConnection + /** Inventory information of the product. */ + inventory: ProductInventory + /** Metafield data related to a product. */ + metafields: MetafieldConnection + /** + * Product creation date + * @deprecated Alpha version. Do not use in production. + */ + createdAt: DateTimeExtended +} + +/** Product */ +export type ProductPlainTextDescriptionArgs = { + characterLimit?: Maybe<Scalars['Int']> +} + +/** Product */ +export type ProductPricesArgs = { + includeTax?: Maybe<Scalars['Boolean']> + currencyCode?: Maybe<CurrencyCode> +} + +/** Product */ +export type ProductPriceRangesArgs = { + includeTax?: Maybe<Scalars['Boolean']> +} + +/** Product */ +export type ProductOptionsArgs = { + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** Product */ +export type ProductProductOptionsArgs = { + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** Product */ +export type ProductCategoriesArgs = { + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** Product */ +export type ProductVariantsArgs = { + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> + entityIds?: Maybe<Array<Scalars['Int']>> + optionValueIds?: Maybe<Array<OptionValueId>> +} + +/** Product */ +export type ProductCustomFieldsArgs = { + names?: Maybe<Array<Scalars['String']>> + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** Product */ +export type ProductImagesArgs = { + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** Product */ +export type ProductRelatedProductsArgs = { + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** Product */ +export type ProductMetafieldsArgs = { + namespace: Scalars['String'] + keys?: Maybe<Array<Scalars['String']>> + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** Product availability */ +export type ProductAvailability = { + /** The availability state of the product. */ + status: ProductAvailabilityStatus + /** A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. */ + description: Scalars['String'] +} + +/** Product availability status */ +export enum ProductAvailabilityStatus { + Available = 'Available', + Preorder = 'Preorder', + Unavailable = 'Unavailable', +} + +/** Available Product */ +export type ProductAvailable = ProductAvailability & { + __typename?: 'ProductAvailable' + /** The availability state of the product. */ + status: ProductAvailabilityStatus + /** A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. */ + description: Scalars['String'] +} + +/** A connection to a list of items. */ +export type ProductConnection = { + __typename?: 'ProductConnection' + /** Information to aid in pagination. */ + pageInfo: PageInfo + /** A list of edges. */ + edges?: Maybe<Array<Maybe<ProductEdge>>> +} + +/** An edge in a connection. */ +export type ProductEdge = { + __typename?: 'ProductEdge' + /** The item at the end of the edge. */ + node: Product + /** A cursor for use in pagination. */ + cursor: Scalars['String'] +} + +/** Product Inventory Information */ +export type ProductInventory = { + __typename?: 'ProductInventory' + /** Indicates whether this product is in stock. */ + isInStock: Scalars['Boolean'] + /** Indicates whether this product's inventory is being tracked on variant level. If true, you may wish to check the variants node to understand the true inventory of each individual variant, rather than relying on this product-level aggregate to understand how many items may be added to cart. */ + hasVariantInventory: Scalars['Boolean'] + /** Aggregated product inventory information. This data may not be available if not set or if the store's Inventory Settings have disabled displaying stock levels on the storefront. */ + aggregated?: Maybe<AggregatedInventory> +} + +/** Product Option */ +export type ProductOption = { + __typename?: 'ProductOption' + /** Unique ID for the option. */ + entityId: Scalars['Int'] + /** Display name for the option. */ + displayName: Scalars['String'] + /** One of the option values is required to be selected for the checkout. */ + isRequired: Scalars['Boolean'] + /** Option values. */ + values: OptionValueConnection +} + +/** Product Option */ +export type ProductOptionValuesArgs = { + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** A connection to a list of items. */ +export type ProductOptionConnection = { + __typename?: 'ProductOptionConnection' + /** Information to aid in pagination. */ + pageInfo: PageInfo + /** A list of edges. */ + edges?: Maybe<Array<Maybe<ProductOptionEdge>>> +} + +/** An edge in a connection. */ +export type ProductOptionEdge = { + __typename?: 'ProductOptionEdge' + /** The item at the end of the edge. */ + node: CatalogProductOption + /** A cursor for use in pagination. */ + cursor: Scalars['String'] +} + +/** Product Option Value */ +export type ProductOptionValue = { + __typename?: 'ProductOptionValue' + /** Unique ID for the option value. */ + entityId: Scalars['Int'] + /** Label for the option value. */ + label: Scalars['String'] +} + +/** A connection to a list of items. */ +export type ProductOptionValueConnection = { + __typename?: 'ProductOptionValueConnection' + /** Information to aid in pagination. */ + pageInfo: PageInfo + /** A list of edges. */ + edges?: Maybe<Array<Maybe<ProductOptionValueEdge>>> +} + +/** An edge in a connection. */ +export type ProductOptionValueEdge = { + __typename?: 'ProductOptionValueEdge' + /** The item at the end of the edge. */ + node: CatalogProductOptionValue + /** A cursor for use in pagination. */ + cursor: Scalars['String'] +} + +/** A Product PickList Value - a product to be mapped to the base product if selected. */ +export type ProductPickListOptionValue = CatalogProductOptionValue & { + __typename?: 'ProductPickListOptionValue' + /** The ID of the product associated with this option value. */ + productId: Scalars['Int'] + /** Unique ID for the option value. */ + entityId: Scalars['Int'] + /** Label for the option value. */ + label: Scalars['String'] + /** Indicates whether this value is the chosen default selected value. */ + isDefault: Scalars['Boolean'] +} + +/** PreOrder Product */ +export type ProductPreOrder = ProductAvailability & { + __typename?: 'ProductPreOrder' + /** The message to be shown in the store when a product is put into the pre-order availability state, e.g. "Expected release date is %%DATE%%" */ + message?: Maybe<Scalars['String']> + /** Product release date */ + willBeReleasedAt?: Maybe<DateTimeExtended> + /** The availability state of the product. */ + status: ProductAvailabilityStatus + /** A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. */ + description: Scalars['String'] +} + +/** Unavailable Product */ +export type ProductUnavailable = ProductAvailability & { + __typename?: 'ProductUnavailable' + /** The message to be shown in the store when "Call for pricing" is enabled for this product, e.g. "Contact us at 555-5555" */ + message?: Maybe<Scalars['String']> + /** The availability state of the product. */ + status: ProductAvailabilityStatus + /** A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. */ + description: Scalars['String'] +} + +export type Query = { + __typename?: 'Query' + site: Site + /** The currently logged in customer. */ + customer?: Maybe<Customer> + /** Fetches an object given its ID */ + node?: Maybe<Node> + /** @deprecated Alpha version. Do not use in production. */ + inventory: Inventory +} + +export type QueryNodeArgs = { + id: Scalars['ID'] +} + +/** A connection to a list of items. */ +export type RelatedProductsConnection = { + __typename?: 'RelatedProductsConnection' + /** Information to aid in pagination. */ + pageInfo: PageInfo + /** A list of edges. */ + edges?: Maybe<Array<Maybe<RelatedProductsEdge>>> +} + +/** An edge in a connection. */ +export type RelatedProductsEdge = { + __typename?: 'RelatedProductsEdge' + /** The item at the end of the edge. */ + node: Product + /** A cursor for use in pagination. */ + cursor: Scalars['String'] +} + +/** Review Rating Summary */ +export type Reviews = { + __typename?: 'Reviews' + /** Total number of reviews on product. */ + numberOfReviews: Scalars['Int'] + /** Summation of rating scores from each review. */ + summationOfRatings: Scalars['Int'] +} + +/** route */ +export type Route = { + __typename?: 'Route' + /** node */ + node?: Maybe<Node> +} + +/** Store settings information from the control panel. */ +export type Settings = { + __typename?: 'Settings' + /** The name of the store. */ + storeName: Scalars['String'] + /** The hash of the store. */ + storeHash: Scalars['String'] + /** The current store status. */ + status: StorefrontStatusType + /** Logo information for the store. */ + logo: LogoField + /** Contact information for the store. */ + contact?: Maybe<ContactField> + /** Store urls. */ + url: UrlField + /** Store display format information. */ + display: DisplayField + /** Channel ID. */ + channelId: Scalars['Long'] +} + +/** A site */ +export type Site = { + __typename?: 'Site' + categoryTree: Array<CategoryTreeItem> + /** Details of the brand. */ + brands: BrandConnection + /** Details of the products. */ + products: ProductConnection + /** Details of the newest products. */ + newestProducts: ProductConnection + /** Details of the best selling products. */ + bestSellingProducts: ProductConnection + /** Details of the featured products. */ + featuredProducts: ProductConnection + /** A single product object with variant pricing overlay capabilities. */ + product?: Maybe<Product> + /** Route for a node */ + route: Route + /** Store settings. */ + settings?: Maybe<Settings> +} + +/** A site */ +export type SiteBrandsArgs = { + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> + productEntityIds?: Maybe<Array<Scalars['Int']>> +} + +/** A site */ +export type SiteProductsArgs = { + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> + ids?: Maybe<Array<Scalars['ID']>> + entityIds?: Maybe<Array<Scalars['Int']>> +} + +/** A site */ +export type SiteNewestProductsArgs = { + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** A site */ +export type SiteBestSellingProductsArgs = { + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** A site */ +export type SiteFeaturedProductsArgs = { + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** A site */ +export type SiteProductArgs = { + id?: Maybe<Scalars['ID']> + entityId?: Maybe<Scalars['Int']> + variantEntityId?: Maybe<Scalars['Int']> + optionValueIds?: Maybe<Array<OptionValueId>> + sku?: Maybe<Scalars['String']> +} + +/** A site */ +export type SiteRouteArgs = { + path: Scalars['String'] +} + +/** Storefront Mode */ +export enum StorefrontStatusType { + Launched = 'LAUNCHED', + Maintenance = 'MAINTENANCE', + PreLaunch = 'PRE_LAUNCH', + Hibernation = 'HIBERNATION', +} + +/** A swatch option value - swatch values can be associated with a list of hexidecimal colors or an image. */ +export type SwatchOptionValue = CatalogProductOptionValue & { + __typename?: 'SwatchOptionValue' + /** List of up to 3 hex encoded colors to associate with a swatch value. */ + hexColors: Array<Scalars['String']> + /** Absolute path of a swatch texture image. */ + imageUrl?: Maybe<Scalars['String']> + /** Unique ID for the option value. */ + entityId: Scalars['Int'] + /** Label for the option value. */ + label: Scalars['String'] + /** Indicates whether this value is the chosen default selected value. */ + isDefault: Scalars['Boolean'] +} + +/** A swatch option value - swatch values can be associated with a list of hexidecimal colors or an image. */ +export type SwatchOptionValueImageUrlArgs = { + width: Scalars['Int'] + height?: Maybe<Scalars['Int']> +} + +/** A single line text input field. */ +export type TextFieldOption = CatalogProductOption & { + __typename?: 'TextFieldOption' + /** Unique ID for the option. */ + entityId: Scalars['Int'] + /** Display name for the option. */ + displayName: Scalars['String'] + /** One of the option values is required to be selected for the checkout. */ + isRequired: Scalars['Boolean'] +} + +/** Url field */ +export type UrlField = { + __typename?: 'UrlField' + /** Store url. */ + vanityUrl: Scalars['String'] + /** CDN url to fetch assets. */ + cdnUrl: Scalars['String'] +} + +/** Variant */ +export type Variant = Node & { + __typename?: 'Variant' + /** The ID of an object */ + id: Scalars['ID'] + /** Id of the variant. */ + entityId: Scalars['Int'] + /** Sku of the variant. */ + sku: Scalars['String'] + /** The variant's weight. If a weight was not explicitly specified on the variant, this will be the product's weight. */ + weight?: Maybe<Measurement> + /** The variant's height. If a height was not explicitly specified on the variant, this will be the product's height. */ + height?: Maybe<Measurement> + /** The variant's width. If a width was not explicitly specified on the variant, this will be the product's width. */ + width?: Maybe<Measurement> + /** The variant's depth. If a depth was not explicitly specified on the variant, this will be the product's depth. */ + depth?: Maybe<Measurement> + /** The options which define a variant. */ + options: OptionConnection + /** Product options that compose this variant. */ + productOptions: ProductOptionConnection + /** Default image for a variant. */ + defaultImage?: Maybe<Image> + /** Variant prices */ + prices?: Maybe<Prices> + /** Variant inventory */ + inventory?: Maybe<VariantInventory> + /** Metafield data related to a variant. */ + metafields: MetafieldConnection +} + +/** Variant */ +export type VariantOptionsArgs = { + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** Variant */ +export type VariantProductOptionsArgs = { + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** Variant */ +export type VariantPricesArgs = { + includeTax?: Maybe<Scalars['Boolean']> + currencyCode?: Maybe<CurrencyCode> +} + +/** Variant */ +export type VariantMetafieldsArgs = { + namespace: Scalars['String'] + keys?: Maybe<Array<Scalars['String']>> + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** A connection to a list of items. */ +export type VariantConnection = { + __typename?: 'VariantConnection' + /** Information to aid in pagination. */ + pageInfo: PageInfo + /** A list of edges. */ + edges?: Maybe<Array<Maybe<VariantEdge>>> +} + +/** An edge in a connection. */ +export type VariantEdge = { + __typename?: 'VariantEdge' + /** The item at the end of the edge. */ + node: Variant + /** A cursor for use in pagination. */ + cursor: Scalars['String'] +} + +/** Variant Inventory */ +export type VariantInventory = { + __typename?: 'VariantInventory' + /** Aggregated product variant inventory information. This data may not be available if not set or if the store's Inventory Settings have disabled displaying stock levels on the storefront. */ + aggregated?: Maybe<Aggregated> + /** Indicates whether this product is in stock. */ + isInStock: Scalars['Boolean'] + /** Inventory by locations. */ + byLocation?: Maybe<LocationConnection> +} + +/** Variant Inventory */ +export type VariantInventoryByLocationArgs = { + locationEntityIds?: Maybe<Array<Scalars['Int']>> + before?: Maybe<Scalars['String']> + after?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + last?: Maybe<Scalars['Int']> +} + +/** Please select a currency */ +export enum CurrencyCode { + Adp = 'ADP', + Aed = 'AED', + Afa = 'AFA', + Afn = 'AFN', + Alk = 'ALK', + All = 'ALL', + Amd = 'AMD', + Ang = 'ANG', + Aoa = 'AOA', + Aok = 'AOK', + Aon = 'AON', + Aor = 'AOR', + Ara = 'ARA', + Arl = 'ARL', + Arm = 'ARM', + Arp = 'ARP', + Ars = 'ARS', + Ats = 'ATS', + Aud = 'AUD', + Awg = 'AWG', + Azm = 'AZM', + Azn = 'AZN', + Bad = 'BAD', + Bam = 'BAM', + Ban = 'BAN', + Bbd = 'BBD', + Bdt = 'BDT', + Bec = 'BEC', + Bef = 'BEF', + Bel = 'BEL', + Bgl = 'BGL', + Bgm = 'BGM', + Bgn = 'BGN', + Bgo = 'BGO', + Bhd = 'BHD', + Bif = 'BIF', + Bmd = 'BMD', + Bnd = 'BND', + Bob = 'BOB', + Bol = 'BOL', + Bop = 'BOP', + Bov = 'BOV', + Brb = 'BRB', + Brc = 'BRC', + Bre = 'BRE', + Brl = 'BRL', + Brn = 'BRN', + Brr = 'BRR', + Brz = 'BRZ', + Bsd = 'BSD', + Btn = 'BTN', + Buk = 'BUK', + Bwp = 'BWP', + Byb = 'BYB', + Byr = 'BYR', + Bzd = 'BZD', + Cad = 'CAD', + Cdf = 'CDF', + Che = 'CHE', + Chf = 'CHF', + Chw = 'CHW', + Cle = 'CLE', + Clf = 'CLF', + Clp = 'CLP', + Cnx = 'CNX', + Cny = 'CNY', + Cop = 'COP', + Cou = 'COU', + Crc = 'CRC', + Csd = 'CSD', + Csk = 'CSK', + Cve = 'CVE', + Cyp = 'CYP', + Czk = 'CZK', + Ddm = 'DDM', + Dem = 'DEM', + Djf = 'DJF', + Dkk = 'DKK', + Dop = 'DOP', + Dzd = 'DZD', + Ecs = 'ECS', + Ecv = 'ECV', + Eek = 'EEK', + Egp = 'EGP', + Ern = 'ERN', + Esa = 'ESA', + Esb = 'ESB', + Esp = 'ESP', + Etb = 'ETB', + Eur = 'EUR', + Fim = 'FIM', + Fjd = 'FJD', + Fkp = 'FKP', + Frf = 'FRF', + Gbp = 'GBP', + Gek = 'GEK', + Gel = 'GEL', + Ghc = 'GHC', + Ghs = 'GHS', + Gip = 'GIP', + Gmd = 'GMD', + Gnf = 'GNF', + Gns = 'GNS', + Gqe = 'GQE', + Grd = 'GRD', + Gtq = 'GTQ', + Gwe = 'GWE', + Gwp = 'GWP', + Gyd = 'GYD', + Hkd = 'HKD', + Hnl = 'HNL', + Hrd = 'HRD', + Hrk = 'HRK', + Htg = 'HTG', + Huf = 'HUF', + Idr = 'IDR', + Iep = 'IEP', + Ilp = 'ILP', + Ilr = 'ILR', + Ils = 'ILS', + Inr = 'INR', + Iqd = 'IQD', + Isj = 'ISJ', + Isk = 'ISK', + Itl = 'ITL', + Jmd = 'JMD', + Jod = 'JOD', + Jpy = 'JPY', + Kes = 'KES', + Kgs = 'KGS', + Khr = 'KHR', + Kmf = 'KMF', + Krh = 'KRH', + Kro = 'KRO', + Krw = 'KRW', + Kwd = 'KWD', + Kyd = 'KYD', + Kzt = 'KZT', + Lak = 'LAK', + Lbp = 'LBP', + Lkr = 'LKR', + Lrd = 'LRD', + Lsl = 'LSL', + Ltl = 'LTL', + Ltt = 'LTT', + Luc = 'LUC', + Luf = 'LUF', + Lul = 'LUL', + Lvl = 'LVL', + Lvr = 'LVR', + Lyd = 'LYD', + Mad = 'MAD', + Maf = 'MAF', + Mcf = 'MCF', + Mdc = 'MDC', + Mdl = 'MDL', + Mga = 'MGA', + Mgf = 'MGF', + Mkd = 'MKD', + Mkn = 'MKN', + Mlf = 'MLF', + Mmk = 'MMK', + Mnt = 'MNT', + Mop = 'MOP', + Mro = 'MRO', + Mtl = 'MTL', + Mtp = 'MTP', + Mur = 'MUR', + Mvp = 'MVP', + Mvr = 'MVR', + Mwk = 'MWK', + Mxn = 'MXN', + Mxp = 'MXP', + Mxv = 'MXV', + Myr = 'MYR', + Mze = 'MZE', + Mzm = 'MZM', + Mzn = 'MZN', + Nad = 'NAD', + Ngn = 'NGN', + Nic = 'NIC', + Nio = 'NIO', + Nlg = 'NLG', + Nok = 'NOK', + Npr = 'NPR', + Nzd = 'NZD', + Omr = 'OMR', + Pab = 'PAB', + Pei = 'PEI', + Pen = 'PEN', + Pes = 'PES', + Pgk = 'PGK', + Php = 'PHP', + Pkr = 'PKR', + Pln = 'PLN', + Plz = 'PLZ', + Pte = 'PTE', + Pyg = 'PYG', + Qar = 'QAR', + Rhd = 'RHD', + Rol = 'ROL', + Ron = 'RON', + Rsd = 'RSD', + Rub = 'RUB', + Rur = 'RUR', + Rwf = 'RWF', + Sar = 'SAR', + Sbd = 'SBD', + Scr = 'SCR', + Sdd = 'SDD', + Sdg = 'SDG', + Sdp = 'SDP', + Sek = 'SEK', + Sgd = 'SGD', + Shp = 'SHP', + Sit = 'SIT', + Skk = 'SKK', + Sll = 'SLL', + Sos = 'SOS', + Srd = 'SRD', + Srg = 'SRG', + Ssp = 'SSP', + Std = 'STD', + Sur = 'SUR', + Svc = 'SVC', + Syp = 'SYP', + Szl = 'SZL', + Thb = 'THB', + Tjr = 'TJR', + Tjs = 'TJS', + Tmm = 'TMM', + Tmt = 'TMT', + Tnd = 'TND', + Top = 'TOP', + Tpe = 'TPE', + Trl = 'TRL', + Try = 'TRY', + Ttd = 'TTD', + Twd = 'TWD', + Tzs = 'TZS', + Uah = 'UAH', + Uak = 'UAK', + Ugs = 'UGS', + Ugx = 'UGX', + Usd = 'USD', + Usn = 'USN', + Uss = 'USS', + Uyi = 'UYI', + Uyp = 'UYP', + Uyu = 'UYU', + Uzs = 'UZS', + Veb = 'VEB', + Vef = 'VEF', + Vnd = 'VND', + Vnn = 'VNN', + Vuv = 'VUV', + Wst = 'WST', + Xaf = 'XAF', + Xcd = 'XCD', + Xeu = 'XEU', + Xfo = 'XFO', + Xfu = 'XFU', + Xof = 'XOF', + Xpf = 'XPF', + Xre = 'XRE', + Ydd = 'YDD', + Yer = 'YER', + Yud = 'YUD', + Yum = 'YUM', + Yun = 'YUN', + Yur = 'YUR', + Zal = 'ZAL', + Zar = 'ZAR', + Zmk = 'ZMK', + Zmw = 'ZMW', + Zrn = 'ZRN', + Zrz = 'ZRZ', + Zwd = 'ZWD', + Zwl = 'ZWL', + Zwr = 'ZWR', +} + +export type GetLoggedInCustomerQueryVariables = Exact<{ [key: string]: never }> + +export type GetLoggedInCustomerQuery = { __typename?: 'Query' } & { + customer?: Maybe< + { __typename?: 'Customer' } & Pick< + Customer, + | 'entityId' + | 'firstName' + | 'lastName' + | 'email' + | 'company' + | 'customerGroupId' + | 'notes' + | 'phone' + | 'addressCount' + | 'attributeCount' + > & { + storeCredit: Array< + { __typename?: 'Money' } & Pick<Money, 'value' | 'currencyCode'> + > + } + > +} + +export type CategoryTreeItemFragment = { + __typename?: 'CategoryTreeItem' +} & Pick< + CategoryTreeItem, + 'entityId' | 'name' | 'path' | 'description' | 'productCount' +> + +export type ProductPricesFragment = { __typename?: 'Prices' } & { + price: { __typename?: 'Money' } & Pick<Money, 'value' | 'currencyCode'> + salePrice?: Maybe< + { __typename?: 'Money' } & Pick<Money, 'value' | 'currencyCode'> + > + retailPrice?: Maybe< + { __typename?: 'Money' } & Pick<Money, 'value' | 'currencyCode'> + > +} + +export type SwatchOptionFragment = { __typename?: 'SwatchOptionValue' } & Pick< + SwatchOptionValue, + 'isDefault' | 'hexColors' +> + +export type MultipleChoiceOptionFragment = { + __typename?: 'MultipleChoiceOption' +} & { + values: { __typename?: 'ProductOptionValueConnection' } & { + edges?: Maybe< + Array< + Maybe< + { __typename?: 'ProductOptionValueEdge' } & { + node: + | ({ __typename?: 'MultipleChoiceOptionValue' } & Pick< + MultipleChoiceOptionValue, + 'label' + >) + | ({ __typename?: 'ProductPickListOptionValue' } & Pick< + ProductPickListOptionValue, + 'label' + >) + | ({ __typename?: 'SwatchOptionValue' } & Pick< + SwatchOptionValue, + 'label' + > & + SwatchOptionFragment) + } + > + > + > + } +} + +export type ProductInfoFragment = { __typename?: 'Product' } & Pick< + Product, + 'entityId' | 'name' | 'path' | 'description' +> & { + brand?: Maybe<{ __typename?: 'Brand' } & Pick<Brand, 'entityId'>> + prices?: Maybe<{ __typename?: 'Prices' } & ProductPricesFragment> + images: { __typename?: 'ImageConnection' } & { + edges?: Maybe< + Array< + Maybe< + { __typename?: 'ImageEdge' } & { + node: { __typename?: 'Image' } & Pick< + Image, + 'urlOriginal' | 'altText' | 'isDefault' + > + } + > + > + > + } + variants: { __typename?: 'VariantConnection' } & { + edges?: Maybe< + Array< + Maybe< + { __typename?: 'VariantEdge' } & { + node: { __typename?: 'Variant' } & Pick<Variant, 'entityId'> & { + defaultImage?: Maybe< + { __typename?: 'Image' } & Pick< + Image, + 'urlOriginal' | 'altText' | 'isDefault' + > + > + } + } + > + > + > + } + productOptions: { __typename?: 'ProductOptionConnection' } & { + edges?: Maybe< + Array< + Maybe< + { __typename?: 'ProductOptionEdge' } & { + node: + | ({ __typename: 'CheckboxOption' } & Pick< + CheckboxOption, + 'entityId' | 'displayName' + >) + | ({ __typename: 'DateFieldOption' } & Pick< + DateFieldOption, + 'entityId' | 'displayName' + >) + | ({ __typename: 'FileUploadFieldOption' } & Pick< + FileUploadFieldOption, + 'entityId' | 'displayName' + >) + | ({ __typename: 'MultiLineTextFieldOption' } & Pick< + MultiLineTextFieldOption, + 'entityId' | 'displayName' + >) + | ({ __typename: 'MultipleChoiceOption' } & Pick< + MultipleChoiceOption, + 'entityId' | 'displayName' + > & + MultipleChoiceOptionFragment) + | ({ __typename: 'NumberFieldOption' } & Pick< + NumberFieldOption, + 'entityId' | 'displayName' + >) + | ({ __typename: 'TextFieldOption' } & Pick< + TextFieldOption, + 'entityId' | 'displayName' + >) + } + > + > + > + } + localeMeta: { __typename?: 'MetafieldConnection' } & { + edges?: Maybe< + Array< + Maybe< + { __typename?: 'MetafieldEdge' } & { + node: { __typename?: 'Metafields' } & Pick< + Metafields, + 'key' | 'value' + > + } + > + > + > + } + } + +export type ProductConnnectionFragment = { + __typename?: 'ProductConnection' +} & { + pageInfo: { __typename?: 'PageInfo' } & Pick< + PageInfo, + 'startCursor' | 'endCursor' + > + edges?: Maybe< + Array< + Maybe< + { __typename?: 'ProductEdge' } & Pick<ProductEdge, 'cursor'> & { + node: { __typename?: 'Product' } & ProductInfoFragment + } + > + > + > +} + +export type GetAllProductPathsQueryVariables = Exact<{ + first?: Maybe<Scalars['Int']> +}> + +export type GetAllProductPathsQuery = { __typename?: 'Query' } & { + site: { __typename?: 'Site' } & { + products: { __typename?: 'ProductConnection' } & { + edges?: Maybe< + Array< + Maybe< + { __typename?: 'ProductEdge' } & { + node: { __typename?: 'Product' } & Pick<Product, 'path'> + } + > + > + > + } + } +} + +export type GetAllProductsQueryVariables = Exact<{ + hasLocale?: Maybe<Scalars['Boolean']> + locale?: Maybe<Scalars['String']> + entityIds?: Maybe<Array<Scalars['Int']>> + first?: Maybe<Scalars['Int']> + products?: Maybe<Scalars['Boolean']> + featuredProducts?: Maybe<Scalars['Boolean']> + bestSellingProducts?: Maybe<Scalars['Boolean']> + newestProducts?: Maybe<Scalars['Boolean']> +}> + +export type GetAllProductsQuery = { __typename?: 'Query' } & { + site: { __typename?: 'Site' } & { + products: { __typename?: 'ProductConnection' } & ProductConnnectionFragment + featuredProducts: { + __typename?: 'ProductConnection' + } & ProductConnnectionFragment + bestSellingProducts: { + __typename?: 'ProductConnection' + } & ProductConnnectionFragment + newestProducts: { + __typename?: 'ProductConnection' + } & ProductConnnectionFragment + } +} + +export type GetCustomerIdQueryVariables = Exact<{ [key: string]: never }> + +export type GetCustomerIdQuery = { __typename?: 'Query' } & { + customer?: Maybe<{ __typename?: 'Customer' } & Pick<Customer, 'entityId'>> +} + +export type GetProductQueryVariables = Exact<{ + hasLocale?: Maybe<Scalars['Boolean']> + locale?: Maybe<Scalars['String']> + path: Scalars['String'] +}> + +export type GetProductQuery = { __typename?: 'Query' } & { + site: { __typename?: 'Site' } & { + route: { __typename?: 'Route' } & { + node?: Maybe< + | { __typename: 'Brand' } + | { __typename: 'Category' } + | ({ __typename: 'Product' } & { + variants: { __typename?: 'VariantConnection' } & { + edges?: Maybe< + Array< + Maybe< + { __typename?: 'VariantEdge' } & { + node: { __typename?: 'Variant' } & Pick< + Variant, + 'entityId' + > & { + defaultImage?: Maybe< + { __typename?: 'Image' } & Pick< + Image, + 'urlOriginal' | 'altText' | 'isDefault' + > + > + prices?: Maybe< + { __typename?: 'Prices' } & ProductPricesFragment + > + inventory?: Maybe< + { __typename?: 'VariantInventory' } & Pick< + VariantInventory, + 'isInStock' + > & { + aggregated?: Maybe< + { __typename?: 'Aggregated' } & Pick< + Aggregated, + 'availableToSell' | 'warningLevel' + > + > + } + > + productOptions: { + __typename?: 'ProductOptionConnection' + } & { + edges?: Maybe< + Array< + Maybe< + { __typename?: 'ProductOptionEdge' } & { + node: + | ({ + __typename: 'CheckboxOption' + } & Pick< + CheckboxOption, + 'entityId' | 'displayName' + >) + | ({ + __typename: 'DateFieldOption' + } & Pick< + DateFieldOption, + 'entityId' | 'displayName' + >) + | ({ + __typename: 'FileUploadFieldOption' + } & Pick< + FileUploadFieldOption, + 'entityId' | 'displayName' + >) + | ({ + __typename: 'MultiLineTextFieldOption' + } & Pick< + MultiLineTextFieldOption, + 'entityId' | 'displayName' + >) + | ({ + __typename: 'MultipleChoiceOption' + } & Pick< + MultipleChoiceOption, + 'entityId' | 'displayName' + > & + MultipleChoiceOptionFragment) + | ({ + __typename: 'NumberFieldOption' + } & Pick< + NumberFieldOption, + 'entityId' | 'displayName' + >) + | ({ + __typename: 'TextFieldOption' + } & Pick< + TextFieldOption, + 'entityId' | 'displayName' + >) + } + > + > + > + } + } + } + > + > + > + } + } & ProductInfoFragment) + | { __typename: 'Variant' } + > + } + } +} + +export type GetSiteInfoQueryVariables = Exact<{ [key: string]: never }> + +export type GetSiteInfoQuery = { __typename?: 'Query' } & { + site: { __typename?: 'Site' } & { + categoryTree: Array< + { __typename?: 'CategoryTreeItem' } & { + children: Array< + { __typename?: 'CategoryTreeItem' } & { + children: Array< + { __typename?: 'CategoryTreeItem' } & CategoryTreeItemFragment + > + } & CategoryTreeItemFragment + > + } & CategoryTreeItemFragment + > + brands: { __typename?: 'BrandConnection' } & { + pageInfo: { __typename?: 'PageInfo' } & Pick< + PageInfo, + 'startCursor' | 'endCursor' + > + edges?: Maybe< + Array< + Maybe< + { __typename?: 'BrandEdge' } & Pick<BrandEdge, 'cursor'> & { + node: { __typename?: 'Brand' } & Pick< + Brand, + | 'entityId' + | 'name' + | 'pageTitle' + | 'metaDesc' + | 'metaKeywords' + | 'searchKeywords' + | 'path' + > & { + defaultImage?: Maybe< + { __typename?: 'Image' } & Pick< + Image, + 'urlOriginal' | 'altText' + > + > + } + } + > + > + > + } + } +} + +export type LoginMutationVariables = Exact<{ + email: Scalars['String'] + password: Scalars['String'] +}> + +export type LoginMutation = { __typename?: 'Mutation' } & { + login: { __typename?: 'LoginResult' } & Pick<LoginResult, 'result'> +} diff --git a/framework/bigcommerce/schema.graphql b/framework/bigcommerce/schema.graphql new file mode 100644 index 000000000..79de347fe --- /dev/null +++ b/framework/bigcommerce/schema.graphql @@ -0,0 +1,2422 @@ +""" +Login result +""" +type LoginResult { + """ + The result of a login + """ + result: String! +} + +""" +Logout result +""" +type LogoutResult { + """ + The result of a logout + """ + result: String! +} + +type Mutation { + login(email: String!, password: String!): LoginResult! + logout: LogoutResult! +} + +""" +Aggregated +""" +type Aggregated { + """ + Number of available products in stock. This can be 'null' if inventory is not set orif the store's Inventory Settings disable displaying stock levels on the storefront. + """ + availableToSell: Long! + + """ + Indicates a threshold low-stock level. This can be 'null' if the inventory warning level is not set or if the store's Inventory Settings disable displaying stock levels on the storefront. + """ + warningLevel: Int! +} + +""" +Aggregated Product Inventory +""" +type AggregatedInventory { + """ + Number of available products in stock. This can be 'null' if inventory is not set orif the store's Inventory Settings disable displaying stock levels on the storefront. + """ + availableToSell: Int! + + """ + Indicates a threshold low-stock level. This can be 'null' if the inventory warning level is not set or if the store's Inventory Settings disable displaying stock levels on the storefront. + """ + warningLevel: Int! +} + +""" +Brand +""" +type Brand implements Node { + """ + The ID of an object + """ + id: ID! + + """ + Id of the brand. + """ + entityId: Int! + + """ + Name of the brand. + """ + name: String! + + """ + Default image for brand. + """ + defaultImage: Image + + """ + Page title for the brand. + """ + pageTitle: String! + + """ + Meta description for the brand. + """ + metaDesc: String! + + """ + Meta keywords for the brand. + """ + metaKeywords: [String!]! + + """ + Search keywords for the brand. + """ + searchKeywords: [String!]! + + """ + Path for the brand page. + """ + path: String! + products( + before: String + after: String + first: Int + last: Int + ): ProductConnection! + + """ + Metafield data related to a brand. + """ + metafields( + namespace: String! + keys: [String!] = [] + before: String + after: String + first: Int + last: Int + ): MetafieldConnection! +} + +""" +A connection to a list of items. +""" +type BrandConnection { + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + A list of edges. + """ + edges: [BrandEdge] +} + +""" +An edge in a connection. +""" +type BrandEdge { + """ + The item at the end of the edge. + """ + node: Brand! + + """ + A cursor for use in pagination. + """ + cursor: String! +} + +""" +Breadcrumb +""" +type Breadcrumb { + """ + Category id. + """ + entityId: Int! + + """ + Name of the category. + """ + name: String! +} + +""" +A connection to a list of items. +""" +type BreadcrumbConnection { + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + A list of edges. + """ + edges: [BreadcrumbEdge] +} + +""" +An edge in a connection. +""" +type BreadcrumbEdge { + """ + The item at the end of the edge. + """ + node: Breadcrumb! + + """ + A cursor for use in pagination. + """ + cursor: String! +} + +""" +Bulk pricing tier that sets a fixed price for the product or variant. +""" +type BulkPricingFixedPriceDiscount implements BulkPricingTier { + """ + This price will override the current product price. + """ + price: BigDecimal! + + """ + Minimum item quantity that applies to this bulk pricing tier. + """ + minimumQuantity: Int! + + """ + Maximum item quantity that applies to this bulk pricing tier - if not defined then the tier does not have an upper bound. + """ + maximumQuantity: Int +} + +""" +Bulk pricing tier that reduces the price of the product or variant by a percentage. +""" +type BulkPricingPercentageDiscount implements BulkPricingTier { + """ + The percentage that will be removed from the product price. + """ + percentOff: BigDecimal! + + """ + Minimum item quantity that applies to this bulk pricing tier. + """ + minimumQuantity: Int! + + """ + Maximum item quantity that applies to this bulk pricing tier - if not defined then the tier does not have an upper bound. + """ + maximumQuantity: Int +} + +""" +Bulk pricing tier that will subtract an amount from the price of the product or variant. +""" +type BulkPricingRelativePriceDiscount implements BulkPricingTier { + """ + The price of the product/variant will be reduced by this priceAdjustment. + """ + priceAdjustment: BigDecimal! + + """ + Minimum item quantity that applies to this bulk pricing tier. + """ + minimumQuantity: Int! + + """ + Maximum item quantity that applies to this bulk pricing tier - if not defined then the tier does not have an upper bound. + """ + maximumQuantity: Int +} + +""" +A set of bulk pricing tiers that define price discounts which apply when purchasing specified quantities of a product or variant. +""" +interface BulkPricingTier { + """ + Minimum item quantity that applies to this bulk pricing tier. + """ + minimumQuantity: Int! + + """ + Maximum item quantity that applies to this bulk pricing tier - if not defined then the tier does not have an upper bound. + """ + maximumQuantity: Int +} + +""" +Product Option +""" +interface CatalogProductOption { + """ + Unique ID for the option. + """ + entityId: Int! + + """ + Display name for the option. + """ + displayName: String! + + """ + One of the option values is required to be selected for the checkout. + """ + isRequired: Boolean! +} + +""" +Product Option Value +""" +interface CatalogProductOptionValue { + """ + Unique ID for the option value. + """ + entityId: Int! + + """ + Label for the option value. + """ + label: String! + + """ + Indicates whether this value is the chosen default selected value. + """ + isDefault: Boolean! +} + +""" +Category +""" +type Category implements Node { + """ + The ID of an object + """ + id: ID! + + """ + Unique ID for the category. + """ + entityId: Int! + + """ + Category name. + """ + name: String! + + """ + Category path. + """ + path: String! + + """ + Default image for the category. + """ + defaultImage: Image + + """ + Category description. + """ + description: String! + + """ + Category breadcrumbs. + """ + breadcrumbs( + depth: Int! + before: String + after: String + first: Int + last: Int + ): BreadcrumbConnection! + products( + before: String + after: String + first: Int + last: Int + ): ProductConnection! + + """ + Metafield data related to a category. + """ + metafields( + namespace: String! + keys: [String!] = [] + before: String + after: String + first: Int + last: Int + ): MetafieldConnection! +} + +""" +A connection to a list of items. +""" +type CategoryConnection { + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + A list of edges. + """ + edges: [CategoryEdge] +} + +""" +An edge in a connection. +""" +type CategoryEdge { + """ + The item at the end of the edge. + """ + node: Category! + + """ + A cursor for use in pagination. + """ + cursor: String! +} + +""" +An item in a tree of categories. +""" +type CategoryTreeItem { + """ + The id category. + """ + entityId: Int! + + """ + The name of category. + """ + name: String! + + """ + Path assigned to this category + """ + path: String! + + """ + The description of this category. + """ + description: String! + + """ + The number of products in this category. + """ + productCount: Int! + + """ + Subcategories of this category + """ + children: [CategoryTreeItem!]! +} + +""" +A simple yes/no question represented by a checkbox. +""" +type CheckboxOption implements CatalogProductOption { + """ + Indicates the default checked status. + """ + checkedByDefault: Boolean! + + """ + Unique ID for the option. + """ + entityId: Int! + + """ + Display name for the option. + """ + displayName: String! + + """ + One of the option values is required to be selected for the checkout. + """ + isRequired: Boolean! +} + +""" +Contact field +""" +type ContactField { + """ + Store address line. + """ + address: String! + + """ + Store country. + """ + country: String! + + """ + Store address type. + """ + addressType: String! + + """ + Store email. + """ + email: String! + + """ + Store phone number. + """ + phone: String! +} + +""" +Custom field +""" +type CustomField { + """ + Custom field id. + """ + entityId: Int! + + """ + Name of the custom field. + """ + name: String! + + """ + Value of the custom field. + """ + value: String! +} + +""" +A connection to a list of items. +""" +type CustomFieldConnection { + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + A list of edges. + """ + edges: [CustomFieldEdge] +} + +""" +An edge in a connection. +""" +type CustomFieldEdge { + """ + The item at the end of the edge. + """ + node: CustomField! + + """ + A cursor for use in pagination. + """ + cursor: String! +} + +""" +A customer that shops on a store +""" +type Customer { + """ + The ID of the customer. + """ + entityId: Int! + + """ + The company name of the customer. + """ + company: String! + + """ + The customer group id of the customer. + """ + customerGroupId: Int! + + """ + The email address of the customer. + """ + email: String! + + """ + The first name of the customer. + """ + firstName: String! + + """ + The last name of the customer. + """ + lastName: String! + + """ + The notes of the customer. + """ + notes: String! + + """ + The phone number of the customer. + """ + phone: String! + + """ + The tax exempt category of the customer. + """ + taxExemptCategory: String! + + """ + Customer addresses count. + """ + addressCount: Int! + + """ + Customer attributes count. + """ + attributeCount: Int! + + """ + Customer store credit. + """ + storeCredit: [Money!]! + + """ + Customer attributes. + """ + attributes: CustomerAttributes! +} + +""" +A custom, store-specific attribute for a customer +""" +type CustomerAttribute { + """ + The ID of the custom customer attribute + """ + entityId: Int! + + """ + The value of the custom customer attribute + """ + value: String + + """ + The name of the custom customer attribute + """ + name: String! +} + +""" +Custom, store-specific customer attributes +""" +type CustomerAttributes { + attribute( + """ + The ID of the customer attribute + """ + entityId: Int! + ): CustomerAttribute! +} + +""" +A calendar for allowing selection of a date. +""" +type DateFieldOption implements CatalogProductOption { + """ + Unique ID for the option. + """ + entityId: Int! + + """ + Display name for the option. + """ + displayName: String! + + """ + One of the option values is required to be selected for the checkout. + """ + isRequired: Boolean! +} + +scalar DateTime + +""" +Date Time Extended +""" +type DateTimeExtended { + """ + ISO-8601 formatted date in UTC + """ + utc: DateTime! +} + +""" +Display field +""" +type DisplayField { + """ + Short date format. + """ + shortDateFormat: String! + + """ + Extended date format. + """ + extendedDateFormat: String! +} + +""" +A form allowing selection and uploading of a file from the user's local computer. +""" +type FileUploadFieldOption implements CatalogProductOption { + """ + Unique ID for the option. + """ + entityId: Int! + + """ + Display name for the option. + """ + displayName: String! + + """ + One of the option values is required to be selected for the checkout. + """ + isRequired: Boolean! +} + +""" +Image +""" +type Image { + """ + Absolute path to image using store CDN. + """ + url(width: Int!, height: Int): String! + + """ + Absolute path to original image using store CDN. + """ + urlOriginal: String! + + """ + Text description of an image that can be used for SEO and/or accessibility purposes. + """ + altText: String! + + """ + Indicates whether this is the primary image. + """ + isDefault: Boolean! +} + +""" +A connection to a list of items. +""" +type ImageConnection { + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + A list of edges. + """ + edges: [ImageEdge] +} + +""" +An edge in a connection. +""" +type ImageEdge { + """ + The item at the end of the edge. + """ + node: Image! + + """ + A cursor for use in pagination. + """ + cursor: String! +} + +""" +An inventory +""" +type Inventory { + """ + Locations + """ + locations( + entityIds: [Int!] + codes: [String!] + typeIds: [String!] + before: String + after: String + first: Int + last: Int + ): LocationConnection! +} + +""" +Inventory By Locations +""" +type InventoryByLocations { + """ + Location id. + """ + locationEntityId: Long! + + """ + Number of available products in stock. + """ + availableToSell: Long! + + """ + Indicates a threshold low-stock level. + """ + warningLevel: Int! + + """ + Indicates whether this product is in stock. + """ + isInStock: Boolean! +} + +""" +A connection to a list of items. +""" +type LocationConnection { + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + A list of edges. + """ + edges: [LocationEdge] +} + +""" +An edge in a connection. +""" +type LocationEdge { + """ + The item at the end of the edge. + """ + node: InventoryByLocations! + + """ + A cursor for use in pagination. + """ + cursor: String! +} + +""" +Logo field +""" +type LogoField { + """ + Logo title. + """ + title: String! + + """ + Store logo image. + """ + image: Image! +} + +""" +Measurement +""" +type Measurement { + """ + Unformatted weight measurement value. + """ + value: Float! + + """ + Unit of measurement. + """ + unit: String! +} + +""" +A connection to a list of items. +""" +type MetafieldConnection { + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + A list of edges. + """ + edges: [MetafieldEdge] +} + +""" +An edge in a connection. +""" +type MetafieldEdge { + """ + The item at the end of the edge. + """ + node: Metafields! + + """ + A cursor for use in pagination. + """ + cursor: String! +} + +""" +Key/Value pairs of data attached tied to a resource entity (product, brand, category, etc.) +""" +type Metafields { + """ + The ID of an object + """ + id: ID! + + """ + The ID of the metafield when referencing via our backend API. + """ + entityId: Int! + + """ + A label for identifying a metafield data value. + """ + key: String! + + """ + A metafield value. + """ + value: String! +} + +""" +A money object - includes currency code and a money amount +""" +type Money { + """ + Currency code of the current money. + """ + currencyCode: String! + + """ + The amount of money. + """ + value: BigDecimal! +} + +""" +A min and max pair of money objects +""" +type MoneyRange { + """ + Minimum money object. + """ + min: Money! + + """ + Maximum money object. + """ + max: Money! +} + +""" +A multi-line text input field, aka a text box. +""" +type MultiLineTextFieldOption implements CatalogProductOption { + """ + Unique ID for the option. + """ + entityId: Int! + + """ + Display name for the option. + """ + displayName: String! + + """ + One of the option values is required to be selected for the checkout. + """ + isRequired: Boolean! +} + +""" +An option type that has a fixed list of values. +""" +type MultipleChoiceOption implements CatalogProductOption { + """ + The chosen display style for this multiple choice option. + """ + displayStyle: String! + + """ + List of option values. + """ + values( + before: String + after: String + first: Int + last: Int + ): ProductOptionValueConnection! + + """ + Unique ID for the option. + """ + entityId: Int! + + """ + Display name for the option. + """ + displayName: String! + + """ + One of the option values is required to be selected for the checkout. + """ + isRequired: Boolean! +} + +""" +A simple multiple choice value comprised of an id and a label. +""" +type MultipleChoiceOptionValue implements CatalogProductOptionValue { + """ + Unique ID for the option value. + """ + entityId: Int! + + """ + Label for the option value. + """ + label: String! + + """ + Indicates whether this value is the chosen default selected value. + """ + isDefault: Boolean! +} + +""" +An object with an ID +""" +interface Node { + """ + The id of the object. + """ + id: ID! +} + +""" +A single line text input field that only accepts numbers. +""" +type NumberFieldOption implements CatalogProductOption { + """ + Unique ID for the option. + """ + entityId: Int! + + """ + Display name for the option. + """ + displayName: String! + + """ + One of the option values is required to be selected for the checkout. + """ + isRequired: Boolean! +} + +""" +A connection to a list of items. +""" +type OptionConnection { + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + A list of edges. + """ + edges: [OptionEdge] +} + +""" +An edge in a connection. +""" +type OptionEdge { + """ + The item at the end of the edge. + """ + node: ProductOption! + + """ + A cursor for use in pagination. + """ + cursor: String! +} + +""" +A connection to a list of items. +""" +type OptionValueConnection { + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + A list of edges. + """ + edges: [OptionValueEdge] +} + +""" +An edge in a connection. +""" +type OptionValueEdge { + """ + The item at the end of the edge. + """ + node: ProductOptionValue! + + """ + A cursor for use in pagination. + """ + cursor: String! +} + +input OptionValueId { + optionEntityId: Int! + valueEntityId: Int! +} + +""" +Information about pagination in a connection. +""" +type PageInfo { + """ + When paginating forwards, are there more items? + """ + hasNextPage: Boolean! + + """ + When paginating backwards, are there more items? + """ + hasPreviousPage: Boolean! + + """ + When paginating backwards, the cursor to continue. + """ + startCursor: String + + """ + When paginating forwards, the cursor to continue. + """ + endCursor: String +} + +""" +The min and max range of prices that apply to this product. +""" +type PriceRanges { + """ + Product price min/max range. + """ + priceRange: MoneyRange! + + """ + Product retail price min/max range. + """ + retailPriceRange: MoneyRange +} + +""" +The various prices that can be set on a product. +""" +type Prices { + """ + Calculated price of the product. + """ + price: Money! + + """ + Sale price of the product. + """ + salePrice: Money + + """ + Original price of the product. + """ + basePrice: Money + + """ + Retail price of the product. + """ + retailPrice: Money + + """ + Minimum advertised price of the product. + """ + mapPrice: Money + + """ + Product price min/max range. + """ + priceRange: MoneyRange! + + """ + Product retail price min/max range. + """ + retailPriceRange: MoneyRange + + """ + The difference between the retail price (MSRP) and the current price, which can be presented to the shopper as their savings. + """ + saved: Money + + """ + List of bulk pricing tiers applicable to a product or variant. + """ + bulkPricing: [BulkPricingTier!]! +} + +""" +Product +""" +type Product implements Node { + """ + The ID of an object + """ + id: ID! + + """ + Id of the product. + """ + entityId: Int! + + """ + Default product variant when no options are selected. + """ + sku: String! + + """ + Relative URL path to product page. + """ + path: String! + + """ + Name of the product. + """ + name: String! + + """ + Description of the product. + """ + description: String! + + """ + Description of the product in plain text. + """ + plainTextDescription(characterLimit: Int = 120): String! + + """ + Warranty information of the product. + """ + warranty: String! + + """ + Minimum purchasable quantity for this product in a single order. + """ + minPurchaseQuantity: Int + + """ + Maximum purchasable quantity for this product in a single order. + """ + maxPurchaseQuantity: Int + + """ + Absolute URL path for adding a product to cart. + """ + addToCartUrl: String! + + """ + Absolute URL path for adding a product to customer's wishlist. + """ + addToWishlistUrl: String! + + """ + Prices object determined by supplied product ID, variant ID, and selected option IDs. + """ + prices(includeTax: Boolean = false, currencyCode: currencyCode): Prices + + """ + The minimum and maximum price of this product based on variant pricing and/or modifier price rules. + """ + priceRanges(includeTax: Boolean = false): PriceRanges + @deprecated(reason: "Use priceRanges inside prices node instead.") + + """ + Weight of the product. + """ + weight: Measurement + + """ + Height of the product. + """ + height: Measurement + + """ + Width of the product. + """ + width: Measurement + + """ + Depth of the product. + """ + depth: Measurement + + """ + Product options. + """ + options( + before: String + after: String + first: Int + last: Int + ): OptionConnection! + + """ + Product options. + """ + productOptions( + before: String + after: String + first: Int + last: Int + ): ProductOptionConnection! + + """ + Summary of the product reviews, includes the total number of reviews submitted and summation of the ratings on the reviews (ratings range from 0-5 per review). + """ + reviewSummary: Reviews! + + """ + Type of product, ex: physical, digital + """ + type: String! + + """ + The availability state of the product. + """ + availability: String! + @deprecated(reason: "Use status inside availabilityV2 instead.") + + """ + A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. + """ + availabilityDescription: String! + @deprecated(reason: "Use description inside availabilityV2 instead.") + + """ + The availability state of the product. + """ + availabilityV2: ProductAvailability! + + """ + List of categories associated with the product. + """ + categories( + before: String + after: String + first: Int + last: Int + ): CategoryConnection! + + """ + Brand associated with the product. + """ + brand: Brand + + """ + Variants associated with the product. + """ + variants( + before: String + after: String + first: Int + last: Int + entityIds: [Int!] = [] + optionValueIds: [OptionValueId!] = [] + ): VariantConnection! + + """ + Custom fields of the product. + """ + customFields( + names: [String!] = [] + before: String + after: String + first: Int + last: Int + ): CustomFieldConnection! + + """ + A list of the images for a product. + """ + images(before: String, after: String, first: Int, last: Int): ImageConnection! + + """ + Default image for a product. + """ + defaultImage: Image + + """ + Related products for this product. + """ + relatedProducts( + before: String + after: String + first: Int + last: Int + ): RelatedProductsConnection! + + """ + Inventory information of the product. + """ + inventory: ProductInventory! + + """ + Metafield data related to a product. + """ + metafields( + namespace: String! + keys: [String!] = [] + before: String + after: String + first: Int + last: Int + ): MetafieldConnection! + + """ + Product creation date + """ + createdAt: DateTimeExtended! + @deprecated(reason: "Alpha version. Do not use in production.") +} + +""" +Product availability +""" +interface ProductAvailability { + """ + The availability state of the product. + """ + status: ProductAvailabilityStatus! + + """ + A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. + """ + description: String! +} + +""" +Product availability status +""" +enum ProductAvailabilityStatus { + Available + Preorder + Unavailable +} + +""" +Available Product +""" +type ProductAvailable implements ProductAvailability { + """ + The availability state of the product. + """ + status: ProductAvailabilityStatus! + + """ + A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. + """ + description: String! +} + +""" +A connection to a list of items. +""" +type ProductConnection { + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + A list of edges. + """ + edges: [ProductEdge] +} + +""" +An edge in a connection. +""" +type ProductEdge { + """ + The item at the end of the edge. + """ + node: Product! + + """ + A cursor for use in pagination. + """ + cursor: String! +} + +""" +Product Inventory Information +""" +type ProductInventory { + """ + Indicates whether this product is in stock. + """ + isInStock: Boolean! + + """ + Indicates whether this product's inventory is being tracked on variant level. If true, you may wish to check the variants node to understand the true inventory of each individual variant, rather than relying on this product-level aggregate to understand how many items may be added to cart. + """ + hasVariantInventory: Boolean! + + """ + Aggregated product inventory information. This data may not be available if not set or if the store's Inventory Settings have disabled displaying stock levels on the storefront. + """ + aggregated: AggregatedInventory +} + +""" +Product Option +""" +type ProductOption { + """ + Unique ID for the option. + """ + entityId: Int! + + """ + Display name for the option. + """ + displayName: String! + + """ + One of the option values is required to be selected for the checkout. + """ + isRequired: Boolean! + + """ + Option values. + """ + values( + before: String + after: String + first: Int + last: Int + ): OptionValueConnection! +} + +""" +A connection to a list of items. +""" +type ProductOptionConnection { + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + A list of edges. + """ + edges: [ProductOptionEdge] +} + +""" +An edge in a connection. +""" +type ProductOptionEdge { + """ + The item at the end of the edge. + """ + node: CatalogProductOption! + + """ + A cursor for use in pagination. + """ + cursor: String! +} + +""" +Product Option Value +""" +type ProductOptionValue { + """ + Unique ID for the option value. + """ + entityId: Int! + + """ + Label for the option value. + """ + label: String! +} + +""" +A connection to a list of items. +""" +type ProductOptionValueConnection { + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + A list of edges. + """ + edges: [ProductOptionValueEdge] +} + +""" +An edge in a connection. +""" +type ProductOptionValueEdge { + """ + The item at the end of the edge. + """ + node: CatalogProductOptionValue! + + """ + A cursor for use in pagination. + """ + cursor: String! +} + +""" +A Product PickList Value - a product to be mapped to the base product if selected. +""" +type ProductPickListOptionValue implements CatalogProductOptionValue { + """ + The ID of the product associated with this option value. + """ + productId: Int! + + """ + Unique ID for the option value. + """ + entityId: Int! + + """ + Label for the option value. + """ + label: String! + + """ + Indicates whether this value is the chosen default selected value. + """ + isDefault: Boolean! +} + +""" +PreOrder Product +""" +type ProductPreOrder implements ProductAvailability { + """ + The message to be shown in the store when a product is put into the pre-order availability state, e.g. "Expected release date is %%DATE%%" + """ + message: String + + """ + Product release date + """ + willBeReleasedAt: DateTimeExtended + + """ + The availability state of the product. + """ + status: ProductAvailabilityStatus! + + """ + A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. + """ + description: String! +} + +""" +Unavailable Product +""" +type ProductUnavailable implements ProductAvailability { + """ + The message to be shown in the store when "Call for pricing" is enabled for this product, e.g. "Contact us at 555-5555" + """ + message: String + + """ + The availability state of the product. + """ + status: ProductAvailabilityStatus! + + """ + A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. + """ + description: String! +} + +type Query { + site: Site! + + """ + The currently logged in customer. + """ + customer: Customer + + """ + Fetches an object given its ID + """ + node( + """ + The ID of an object + """ + id: ID! + ): Node + inventory: Inventory! + @deprecated(reason: "Alpha version. Do not use in production.") +} + +""" +A connection to a list of items. +""" +type RelatedProductsConnection { + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + A list of edges. + """ + edges: [RelatedProductsEdge] +} + +""" +An edge in a connection. +""" +type RelatedProductsEdge { + """ + The item at the end of the edge. + """ + node: Product! + + """ + A cursor for use in pagination. + """ + cursor: String! +} + +""" +Review Rating Summary +""" +type Reviews { + """ + Total number of reviews on product. + """ + numberOfReviews: Int! + + """ + Summation of rating scores from each review. + """ + summationOfRatings: Int! +} + +""" +route +""" +type Route { + """ + node + """ + node: Node +} + +""" +Store settings information from the control panel. +""" +type Settings { + """ + The name of the store. + """ + storeName: String! + + """ + The hash of the store. + """ + storeHash: String! + + """ + The current store status. + """ + status: StorefrontStatusType! + + """ + Logo information for the store. + """ + logo: LogoField! + + """ + Contact information for the store. + """ + contact: ContactField + + """ + Store urls. + """ + url: UrlField! + + """ + Store display format information. + """ + display: DisplayField! + + """ + Channel ID. + """ + channelId: Long! +} + +""" +A site +""" +type Site { + categoryTree: [CategoryTreeItem!]! + + """ + Details of the brand. + """ + brands( + before: String + after: String + first: Int + last: Int + productEntityIds: [Int!] = [] + ): BrandConnection! + + """ + Details of the products. + """ + products( + before: String + after: String + first: Int + last: Int + ids: [ID!] = [] + entityIds: [Int!] = [] + ): ProductConnection! + + """ + Details of the newest products. + """ + newestProducts( + before: String + after: String + first: Int + last: Int + ): ProductConnection! + + """ + Details of the best selling products. + """ + bestSellingProducts( + before: String + after: String + first: Int + last: Int + ): ProductConnection! + + """ + Details of the featured products. + """ + featuredProducts( + before: String + after: String + first: Int + last: Int + ): ProductConnection! + + """ + A single product object with variant pricing overlay capabilities. + """ + product( + id: ID + entityId: Int + variantEntityId: Int + optionValueIds: [OptionValueId!] = [] + sku: String + ): Product + + """ + Route for a node + """ + route(path: String!): Route! + + """ + Store settings. + """ + settings: Settings +} + +""" +Storefront Mode +""" +enum StorefrontStatusType { + LAUNCHED + MAINTENANCE + PRE_LAUNCH + HIBERNATION +} + +""" +A swatch option value - swatch values can be associated with a list of hexidecimal colors or an image. +""" +type SwatchOptionValue implements CatalogProductOptionValue { + """ + List of up to 3 hex encoded colors to associate with a swatch value. + """ + hexColors: [String!]! + + """ + Absolute path of a swatch texture image. + """ + imageUrl(width: Int!, height: Int): String + + """ + Unique ID for the option value. + """ + entityId: Int! + + """ + Label for the option value. + """ + label: String! + + """ + Indicates whether this value is the chosen default selected value. + """ + isDefault: Boolean! +} + +""" +A single line text input field. +""" +type TextFieldOption implements CatalogProductOption { + """ + Unique ID for the option. + """ + entityId: Int! + + """ + Display name for the option. + """ + displayName: String! + + """ + One of the option values is required to be selected for the checkout. + """ + isRequired: Boolean! +} + +""" +Url field +""" +type UrlField { + """ + Store url. + """ + vanityUrl: String! + + """ + CDN url to fetch assets. + """ + cdnUrl: String! +} + +""" +Variant +""" +type Variant implements Node { + """ + The ID of an object + """ + id: ID! + + """ + Id of the variant. + """ + entityId: Int! + + """ + Sku of the variant. + """ + sku: String! + + """ + 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. + """ + height: Measurement + + """ + 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. + """ + depth: Measurement + + """ + The options which define a variant. + """ + options( + before: String + after: String + first: Int + last: Int + ): OptionConnection! + + """ + Product options that compose this variant. + """ + productOptions( + before: String + after: String + first: Int + last: Int + ): ProductOptionConnection! + + """ + Default image for a variant. + """ + defaultImage: Image + + """ + Variant prices + """ + prices(includeTax: Boolean = false, currencyCode: currencyCode): Prices + + """ + Variant inventory + """ + inventory: VariantInventory + + """ + Metafield data related to a variant. + """ + metafields( + namespace: String! + keys: [String!] = [] + before: String + after: String + first: Int + last: Int + ): MetafieldConnection! +} + +""" +A connection to a list of items. +""" +type VariantConnection { + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + A list of edges. + """ + edges: [VariantEdge] +} + +""" +An edge in a connection. +""" +type VariantEdge { + """ + The item at the end of the edge. + """ + node: Variant! + + """ + A cursor for use in pagination. + """ + cursor: String! +} + +""" +Variant Inventory +""" +type VariantInventory { + """ + Aggregated product variant inventory information. This data may not be available if not set or if the store's Inventory Settings have disabled displaying stock levels on the storefront. + """ + aggregated: Aggregated + + """ + Indicates whether this product is in stock. + """ + isInStock: Boolean! + + """ + Inventory by locations. + """ + byLocation( + locationEntityIds: [Int!] = [] + before: String + after: String + first: Int + last: Int + ): LocationConnection +} + +""" +Please select a currency +""" +enum currencyCode { + ADP + AED + AFA + AFN + ALK + ALL + AMD + ANG + AOA + AOK + AON + AOR + ARA + ARL + ARM + ARP + ARS + ATS + AUD + AWG + AZM + AZN + BAD + BAM + BAN + BBD + BDT + BEC + BEF + BEL + BGL + BGM + BGN + BGO + BHD + BIF + BMD + BND + BOB + BOL + BOP + BOV + BRB + BRC + BRE + BRL + BRN + BRR + BRZ + BSD + BTN + BUK + BWP + BYB + BYR + BZD + CAD + CDF + CHE + CHF + CHW + CLE + CLF + CLP + CNX + CNY + COP + COU + CRC + CSD + CSK + CVE + CYP + CZK + DDM + DEM + DJF + DKK + DOP + DZD + ECS + ECV + EEK + EGP + ERN + ESA + ESB + ESP + ETB + EUR + FIM + FJD + FKP + FRF + GBP + GEK + GEL + GHC + GHS + GIP + GMD + GNF + GNS + GQE + GRD + GTQ + GWE + GWP + GYD + HKD + HNL + HRD + HRK + HTG + HUF + IDR + IEP + ILP + ILR + ILS + INR + IQD + ISJ + ISK + ITL + JMD + JOD + JPY + KES + KGS + KHR + KMF + KRH + KRO + KRW + KWD + KYD + KZT + LAK + LBP + LKR + LRD + LSL + LTL + LTT + LUC + LUF + LUL + LVL + LVR + LYD + MAD + MAF + MCF + MDC + MDL + MGA + MGF + MKD + MKN + MLF + MMK + MNT + MOP + MRO + MTL + MTP + MUR + MVP + MVR + MWK + MXN + MXP + MXV + MYR + MZE + MZM + MZN + NAD + NGN + NIC + NIO + NLG + NOK + NPR + NZD + OMR + PAB + PEI + PEN + PES + PGK + PHP + PKR + PLN + PLZ + PTE + PYG + QAR + RHD + ROL + RON + RSD + RUB + RUR + RWF + SAR + SBD + SCR + SDD + SDG + SDP + SEK + SGD + SHP + SIT + SKK + SLL + SOS + SRD + SRG + SSP + STD + SUR + SVC + SYP + SZL + THB + TJR + TJS + TMM + TMT + TND + TOP + TPE + TRL + TRY + TTD + TWD + TZS + UAH + UAK + UGS + UGX + USD + USN + USS + UYI + UYP + UYU + UZS + VEB + VEF + VND + VNN + VUV + WST + XAF + XCD + XEU + XFO + XFU + XOF + XPF + XRE + YDD + YER + YUD + YUM + YUN + YUR + ZAL + ZAR + ZMK + ZMW + ZRN + ZRZ + ZWD + ZWL + ZWR +} + +""" +The `BigDecimal` scalar type represents signed fractional values with arbitrary precision. +""" +scalar BigDecimal + +""" +The `Long` scalar type represents non-fractional signed whole numeric values. Long can represent values between -(2^63) and 2^63 - 1. +""" +scalar Long diff --git a/framework/bigcommerce/scripts/generate-definitions.js b/framework/bigcommerce/scripts/generate-definitions.js new file mode 100644 index 000000000..a2b830d3b --- /dev/null +++ b/framework/bigcommerce/scripts/generate-definitions.js @@ -0,0 +1,49 @@ +/** + * Generates definitions for REST API endpoints that are being + * used by ../api using https://github.com/drwpow/swagger-to-ts + */ +const { readFileSync, promises } = require('fs') +const path = require('path') +const fetch = require('node-fetch') +const swaggerToTS = require('@manifoldco/swagger-to-ts').default + +async function getSchema(filename) { + const url = `https://next-api.stoplight.io/projects/8433/files/${filename}` + const res = await fetch(url) + + if (!res.ok) { + throw new Error(`Request failed with ${res.status}: ${res.statusText}`) + } + + return res.json() +} + +const schemas = Object.entries({ + '../api/definitions/catalog.ts': + 'BigCommerce_Catalog_API.oas2.yml?ref=version%2F20.930', + '../api/definitions/store-content.ts': + 'BigCommerce_Store_Content_API.oas2.yml?ref=version%2F20.930', + '../api/definitions/wishlist.ts': + 'BigCommerce_Wishlist_API.oas2.yml?ref=version%2F20.930', + // swagger-to-ts is not working for the schema of the cart API + // '../api/definitions/cart.ts': + // 'BigCommerce_Server_to_Server_Cart_API.oas2.yml', +}) + +async function writeDefinitions() { + const ops = schemas.map(async ([dest, filename]) => { + const destination = path.join(__dirname, dest) + const schema = await getSchema(filename) + const definition = swaggerToTS(schema.content, { + prettierConfig: 'package.json', + }) + + await promises.writeFile(destination, definition) + + console.log(`✔️ Added definitions for: ${dest}`) + }) + + await Promise.all(ops) +} + +writeDefinitions() diff --git a/framework/bigcommerce/types.ts b/framework/bigcommerce/types.ts new file mode 100644 index 000000000..beeab0223 --- /dev/null +++ b/framework/bigcommerce/types.ts @@ -0,0 +1,58 @@ +import * as Core from '@commerce/types' + +// 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 +} + +export type Cart = Core.Cart & { + lineItems: LineItem[] +} + +export type LineItem = Core.LineItem + +/** + * Cart mutations + */ + +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 GetCartHandlerBody = Core.GetCartHandlerBody + +export type AddCartItemBody = Core.AddCartItemBody<CartItemBody> + +export type AddCartItemHandlerBody = Core.AddCartItemHandlerBody<CartItemBody> + +export type UpdateCartItemBody = Core.UpdateCartItemBody<CartItemBody> + +export type UpdateCartItemHandlerBody = Core.UpdateCartItemHandlerBody<CartItemBody> + +export type RemoveCartItemBody = Core.RemoveCartItemBody + +export type RemoveCartItemHandlerBody = Core.RemoveCartItemHandlerBody diff --git a/framework/bigcommerce/wishlist/index.ts b/framework/bigcommerce/wishlist/index.ts new file mode 100644 index 000000000..241af3c7e --- /dev/null +++ b/framework/bigcommerce/wishlist/index.ts @@ -0,0 +1,3 @@ +export { default as useAddItem } from './use-add-item' +export { default as useWishlist } from './use-wishlist' +export { default as useRemoveItem } from './use-remove-item' diff --git a/framework/bigcommerce/wishlist/use-add-item.tsx b/framework/bigcommerce/wishlist/use-add-item.tsx new file mode 100644 index 000000000..402e7da8b --- /dev/null +++ b/framework/bigcommerce/wishlist/use-add-item.tsx @@ -0,0 +1,37 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import { CommerceError } from '@commerce/utils/errors' +import useAddItem, { UseAddItem } from '@commerce/wishlist/use-add-item' +import type { ItemBody, AddItemBody } from '../api/wishlist' +import useCustomer from '../customer/use-customer' +import useWishlist from './use-wishlist' + +export default useAddItem as UseAddItem<typeof handler> + +export const handler: MutationHook<any, {}, ItemBody, AddItemBody> = { + fetchOptions: { + url: '/api/bigcommerce/wishlist', + method: 'POST', + }, + useHook: ({ fetch }) => () => { + const { data: customer } = useCustomer() + const { revalidate } = useWishlist() + + return useCallback( + async function addItem(item) { + if (!customer) { + // A signed customer is required in order to have a wishlist + throw new CommerceError({ + message: 'Signed customer not found', + }) + } + + // TODO: add validations before doing the fetch + const data = await fetch({ input: { item } }) + await revalidate() + return data + }, + [fetch, revalidate, customer] + ) + }, +} diff --git a/framework/bigcommerce/wishlist/use-remove-item.tsx b/framework/bigcommerce/wishlist/use-remove-item.tsx new file mode 100644 index 000000000..622f321db --- /dev/null +++ b/framework/bigcommerce/wishlist/use-remove-item.tsx @@ -0,0 +1,44 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import { CommerceError } from '@commerce/utils/errors' +import useRemoveItem, { + RemoveItemInput, + UseRemoveItem, +} from '@commerce/wishlist/use-remove-item' +import type { RemoveItemBody, Wishlist } from '../api/wishlist' +import useCustomer from '../customer/use-customer' +import useWishlist, { UseWishlistInput } from './use-wishlist' + +export default useRemoveItem as UseRemoveItem<typeof handler> + +export const handler: MutationHook< + Wishlist | null, + { wishlist?: UseWishlistInput }, + RemoveItemInput, + RemoveItemBody +> = { + fetchOptions: { + url: '/api/bigcommerce/wishlist', + method: 'DELETE', + }, + useHook: ({ fetch }) => ({ wishlist } = {}) => { + const { data: customer } = useCustomer() + const { revalidate } = useWishlist(wishlist) + + return useCallback( + async function removeItem(input) { + if (!customer) { + // A signed customer is required in order to have a wishlist + throw new CommerceError({ + message: 'Signed customer not found', + }) + } + + const data = await fetch({ input: { itemId: String(input.id) } }) + await revalidate() + return data + }, + [fetch, revalidate, customer] + ) + }, +} diff --git a/framework/bigcommerce/wishlist/use-wishlist.tsx b/framework/bigcommerce/wishlist/use-wishlist.tsx new file mode 100644 index 000000000..4850d1cd9 --- /dev/null +++ b/framework/bigcommerce/wishlist/use-wishlist.tsx @@ -0,0 +1,60 @@ +import { useMemo } from 'react' +import { SWRHook } from '@commerce/utils/types' +import useWishlist, { UseWishlist } from '@commerce/wishlist/use-wishlist' +import type { Wishlist } from '../api/wishlist' +import useCustomer from '../customer/use-customer' + +export type UseWishlistInput = { includeProducts?: boolean } + +export default useWishlist as UseWishlist<typeof handler> + +export const handler: SWRHook< + Wishlist | null, + UseWishlistInput, + { customerId?: number } & UseWishlistInput, + { isEmpty?: boolean } +> = { + fetchOptions: { + url: '/api/bigcommerce/wishlist', + method: 'GET', + }, + async 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') + + return fetch({ + url: url.pathname + url.search, + method: options.method, + }) + }, + useHook: ({ useData }) => (input) => { + const { data: customer } = useCustomer() + const response = useData({ + input: [ + ['customerId', customer?.entityId], + ['includeProducts', input?.includeProducts], + ], + swrOptions: { + revalidateOnFocus: false, + ...input?.swrOptions, + }, + }) + + return useMemo( + () => + Object.create(response, { + isEmpty: { + get() { + return (response.data?.items?.length || 0) <= 0 + }, + enumerable: true, + }, + }), + [response] + ) + }, +} diff --git a/framework/commerce/README.md b/framework/commerce/README.md new file mode 100644 index 000000000..ecdebb8c0 --- /dev/null +++ b/framework/commerce/README.md @@ -0,0 +1,334 @@ +# Commerce Framework + +- [Commerce Framework](#commerce-framework) + - [Commerce Hooks](#commerce-hooks) + - [CommerceProvider](#commerceprovider) + - [Authentication Hooks](#authentication-hooks) + - [useSignup](#usesignup) + - [useLogin](#uselogin) + - [useLogout](#uselogout) + - [Customer Hooks](#customer-hooks) + - [useCustomer](#usecustomer) + - [Product Hooks](#product-hooks) + - [usePrice](#useprice) + - [useSearch](#usesearch) + - [Cart Hooks](#cart-hooks) + - [useCart](#usecart) + - [useAddItem](#useadditem) + - [useUpdateItem](#useupdateitem) + - [useRemoveItem](#useremoveitem) + - [Wishlist Hooks](#wishlist-hooks) + - [Commerce API](#commerce-api) + - [More](#more) + +The commerce framework ships multiple hooks and a Node.js API, both using an underlying headless e-commerce platform, which we call commerce providers. + +The core features are: + +- Code splitted hooks for data fetching using [SWR](https://swr.vercel.app/), and to handle common user actions +- A Node.js API for initial data population, static generation of content and for creating the API endpoints that connect to the hooks, if required. + +> 👩‍🔬 If you would like to contribute a new provider, check the docs for [Adding a new Commerce Provider](./new-provider.md). + +> 🚧 The core commerce framework is under active development, new features and updates will be continuously added over time. Breaking changes are expected while we finish the API. + +## Commerce Hooks + +A commerce hook is a [React hook](https://reactjs.org/docs/hooks-intro.html) that's connected to a commerce provider. They focus on user actions and data fetching of data that wasn't statically generated. + +Data fetching hooks use [SWR](https://swr.vercel.app/) underneath and you're welcome to use any of its [return values](https://swr.vercel.app/docs/options#return-values) and [options](https://swr.vercel.app/docs/options#options). For example, using the `useCustomer` hook: + +```jsx +const { data, isLoading, error } = useCustomer({ + swrOptions: { + revalidateOnFocus: true, + }, +}) +``` + +### CommerceProvider + +This component adds the provider config and handlers to the context of your React tree for it's children. You can optionally pass the `locale` to it: + +```jsx +import { CommerceProvider } from '@framework' + +const App = ({ locale = 'en-US', children }) => { + return <CommerceProvider locale={locale}>{children}</CommerceProvider> +} +``` + +## Authentication Hooks + +### useSignup + +Returns a _signup_ function that can be used to sign up the current visitor: + +```jsx +import useSignup from '@framework/auth/use-signup' + +const SignupView = () => { + const signup = useSignup() + + const handleSignup = async () => { + await signup({ + email, + firstName, + lastName, + password, + }) + } + + return <form onSubmit={handleSignup}>{children}</form> +} +``` + +### useLogin + +Returns a _login_ function that can be used to sign in the current visitor into an existing customer: + +```jsx +import useLogin from '@framework/auth/use-login' + +const LoginView = () => { + const login = useLogin() + const handleLogin = async () => { + await login({ + email, + password, + }) + } + + return <form onSubmit={handleLogin}>{children}</form> +} +``` + +### useLogout + +Returns a _logout_ function that signs out the current customer when called. + +```jsx +import useLogout from '@framework/auth/use-logout' + +const LogoutButton = () => { + const logout = useLogout() + return ( + <button type="button" onClick={() => logout()}> + Logout + </button> + ) +} +``` + +## Customer Hooks + +### useCustomer + +Fetches and returns the data of the signed in customer: + +```jsx +import useCustomer from '@framework/customer/use-customer' + +const Profile = () => { + const { data, isLoading, error } = useCustomer() + + if (isLoading) return <p>Loading...</p> + if (error) return <p>{error.message}</p> + if (!data) return null + + return <div>Hello, {data.firstName}</div> +} +``` + +## Product Hooks + +### usePrice + +Helper hook to format price according to the commerce locale and currency code. It also handles discounts: + +```jsx +import useCart from '@framework/cart/use-cart' +import usePrice from '@framework/product/use-price' + +// ... +const { data } = useCart() +const { price, discount, basePrice } = usePrice( + data && { + amount: data.subtotalPrice, + currencyCode: data.currency.code, + // If `baseAmount` is used, a discount will be calculated + // baseAmount: number, + } +) +// ... +``` + +### useSearch + +Fetches and returns the products that match a set of filters: + +```jsx +import useSearch from '@framework/product/use-search' + +const SearchPage = ({ searchString, category, brand, sortStr }) => { + const { data } = useSearch({ + search: searchString || '', + categoryId: category?.entityId, + brandId: brand?.entityId, + sort: sortStr, + }) + + return ( + <Grid layout="normal"> + {data.products.map((product) => ( + <ProductCard key={product.path} product={product} /> + ))} + </Grid> + ) +} +``` + +## Cart Hooks + +### useCart + +Fetches and returns the data of the current cart: + +```jsx +import useCart from '@framework/cart/use-cart' + +const CartTotal = () => { + const { data, isLoading, isEmpty, error } = useCart() + + if (isLoading) return <p>Loading...</p> + if (error) return <p>{error.message}</p> + if (isEmpty) return <p>The cart is empty</p> + + return <p>The cart total is {data.totalPrice}</p> +} +``` + +### useAddItem + +Returns a function that adds a new item to the cart when called, if this is the first item it will create the cart: + +```jsx +import { useAddItem } from '@framework/cart' + +const AddToCartButton = ({ productId, variantId }) => { + const addItem = useAddItem() + + const addToCart = async () => { + await addItem({ + productId, + variantId, + }) + } + + return <button onClick={addToCart}>Add To Cart</button> +} +``` + +### useUpdateItem + +Returns a function that updates a current item in the cart when called, usually the quantity. + +```jsx +import { useUpdateItem } from '@framework/cart' + +const CartItemQuantity = ({ item }) => { + const [quantity, setQuantity] = useState(item.quantity) + const updateItem = useUpdateItem({ item }) + + const updateQuantity = async (e) => { + const val = e.target.value + + setQuantity(val) + await updateItem({ quantity: val }) + } + + return ( + <input + type="number" + max={99} + min={0} + value={quantity} + onChange={updateQuantity} + /> + ) +} +``` + +If the `quantity` is lower than 1 the item will be removed from the cart. + +### useRemoveItem + +Returns a function that removes an item in the cart when called: + +```jsx +import { useRemoveItem } from '@framework/cart' + +const RemoveButton = ({ item }) => { + const removeItem = useRemoveItem() + const handleRemove = async () => { + await removeItem(item) + } + + return <button onClick={handleRemove}>Remove</button> +} +``` + +## Wishlist Hooks + +Wishlist hooks work just like [cart hooks](#cart-hooks). Feel free to check how those work first. + +The example below shows how to use the `useWishlist`, `useAddItem` and `useRemoveItem` hooks: + +```jsx +import { useWishlist, useAddItem, useRemoveItem } from '@framework/wishlist' + +const WishlistButton = ({ productId, variant }) => { + const addItem = useAddItem() + const removeItem = useRemoveItem() + const { data, isLoading, isEmpty, error } = useWishlist() + + if (isLoading) return <p>Loading...</p> + if (error) return <p>{error.message}</p> + if (isEmpty) return <p>The wihslist is empty</p> + + const { data: customer } = useCustomer() + const itemInWishlist = data?.items?.find( + (item) => item.product_id === productId && item.variant_id === variant.id + ) + + const handleWishlistChange = async (e) => { + e.preventDefault() + if (!customer) return + + if (itemInWishlist) { + await removeItem({ id: itemInWishlist.id }) + } else { + await addItem({ + productId, + variantId: variant.id, + }) + } + } + + return ( + <button onClick={handleWishlistChange}> + <Heart fill={itemInWishlist ? 'var(--pink)' : 'none'} /> + </button> + ) +} +``` + +## Commerce API + +While commerce hooks focus on client side data fetching and interactions, the commerce API focuses on static content generation for pages and API endpoints in a Node.js context. + +> The commerce API is currently going through a refactor in https://github.com/vercel/commerce/pull/252 - We'll update the docs once the API is released. + +## More + +Feel free to read through the source for more usage, and check the commerce vercel demo and commerce repo for usage examples: ([demo.vercel.store](https://demo.vercel.store/)) ([repo](https://github.com/vercel/commerce)) diff --git a/framework/commerce/api/index.ts b/framework/commerce/api/index.ts new file mode 100644 index 000000000..77b2eeb7e --- /dev/null +++ b/framework/commerce/api/index.ts @@ -0,0 +1,34 @@ +import type { RequestInit, Response } from '@vercel/fetch' + +export interface CommerceAPIConfig { + locale?: string + commerceUrl: string + apiToken: string + cartCookie: string + cartCookieMaxAge: number + customerCookie: string + fetch<Data = any, Variables = any>( + query: string, + queryData?: CommerceAPIFetchOptions<Variables>, + fetchOptions?: RequestInit + ): Promise<GraphQLFetcherResult<Data>> +} + +export type GraphQLFetcher< + Data extends GraphQLFetcherResult = GraphQLFetcherResult, + Variables = any +> = ( + query: string, + queryData?: CommerceAPIFetchOptions<Variables>, + fetchOptions?: RequestInit +) => Promise<Data> + +export interface GraphQLFetcherResult<Data = any> { + data: Data + res: Response +} + +export interface CommerceAPIFetchOptions<Variables> { + variables?: Variables + preview?: boolean +} diff --git a/framework/commerce/auth/use-login.tsx b/framework/commerce/auth/use-login.tsx new file mode 100644 index 000000000..cc4cf6a73 --- /dev/null +++ b/framework/commerce/auth/use-login.tsx @@ -0,0 +1,19 @@ +import { useHook, useMutationHook } from '../utils/use-hook' +import { mutationFetcher } from '../utils/default-fetcher' +import type { MutationHook, HookFetcherFn } from '../utils/types' +import type { Provider } from '..' + +export type UseLogin< + H extends MutationHook<any, any, any> = MutationHook<null, {}, {}> +> = ReturnType<H['useHook']> + +export const fetcher: HookFetcherFn<null, {}> = mutationFetcher + +const fn = (provider: Provider) => provider.auth?.useLogin! + +const useLogin: UseLogin = (...args) => { + const hook = useHook(fn) + return useMutationHook({ fetcher, ...hook })(...args) +} + +export default useLogin diff --git a/framework/commerce/auth/use-logout.tsx b/framework/commerce/auth/use-logout.tsx new file mode 100644 index 000000000..d0f7e3ae0 --- /dev/null +++ b/framework/commerce/auth/use-logout.tsx @@ -0,0 +1,19 @@ +import { useHook, useMutationHook } from '../utils/use-hook' +import { mutationFetcher } from '../utils/default-fetcher' +import type { HookFetcherFn, MutationHook } from '../utils/types' +import type { Provider } from '..' + +export type UseLogout< + H extends MutationHook<any, any, any> = MutationHook<null> +> = ReturnType<H['useHook']> + +export const fetcher: HookFetcherFn<null> = mutationFetcher + +const fn = (provider: Provider) => provider.auth?.useLogout! + +const useLogout: UseLogout = (...args) => { + const hook = useHook(fn) + return useMutationHook({ fetcher, ...hook })(...args) +} + +export default useLogout diff --git a/framework/commerce/auth/use-signup.tsx b/framework/commerce/auth/use-signup.tsx new file mode 100644 index 000000000..72e242209 --- /dev/null +++ b/framework/commerce/auth/use-signup.tsx @@ -0,0 +1,19 @@ +import { useHook, useMutationHook } from '../utils/use-hook' +import { mutationFetcher } from '../utils/default-fetcher' +import type { HookFetcherFn, MutationHook } from '../utils/types' +import type { Provider } from '..' + +export type UseSignup< + H extends MutationHook<any, any, any> = MutationHook<null> +> = ReturnType<H['useHook']> + +export const fetcher: HookFetcherFn<null> = mutationFetcher + +const fn = (provider: Provider) => provider.auth?.useSignup! + +const useSignup: UseSignup = (...args) => { + const hook = useHook(fn) + return useMutationHook({ fetcher, ...hook })(...args) +} + +export default useSignup diff --git a/framework/commerce/cart/use-add-item.tsx b/framework/commerce/cart/use-add-item.tsx new file mode 100644 index 000000000..324464656 --- /dev/null +++ b/framework/commerce/cart/use-add-item.tsx @@ -0,0 +1,23 @@ +import { useHook, useMutationHook } from '../utils/use-hook' +import { mutationFetcher } from '../utils/default-fetcher' +import type { HookFetcherFn, MutationHook } from '../utils/types' +import type { Cart, CartItemBody, AddCartItemBody } from '../types' +import type { Provider } from '..' + +export type UseAddItem< + H extends MutationHook<any, any, any> = MutationHook<Cart, {}, CartItemBody> +> = ReturnType<H['useHook']> + +export const fetcher: HookFetcherFn< + Cart, + AddCartItemBody<CartItemBody> +> = mutationFetcher + +const fn = (provider: Provider) => provider.cart?.useAddItem! + +const useAddItem: UseAddItem = (...args) => { + const hook = useHook(fn) + return useMutationHook({ fetcher, ...hook })(...args) +} + +export default useAddItem diff --git a/framework/commerce/cart/use-cart.tsx b/framework/commerce/cart/use-cart.tsx new file mode 100644 index 000000000..fbed715c8 --- /dev/null +++ b/framework/commerce/cart/use-cart.tsx @@ -0,0 +1,41 @@ +import Cookies from 'js-cookie' +import { useHook, useSWRHook } from '../utils/use-hook' +import type { HookFetcherFn, SWRHook } from '../utils/types' +import type { Cart } from '../types' +import { Provider, useCommerce } from '..' + +export type FetchCartInput = { + cartId?: Cart['id'] +} + +export type UseCart< + H extends SWRHook<any, any, any> = SWRHook< + Cart | null, + {}, + FetchCartInput, + { isEmpty?: boolean } + > +> = ReturnType<H['useHook']> + +export const fetcher: HookFetcherFn<Cart | null, FetchCartInput> = async ({ + options, + input: { cartId }, + fetch, +}) => { + return cartId ? await fetch({ ...options }) : null +} + +const fn = (provider: Provider) => provider.cart?.useCart! + +const useCart: UseCart = (input) => { + const hook = useHook(fn) + const { cartCookie } = useCommerce() + const fetcherFn = hook.fetcher ?? fetcher + const wrapper: typeof fetcher = (context) => { + context.input.cartId = Cookies.get(cartCookie) + return fetcherFn(context) + } + return useSWRHook({ ...hook, fetcher: wrapper })(input) +} + +export default useCart diff --git a/framework/commerce/cart/use-remove-item.tsx b/framework/commerce/cart/use-remove-item.tsx new file mode 100644 index 000000000..a9d1b37d2 --- /dev/null +++ b/framework/commerce/cart/use-remove-item.tsx @@ -0,0 +1,35 @@ +import { useHook, useMutationHook } from '../utils/use-hook' +import { mutationFetcher } from '../utils/default-fetcher' +import type { HookFetcherFn, MutationHook } from '../utils/types' +import type { Cart, LineItem, RemoveCartItemBody } from '../types' +import type { Provider } from '..' + +/** + * Input expected by the action returned by the `useRemoveItem` hook + */ +export type RemoveItemInput = { + id: string +} + +export type UseRemoveItem< + H extends MutationHook<any, any, any> = MutationHook< + Cart | null, + { item?: LineItem }, + RemoveItemInput, + RemoveCartItemBody + > +> = ReturnType<H['useHook']> + +export const fetcher: HookFetcherFn< + Cart | null, + RemoveCartItemBody +> = mutationFetcher + +const fn = (provider: Provider) => provider.cart?.useRemoveItem! + +const useRemoveItem: UseRemoveItem = (input) => { + const hook = useHook(fn) + return useMutationHook({ fetcher, ...hook })(input) +} + +export default useRemoveItem diff --git a/framework/commerce/cart/use-update-item.tsx b/framework/commerce/cart/use-update-item.tsx new file mode 100644 index 000000000..f8d0f1a40 --- /dev/null +++ b/framework/commerce/cart/use-update-item.tsx @@ -0,0 +1,38 @@ +import { useHook, useMutationHook } from '../utils/use-hook' +import { mutationFetcher } from '../utils/default-fetcher' +import type { HookFetcherFn, MutationHook } from '../utils/types' +import type { Cart, CartItemBody, LineItem, UpdateCartItemBody } from '../types' +import type { Provider } from '..' + +/** + * Input expected by the action returned by the `useUpdateItem` hook + */ +export type UpdateItemInput<T extends CartItemBody> = T & { + id: string +} + +export type UseUpdateItem< + H extends MutationHook<any, any, any> = MutationHook< + Cart | null, + { + item?: LineItem + wait?: number + }, + UpdateItemInput<CartItemBody>, + UpdateCartItemBody<CartItemBody> + > +> = ReturnType<H['useHook']> + +export const fetcher: HookFetcherFn< + Cart | null, + UpdateCartItemBody<CartItemBody> +> = mutationFetcher + +const fn = (provider: Provider) => provider.cart?.useUpdateItem! + +const useUpdateItem: UseUpdateItem = (input) => { + const hook = useHook(fn) + return useMutationHook({ fetcher, ...hook })(input) +} + +export default useUpdateItem diff --git a/framework/commerce/config.js b/framework/commerce/config.js new file mode 100644 index 000000000..2dd3284bc --- /dev/null +++ b/framework/commerce/config.js @@ -0,0 +1,66 @@ +/** + * This file is expected to be used in next.config.js only + */ + +const path = require('path') +const fs = require('fs') +const merge = require('deepmerge') +const prettier = require('prettier') + +const PROVIDERS = ['bigcommerce', 'shopify'] + +function getProviderName() { + return ( + process.env.COMMERCE_PROVIDER || + (process.env.BIGCOMMERCE_STOREFRONT_API_URL + ? 'bigcommerce' + : process.env.NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN + ? 'shopify' + : null) + ) +} + +function withCommerceConfig(nextConfig = {}) { + const commerce = nextConfig.commerce || {} + const name = commerce.provider || getProviderName() + + if (!name) { + throw new Error( + `The commerce provider is missing, please add a valid provider name or its environment variables` + ) + } + if (!PROVIDERS.includes(name)) { + throw new Error( + `The commerce provider "${name}" can't be found, please use one of "${PROVIDERS.join( + ', ' + )}"` + ) + } + + const commerceNextConfig = require(path.join('../', name, 'next.config')) + const config = merge(commerceNextConfig, nextConfig) + + config.env = config.env || {} + + Object.entries(config.commerce.features).forEach(([k, v]) => { + if (v) config.env[`COMMERCE_${k.toUpperCase()}_ENABLED`] = true + }) + + // Update paths in `tsconfig.json` to point to the selected provider + if (config.commerce.updateTSConfig !== false) { + const tsconfigPath = path.join(process.cwd(), 'tsconfig.json') + const tsconfig = require(tsconfigPath) + + tsconfig.compilerOptions.paths['@framework'] = [`framework/${name}`] + tsconfig.compilerOptions.paths['@framework/*'] = [`framework/${name}/*`] + + fs.writeFileSync( + tsconfigPath, + prettier.format(JSON.stringify(tsconfig), { parser: 'json' }) + ) + } + + return config +} + +module.exports = { withCommerceConfig, getProviderName } diff --git a/framework/commerce/customer/use-customer.tsx b/framework/commerce/customer/use-customer.tsx new file mode 100644 index 000000000..5d6416a4b --- /dev/null +++ b/framework/commerce/customer/use-customer.tsx @@ -0,0 +1,20 @@ +import { useHook, useSWRHook } from '../utils/use-hook' +import { SWRFetcher } from '../utils/default-fetcher' +import type { HookFetcherFn, SWRHook } from '../utils/types' +import type { Customer } from '../types' +import { Provider } from '..' + +export type UseCustomer< + H extends SWRHook<any, any, any> = SWRHook<Customer | null> +> = ReturnType<H['useHook']> + +export const fetcher: HookFetcherFn<Customer | null, any> = SWRFetcher + +const fn = (provider: Provider) => provider.customer?.useCustomer! + +const useCustomer: UseCustomer = (input) => { + const hook = useHook(fn) + return useSWRHook({ fetcher, ...hook })(input) +} + +export default useCustomer diff --git a/framework/commerce/index.tsx b/framework/commerce/index.tsx new file mode 100644 index 000000000..07bf74a22 --- /dev/null +++ b/framework/commerce/index.tsx @@ -0,0 +1,88 @@ +import { + ReactNode, + MutableRefObject, + createContext, + useContext, + useMemo, + useRef, +} from 'react' +import { Fetcher, SWRHook, MutationHook } from './utils/types' +import type { FetchCartInput } from './cart/use-cart' +import type { Cart, Wishlist, Customer, SearchProductsData } from './types' + +const Commerce = createContext<CommerceContextValue<any> | {}>({}) + +export type Provider = CommerceConfig & { + fetcher: Fetcher + cart?: { + useCart?: SWRHook<Cart | null, any, FetchCartInput> + useAddItem?: MutationHook<any, any, any> + useUpdateItem?: MutationHook<any, any, any> + useRemoveItem?: MutationHook<any, any, any> + } + wishlist?: { + useWishlist?: SWRHook<Wishlist | null, any, any> + useAddItem?: MutationHook<any, any, any> + useRemoveItem?: MutationHook<any, any, any> + } + customer?: { + useCustomer?: SWRHook<Customer | null, any, any> + } + products?: { + useSearch?: SWRHook<SearchProductsData, any, any> + } + auth?: { + useSignup?: MutationHook<any, any, any> + useLogin?: MutationHook<any, any, any> + useLogout?: MutationHook<any, any, any> + } +} + +export type CommerceProps<P extends Provider> = { + children?: ReactNode + provider: P + config: CommerceConfig +} + +export type CommerceConfig = Omit< + CommerceContextValue<any>, + 'providerRef' | 'fetcherRef' +> + +export type CommerceContextValue<P extends Provider> = { + providerRef: MutableRefObject<P> + fetcherRef: MutableRefObject<Fetcher> + locale: string + cartCookie: string +} + +export function CommerceProvider<P extends Provider>({ + provider, + children, + config, +}: CommerceProps<P>) { + if (!config) { + throw new Error('CommerceProvider requires a valid config object') + } + + const providerRef = useRef(provider) + // TODO: Remove the fetcherRef + const fetcherRef = useRef(provider.fetcher) + // Because the config is an object, if the parent re-renders this provider + // will re-render every consumer unless we memoize the config + const cfg = useMemo( + () => ({ + providerRef, + fetcherRef, + locale: config.locale, + cartCookie: config.cartCookie, + }), + [config.locale, config.cartCookie] + ) + + return <Commerce.Provider value={cfg}>{children}</Commerce.Provider> +} + +export function useCommerce<P extends Provider>() { + return useContext(Commerce) as CommerceContextValue<P> +} diff --git a/framework/commerce/new-provider.md b/framework/commerce/new-provider.md new file mode 100644 index 000000000..4051c0f01 --- /dev/null +++ b/framework/commerce/new-provider.md @@ -0,0 +1,239 @@ +# Adding a new Commerce Provider + +A commerce provider is a headless e-commerce platform that integrates with the [Commerce Framework](./README.md). Right now we have the following providers: + +- BigCommerce ([framework/bigcommerce](../bigcommerce)) +- Shopify ([framework/shopify](../shopify)) + +Adding a commerce provider means adding a new folder in `framework` with a folder structure like the next one: + +- `api` + - index.ts +- `product` + - usePrice + - useSearch + - getProduct + - getAllProducts +- `wishlist` + - useWishlist + - useAddItem + - useRemoveItem +- `auth` + - useLogin + - useLogout + - useSignup +- `customer` + - useCustomer + - getCustomerId + - getCustomerWistlist +- `cart` + - useCart + - useAddItem + - useRemoveItem + - useUpdateItem +- `env.template` +- `index.ts` +- `provider.ts` +- `commerce.config.json` +- `next.config.js` +- `README.md` + +`provider.ts` exports a provider object with handlers for the [Commerce Hooks](./README.md#commerce-hooks) and `api/index.ts` exports a Node.js provider for the [Commerce API](./README.md#commerce-api) + +> **Important:** We use TypeScript for every provider and expect its usage for every new one. + +The app imports from the provider directly instead of the core commerce folder (`framework/commerce`), but all providers are interchangeable and to achieve it every provider always has to implement the core types and helpers. + +The provider folder should only depend on `framework/commerce` and dependencies in the main `package.json`. In the future we'll move the `framework` folder to a package that can be shared easily for multiple apps. + +## Adding the provider hooks + +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 type { ReactNode } from 'react' +import { + CommerceConfig, + CommerceProvider as CoreCommerceProvider, + useCommerce as useCoreCommerce, +} from '@commerce' +import { bigcommerceProvider, BigcommerceProvider } from './provider' + +export { bigcommerceProvider } +export type { BigcommerceProvider } + +export const bigcommerceConfig: CommerceConfig = { + locale: 'en-us', + cartCookie: 'bc_cartId', +} + +export type BigcommerceConfig = Partial<CommerceConfig> + +export type BigcommerceProps = { + children?: ReactNode + locale: string +} & BigcommerceConfig + +export function CommerceProvider({ children, ...config }: BigcommerceProps) { + return ( + <CoreCommerceProvider + provider={bigcommerceProvider} + config={{ ...bigcommerceConfig, ...config }} + > + {children} + </CoreCommerceProvider> + ) +} + +export const useCommerce = () => useCoreCommerce<BigcommerceProvider>() +``` + +The exported types and components extend from the core ones exported by `@commerce`, which refers to `framework/commerce`. + +The `bigcommerceProvider` object looks like this: + +```tsx +import { handler as useCart } from './cart/use-cart' +import { handler as useAddItem } from './cart/use-add-item' +import { handler as useUpdateItem } from './cart/use-update-item' +import { handler as useRemoveItem } from './cart/use-remove-item' + +import { handler as useWishlist } from './wishlist/use-wishlist' +import { handler as useWishlistAddItem } from './wishlist/use-add-item' +import { handler as useWishlistRemoveItem } from './wishlist/use-remove-item' + +import { handler as useCustomer } from './customer/use-customer' +import { handler as useSearch } from './product/use-search' + +import { handler as useLogin } from './auth/use-login' +import { handler as useLogout } from './auth/use-logout' +import { handler as useSignup } from './auth/use-signup' + +import fetcher from './fetcher' + +export const bigcommerceProvider = { + locale: 'en-us', + cartCookie: 'bc_cartId', + fetcher, + cart: { useCart, useAddItem, useUpdateItem, useRemoveItem }, + wishlist: { + useWishlist, + useAddItem: useWishlistAddItem, + useRemoveItem: useWishlistRemoveItem, + }, + customer: { useCustomer }, + products: { useSearch }, + auth: { useLogin, useLogout, useSignup }, +} + +export type BigcommerceProvider = typeof bigcommerceProvider +``` + +The provider object, in this case `bigcommerceProvider`, has to match the `Provider` type defined in [framework/commerce](./index.ts). + +A hook handler, like `useCart`, looks like this: + +```tsx +import { useMemo } from 'react' +import { SWRHook } from '@commerce/utils/types' +import useCart, { UseCart, FetchCartInput } from '@commerce/cart/use-cart' +import { normalizeCart } from '../lib/normalize' +import type { Cart } from '../types' + +export default useCart as UseCart<typeof handler> + +export const handler: SWRHook< + Cart | null, + {}, + FetchCartInput, + { isEmpty?: boolean } +> = { + fetchOptions: { + url: '/api/bigcommerce/cart', + method: 'GET', + }, + async fetcher({ input: { cartId }, options, fetch }) { + const data = cartId ? await fetch(options) : null + return data && normalizeCart(data) + }, + 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 + }, + enumerable: true, + }, + }), + [response] + ) + }, +} +``` + +In the case of data fetching hooks like `useCart` each handler has to implement the `SWRHook` type that's defined in the core types. For mutations it's the `MutationHook`, e.g for `useAddItem`: + +```tsx +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import { CommerceError } from '@commerce/utils/errors' +import useAddItem, { UseAddItem } from '@commerce/cart/use-add-item' +import { normalizeCart } from '../lib/normalize' +import type { + Cart, + BigcommerceCart, + CartItemBody, + AddCartItemBody, +} from '../types' +import useCart from './use-cart' + +export default useAddItem as UseAddItem<typeof handler> + +export const handler: MutationHook<Cart, {}, CartItemBody> = { + fetchOptions: { + url: '/api/bigcommerce/cart', + method: 'POST', + }, + async fetcher({ input: item, options, fetch }) { + if ( + item.quantity && + (!Number.isInteger(item.quantity) || item.quantity! < 1) + ) { + throw new CommerceError({ + message: 'The item quantity has to be a valid integer greater than 0', + }) + } + + const data = await fetch<BigcommerceCart, AddCartItemBody>({ + ...options, + body: { item }, + }) + + return normalizeCart(data) + }, + useHook: ({ fetch }) => () => { + const { mutate } = useCart() + + return useCallback( + async function addItem(input) { + const data = await fetch({ input }) + await mutate(data, false) + return data + }, + [fetch, mutate] + ) + }, +} +``` + +## Adding the Node.js provider API + +TODO + +> The commerce API is currently going through a refactor in https://github.com/vercel/commerce/pull/252 - We'll update the docs once the API is released. diff --git a/framework/commerce/product/use-price.tsx b/framework/commerce/product/use-price.tsx new file mode 100644 index 000000000..9c09e3487 --- /dev/null +++ b/framework/commerce/product/use-price.tsx @@ -0,0 +1,64 @@ +import { useMemo } from 'react' +import { useCommerce } from '..' + +export function formatPrice({ + amount, + currencyCode, + locale, +}: { + amount: number + currencyCode: string + locale: string +}) { + const formatCurrency = new Intl.NumberFormat(locale, { + style: 'currency', + currency: currencyCode, + }) + + return formatCurrency.format(amount) +} + +export function formatVariantPrice({ + amount, + baseAmount, + currencyCode, + locale, +}: { + baseAmount: number + amount: number + currencyCode: string + locale: string +}) { + const hasDiscount = baseAmount > amount + const formatDiscount = new Intl.NumberFormat(locale, { style: 'percent' }) + const discount = hasDiscount + ? formatDiscount.format((baseAmount - amount) / baseAmount) + : null + + const price = formatPrice({ amount, currencyCode, locale }) + const basePrice = hasDiscount + ? formatPrice({ amount: baseAmount, currencyCode, locale }) + : null + + return { price, basePrice, discount } +} + +export default function usePrice( + data?: { + amount: number + baseAmount?: number + currencyCode: string + } | null +) { + const { amount, baseAmount, currencyCode } = data ?? {} + const { locale } = useCommerce() + const value = useMemo(() => { + if (typeof amount !== 'number' || !currencyCode) return '' + + return baseAmount + ? formatVariantPrice({ amount, baseAmount, currencyCode, locale }) + : formatPrice({ amount, currencyCode, locale }) + }, [amount, baseAmount, currencyCode]) + + return typeof value === 'string' ? { price: value } : value +} diff --git a/framework/commerce/product/use-search.tsx b/framework/commerce/product/use-search.tsx new file mode 100644 index 000000000..d2b782045 --- /dev/null +++ b/framework/commerce/product/use-search.tsx @@ -0,0 +1,20 @@ +import { useHook, useSWRHook } from '../utils/use-hook' +import { SWRFetcher } from '../utils/default-fetcher' +import type { HookFetcherFn, SWRHook } from '../utils/types' +import type { SearchProductsData } from '../types' +import { Provider } from '..' + +export type UseSearch< + H extends SWRHook<any, any, any> = SWRHook<SearchProductsData> +> = ReturnType<H['useHook']> + +export const fetcher: HookFetcherFn<SearchProductsData, any> = SWRFetcher + +const fn = (provider: Provider) => provider.products?.useSearch! + +const useSearch: UseSearch = (input) => { + const hook = useHook(fn) + return useSWRHook({ fetcher, ...hook })(input) +} + +export default useSearch diff --git a/framework/commerce/types.ts b/framework/commerce/types.ts new file mode 100644 index 000000000..86361fd9f --- /dev/null +++ b/framework/commerce/types.ts @@ -0,0 +1,204 @@ +import type { Wishlist as BCWishlist } from '../bigcommerce/api/wishlist' +import type { Customer as BCCustomer } from '../bigcommerce/api/customers' +import type { SearchProductsData as BCSearchProductsData } from '../bigcommerce/api/catalog/products' + +export type Discount = { + // The value of the discount, can be an amount or percentage + value: number +} + +export type LineItem = { + id: string + variantId: string + productId: string + name: string + quantity: number + discounts: Discount[] + // A human-friendly unique string automatically generated from the product’s name + path: string + variant: ProductVariant +} + +export type Measurement = { + value: number + unit: 'KILOGRAMS' | 'GRAMS' | 'POUNDS' | 'OUNCES' +} + +export type Image = { + url: string + altText?: string + width?: number + height?: number +} + +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. + price: number + // Product variant’s price, as quoted by the manufacturer/distributor. + 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. + availableForSale?: boolean + // 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. + height?: Measurement + // 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. + depth?: Measurement +} + +// Shopping cart, a.k.a Checkout +export type Cart = { + id: string + // ID of the customer to which the cart belongs. + customerId?: string + // The email assigned to this cart + email?: string + // The date and time when the cart was created. + createdAt: string + // The currency used for this cart + currency: { code: string } + // Specifies if taxes are included in the line items. + taxesIncluded: boolean + lineItems: LineItem[] + // The sum of all the prices of all the items in the cart. + // Duties, taxes, shipping and discounts excluded. + lineItemsSubtotalPrice: number + // 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. + totalPrice: number + // Discounts that have been applied on the cart. + discounts?: Discount[] +} + +// TODO: Properly define this type +export interface Wishlist extends BCWishlist {} + +// TODO: Properly define this type +export interface Customer extends BCCustomer {} + +// TODO: Properly define this type +export interface SearchProductsData extends BCSearchProductsData {} + +/** + * Cart mutations + */ + +// Base cart item body used for cart mutations +export type CartItemBody = { + variantId: string + productId?: string + quantity?: number +} + +// Body used by the `getCart` operation handler +export type GetCartHandlerBody = { + cartId?: string +} + +// Body used by the add item to cart operation +export type AddCartItemBody<T extends CartItemBody> = { + item: T +} + +// Body expected by the add item to cart operation handler +export type AddCartItemHandlerBody<T extends CartItemBody> = Partial< + AddCartItemBody<T> +> & { + cartId?: string +} + +// Body used by the update cart item operation +export type UpdateCartItemBody<T extends CartItemBody> = { + itemId: string + item: T +} + +// Body expected by the update cart item operation handler +export type UpdateCartItemHandlerBody<T extends CartItemBody> = Partial< + UpdateCartItemBody<T> +> & { + cartId?: string +} + +// Body used by the remove cart item operation +export type RemoveCartItemBody = { + itemId: string +} + +// Body expected by the remove cart item operation handler +export type RemoveCartItemHandlerBody = Partial<RemoveCartItemBody> & { + cartId?: string +} + +/** + * Temporal types + */ + +interface Entity { + id: string | number + [prop: string]: any +} + +export interface Product extends Entity { + name: string + description: string + descriptionHtml?: string + slug?: string + path?: string + images: ProductImage[] + variants: ProductVariant2[] + price: ProductPrice + options: ProductOption[] + sku?: string +} + +interface ProductOption extends Entity { + displayName: string + values: ProductOptionValues[] +} + +interface ProductOptionValues { + label: string + hexColors?: string[] +} + +interface ProductImage { + url: string + alt?: string +} + +interface ProductVariant2 { + id: string | number + options: ProductOption[] +} + +interface ProductPrice { + value: number + currencyCode: 'USD' | 'ARS' | string | undefined + retailPrice?: number + salePrice?: number + listPrice?: number + extendedSalePrice?: number + extendedListPrice?: number +} diff --git a/framework/commerce/utils/default-fetcher.ts b/framework/commerce/utils/default-fetcher.ts new file mode 100644 index 000000000..493a9b5f9 --- /dev/null +++ b/framework/commerce/utils/default-fetcher.ts @@ -0,0 +1,12 @@ +import type { HookFetcherFn } from './types' + +export const SWRFetcher: HookFetcherFn<any, any> = ({ options, fetch }) => + fetch(options) + +export const mutationFetcher: HookFetcherFn<any, any> = ({ + input, + options, + fetch, +}) => fetch({ ...options, body: input }) + +export default SWRFetcher diff --git a/framework/commerce/utils/define-property.ts b/framework/commerce/utils/define-property.ts new file mode 100644 index 000000000..e89735226 --- /dev/null +++ b/framework/commerce/utils/define-property.ts @@ -0,0 +1,37 @@ +// Taken from https://fettblog.eu/typescript-assertion-signatures/ + +type InferValue<Prop extends PropertyKey, Desc> = Desc extends { + get(): any + value: any +} + ? never + : Desc extends { value: infer T } + ? Record<Prop, T> + : Desc extends { get(): infer T } + ? Record<Prop, T> + : never + +type DefineProperty< + Prop extends PropertyKey, + Desc extends PropertyDescriptor +> = Desc extends { writable: any; set(val: any): any } + ? never + : Desc extends { writable: any; get(): any } + ? never + : Desc extends { writable: false } + ? Readonly<InferValue<Prop, Desc>> + : Desc extends { writable: true } + ? InferValue<Prop, Desc> + : Readonly<InferValue<Prop, Desc>> + +export default function defineProperty< + Obj extends object, + Key extends PropertyKey, + PDesc extends PropertyDescriptor +>( + obj: Obj, + prop: Key, + val: PDesc +): asserts obj is Obj & DefineProperty<Key, PDesc> { + Object.defineProperty(obj, prop, val) +} diff --git a/framework/commerce/utils/errors.ts b/framework/commerce/utils/errors.ts new file mode 100644 index 000000000..f4ab9fb9a --- /dev/null +++ b/framework/commerce/utils/errors.ts @@ -0,0 +1,48 @@ +export type ErrorData = { + message: string + code?: string +} + +export type ErrorProps = { + code?: string +} & ( + | { message: string; errors?: never } + | { message?: never; errors: ErrorData[] } +) + +export class CommerceError extends Error { + code?: string + errors: ErrorData[] + + constructor({ message, code, errors }: ErrorProps) { + const error: ErrorData = message + ? { message, ...(code ? { code } : {}) } + : errors![0] + + super(error.message) + this.errors = message ? [error] : errors! + + if (error.code) this.code = error.code + } +} + +// Used for errors that come from a bad implementation of the hooks +export class ValidationError extends CommerceError { + constructor(options: ErrorProps) { + super(options) + this.code = 'validation_error' + } +} + +export class FetcherError extends CommerceError { + status: number + + constructor( + options: { + status: number + } & ErrorProps + ) { + super(options) + this.status = options.status + } +} diff --git a/framework/commerce/utils/types.ts b/framework/commerce/utils/types.ts new file mode 100644 index 000000000..852afb208 --- /dev/null +++ b/framework/commerce/utils/types.ts @@ -0,0 +1,131 @@ +import type { ConfigInterface } from 'swr' +import type { CommerceError } from './errors' +import type { ResponseState } from './use-data' + +/** + * Returns the properties in T with the properties in type K, overriding properties defined in T + */ +export type Override<T, K> = Omit<T, keyof K> & K + +/** + * Returns the properties in T with the properties in type K changed from optional to required + */ +export type PickRequired<T, K extends keyof T> = Omit<T, K> & + { + [P in K]-?: NonNullable<T[P]> + } + +/** + * Core fetcher added by CommerceProvider + */ +export type Fetcher<T = any, B = any> = ( + options: FetcherOptions<B> +) => T | Promise<T> + +export type FetcherOptions<Body = any> = { + url?: string + query?: string + method?: string + variables?: any + body?: Body +} + +export type HookFetcher<Data, Input = null, Result = any> = ( + options: HookFetcherOptions | null, + input: Input, + fetch: <T = Result, Body = any>(options: FetcherOptions<Body>) => Promise<T> +) => Data | Promise<Data> + +export type HookFetcherFn<Data, Input = undefined, Result = any, Body = any> = ( + context: HookFetcherContext<Input, Result, Body> +) => Data | Promise<Data> + +export type HookFetcherContext<Input = undefined, Result = any, Body = any> = { + options: HookFetcherOptions + input: Input + fetch: <T = Result, B = Body>(options: FetcherOptions<B>) => Promise<T> +} + +export type HookFetcherOptions = { method?: string } & ( + | { query: string; url?: string } + | { query?: string; url: string } +) + +export type HookInputValue = string | number | boolean | undefined + +export type HookSWRInput = [string, HookInputValue][] + +export type HookFetchInput = { [k: string]: HookInputValue } + +export type HookFunction< + Input extends { [k: string]: unknown } | null, + T +> = keyof Input extends never + ? () => T + : Partial<Input> extends Input + ? (input?: Input) => T + : (input: Input) => T + +export type SWRHook< + // Data obj returned by the hook and fetch operation + Data, + // Input expected by the hook + Input extends { [k: string]: unknown } = {}, + // Input expected before doing a fetch operation + FetchInput extends HookFetchInput = {}, + // Custom state added to the response object of SWR + State = {} +> = { + useHook( + context: SWRHookContext<Data, FetchInput> + ): HookFunction< + Input & { swrOptions?: SwrOptions<Data, FetchInput> }, + ResponseState<Data> & State + > + fetchOptions: HookFetcherOptions + fetcher?: HookFetcherFn<Data, FetchInput> +} + +export type SWRHookContext< + Data, + FetchInput extends { [k: string]: unknown } = {} +> = { + useData(context?: { + input?: HookFetchInput | HookSWRInput + swrOptions?: SwrOptions<Data, FetchInput> + }): ResponseState<Data> +} + +export type MutationHook< + // Data obj returned by the hook and fetch operation + Data, + // Input expected by the hook + Input extends { [k: string]: unknown } = {}, + // Input expected by the action returned by the hook + ActionInput extends { [k: string]: unknown } = {}, + // Input expected before doing a fetch operation + FetchInput extends { [k: string]: unknown } = ActionInput +> = { + useHook( + context: MutationHookContext<Data, FetchInput> + ): HookFunction<Input, HookFunction<ActionInput, Data | Promise<Data>>> + fetchOptions: HookFetcherOptions + fetcher?: HookFetcherFn<Data, FetchInput> +} + +export type MutationHookContext< + Data, + FetchInput extends { [k: string]: unknown } | null = {} +> = { + fetch: keyof FetchInput extends never + ? () => Data | Promise<Data> + : Partial<FetchInput> extends FetchInput + ? (context?: { input?: FetchInput }) => Data | Promise<Data> + : (context: { input: FetchInput }) => Data | Promise<Data> +} + +export type SwrOptions<Data, Input = null, Result = any> = ConfigInterface< + Data, + CommerceError, + HookFetcher<Data, Input, Result> +> diff --git a/framework/commerce/utils/use-data.tsx b/framework/commerce/utils/use-data.tsx new file mode 100644 index 000000000..9224b612c --- /dev/null +++ b/framework/commerce/utils/use-data.tsx @@ -0,0 +1,77 @@ +import useSWR, { responseInterface } from 'swr' +import type { + HookSWRInput, + HookFetchInput, + Fetcher, + SwrOptions, + HookFetcherOptions, + HookFetcherFn, +} from './types' +import defineProperty from './define-property' +import { CommerceError } from './errors' + +export type ResponseState<Result> = responseInterface<Result, CommerceError> & { + isLoading: boolean +} + +export type UseData = <Data = any, FetchInput extends HookFetchInput = {}>( + options: { + fetchOptions: HookFetcherOptions + fetcher: HookFetcherFn<Data, FetchInput> + }, + input: HookFetchInput | HookSWRInput, + fetcherFn: Fetcher, + swrOptions?: SwrOptions<Data, FetchInput> +) => ResponseState<Data> + +const useData: UseData = (options, input, fetcherFn, swrOptions) => { + const hookInput = Array.isArray(input) ? input : Object.entries(input) + const fetcher = async ( + url: string, + query?: string, + method?: string, + ...args: any[] + ) => { + try { + return await options.fetcher({ + options: { url, query, method }, + // Transform the input array into an object + input: args.reduce((obj, val, i) => { + obj[hookInput[i][0]!] = val + return obj + }, {}), + fetch: fetcherFn, + }) + } catch (error) { + // SWR will not log errors, but any error that's not an instance + // of CommerceError is not welcomed by this hook + if (!(error instanceof CommerceError)) { + console.error(error) + } + throw error + } + } + const response = useSWR( + () => { + const opts = options.fetchOptions + return opts + ? [opts.url, opts.query, opts.method, ...hookInput.map((e) => e[1])] + : null + }, + fetcher, + swrOptions + ) + + if (!('isLoading' in response)) { + defineProperty(response, 'isLoading', { + get() { + return response.data === undefined + }, + enumerable: true, + }) + } + + return response +} + +export default useData diff --git a/framework/commerce/utils/use-hook.ts b/framework/commerce/utils/use-hook.ts new file mode 100644 index 000000000..da3431e3c --- /dev/null +++ b/framework/commerce/utils/use-hook.ts @@ -0,0 +1,50 @@ +import { useCallback } from 'react' +import { Provider, useCommerce } from '..' +import type { MutationHook, PickRequired, SWRHook } from './types' +import useData from './use-data' + +export function useFetcher() { + const { providerRef, fetcherRef } = useCommerce() + return providerRef.current.fetcher ?? fetcherRef.current +} + +export function useHook< + P extends Provider, + H extends MutationHook<any, any, any> | SWRHook<any, any, any> +>(fn: (provider: P) => H) { + const { providerRef } = useCommerce<P>() + const provider = providerRef.current + return fn(provider) +} + +export function useSWRHook<H extends SWRHook<any, any, any>>( + hook: PickRequired<H, 'fetcher'> +) { + const fetcher = useFetcher() + + return hook.useHook({ + useData(ctx) { + const response = useData(hook, ctx?.input ?? [], fetcher, ctx?.swrOptions) + return response + }, + }) +} + +export function useMutationHook<H extends MutationHook<any, any, any>>( + hook: PickRequired<H, 'fetcher'> +) { + const fetcher = useFetcher() + + return hook.useHook({ + fetch: useCallback( + ({ input } = {}) => { + return hook.fetcher({ + input, + options: hook.fetchOptions, + fetch: fetcher, + }) + }, + [fetcher, hook.fetchOptions] + ), + }) +} diff --git a/framework/commerce/wishlist/index.ts b/framework/commerce/wishlist/index.ts new file mode 100644 index 000000000..241af3c7e --- /dev/null +++ b/framework/commerce/wishlist/index.ts @@ -0,0 +1,3 @@ +export { default as useAddItem } from './use-add-item' +export { default as useWishlist } from './use-wishlist' +export { default as useRemoveItem } from './use-remove-item' diff --git a/framework/commerce/wishlist/use-add-item.tsx b/framework/commerce/wishlist/use-add-item.tsx new file mode 100644 index 000000000..11c8cc241 --- /dev/null +++ b/framework/commerce/wishlist/use-add-item.tsx @@ -0,0 +1,19 @@ +import { useHook, useMutationHook } from '../utils/use-hook' +import { mutationFetcher } from '../utils/default-fetcher' +import type { MutationHook } from '../utils/types' +import type { Provider } from '..' + +export type UseAddItem< + H extends MutationHook<any, any, any> = MutationHook<any, {}, {}> +> = ReturnType<H['useHook']> + +export const fetcher = mutationFetcher + +const fn = (provider: Provider) => provider.wishlist?.useAddItem! + +const useAddItem: UseAddItem = (...args) => { + const hook = useHook(fn) + return useMutationHook({ fetcher, ...hook })(...args) +} + +export default useAddItem diff --git a/framework/commerce/wishlist/use-remove-item.tsx b/framework/commerce/wishlist/use-remove-item.tsx new file mode 100644 index 000000000..c8c34a5af --- /dev/null +++ b/framework/commerce/wishlist/use-remove-item.tsx @@ -0,0 +1,28 @@ +import { useHook, useMutationHook } from '../utils/use-hook' +import { mutationFetcher } from '../utils/default-fetcher' +import type { HookFetcherFn, MutationHook } from '../utils/types' +import type { Provider } from '..' + +export type RemoveItemInput = { + id: string | number +} + +export type UseRemoveItem< + H extends MutationHook<any, any, any> = MutationHook< + any | null, + { wishlist?: any }, + RemoveItemInput, + {} + > +> = ReturnType<H['useHook']> + +export const fetcher: HookFetcherFn<any | null, {}> = mutationFetcher + +const fn = (provider: Provider) => provider.wishlist?.useRemoveItem! + +const useRemoveItem: UseRemoveItem = (input) => { + const hook = useHook(fn) + return useMutationHook({ fetcher, ...hook })(input) +} + +export default useRemoveItem diff --git a/framework/commerce/wishlist/use-wishlist.tsx b/framework/commerce/wishlist/use-wishlist.tsx new file mode 100644 index 000000000..7a93b20b1 --- /dev/null +++ b/framework/commerce/wishlist/use-wishlist.tsx @@ -0,0 +1,25 @@ +import { useHook, useSWRHook } from '../utils/use-hook' +import { SWRFetcher } from '../utils/default-fetcher' +import type { HookFetcherFn, SWRHook } from '../utils/types' +import type { Wishlist } from '../types' +import type { Provider } from '..' + +export type UseWishlist< + H extends SWRHook<any, any, any> = SWRHook< + Wishlist | null, + { includeProducts?: boolean }, + { customerId?: number; includeProducts: boolean }, + { isEmpty?: boolean } + > +> = ReturnType<H['useHook']> + +export const fetcher: HookFetcherFn<Wishlist | null, any> = SWRFetcher + +const fn = (provider: Provider) => provider.wishlist?.useWishlist! + +const useWishlist: UseWishlist = (input) => { + const hook = useHook(fn) + return useSWRHook({ fetcher, ...hook })(input) +} + +export default useWishlist diff --git a/framework/shopify/.env.template b/framework/shopify/.env.template new file mode 100644 index 000000000..74f446835 --- /dev/null +++ b/framework/shopify/.env.template @@ -0,0 +1,4 @@ +COMMERCE_PROVIDER=shopify + +NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN= +NEXT_PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN= diff --git a/framework/shopify/README.md b/framework/shopify/README.md new file mode 100644 index 000000000..d67111a41 --- /dev/null +++ b/framework/shopify/README.md @@ -0,0 +1,123 @@ +## Shopify Provider + +**Demo:** https://shopify.demo.vercel.store/ + +Before getting starter, a [Shopify](https://www.shopify.com/) account and store is required before using the provider. + +Next, copy the `.env.template` file in this directory to `.env.local` in the main directory (which will be ignored by Git): + +```bash +cp framework/shopify/.env.template .env.local +``` + +Then, set the environment variables in `.env.local` to match the ones from your store. + +## Contribute + +Our commitment to Open Source can be found [here](https://vercel.com/oss). + +If you find an issue with the provider or want a new feature, feel free to open a PR or [create a new issue](https://github.com/vercel/commerce/issues). + +## Modifications + +These modifications are temporarily until contributions are made to remove them. + +### Adding item to Cart + +```js +// components/product/ProductView/ProductView.tsx +const ProductView: FC<Props> = ({ product }) => { + const addToCart = async () => { + setLoading(true) + try { + await addItem({ + productId: product.id, + variantId: variant ? variant.id : product.variants[0].id, + }) + openSidebar() + setLoading(false) + } catch (err) { + setLoading(false) + } + } +} +``` + +### Proceed to Checkout + +```js +// components/cart/CartSidebarView/CartSidebarView.tsx +import { useCommerce } from '@framework' + +const CartSidebarView: FC = () => { + const { checkout } = useCommerce() + return ( + <Button href={checkout.webUrl} Component="a" width="100%"> + Proceed to Checkout + </Button> + ) +} +``` + +## APIs + +Collections of APIs to fetch data from a Shopify store. + +The data is fetched using the [Shopify JavaScript Buy SDK](https://github.com/Shopify/js-buy-sdk#readme). Read the [Shopify Storefront API reference](https://shopify.dev/docs/storefront-api/reference) for more information. + +### getProduct + +Get a single product by its `handle`. + +```js +import getProduct from '@framework/product/get-product' +import { getConfig } from '@framework/api' + +const config = getConfig() + +const product = await getProduct({ + variables: { slug }, + config, +}) +``` + +### getAllProducts + +```js +import getAllProducts from '@framework/product/get-all-products' +import { getConfig } from '@framework/api' + +const config = getConfig() + +const { products } = await getAllProducts({ + variables: { first: 12 }, + config, +}) +``` + +### getAllCollections + +```js +import getAllCollections from '@framework/product/get-all-collections' +import { getConfig } from '@framework/api' + +const config = getConfig() + +const collections = await getAllCollections({ + config, +}) +``` + +### getAllPages + +```js +import getAllPages from '@framework/common/get-all-pages' +import { getConfig } from '@framework/api' + +const config = getConfig() + +const pages = await getAllPages({ + variables: { first: 12 }, + config, +}) +``` diff --git a/framework/shopify/api/cart/index.ts b/framework/shopify/api/cart/index.ts new file mode 100644 index 000000000..ea9b101e1 --- /dev/null +++ b/framework/shopify/api/cart/index.ts @@ -0,0 +1 @@ +export default function () {} diff --git a/framework/shopify/api/catalog/index.ts b/framework/shopify/api/catalog/index.ts new file mode 100644 index 000000000..ea9b101e1 --- /dev/null +++ b/framework/shopify/api/catalog/index.ts @@ -0,0 +1 @@ +export default function () {} diff --git a/framework/shopify/api/catalog/products.ts b/framework/shopify/api/catalog/products.ts new file mode 100644 index 000000000..ea9b101e1 --- /dev/null +++ b/framework/shopify/api/catalog/products.ts @@ -0,0 +1 @@ +export default function () {} diff --git a/framework/shopify/api/checkout/index.ts b/framework/shopify/api/checkout/index.ts new file mode 100644 index 000000000..244078466 --- /dev/null +++ b/framework/shopify/api/checkout/index.ts @@ -0,0 +1,46 @@ +import isAllowedMethod from '../utils/is-allowed-method' +import createApiHandler, { + ShopifyApiHandler, +} from '../utils/create-api-handler' + +import { + SHOPIFY_CHECKOUT_ID_COOKIE, + SHOPIFY_CHECKOUT_URL_COOKIE, + SHOPIFY_CUSTOMER_TOKEN_COOKIE, +} from '../../const' + +import { getConfig } from '..' +import associateCustomerWithCheckoutMutation from '../../utils/mutations/associate-customer-with-checkout' + +const METHODS = ['GET'] + +const checkoutApi: ShopifyApiHandler<any> = async (req, res, config) => { + if (!isAllowedMethod(req, res, METHODS)) return + + config = getConfig() + + const { cookies } = req + const checkoutUrl = cookies[SHOPIFY_CHECKOUT_URL_COOKIE] + const customerCookie = cookies[SHOPIFY_CUSTOMER_TOKEN_COOKIE] + + if (customerCookie) { + try { + await config.fetch(associateCustomerWithCheckoutMutation, { + variables: { + checkoutId: cookies[SHOPIFY_CHECKOUT_ID_COOKIE], + customerAccessToken: cookies[SHOPIFY_CUSTOMER_TOKEN_COOKIE], + }, + }) + } catch (error) { + console.error(error) + } + } + + if (checkoutUrl) { + res.redirect(checkoutUrl) + } else { + res.redirect('/cart') + } +} + +export default createApiHandler(checkoutApi, {}, {}) diff --git a/framework/shopify/api/customer.ts b/framework/shopify/api/customer.ts new file mode 100644 index 000000000..ea9b101e1 --- /dev/null +++ b/framework/shopify/api/customer.ts @@ -0,0 +1 @@ +export default function () {} diff --git a/framework/shopify/api/customers/index.ts b/framework/shopify/api/customers/index.ts new file mode 100644 index 000000000..ea9b101e1 --- /dev/null +++ b/framework/shopify/api/customers/index.ts @@ -0,0 +1 @@ +export default function () {} diff --git a/framework/shopify/api/customers/login.ts b/framework/shopify/api/customers/login.ts new file mode 100644 index 000000000..ea9b101e1 --- /dev/null +++ b/framework/shopify/api/customers/login.ts @@ -0,0 +1 @@ +export default function () {} diff --git a/framework/shopify/api/customers/logout.ts b/framework/shopify/api/customers/logout.ts new file mode 100644 index 000000000..ea9b101e1 --- /dev/null +++ b/framework/shopify/api/customers/logout.ts @@ -0,0 +1 @@ +export default function () {} diff --git a/framework/shopify/api/customers/signup.ts b/framework/shopify/api/customers/signup.ts new file mode 100644 index 000000000..ea9b101e1 --- /dev/null +++ b/framework/shopify/api/customers/signup.ts @@ -0,0 +1 @@ +export default function () {} diff --git a/framework/shopify/api/index.ts b/framework/shopify/api/index.ts new file mode 100644 index 000000000..387ed02fc --- /dev/null +++ b/framework/shopify/api/index.ts @@ -0,0 +1,61 @@ +import type { CommerceAPIConfig } from '@commerce/api' + +import { + API_URL, + API_TOKEN, + SHOPIFY_CHECKOUT_ID_COOKIE, + SHOPIFY_CUSTOMER_TOKEN_COOKIE, +} from '../const' + +if (!API_URL) { + throw new Error( + `The environment variable NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN is missing and it's required to access your store` + ) +} + +if (!API_TOKEN) { + throw new Error( + `The environment variable NEXT_PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN is missing and it's required to access your store` + ) +} + +import fetchGraphqlApi from './utils/fetch-graphql-api' + +export interface ShopifyConfig extends CommerceAPIConfig {} + +export class Config { + private config: ShopifyConfig + + constructor(config: ShopifyConfig) { + this.config = config + } + + getConfig(userConfig: Partial<ShopifyConfig> = {}) { + return Object.entries(userConfig).reduce<ShopifyConfig>( + (cfg, [key, value]) => Object.assign(cfg, { [key]: value }), + { ...this.config } + ) + } + + setConfig(newConfig: Partial<ShopifyConfig>) { + Object.assign(this.config, newConfig) + } +} + +const config = new Config({ + locale: 'en-US', + commerceUrl: API_URL, + apiToken: API_TOKEN!, + cartCookie: SHOPIFY_CHECKOUT_ID_COOKIE, + cartCookieMaxAge: 60 * 60 * 24 * 30, + fetch: fetchGraphqlApi, + customerCookie: SHOPIFY_CUSTOMER_TOKEN_COOKIE, +}) + +export function getConfig(userConfig?: Partial<ShopifyConfig>) { + return config.getConfig(userConfig) +} + +export function setConfig(newConfig: Partial<ShopifyConfig>) { + return config.setConfig(newConfig) +} diff --git a/framework/shopify/api/utils/create-api-handler.ts b/framework/shopify/api/utils/create-api-handler.ts new file mode 100644 index 000000000..8820aeabc --- /dev/null +++ b/framework/shopify/api/utils/create-api-handler.ts @@ -0,0 +1,58 @@ +import type { NextApiHandler, NextApiRequest, NextApiResponse } from 'next' +import { ShopifyConfig, getConfig } from '..' + +export type ShopifyApiHandler< + T = any, + H extends ShopifyHandlers = {}, + Options extends {} = {} +> = ( + req: NextApiRequest, + res: NextApiResponse<ShopifyApiResponse<T>>, + config: ShopifyConfig, + handlers: H, + // Custom configs that may be used by a particular handler + options: Options +) => void | Promise<void> + +export type ShopifyHandler<T = any, Body = null> = (options: { + req: NextApiRequest + res: NextApiResponse<ShopifyApiResponse<T>> + config: ShopifyConfig + body: Body +}) => void | Promise<void> + +export type ShopifyHandlers<T = any> = { + [k: string]: ShopifyHandler<T, any> +} + +export type ShopifyApiResponse<T> = { + data: T | null + errors?: { message: string; code?: string }[] +} + +export default function createApiHandler< + T = any, + H extends ShopifyHandlers = {}, + Options extends {} = {} +>( + handler: ShopifyApiHandler<T, H, Options>, + handlers: H, + defaultOptions: Options +) { + return function getApiHandler({ + config, + operations, + options, + }: { + config?: ShopifyConfig + operations?: Partial<H> + options?: Options extends {} ? Partial<Options> : never + } = {}): NextApiHandler { + const ops = { ...operations, ...handlers } + const opts = { ...defaultOptions, ...options } + + return function apiHandler(req, res) { + return handler(req, res, getConfig(config), ops, opts) + } + } +} diff --git a/framework/shopify/api/utils/fetch-all-products.ts b/framework/shopify/api/utils/fetch-all-products.ts new file mode 100644 index 000000000..9fa70a5ee --- /dev/null +++ b/framework/shopify/api/utils/fetch-all-products.ts @@ -0,0 +1,41 @@ +import { ProductEdge } from '../../schema' +import { ShopifyConfig } from '..' + +const fetchAllProducts = async ({ + config, + query, + variables, + acc = [], + cursor, +}: { + config: ShopifyConfig + query: string + acc?: ProductEdge[] + variables?: any + cursor?: string +}): Promise<ProductEdge[]> => { + const { data } = await config.fetch(query, { + variables: { ...variables, cursor }, + }) + + const edges: ProductEdge[] = 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/framework/shopify/api/utils/fetch-graphql-api.ts b/framework/shopify/api/utils/fetch-graphql-api.ts new file mode 100644 index 000000000..c45d57e70 --- /dev/null +++ b/framework/shopify/api/utils/fetch-graphql-api.ts @@ -0,0 +1,45 @@ +import type { GraphQLFetcher } from '@commerce/api' +import fetch from './fetch' + +import { API_URL, API_TOKEN } from '../../const' +import { getError } from '../../utils/handle-fetch-response' + +const fetchGraphqlApi: GraphQLFetcher = async ( + query: string, + { variables } = {}, + fetchOptions +) => { + try { + const res = await fetch(API_URL, { + ...fetchOptions, + method: 'POST', + headers: { + 'X-Shopify-Storefront-Access-Token': API_TOKEN!, + ...fetchOptions?.headers, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + query, + variables, + }), + }) + + const { data, errors, status } = await res.json() + + if (errors) { + throw getError(errors, status) + } + + return { data, res } + } catch (err) { + throw getError( + [ + { + message: `${err} \n Most likely related to an unexpected output. e.g the store might be protected with password or not available.`, + }, + ], + 500 + ) + } +} +export default fetchGraphqlApi diff --git a/framework/shopify/api/utils/fetch.ts b/framework/shopify/api/utils/fetch.ts new file mode 100644 index 000000000..0b8367102 --- /dev/null +++ b/framework/shopify/api/utils/fetch.ts @@ -0,0 +1,2 @@ +import zeitFetch from '@vercel/fetch' +export default zeitFetch() diff --git a/framework/shopify/api/utils/is-allowed-method.ts b/framework/shopify/api/utils/is-allowed-method.ts new file mode 100644 index 000000000..78bbba568 --- /dev/null +++ b/framework/shopify/api/utils/is-allowed-method.ts @@ -0,0 +1,28 @@ +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/framework/shopify/api/wishlist/index.tsx b/framework/shopify/api/wishlist/index.tsx new file mode 100644 index 000000000..a72856673 --- /dev/null +++ b/framework/shopify/api/wishlist/index.tsx @@ -0,0 +1,2 @@ +export type WishlistItem = { product: any; id: number } +export default function () {} diff --git a/framework/shopify/auth/use-login.tsx b/framework/shopify/auth/use-login.tsx new file mode 100644 index 000000000..7993822cd --- /dev/null +++ b/framework/shopify/auth/use-login.tsx @@ -0,0 +1,71 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import { CommerceError, ValidationError } from '@commerce/utils/errors' +import useCustomer from '../customer/use-customer' +import createCustomerAccessTokenMutation from '../utils/mutations/customer-access-token-create' +import { + CustomerAccessTokenCreateInput, + CustomerUserError, + Mutation, + MutationCheckoutCreateArgs, +} from '../schema' +import useLogin, { UseLogin } from '@commerce/auth/use-login' +import { setCustomerToken, throwUserErrors } from '../utils' + +export default useLogin as UseLogin<typeof handler> + +const getErrorMessage = ({ code, message }: CustomerUserError) => { + switch (code) { + case 'UNIDENTIFIED_CUSTOMER': + message = 'Cannot find an account that matches the provided credentials' + break + } + return message +} + +export const handler: MutationHook<null, {}, CustomerAccessTokenCreateInput> = { + fetchOptions: { + query: createCustomerAccessTokenMutation, + }, + async fetcher({ input: { email, password }, options, fetch }) { + if (!(email && password)) { + throw new CommerceError({ + message: + 'A first name, last name, email and password are required to login', + }) + } + + const { customerAccessTokenCreate } = await fetch< + Mutation, + MutationCheckoutCreateArgs + >({ + ...options, + variables: { + input: { email, password }, + }, + }) + + throwUserErrors(customerAccessTokenCreate?.customerUserErrors) + + const customerAccessToken = customerAccessTokenCreate?.customerAccessToken + const accessToken = customerAccessToken?.accessToken + + if (accessToken) { + setCustomerToken(accessToken) + } + + return null + }, + useHook: ({ fetch }) => () => { + const { revalidate } = useCustomer() + + return useCallback( + async function login(input) { + const data = await fetch({ input }) + await revalidate() + return data + }, + [fetch, revalidate] + ) + }, +} diff --git a/framework/shopify/auth/use-logout.tsx b/framework/shopify/auth/use-logout.tsx new file mode 100644 index 000000000..81a3b8cdd --- /dev/null +++ b/framework/shopify/auth/use-logout.tsx @@ -0,0 +1,36 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import useLogout, { UseLogout } from '@commerce/auth/use-logout' +import useCustomer from '../customer/use-customer' +import customerAccessTokenDeleteMutation from '../utils/mutations/customer-access-token-delete' +import { getCustomerToken, setCustomerToken } from '../utils/customer-token' + +export default useLogout as UseLogout<typeof handler> + +export const handler: MutationHook<null> = { + fetchOptions: { + query: customerAccessTokenDeleteMutation, + }, + async fetcher({ options, fetch }) { + await fetch({ + ...options, + variables: { + customerAccessToken: getCustomerToken(), + }, + }) + setCustomerToken(null) + return null + }, + useHook: ({ fetch }) => () => { + const { mutate } = useCustomer() + + return useCallback( + async function logout() { + const data = await fetch() + await mutate(null, false) + return data + }, + [fetch, mutate] + ) + }, +} diff --git a/framework/shopify/auth/use-signup.tsx b/framework/shopify/auth/use-signup.tsx new file mode 100644 index 000000000..9ca5c682f --- /dev/null +++ b/framework/shopify/auth/use-signup.tsx @@ -0,0 +1,70 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import { CommerceError, ValidationError } from '@commerce/utils/errors' +import useSignup, { UseSignup } from '@commerce/auth/use-signup' +import useCustomer from '../customer/use-customer' +import { + CustomerCreateInput, + Mutation, + MutationCustomerCreateArgs, +} from '../schema' + +import { customerCreateMutation } from '../utils/mutations' +import { handleAutomaticLogin, throwUserErrors } from '../utils' + +export default useSignup as UseSignup<typeof handler> + +export const handler: MutationHook< + null, + {}, + CustomerCreateInput, + CustomerCreateInput +> = { + fetchOptions: { + query: customerCreateMutation, + }, + async fetcher({ + input: { firstName, lastName, email, password }, + options, + fetch, + }) { + if (!(firstName && lastName && email && password)) { + throw new CommerceError({ + message: + 'A first name, last name, email and password are required to signup', + }) + } + + const { customerCreate } = await fetch< + Mutation, + MutationCustomerCreateArgs + >({ + ...options, + variables: { + input: { + firstName, + lastName, + email, + password, + }, + }, + }) + + throwUserErrors(customerCreate?.customerUserErrors) + await handleAutomaticLogin(fetch, { email, password }) + + return null + }, + useHook: ({ fetch }) => () => { + const { revalidate } = useCustomer() + + return useCallback( + async function signup(input) { + const data = await fetch({ input }) + await revalidate() + return data + }, + [fetch, revalidate] + ) + }, +} diff --git a/framework/shopify/cart/index.ts b/framework/shopify/cart/index.ts new file mode 100644 index 000000000..f6d36b443 --- /dev/null +++ b/framework/shopify/cart/index.ts @@ -0,0 +1,4 @@ +export { default as useCart } from './use-cart' +export { default as useAddItem } from './use-add-item' +export { default as useUpdateItem } from './use-update-item' +export { default as useRemoveItem } from './use-remove-item' diff --git a/framework/shopify/cart/use-add-item.tsx b/framework/shopify/cart/use-add-item.tsx new file mode 100644 index 000000000..cce0950e9 --- /dev/null +++ b/framework/shopify/cart/use-add-item.tsx @@ -0,0 +1,60 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import { CommerceError } from '@commerce/utils/errors' +import useAddItem, { UseAddItem } from '@commerce/cart/use-add-item' +import useCart from './use-cart' +import { + checkoutLineItemAddMutation, + getCheckoutId, + checkoutToCart, +} from '../utils' +import { Cart, CartItemBody } from '../types' +import { Mutation, MutationCheckoutLineItemsAddArgs } from '../schema' + +export default useAddItem as UseAddItem<typeof handler> + +export const handler: MutationHook<Cart, {}, CartItemBody> = { + fetchOptions: { + query: checkoutLineItemAddMutation, + }, + async fetcher({ input: item, options, fetch }) { + if ( + item.quantity && + (!Number.isInteger(item.quantity) || item.quantity! < 1) + ) { + throw new CommerceError({ + message: 'The item quantity has to be a valid integer greater than 0', + }) + } + + const { checkoutLineItemsAdd } = await fetch< + Mutation, + MutationCheckoutLineItemsAddArgs + >({ + ...options, + variables: { + checkoutId: getCheckoutId(), + lineItems: [ + { + variantId: item.variantId, + quantity: item.quantity ?? 1, + }, + ], + }, + }) + + return checkoutToCart(checkoutLineItemsAdd) + }, + useHook: ({ fetch }) => () => { + const { mutate } = useCart() + + return useCallback( + async function addItem(input) { + const data = await fetch({ input }) + await mutate(data, false) + return data + }, + [fetch, mutate] + ) + }, +} diff --git a/framework/shopify/cart/use-cart.tsx b/framework/shopify/cart/use-cart.tsx new file mode 100644 index 000000000..5f77360bb --- /dev/null +++ b/framework/shopify/cart/use-cart.tsx @@ -0,0 +1,59 @@ +import { useMemo } from 'react' +import useCommerceCart, { + FetchCartInput, + UseCart, +} from '@commerce/cart/use-cart' + +import { Cart } from '../types' +import { SWRHook } from '@commerce/utils/types' +import { checkoutCreate, checkoutToCart } from '../utils' +import getCheckoutQuery from '../utils/queries/get-checkout-query' + +export default useCommerceCart as UseCart<typeof handler> + +export const handler: SWRHook< + Cart | null, + {}, + FetchCartInput, + { isEmpty?: boolean } +> = { + fetchOptions: { + query: getCheckoutQuery, + }, + async fetcher({ input: { cartId: checkoutId }, options, fetch }) { + let checkout + + if (checkoutId) { + const data = await fetch({ + ...options, + variables: { + checkoutId: checkoutId, + }, + }) + checkout = data.node + } + + if (checkout?.completedAt || !checkoutId) { + checkout = await checkoutCreate(fetch) + } + + return checkoutToCart({ checkout }) + }, + 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 + }, + enumerable: true, + }, + }), + [response] + ) + }, +} diff --git a/framework/shopify/cart/use-remove-item.tsx b/framework/shopify/cart/use-remove-item.tsx new file mode 100644 index 000000000..8db38eac2 --- /dev/null +++ b/framework/shopify/cart/use-remove-item.tsx @@ -0,0 +1,71 @@ +import { useCallback } from 'react' +import type { + MutationHookContext, + HookFetcherContext, +} from '@commerce/utils/types' +import { RemoveCartItemBody } from '@commerce/types' +import { ValidationError } from '@commerce/utils/errors' +import useRemoveItem, { + RemoveItemInput as RemoveItemInputBase, + UseRemoveItem, +} from '@commerce/cart/use-remove-item' +import useCart from './use-cart' +import { + checkoutLineItemRemoveMutation, + getCheckoutId, + checkoutToCart, +} from '../utils' +import { Cart, LineItem } from '../types' +import { Mutation, MutationCheckoutLineItemsRemoveArgs } from '../schema' + +export type RemoveItemFn<T = any> = T extends LineItem + ? (input?: RemoveItemInput<T>) => Promise<Cart | null> + : (input: RemoveItemInput<T>) => Promise<Cart | null> + +export type RemoveItemInput<T = any> = T extends LineItem + ? Partial<RemoveItemInputBase> + : RemoveItemInputBase + +export default useRemoveItem as UseRemoveItem<typeof handler> + +export const handler = { + fetchOptions: { + query: checkoutLineItemRemoveMutation, + }, + async fetcher({ + input: { itemId }, + options, + fetch, + }: HookFetcherContext<RemoveCartItemBody>) { + const data = await fetch<Mutation, MutationCheckoutLineItemsRemoveArgs>({ + ...options, + variables: { checkoutId: getCheckoutId(), lineItemIds: [itemId] }, + }) + return checkoutToCart(data.checkoutLineItemsRemove) + }, + useHook: ({ + fetch, + }: MutationHookContext<Cart | null, RemoveCartItemBody>) => < + T extends LineItem | undefined = undefined + >( + ctx: { item?: T } = {} + ) => { + const { item } = ctx + const { mutate } = useCart() + const removeItem: RemoveItemFn<LineItem> = async (input) => { + const itemId = input?.id ?? item?.id + + if (!itemId) { + throw new ValidationError({ + message: 'Invalid input used for this operation', + }) + } + + const data = await fetch({ input: { itemId } }) + await mutate(data, false) + return data + } + + return useCallback(removeItem as RemoveItemFn<T>, [fetch, mutate]) + }, +} diff --git a/framework/shopify/cart/use-update-item.tsx b/framework/shopify/cart/use-update-item.tsx new file mode 100644 index 000000000..49dd6be14 --- /dev/null +++ b/framework/shopify/cart/use-update-item.tsx @@ -0,0 +1,107 @@ +import { useCallback } from 'react' +import debounce from 'lodash.debounce' +import type { + HookFetcherContext, + MutationHookContext, +} from '@commerce/utils/types' +import { ValidationError } from '@commerce/utils/errors' +import useUpdateItem, { + UpdateItemInput as UpdateItemInputBase, + UseUpdateItem, +} from '@commerce/cart/use-update-item' + +import useCart from './use-cart' +import { handler as removeItemHandler } from './use-remove-item' +import type { Cart, LineItem, UpdateCartItemBody } from '../types' +import { checkoutToCart } from '../utils' +import { getCheckoutId, checkoutLineItemUpdateMutation } from '../utils' +import { Mutation, MutationCheckoutLineItemsUpdateArgs } from '../schema' + +export type UpdateItemInput<T = any> = T extends LineItem + ? Partial<UpdateItemInputBase<LineItem>> + : UpdateItemInputBase<LineItem> + +export default useUpdateItem as UseUpdateItem<typeof handler> + +export const handler = { + fetchOptions: { + query: checkoutLineItemUpdateMutation, + }, + async fetcher({ + input: { itemId, item }, + options, + fetch, + }: HookFetcherContext<UpdateCartItemBody>) { + 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) { + return removeItemHandler.fetcher({ + options: removeItemHandler.fetchOptions, + input: { itemId }, + fetch, + }) + } + } else if (item.quantity) { + throw new ValidationError({ + message: 'The item quantity has to be a valid integer', + }) + } + const { checkoutLineItemsUpdate } = await fetch< + Mutation, + MutationCheckoutLineItemsUpdateArgs + >({ + ...options, + variables: { + checkoutId: getCheckoutId(), + lineItems: [ + { + id: itemId, + quantity: item.quantity, + }, + ], + }, + }) + + return checkoutToCart(checkoutLineItemsUpdate) + }, + useHook: ({ + fetch, + }: MutationHookContext<Cart | null, UpdateCartItemBody>) => < + T extends LineItem | undefined = undefined + >( + ctx: { + item?: T + wait?: number + } = {} + ) => { + const { item } = ctx + const { mutate } = useCart() as any + + return useCallback( + debounce(async (input: UpdateItemInput<T>) => { + 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', + }) + } + + const data = await fetch({ + input: { + item: { + productId, + variantId, + quantity: input.quantity, + }, + itemId, + }, + }) + await mutate(data, false) + return data + }, ctx.wait ?? 500), + [fetch, mutate] + ) + }, +} diff --git a/framework/shopify/commerce.config.json b/framework/shopify/commerce.config.json new file mode 100644 index 000000000..b30ab39d9 --- /dev/null +++ b/framework/shopify/commerce.config.json @@ -0,0 +1,6 @@ +{ + "provider": "shopify", + "features": { + "wishlist": false + } +} diff --git a/framework/shopify/common/get-all-pages.ts b/framework/shopify/common/get-all-pages.ts new file mode 100644 index 000000000..54231ed03 --- /dev/null +++ b/framework/shopify/common/get-all-pages.ts @@ -0,0 +1,42 @@ +import { getConfig, ShopifyConfig } from '../api' +import { PageEdge } from '../schema' +import { getAllPagesQuery } from '../utils/queries' + +type Variables = { + first?: number +} + +type ReturnType = { + pages: Page[] +} + +export type Page = { + id: string + name: string + url: string + sort_order?: number + body: string +} + +const getAllPages = async (options?: { + variables?: Variables + config: ShopifyConfig + preview?: boolean +}): Promise<ReturnType> => { + let { config, variables = { first: 250 } } = options ?? {} + config = getConfig(config) + const { locale } = config + const { data } = await config.fetch(getAllPagesQuery, { variables }) + + const pages = data.pages?.edges?.map( + ({ node: { title: name, handle, ...node } }: PageEdge) => ({ + ...node, + url: `/${locale}/${handle}`, + name, + }) + ) + + return { pages } +} + +export default getAllPages diff --git a/framework/shopify/common/get-page.ts b/framework/shopify/common/get-page.ts new file mode 100644 index 000000000..be934aa42 --- /dev/null +++ b/framework/shopify/common/get-page.ts @@ -0,0 +1,37 @@ +import { getConfig, ShopifyConfig } from '../api' +import getPageQuery from '../utils/queries/get-page-query' +import { Page } from './get-all-pages' + +type Variables = { + id: string +} + +export type GetPageResult<T extends { page?: any } = { page?: Page }> = T + +const getPage = async (options: { + variables: Variables + config: ShopifyConfig + preview?: boolean +}): Promise<GetPageResult> => { + let { config, variables } = options ?? {} + + config = getConfig(config) + const { locale } = config + + const { data } = await config.fetch(getPageQuery, { + variables, + }) + const page = data.node + + return { + page: page + ? { + ...page, + name: page.title, + url: `/${locale}/${page.handle}`, + } + : null, + } +} + +export default getPage diff --git a/framework/shopify/common/get-site-info.ts b/framework/shopify/common/get-site-info.ts new file mode 100644 index 000000000..cbbacf5b6 --- /dev/null +++ b/framework/shopify/common/get-site-info.ts @@ -0,0 +1,31 @@ +import getCategories, { Category } from '../utils/get-categories' +import getVendors, { Brands } from '../utils/get-vendors' + +import { getConfig, ShopifyConfig } from '../api' + +export type GetSiteInfoResult< + T extends { categories: any[]; brands: any[] } = { + categories: Category[] + brands: Brands + } +> = T + +const getSiteInfo = async (options?: { + variables?: any + config: ShopifyConfig + preview?: boolean +}): Promise<GetSiteInfoResult> => { + let { config } = options ?? {} + + config = getConfig(config) + + const categories = await getCategories(config) + const brands = await getVendors(config) + + return { + categories, + brands, + } +} + +export default getSiteInfo diff --git a/framework/shopify/const.ts b/framework/shopify/const.ts new file mode 100644 index 000000000..06fbe5054 --- /dev/null +++ b/framework/shopify/const.ts @@ -0,0 +1,13 @@ +export const SHOPIFY_CHECKOUT_ID_COOKIE = 'shopify_checkoutId' + +export const SHOPIFY_CHECKOUT_URL_COOKIE = 'shopify_checkoutUrl' + +export const SHOPIFY_CUSTOMER_TOKEN_COOKIE = 'shopify_customerToken' + +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-01/graphql.json` + +export const API_TOKEN = process.env.NEXT_PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN diff --git a/framework/shopify/customer/get-customer-id.ts b/framework/shopify/customer/get-customer-id.ts new file mode 100644 index 000000000..ca096645a --- /dev/null +++ b/framework/shopify/customer/get-customer-id.ts @@ -0,0 +1,24 @@ +import { getConfig, ShopifyConfig } from '../api' +import getCustomerIdQuery from '../utils/queries/get-customer-id-query' +import Cookies from 'js-cookie' + +async function getCustomerId({ + customerToken: customerAccesToken, + config, +}: { + customerToken: string + config?: ShopifyConfig +}): Promise<number | undefined> { + config = getConfig(config) + + const { data } = await config.fetch(getCustomerIdQuery, { + variables: { + customerAccesToken: + customerAccesToken || Cookies.get(config.customerCookie), + }, + }) + + return data.customer?.id +} + +export default getCustomerId diff --git a/framework/shopify/customer/index.ts b/framework/shopify/customer/index.ts new file mode 100644 index 000000000..6c903ecc5 --- /dev/null +++ b/framework/shopify/customer/index.ts @@ -0,0 +1 @@ +export { default as useCustomer } from './use-customer' diff --git a/framework/shopify/customer/use-customer.tsx b/framework/shopify/customer/use-customer.tsx new file mode 100644 index 000000000..137f0da74 --- /dev/null +++ b/framework/shopify/customer/use-customer.tsx @@ -0,0 +1,27 @@ +import useCustomer, { UseCustomer } from '@commerce/customer/use-customer' +import { Customer } from '@commerce/types' +import { SWRHook } from '@commerce/utils/types' +import { getCustomerQuery, getCustomerToken } from '../utils' + +export default useCustomer as UseCustomer<typeof handler> + +export const handler: SWRHook<Customer | null> = { + fetchOptions: { + query: getCustomerQuery, + }, + async fetcher({ options, fetch }) { + const data = await fetch<any | null>({ + ...options, + variables: { customerAccessToken: getCustomerToken() }, + }) + return data.customer ?? null + }, + useHook: ({ useData }) => (input) => { + return useData({ + swrOptions: { + revalidateOnFocus: false, + ...input?.swrOptions, + }, + }) + }, +} diff --git a/framework/shopify/fetcher.ts b/framework/shopify/fetcher.ts new file mode 100644 index 000000000..a69150503 --- /dev/null +++ b/framework/shopify/fetcher.ts @@ -0,0 +1,23 @@ +import { Fetcher } from '@commerce/utils/types' +import { API_TOKEN, API_URL } from './const' +import { handleFetchResponse } from './utils' + +const fetcher: Fetcher = async ({ + url = API_URL, + method = 'POST', + variables, + query, +}) => { + return handleFetchResponse( + await fetch(url, { + method, + body: JSON.stringify({ query, variables }), + headers: { + 'X-Shopify-Storefront-Access-Token': API_TOKEN!, + 'Content-Type': 'application/json', + }, + }) + ) +} + +export default fetcher diff --git a/framework/shopify/index.tsx b/framework/shopify/index.tsx new file mode 100644 index 000000000..5b25d6b21 --- /dev/null +++ b/framework/shopify/index.tsx @@ -0,0 +1,39 @@ +import * as React from 'react' +import { ReactNode } from 'react' + +import { + CommerceConfig, + CommerceProvider as CoreCommerceProvider, + useCommerce as useCoreCommerce, +} from '@commerce' + +import { shopifyProvider, ShopifyProvider } from './provider' +import { SHOPIFY_CHECKOUT_ID_COOKIE } from './const' + +export { shopifyProvider } +export type { ShopifyProvider } + +export const shopifyConfig: CommerceConfig = { + locale: 'en-us', + cartCookie: SHOPIFY_CHECKOUT_ID_COOKIE, +} + +export type ShopifyConfig = Partial<CommerceConfig> + +export type ShopifyProps = { + children?: ReactNode + locale: string +} & ShopifyConfig + +export function CommerceProvider({ children, ...config }: ShopifyProps) { + return ( + <CoreCommerceProvider + provider={shopifyProvider} + config={{ ...shopifyConfig, ...config }} + > + {children} + </CoreCommerceProvider> + ) +} + +export const useCommerce = () => useCoreCommerce() diff --git a/framework/shopify/next.config.js b/framework/shopify/next.config.js new file mode 100644 index 000000000..e9d48c02c --- /dev/null +++ b/framework/shopify/next.config.js @@ -0,0 +1,8 @@ +const commerce = require('./commerce.config.json') + +module.exports = { + commerce, + images: { + domains: ['cdn.shopify.com'], + }, +} diff --git a/framework/shopify/product/get-all-collections.ts b/framework/shopify/product/get-all-collections.ts new file mode 100644 index 000000000..15c4bc51a --- /dev/null +++ b/framework/shopify/product/get-all-collections.ts @@ -0,0 +1,29 @@ +import { CollectionEdge } from '../schema' +import { getConfig, ShopifyConfig } from '../api' +import getAllCollectionsQuery from '../utils/queries/get-all-collections-query' + +const getAllCollections = async (options?: { + variables?: any + config: ShopifyConfig + preview?: boolean +}) => { + let { config, variables = { first: 250 } } = options ?? {} + config = getConfig(config) + + const { data } = await config.fetch(getAllCollectionsQuery, { variables }) + const edges = data.collections?.edges ?? [] + + const categories = edges.map( + ({ node: { id: entityId, title: name, handle } }: CollectionEdge) => ({ + entityId, + name, + path: `/${handle}`, + }) + ) + + return { + categories, + } +} + +export default getAllCollections diff --git a/framework/shopify/product/get-all-product-paths.ts b/framework/shopify/product/get-all-product-paths.ts new file mode 100644 index 000000000..4431d1e53 --- /dev/null +++ b/framework/shopify/product/get-all-product-paths.ts @@ -0,0 +1,42 @@ +import { Product } from '@commerce/types' +import { getConfig, ShopifyConfig } from '../api' +import fetchAllProducts from '../api/utils/fetch-all-products' +import { ProductEdge } from '../schema' +import getAllProductsPathsQuery from '../utils/queries/get-all-products-paths-query' + +type ProductPath = { + path: string +} + +export type ProductPathNode = { + node: ProductPath +} + +type ReturnType = { + products: ProductPathNode[] +} + +const getAllProductPaths = async (options?: { + variables?: any + config?: ShopifyConfig + preview?: boolean +}): Promise<ReturnType> => { + let { config, variables = { first: 250 } } = options ?? {} + config = getConfig(config) + + const products = await fetchAllProducts({ + config, + query: getAllProductsPathsQuery, + variables, + }) + + return { + products: products?.map(({ node: { handle } }: ProductEdge) => ({ + node: { + path: `/${handle}`, + }, + })), + } +} + +export default getAllProductPaths diff --git a/framework/shopify/product/get-all-products.ts b/framework/shopify/product/get-all-products.ts new file mode 100644 index 000000000..14e486563 --- /dev/null +++ b/framework/shopify/product/get-all-products.ts @@ -0,0 +1,40 @@ +import { GraphQLFetcherResult } from '@commerce/api' +import { getConfig, ShopifyConfig } from '../api' +import { ProductEdge } from '../schema' +import { getAllProductsQuery } from '../utils/queries' +import { normalizeProduct } from '../utils/normalize' +import { Product } from '@commerce/types' + +type Variables = { + first?: number + field?: string +} + +type ReturnType = { + products: Product[] +} + +const getAllProducts = async (options: { + variables?: Variables + config?: ShopifyConfig + preview?: boolean +}): Promise<ReturnType> => { + let { config, variables = { first: 250 } } = options ?? {} + config = getConfig(config) + + const { data }: GraphQLFetcherResult = await config.fetch( + getAllProductsQuery, + { variables } + ) + + const products = + data.products?.edges?.map(({ node: p }: ProductEdge) => + normalizeProduct(p) + ) ?? [] + + return { + products, + } +} + +export default getAllProducts diff --git a/framework/shopify/product/get-product.ts b/framework/shopify/product/get-product.ts new file mode 100644 index 000000000..047cd92f8 --- /dev/null +++ b/framework/shopify/product/get-product.ts @@ -0,0 +1,32 @@ +import { GraphQLFetcherResult } from '@commerce/api' +import { getConfig, ShopifyConfig } from '../api' +import { normalizeProduct, getProductQuery } from '../utils' + +type Variables = { + slug: string +} + +type ReturnType = { + product: any +} + +const getProduct = async (options: { + variables: Variables + config: ShopifyConfig + preview?: boolean +}): Promise<ReturnType> => { + let { config, variables } = options ?? {} + config = getConfig(config) + + const { data }: GraphQLFetcherResult = await config.fetch(getProductQuery, { + variables, + }) + + const { productByHandle } = data + + return { + product: productByHandle ? normalizeProduct(productByHandle) : null, + } +} + +export default getProduct diff --git a/framework/shopify/product/use-price.tsx b/framework/shopify/product/use-price.tsx new file mode 100644 index 000000000..0174faf5e --- /dev/null +++ b/framework/shopify/product/use-price.tsx @@ -0,0 +1,2 @@ +export * from '@commerce/product/use-price' +export { default } from '@commerce/product/use-price' diff --git a/framework/shopify/product/use-search.tsx b/framework/shopify/product/use-search.tsx new file mode 100644 index 000000000..bf812af3d --- /dev/null +++ b/framework/shopify/product/use-search.tsx @@ -0,0 +1,78 @@ +import { SWRHook } from '@commerce/utils/types' +import useSearch, { UseSearch } from '@commerce/product/use-search' + +import { ProductEdge } from '../schema' +import { + getAllProductsQuery, + getCollectionProductsQuery, + getSearchVariables, + normalizeProduct, +} from '../utils' + +import { Product } from '@commerce/types' + +export default useSearch as UseSearch<typeof handler> + +export type SearchProductsInput = { + search?: string + categoryId?: string + brandId?: string + sort?: string +} + +export type SearchProductsData = { + products: Product[] + found: boolean +} + +export const handler: SWRHook< + SearchProductsData, + SearchProductsInput, + SearchProductsInput +> = { + fetchOptions: { + query: getAllProductsQuery, + }, + async fetcher({ input, options, fetch }) { + const { categoryId, brandId } = input + + const data = await fetch({ + query: categoryId ? getCollectionProductsQuery : options.query, + method: options?.method, + variables: getSearchVariables(input), + }) + + let edges + + if (categoryId) { + edges = data.node?.products?.edges ?? [] + if (brandId) { + edges = edges.filter( + ({ node: { vendor } }: ProductEdge) => + vendor.replace(/\s+/g, '-').toLowerCase() === brandId + ) + } + } else { + edges = data.products?.edges ?? [] + } + + return { + products: edges.map(({ node }: ProductEdge) => normalizeProduct(node)), + found: !!edges.length, + } + }, + 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/framework/shopify/provider.ts b/framework/shopify/provider.ts new file mode 100644 index 000000000..00db5c1d3 --- /dev/null +++ b/framework/shopify/provider.ts @@ -0,0 +1,27 @@ +import { SHOPIFY_CHECKOUT_ID_COOKIE } from './const' + +import { handler as useCart } from './cart/use-cart' +import { handler as useAddItem } from './cart/use-add-item' +import { handler as useUpdateItem } from './cart/use-update-item' +import { handler as useRemoveItem } from './cart/use-remove-item' + +import { handler as useCustomer } from './customer/use-customer' +import { handler as useSearch } from './product/use-search' + +import { handler as useLogin } from './auth/use-login' +import { handler as useLogout } from './auth/use-logout' +import { handler as useSignup } from './auth/use-signup' + +import fetcher from './fetcher' + +export const shopifyProvider = { + locale: 'en-us', + cartCookie: SHOPIFY_CHECKOUT_ID_COOKIE, + fetcher, + cart: { useCart, useAddItem, useUpdateItem, useRemoveItem }, + customer: { useCustomer }, + products: { useSearch }, + auth: { useLogin, useLogout, useSignup }, +} + +export type ShopifyProvider = typeof shopifyProvider diff --git a/framework/shopify/schema.d.ts b/framework/shopify/schema.d.ts new file mode 100644 index 000000000..b1b23a3e5 --- /dev/null +++ b/framework/shopify/schema.d.ts @@ -0,0 +1,4985 @@ +export type Maybe<T> = T | null +export type Exact<T extends { [key: string]: unknown }> = { + [K in keyof T]: T[K] +} +export type MakeOptional<T, K extends keyof T> = Omit<T, K> & + { [SubKey in K]?: Maybe<T[SubKey]> } +export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & + { [SubKey in K]: Maybe<T[SubKey]> } +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: string + String: string + 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: `"<p>Grey cotton knit sweater.</p>"`. */ + HTML: any + /** A monetary value string. Example value: `"100.57"`. */ + 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. */ +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 supported by Shopify. */ + supported: Scalars['Boolean'] +} + +/** Details about the gift card used on the checkout. */ +export type AppliedGiftCard = Node & { + __typename?: 'AppliedGiftCard' + /** + * The amount that was taken from the gift card by applying it. + * @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 + */ + balance: Scalars['Money'] + /** The amount left on the gift card. */ + balanceV2: MoneyV2 + /** Globally unique identifier. */ + id: Scalars['ID'] + /** The last characters of the gift card. */ + lastCharacters: Scalars['String'] + /** The amount that was applied to the checkout in its currency. */ + presentmentAmountUsed: MoneyV2 +} + +/** 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<ArticleAuthor> + /** 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<Scalars['String']> + /** The excerpt of the article, complete with HTML formatting. */ + excerptHtml?: Maybe<Scalars['HTML']> + /** 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<Image> + /** The date and time when the article was published. */ + publishedAt: Scalars['DateTime'] + /** The article’s SEO information. */ + seo?: Maybe<Seo> + /** A categorization that a article can be tagged with. */ + tags: Array<Scalars['String']> + /** The article’s name. */ + title: Scalars['String'] + /** The url pointing to the article accessible from the web. */ + url: Scalars['URL'] +} + +/** An article in an online store blog. */ +export type ArticleCommentsArgs = { + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> +} + +/** An article in an online store blog. */ +export type ArticleContentArgs = { + truncateAt?: Maybe<Scalars['Int']> +} + +/** An article in an online store blog. */ +export type ArticleExcerptArgs = { + truncateAt?: Maybe<Scalars['Int']> +} + +/** An article in an online store blog. */ +export type ArticleImageArgs = { + maxWidth?: Maybe<Scalars['Int']> + maxHeight?: Maybe<Scalars['Int']> + crop?: Maybe<CropRegion> + scale?: Maybe<Scalars['Int']> +} + +/** The author of an article. */ +export type ArticleAuthor = { + __typename?: 'ArticleAuthor' + /** The author's bio. */ + bio?: Maybe<Scalars['String']> + /** The author’s email. */ + email: Scalars['String'] + /** The author's first name. */ + firstName: Scalars['String'] + /** The author's last name. */ + lastName: Scalars['String'] + /** The author's full name. */ + name: Scalars['String'] +} + +/** An auto-generated type for paginating through multiple Articles. */ +export type ArticleConnection = { + __typename?: 'ArticleConnection' + /** A list of edges. */ + edges: Array<ArticleEdge> + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** An auto-generated type which holds one Article and a cursor during pagination. */ +export type ArticleEdge = { + __typename?: 'ArticleEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of ArticleEdge. */ + node: Article +} + +/** 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 `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', +} + +/** Represents a generic custom attribute. */ +export type Attribute = { + __typename?: 'Attribute' + /** Key or name of the attribute. */ + key: Scalars['String'] + /** Value of the attribute. */ + value?: Maybe<Scalars['String']> +} + +/** Specifies the input fields required for an attribute. */ +export type AttributeInput = { + /** Key or name of the attribute. */ + key: Scalars['String'] + /** Value of the attribute. */ + value: Scalars['String'] +} + +/** 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. */ + allocationMethod: DiscountApplicationAllocationMethod + /** Which lines of targetType that the discount is allocated over. */ + targetSelection: DiscountApplicationTargetSelection + /** The type of line that the discount is applicable towards. */ + targetType: DiscountApplicationTargetType + /** The title of the application. */ + title: Scalars['String'] + /** The value of the discount application. */ + value: PricingValue +} + +/** A collection of available shipping rates for a checkout. */ +export type AvailableShippingRates = { + __typename?: '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`. */ + shippingRates?: Maybe<Array<ShippingRate>> +} + +/** An online store blog. */ +export type Blog = Node & { + __typename?: 'Blog' + /** Find an article by its handle. */ + articleByHandle?: Maybe<Article> + /** List of the blog's articles. */ + articles: ArticleConnection + /** The authors who have contributed to the blog. */ + authors: Array<ArticleAuthor> + /** 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<Seo> + /** The blogs’s title. */ + title: Scalars['String'] + /** The url pointing to the blog accessible from the web. */ + url: Scalars['URL'] +} + +/** An online store blog. */ +export type BlogArticleByHandleArgs = { + handle: Scalars['String'] +} + +/** An online store blog. */ +export type BlogArticlesArgs = { + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> + sortKey?: Maybe<ArticleSortKeys> + query?: Maybe<Scalars['String']> +} + +/** An auto-generated type for paginating through multiple Blogs. */ +export type BlogConnection = { + __typename?: 'BlogConnection' + /** A list of edges. */ + edges: Array<BlogEdge> + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** An auto-generated type which holds one Blog and a cursor during pagination. */ +export type BlogEdge = { + __typename?: 'BlogEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of BlogEdge. */ + node: Blog +} + +/** The set of valid sort keys for the Blog query. */ +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. + */ + Relevance = 'RELEVANCE', +} + +/** 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', + /** JCB */ + Jcb = 'JCB', +} + +/** A container for all the information required to checkout items and pay. */ +export type Checkout = Node & { + __typename?: 'Checkout' + /** The gift cards used on the checkout. */ + appliedGiftCards: Array<AppliedGiftCard> + /** + * The available shipping rates for this Checkout. + * Should only be used when checkout `requiresShipping` is `true` and + * the shipping address is valid. + */ + availableShippingRates?: Maybe<AvailableShippingRates> + /** The date and time when the checkout was completed. */ + completedAt?: Maybe<Scalars['DateTime']> + /** The date and time when the checkout was created. */ + createdAt: Scalars['DateTime'] + /** The currency code for the Checkout. */ + currencyCode: CurrencyCode + /** A list of extra information that is added to the checkout. */ + customAttributes: Array<Attribute> + /** + * 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<Customer> + /** Discounts that have been applied on the checkout. */ + discountApplications: DiscountApplicationConnection + /** The email attached to this checkout. */ + email?: Maybe<Scalars['String']> + /** Globally unique identifier. */ + id: Scalars['ID'] + /** A list of line item objects, each one containing information about an item in the checkout. */ + lineItems: CheckoutLineItemConnection + /** The sum of all the prices of all the items in the checkout. Duties, taxes, shipping and discounts excluded. */ + lineItemsSubtotalPrice: MoneyV2 + /** The note associated with the checkout. */ + note?: Maybe<Scalars['String']> + /** The resulting order from a paid checkout. */ + order?: Maybe<Order> + /** The Order Status Page for this Checkout, null when checkout is not completed. */ + orderStatusUrl?: Maybe<Scalars['URL']> + /** + * 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 + */ + 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. */ + 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<MailingAddress> + /** The discounts that have been allocated onto the shipping line by discount applications. */ + shippingDiscountAllocations: Array<DiscountAllocation> + /** Once a shipping rate is selected by the customer it is transitioned to a `shipping_line` object. */ + shippingLine?: Maybe<ShippingRate> + /** + * Price of the checkout before shipping and taxes. + * @deprecated Use `subtotalPriceV2` instead + */ + subtotalPrice: Scalars['Money'] + /** Price of the checkout before duties, shipping and taxes. */ + subtotalPriceV2: MoneyV2 + /** Specifies if the Checkout is tax exempt. */ + taxExempt: Scalars['Boolean'] + /** Specifies if taxes are included in the line item and shipping line prices. */ + taxesIncluded: Scalars['Boolean'] + /** + * The sum of all the prices of all the items in the checkout, taxes and discounts included. + * @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. */ + totalPriceV2: MoneyV2 + /** + * The sum of all the taxes applied to the line items and shipping lines in the checkout. + * @deprecated Use `totalTaxV2` instead + */ + totalTax: Scalars['Money'] + /** The sum of all the taxes applied to the line items and shipping lines in the checkout. */ + totalTaxV2: MoneyV2 + /** The date and time when the checkout was last updated. */ + updatedAt: Scalars['DateTime'] + /** The url pointing to the checkout accessible from the web. */ + webUrl: Scalars['URL'] +} + +/** A container for all the information required to checkout items and pay. */ +export type CheckoutDiscountApplicationsArgs = { + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> +} + +/** A container for all the information required to checkout items and pay. */ +export type CheckoutLineItemsArgs = { + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> +} + +/** 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<Scalars['String']> + /** A list of extra information that is added to the checkout. */ + customAttributes?: Maybe<Array<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?: Maybe<Scalars['Boolean']> +} + +/** 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<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** 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<Scalars['String']> + /** A list of extra information that is added to the checkout. */ + customAttributes?: Maybe<Array<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?: Maybe<Scalars['Boolean']> +} + +/** Return type for `checkoutAttributesUpdateV2` mutation. */ +export type CheckoutAttributesUpdateV2Payload = { + __typename?: 'CheckoutAttributesUpdateV2Payload' + /** The updated checkout object. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `checkoutCompleteFree` mutation. */ +export type CheckoutCompleteFreePayload = { + __typename?: 'CheckoutCompleteFreePayload' + /** The updated checkout object. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** 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<CheckoutUserError> + /** A representation of the attempted payment. */ + payment?: Maybe<Payment> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `checkoutCompleteWithCreditCardV2` mutation. */ +export type CheckoutCompleteWithCreditCardV2Payload = { + __typename?: 'CheckoutCompleteWithCreditCardV2Payload' + /** The checkout on which the payment was applied. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** A representation of the attempted payment. */ + payment?: Maybe<Payment> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** 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<CheckoutUserError> + /** A representation of the attempted payment. */ + payment?: Maybe<Payment> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `checkoutCompleteWithTokenizedPaymentV2` mutation. */ +export type CheckoutCompleteWithTokenizedPaymentV2Payload = { + __typename?: 'CheckoutCompleteWithTokenizedPaymentV2Payload' + /** The checkout on which the payment was applied. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** A representation of the attempted payment. */ + payment?: Maybe<Payment> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `checkoutCompleteWithTokenizedPaymentV3` mutation. */ +export type CheckoutCompleteWithTokenizedPaymentV3Payload = { + __typename?: 'CheckoutCompleteWithTokenizedPaymentV3Payload' + /** The checkout on which the payment was applied. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** A representation of the attempted payment. */ + payment?: Maybe<Payment> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Specifies the fields required to create a checkout. */ +export type CheckoutCreateInput = { + /** The email with which the customer wants to checkout. */ + email?: Maybe<Scalars['String']> + /** A list of line item objects, each one containing information about an item in the checkout. */ + lineItems?: Maybe<Array<CheckoutLineItemInput>> + /** The shipping address to where the line items will be shipped. */ + shippingAddress?: Maybe<MailingAddressInput> + /** The text of an optional note that a shop owner can attach to the checkout. */ + note?: Maybe<Scalars['String']> + /** A list of extra information that is added to the checkout. */ + customAttributes?: Maybe<Array<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?: Maybe<Scalars['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?: Maybe<CurrencyCode> +} + +/** Return type for `checkoutCreate` mutation. */ +export type CheckoutCreatePayload = { + __typename?: 'CheckoutCreatePayload' + /** The new checkout object. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `checkoutCustomerAssociate` mutation. */ +export type CheckoutCustomerAssociatePayload = { + __typename?: 'CheckoutCustomerAssociatePayload' + /** The updated checkout object. */ + checkout: Checkout + /** The associated customer object. */ + customer?: Maybe<Customer> + /** List of errors that occurred executing the mutation. */ + userErrors: Array<UserError> +} + +/** Return type for `checkoutCustomerAssociateV2` mutation. */ +export type CheckoutCustomerAssociateV2Payload = { + __typename?: 'CheckoutCustomerAssociateV2Payload' + /** The updated checkout object. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** The associated customer object. */ + customer?: Maybe<Customer> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** 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<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `checkoutCustomerDisassociateV2` mutation. */ +export type CheckoutCustomerDisassociateV2Payload = { + __typename?: 'CheckoutCustomerDisassociateV2Payload' + /** The updated checkout object. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** 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<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `checkoutDiscountCodeApplyV2` mutation. */ +export type CheckoutDiscountCodeApplyV2Payload = { + __typename?: 'CheckoutDiscountCodeApplyV2Payload' + /** The updated checkout object. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `checkoutDiscountCodeRemove` mutation. */ +export type CheckoutDiscountCodeRemovePayload = { + __typename?: 'CheckoutDiscountCodeRemovePayload' + /** The updated checkout object. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** 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<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `checkoutEmailUpdateV2` mutation. */ +export type CheckoutEmailUpdateV2Payload = { + __typename?: 'CheckoutEmailUpdateV2Payload' + /** The checkout object with the updated email. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Possible error codes that could 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', + /** Cart does not meet discount requirements notice. */ + CartDoesNotMeetDiscountRequirementsNotice = 'CART_DOES_NOT_MEET_DISCOUNT_REQUIREMENTS_NOTICE', + /** Discount expired. */ + DiscountExpired = 'DISCOUNT_EXPIRED', + /** Discount disabled. */ + DiscountDisabled = 'DISCOUNT_DISABLED', + /** 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', + /** Line item was not found in checkout. */ + LineItemNotFound = 'LINE_ITEM_NOT_FOUND', + /** 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<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** 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<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `checkoutGiftCardRemoveV2` mutation. */ +export type CheckoutGiftCardRemoveV2Payload = { + __typename?: 'CheckoutGiftCardRemoveV2Payload' + /** The updated checkout object. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `checkoutGiftCardsAppend` mutation. */ +export type CheckoutGiftCardsAppendPayload = { + __typename?: 'CheckoutGiftCardsAppendPayload' + /** The updated checkout object. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** A single line item in the checkout, grouped by variant and attributes. */ +export type CheckoutLineItem = Node & { + __typename?: 'CheckoutLineItem' + /** Extra information in the form of an array of Key-Value pairs about the line item. */ + customAttributes: Array<Attribute> + /** The discounts that have been allocated onto the checkout line item by discount applications. */ + discountAllocations: Array<DiscountAllocation> + /** Globally unique identifier. */ + id: Scalars['ID'] + /** The quantity of the line item. */ + quantity: Scalars['Int'] + /** Title of the line item. Defaults to the product's title. */ + title: Scalars['String'] + /** Unit price of the line item. */ + unitPrice?: Maybe<MoneyV2> + /** Product variant of the line item. */ + variant?: Maybe<ProductVariant> +} + +/** An auto-generated type for paginating through multiple CheckoutLineItems. */ +export type CheckoutLineItemConnection = { + __typename?: 'CheckoutLineItemConnection' + /** A list of edges. */ + edges: Array<CheckoutLineItemEdge> + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** An auto-generated type which holds one CheckoutLineItem and a cursor during pagination. */ +export type CheckoutLineItemEdge = { + __typename?: 'CheckoutLineItemEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of CheckoutLineItemEdge. */ + node: CheckoutLineItem +} + +/** 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<Array<AttributeInput>> + /** The quantity of the line item. */ + quantity: Scalars['Int'] + /** The identifier of the product variant for the line item. */ + variantId: Scalars['ID'] +} + +/** Specifies the input fields to update a line item on the checkout. */ +export type CheckoutLineItemUpdateInput = { + /** The identifier of the line item. */ + id?: Maybe<Scalars['ID']> + /** The variant identifier of the line item. */ + variantId?: Maybe<Scalars['ID']> + /** The quantity of the line item. */ + quantity?: Maybe<Scalars['Int']> + /** Extra information in the form of an array of Key-Value pairs about the line item. */ + customAttributes?: Maybe<Array<AttributeInput>> +} + +/** Return type for `checkoutLineItemsAdd` mutation. */ +export type CheckoutLineItemsAddPayload = { + __typename?: 'CheckoutLineItemsAddPayload' + /** The updated checkout object. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `checkoutLineItemsRemove` mutation. */ +export type CheckoutLineItemsRemovePayload = { + __typename?: 'CheckoutLineItemsRemovePayload' + /** The updated checkout object. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `checkoutLineItemsReplace` mutation. */ +export type CheckoutLineItemsReplacePayload = { + __typename?: 'CheckoutLineItemsReplacePayload' + /** The updated checkout object. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + userErrors: Array<CheckoutUserError> +} + +/** Return type for `checkoutLineItemsUpdate` mutation. */ +export type CheckoutLineItemsUpdatePayload = { + __typename?: 'CheckoutLineItemsUpdatePayload' + /** The updated checkout object. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** 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<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `checkoutShippingAddressUpdateV2` mutation. */ +export type CheckoutShippingAddressUpdateV2Payload = { + __typename?: 'CheckoutShippingAddressUpdateV2Payload' + /** The updated checkout object. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `checkoutShippingLineUpdate` mutation. */ +export type CheckoutShippingLineUpdatePayload = { + __typename?: 'CheckoutShippingLineUpdatePayload' + /** The updated checkout object. */ + checkout?: Maybe<Checkout> + /** List of errors that occurred executing the mutation. */ + checkoutUserErrors: Array<CheckoutUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `checkoutUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Represents an error that happens during execution of a checkout mutation. */ +export type CheckoutUserError = DisplayableError & { + __typename?: 'CheckoutUserError' + /** Error code to uniquely identify the error. */ + code?: Maybe<CheckoutErrorCode> + /** Path to the input field which caused the error. */ + field?: Maybe<Array<Scalars['String']>> + /** 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<Image> + /** 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'] +} + +/** 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<Scalars['Int']> +} + +/** 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<Scalars['Int']> + maxHeight?: Maybe<Scalars['Int']> + crop?: Maybe<CropRegion> + scale?: Maybe<Scalars['Int']> +} + +/** 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<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> + sortKey?: Maybe<ProductCollectionSortKeys> +} + +/** An auto-generated type for paginating through multiple Collections. */ +export type CollectionConnection = { + __typename?: 'CollectionConnection' + /** A list of edges. */ + edges: Array<CollectionEdge> + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** An auto-generated type which holds one Collection and a cursor during pagination. */ +export type CollectionEdge = { + __typename?: 'CollectionEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of CollectionEdge. */ + node: Collection +} + +/** The set of valid sort keys for the Collection query. */ +export enum CollectionSortKeys { + /** 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. */ +export type Comment = Node & { + __typename?: 'Comment' + /** The comment’s author. */ + author: CommentAuthor + /** Stripped content of the comment, single line with HTML tags removed. */ + content: Scalars['String'] + /** The content of the comment, complete with HTML formatting. */ + contentHtml: Scalars['HTML'] + /** Globally unique identifier. */ + id: Scalars['ID'] +} + +/** A comment on an article. */ +export type CommentContentArgs = { + truncateAt?: Maybe<Scalars['Int']> +} + +/** The author of a comment. */ +export type CommentAuthor = { + __typename?: 'CommentAuthor' + /** The author's email. */ + email: Scalars['String'] + /** The author’s name. */ + name: Scalars['String'] +} + +/** An auto-generated type for paginating through multiple Comments. */ +export type CommentConnection = { + __typename?: 'CommentConnection' + /** A list of edges. */ + edges: Array<CommentEdge> + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** An auto-generated type which holds one Comment and a cursor during pagination. */ +export type CommentEdge = { + __typename?: 'CommentEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of CommentEdge. */ + node: Comment +} + +/** ISO 3166-1 alpha-2 country codes with some differences. */ +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', + /** Australia. */ + Au = 'AU', + /** Austria. */ + At = 'AT', + /** 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', + /** Burkina Faso. */ + Bf = 'BF', + /** Burundi. */ + Bi = 'BI', + /** Cambodia. */ + Kh = 'KH', + /** Canada. */ + Ca = 'CA', + /** Cape Verde. */ + Cv = 'CV', + /** 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', + /** Cocos (Keeling) Islands. */ + Cc = 'CC', + /** Colombia. */ + Co = 'CO', + /** Comoros. */ + Km = 'KM', + /** Congo - Brazzaville. */ + Cg = 'CG', + /** Congo - Kinshasa. */ + Cd = 'CD', + /** Cook Islands. */ + Ck = 'CK', + /** Costa Rica. */ + Cr = 'CR', + /** Croatia. */ + Hr = 'HR', + /** Cuba. */ + Cu = 'CU', + /** Curaçao. */ + Cw = 'CW', + /** Cyprus. */ + Cy = 'CY', + /** Czechia. */ + Cz = 'CZ', + /** Côte d’Ivoire. */ + Ci = 'CI', + /** Denmark. */ + Dk = 'DK', + /** Djibouti. */ + Dj = 'DJ', + /** Dominica. */ + Dm = 'DM', + /** Dominican Republic. */ + Do = 'DO', + /** Ecuador. */ + Ec = 'EC', + /** Egypt. */ + Eg = 'EG', + /** El Salvador. */ + Sv = 'SV', + /** Equatorial Guinea. */ + Gq = 'GQ', + /** Eritrea. */ + Er = 'ER', + /** Estonia. */ + Ee = 'EE', + /** Eswatini. */ + Sz = 'SZ', + /** Ethiopia. */ + Et = 'ET', + /** 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', + /** Georgia. */ + Ge = 'GE', + /** Germany. */ + De = 'DE', + /** Ghana. */ + Gh = 'GH', + /** Gibraltar. */ + Gi = 'GI', + /** Greece. */ + Gr = 'GR', + /** Greenland. */ + Gl = 'GL', + /** Grenada. */ + Gd = 'GD', + /** Guadeloupe. */ + Gp = 'GP', + /** Guatemala. */ + Gt = 'GT', + /** Guernsey. */ + Gg = 'GG', + /** Guinea. */ + Gn = 'GN', + /** 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', + /** 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', + /** Italy. */ + It = 'IT', + /** Jamaica. */ + Jm = 'JM', + /** Japan. */ + Jp = 'JP', + /** Jersey. */ + Je = 'JE', + /** Jordan. */ + Jo = 'JO', + /** Kazakhstan. */ + Kz = 'KZ', + /** Kenya. */ + Ke = 'KE', + /** Kiribati. */ + Ki = 'KI', + /** North Korea. */ + Kp = 'KP', + /** Kosovo. */ + Xk = 'XK', + /** Kuwait. */ + Kw = 'KW', + /** Kyrgyzstan. */ + Kg = 'KG', + /** Laos. */ + La = 'LA', + /** Latvia. */ + Lv = 'LV', + /** Lebanon. */ + Lb = 'LB', + /** Lesotho. */ + Ls = 'LS', + /** Liberia. */ + Lr = 'LR', + /** Libya. */ + Ly = 'LY', + /** Liechtenstein. */ + Li = 'LI', + /** Lithuania. */ + Lt = 'LT', + /** Luxembourg. */ + Lu = 'LU', + /** Macao SAR. */ + Mo = 'MO', + /** Madagascar. */ + Mg = 'MG', + /** Malawi. */ + Mw = 'MW', + /** Malaysia. */ + My = 'MY', + /** Maldives. */ + Mv = 'MV', + /** Mali. */ + Ml = 'ML', + /** Malta. */ + Mt = 'MT', + /** 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', + /** 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', + /** Norway. */ + No = 'NO', + /** Oman. */ + Om = 'OM', + /** Pakistan. */ + Pk = 'PK', + /** Palestinian Territories. */ + Ps = 'PS', + /** Panama. */ + Pa = 'PA', + /** Papua New Guinea. */ + Pg = 'PG', + /** Paraguay. */ + Py = 'PY', + /** Peru. */ + Pe = 'PE', + /** Philippines. */ + Ph = 'PH', + /** Pitcairn Islands. */ + Pn = 'PN', + /** Poland. */ + Pl = 'PL', + /** Portugal. */ + Pt = 'PT', + /** Qatar. */ + Qa = 'QA', + /** Cameroon. */ + Cm = 'CM', + /** Réunion. */ + Re = 'RE', + /** Romania. */ + Ro = 'RO', + /** 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', + /** Sudan. */ + Sd = 'SD', + /** Suriname. */ + Sr = 'SR', + /** Svalbard & Jan Mayen. */ + Sj = 'SJ', + /** Sweden. */ + Se = 'SE', + /** Switzerland. */ + Ch = 'CH', + /** 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', + /** Tunisia. */ + Tn = 'TN', + /** Turkey. */ + Tr = 'TR', + /** Turkmenistan. */ + Tm = 'TM', + /** Turks & Caicos Islands. */ + Tc = 'TC', + /** Tuvalu. */ + Tv = 'TV', + /** Uganda. */ + Ug = 'UG', + /** Ukraine. */ + Ua = 'UA', + /** United Arab Emirates. */ + Ae = 'AE', + /** United Kingdom. */ + Gb = 'GB', + /** United States. */ + Us = 'US', + /** U.S. Outlying Islands. */ + Um = 'UM', + /** Uruguay. */ + Uy = 'UY', + /** Uzbekistan. */ + Uz = 'UZ', + /** Vanuatu. */ + Vu = 'VU', + /** Venezuela. */ + Ve = 'VE', + /** Vietnam. */ + Vn = 'VN', + /** British Virgin Islands. */ + Vg = 'VG', + /** Wallis & Futuna. */ + Wf = 'WF', + /** Western Sahara. */ + Eh = 'EH', + /** Yemen. */ + Ye = 'YE', + /** Zambia. */ + Zm = 'ZM', + /** Zimbabwe. */ + Zw = 'ZW', +} + +/** Credit card information used for a payment. */ +export type CreditCard = { + __typename?: 'CreditCard' + /** The brand of the credit card. */ + brand?: Maybe<Scalars['String']> + /** The expiry month of the credit card. */ + expiryMonth?: Maybe<Scalars['Int']> + /** The expiry year of the credit card. */ + expiryYear?: Maybe<Scalars['Int']> + /** The credit card's BIN number. */ + firstDigits?: Maybe<Scalars['String']> + /** The first name of the card holder. */ + firstName?: Maybe<Scalars['String']> + /** The last 4 digits of the credit card. */ + lastDigits?: Maybe<Scalars['String']> + /** The last name of the card holder. */ + lastName?: Maybe<Scalars['String']> + /** The masked credit card number with only the last 4 digits displayed. */ + maskedNumber?: Maybe<Scalars['String']> +} + +/** + * 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. */ + 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<Scalars['Boolean']> +} + +/** + * 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. */ + 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<Scalars['Boolean']> +} + +/** 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 left of the image. */ + Left = 'LEFT', + /** Keep the right of the image. */ + Right = 'RIGHT', +} + +/** Currency 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', + /** Afghan Afghani (AFN). */ + Afn = 'AFN', + /** Albanian Lek (ALL). */ + All = 'ALL', + /** Algerian Dinar (DZD). */ + Dzd = 'DZD', + /** 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', + /** Azerbaijani Manat (AZN). */ + Azn = 'AZN', + /** Bangladesh Taka (BDT). */ + Bdt = 'BDT', + /** Bahamian Dollar (BSD). */ + Bsd = 'BSD', + /** Bahraini Dinar (BHD). */ + Bhd = 'BHD', + /** Burundian Franc (BIF). */ + Bif = 'BIF', + /** Belarusian Ruble (BYN). */ + Byn = 'BYN', + /** Belarusian Ruble (BYR). */ + Byr = 'BYR', + /** 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', + /** 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', + /** Czech Koruny (CZK). */ + Czk = 'CZK', + /** Danish Kroner (DKK). */ + Dkk = 'DKK', + /** Djiboutian Franc (DJF). */ + Djf = 'DJF', + /** Dominican Peso (DOP). */ + Dop = 'DOP', + /** East Caribbean Dollar (XCD). */ + Xcd = 'XCD', + /** Egyptian Pound (EGP). */ + Egp = 'EGP', + /** Eritrean Nakfa (ERN). */ + Ern = 'ERN', + /** Ethiopian Birr (ETB). */ + Etb = 'ETB', + /** Falkland Islands Pounds (FKP). */ + Fkp = 'FKP', + /** CFP Franc (XPF). */ + Xpf = 'XPF', + /** Fijian Dollars (FJD). */ + Fjd = 'FJD', + /** Gibraltar Pounds (GIP). */ + Gip = 'GIP', + /** Gambian Dalasi (GMD). */ + Gmd = 'GMD', + /** Ghanaian Cedi (GHS). */ + Ghs = 'GHS', + /** Guatemalan Quetzal (GTQ). */ + Gtq = 'GTQ', + /** Guyanese Dollar (GYD). */ + Gyd = 'GYD', + /** Georgian Lari (GEL). */ + Gel = 'GEL', + /** Guinean Franc (GNF). */ + Gnf = 'GNF', + /** Haitian Gourde (HTG). */ + Htg = 'HTG', + /** Honduran Lempira (HNL). */ + Hnl = 'HNL', + /** Hong Kong Dollars (HKD). */ + Hkd = 'HKD', + /** 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', + /** Iranian Rial (IRR). */ + Irr = 'IRR', + /** Iraqi Dinar (IQD). */ + Iqd = 'IQD', + /** Jamaican Dollars (JMD). */ + Jmd = 'JMD', + /** Japanese Yen (JPY). */ + Jpy = 'JPY', + /** Jersey Pound. */ + Jep = 'JEP', + /** Jordanian Dinar (JOD). */ + Jod = 'JOD', + /** Kazakhstani Tenge (KZT). */ + Kzt = 'KZT', + /** Kenyan Shilling (KES). */ + Kes = 'KES', + /** Kiribati Dollar (KID). */ + Kid = 'KID', + /** Kuwaiti Dinar (KWD). */ + Kwd = 'KWD', + /** Kyrgyzstani Som (KGS). */ + Kgs = 'KGS', + /** Laotian Kip (LAK). */ + Lak = 'LAK', + /** Latvian Lati (LVL). */ + Lvl = 'LVL', + /** Lebanese Pounds (LBP). */ + Lbp = 'LBP', + /** Lesotho Loti (LSL). */ + Lsl = 'LSL', + /** Liberian Dollar (LRD). */ + Lrd = 'LRD', + /** Libyan Dinar (LYD). */ + Lyd = 'LYD', + /** Lithuanian Litai (LTL). */ + Ltl = 'LTL', + /** Malagasy Ariary (MGA). */ + Mga = 'MGA', + /** Macedonia Denar (MKD). */ + Mkd = 'MKD', + /** Macanese Pataca (MOP). */ + Mop = 'MOP', + /** Malawian Kwacha (MWK). */ + Mwk = 'MWK', + /** Maldivian Rufiyaa (MVR). */ + Mvr = 'MVR', + /** Mauritanian Ouguiya (MRU). */ + Mru = 'MRU', + /** 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', + /** Norwegian Kroner (NOK). */ + Nok = 'NOK', + /** 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', + /** Philippine Peso (PHP). */ + Php = 'PHP', + /** Polish Zlotych (PLN). */ + Pln = 'PLN', + /** Qatari Rial (QAR). */ + Qar = 'QAR', + /** Romanian Lei (RON). */ + Ron = 'RON', + /** Russian Rubles (RUB). */ + Rub = 'RUB', + /** Rwandan Franc (RWF). */ + Rwf = 'RWF', + /** Samoan Tala (WST). */ + Wst = 'WST', + /** Saint Helena Pounds (SHP). */ + Shp = 'SHP', + /** Saudi Riyal (SAR). */ + Sar = 'SAR', + /** Sao Tome And Principe Dobra (STD). */ + Std = 'STD', + /** Serbian dinar (RSD). */ + Rsd = 'RSD', + /** Seychellois Rupee (SCR). */ + Scr = 'SCR', + /** Sierra Leonean Leone (SLL). */ + Sll = 'SLL', + /** Singapore Dollars (SGD). */ + Sgd = 'SGD', + /** Sudanese Pound (SDG). */ + Sdg = 'SDG', + /** Somali Shilling (SOS). */ + Sos = 'SOS', + /** 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', + /** Swedish Kronor (SEK). */ + Sek = 'SEK', + /** Swiss Francs (CHF). */ + Chf = 'CHF', + /** Taiwan Dollars (TWD). */ + Twd = 'TWD', + /** Thai baht (THB). */ + Thb = 'THB', + /** Tajikistani Somoni (TJS). */ + Tjs = 'TJS', + /** Tanzanian Shilling (TZS). */ + Tzs = 'TZS', + /** Tongan Pa'anga (TOP). */ + Top = 'TOP', + /** Trinidad and Tobago Dollars (TTD). */ + Ttd = 'TTD', + /** Tunisian Dinar (TND). */ + Tnd = 'TND', + /** Turkish Lira (TRY). */ + Try = 'TRY', + /** Turkmenistani Manat (TMT). */ + Tmt = 'TMT', + /** Ugandan Shilling (UGX). */ + Ugx = 'UGX', + /** Ukrainian Hryvnia (UAH). */ + Uah = 'UAH', + /** United Arab Emirates Dirham (AED). */ + Aed = 'AED', + /** Uruguayan Pesos (UYU). */ + Uyu = 'UYU', + /** Uzbekistan som (UZS). */ + Uzs = 'UZS', + /** Vanuatu Vatu (VUV). */ + Vuv = 'VUV', + /** Venezuelan Bolivares (VEF). */ + Vef = 'VEF', + /** Venezuelan Bolivares (VES). */ + Ves = 'VES', + /** Vietnamese đồng (VND). */ + Vnd = 'VND', + /** West African CFA franc (XOF). */ + Xof = 'XOF', + /** Yemeni Rial (YER). */ + Yer = 'YER', + /** 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 = { + __typename?: 'Customer' + /** Indicates whether the customer has consented to be sent marketing material via email. */ + acceptsMarketing: Scalars['Boolean'] + /** A list of addresses for the customer. */ + addresses: MailingAddressConnection + /** The date and time when the customer was created. */ + createdAt: Scalars['DateTime'] + /** The customer’s default address. */ + defaultAddress?: Maybe<MailingAddress> + /** The customer’s name, email or phone number. */ + displayName: Scalars['String'] + /** The customer’s email address. */ + email?: Maybe<Scalars['String']> + /** The customer’s first name. */ + firstName?: Maybe<Scalars['String']> + /** A unique identifier for the customer. */ + id: Scalars['ID'] + /** The customer's most recently updated, incomplete checkout. */ + lastIncompleteCheckout?: Maybe<Checkout> + /** The customer’s last name. */ + lastName?: Maybe<Scalars['String']> + /** The orders associated with the customer. */ + orders: OrderConnection + /** The customer’s phone number. */ + phone?: Maybe<Scalars['String']> + /** + * A comma separated list of tags that have been added to the customer. + * Additional access scope required: unauthenticated_read_customer_tags. + */ + tags: Array<Scalars['String']> + /** The date and time when the customer information was updated. */ + updatedAt: Scalars['DateTime'] +} + +/** 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<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> +} + +/** 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<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> + sortKey?: Maybe<OrderSortKeys> + query?: Maybe<Scalars['String']> +} + +/** A CustomerAccessToken represents the unique token required to make modifications to the customer object. */ +export type CustomerAccessToken = { + __typename?: 'CustomerAccessToken' + /** The customer’s access token. */ + accessToken: Scalars['String'] + /** The date and time when the customer access token expires. */ + expiresAt: Scalars['DateTime'] +} + +/** Specifies the input fields required to create a customer access token. */ +export type CustomerAccessTokenCreateInput = { + /** The email associated to the customer. */ + email: Scalars['String'] + /** The login password to be used by the customer. */ + password: Scalars['String'] +} + +/** Return type for `customerAccessTokenCreate` mutation. */ +export type CustomerAccessTokenCreatePayload = { + __typename?: 'CustomerAccessTokenCreatePayload' + /** The newly created customer access token object. */ + customerAccessToken?: Maybe<CustomerAccessToken> + /** List of errors that occurred executing the mutation. */ + customerUserErrors: Array<CustomerUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `customerUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `customerAccessTokenCreateWithMultipass` mutation. */ +export type CustomerAccessTokenCreateWithMultipassPayload = { + __typename?: 'CustomerAccessTokenCreateWithMultipassPayload' + /** An access token object associated with the customer. */ + customerAccessToken?: Maybe<CustomerAccessToken> + /** List of errors that occurred executing the mutation. */ + customerUserErrors: Array<CustomerUserError> +} + +/** Return type for `customerAccessTokenDelete` mutation. */ +export type CustomerAccessTokenDeletePayload = { + __typename?: 'CustomerAccessTokenDeletePayload' + /** The destroyed access token. */ + deletedAccessToken?: Maybe<Scalars['String']> + /** ID of the destroyed customer access token. */ + deletedCustomerAccessTokenId?: Maybe<Scalars['String']> + /** List of errors that occurred executing the mutation. */ + userErrors: Array<UserError> +} + +/** Return type for `customerAccessTokenRenew` mutation. */ +export type CustomerAccessTokenRenewPayload = { + __typename?: 'CustomerAccessTokenRenewPayload' + /** The renewed customer access token object. */ + customerAccessToken?: Maybe<CustomerAccessToken> + /** List of errors that occurred executing the mutation. */ + userErrors: Array<UserError> +} + +/** Return type for `customerActivateByUrl` mutation. */ +export type CustomerActivateByUrlPayload = { + __typename?: 'CustomerActivateByUrlPayload' + /** The customer that was activated. */ + customer?: Maybe<Customer> + /** A new customer access token for the customer. */ + customerAccessToken?: Maybe<CustomerAccessToken> + /** List of errors that occurred executing the mutation. */ + customerUserErrors: Array<CustomerUserError> +} + +/** Specifies the input fields required to activate a customer. */ +export type CustomerActivateInput = { + /** The activation token required to activate the customer. */ + activationToken: Scalars['String'] + /** New password that will be set during activation. */ + password: Scalars['String'] +} + +/** Return type for `customerActivate` mutation. */ +export type CustomerActivatePayload = { + __typename?: 'CustomerActivatePayload' + /** The customer object. */ + customer?: Maybe<Customer> + /** A newly created customer access token object for the customer. */ + customerAccessToken?: Maybe<CustomerAccessToken> + /** List of errors that occurred executing the mutation. */ + customerUserErrors: Array<CustomerUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `customerUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `customerAddressCreate` mutation. */ +export type CustomerAddressCreatePayload = { + __typename?: 'CustomerAddressCreatePayload' + /** The new customer address object. */ + customerAddress?: Maybe<MailingAddress> + /** List of errors that occurred executing the mutation. */ + customerUserErrors: Array<CustomerUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `customerUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `customerAddressDelete` mutation. */ +export type CustomerAddressDeletePayload = { + __typename?: 'CustomerAddressDeletePayload' + /** List of errors that occurred executing the mutation. */ + customerUserErrors: Array<CustomerUserError> + /** ID of the deleted customer address. */ + deletedCustomerAddressId?: Maybe<Scalars['String']> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `customerUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `customerAddressUpdate` mutation. */ +export type CustomerAddressUpdatePayload = { + __typename?: 'CustomerAddressUpdatePayload' + /** The customer’s updated mailing address. */ + customerAddress?: Maybe<MailingAddress> + /** List of errors that occurred executing the mutation. */ + customerUserErrors: Array<CustomerUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `customerUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Specifies the fields required to create a new customer. */ +export type CustomerCreateInput = { + /** The customer’s first name. */ + firstName?: Maybe<Scalars['String']> + /** The customer’s last name. */ + lastName?: Maybe<Scalars['String']> + /** The customer’s email. */ + email: Scalars['String'] + /** + * A unique phone number for the customer. + * + * Formatted using E.164 standard. For example, _+16135551111_. + */ + phone?: Maybe<Scalars['String']> + /** 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<Scalars['Boolean']> +} + +/** Return type for `customerCreate` mutation. */ +export type CustomerCreatePayload = { + __typename?: 'CustomerCreatePayload' + /** The created customer object. */ + customer?: Maybe<Customer> + /** List of errors that occurred executing the mutation. */ + customerUserErrors: Array<CustomerUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `customerUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `customerDefaultAddressUpdate` mutation. */ +export type CustomerDefaultAddressUpdatePayload = { + __typename?: 'CustomerDefaultAddressUpdatePayload' + /** The updated customer object. */ + customer?: Maybe<Customer> + /** List of errors that occurred executing the mutation. */ + customerUserErrors: Array<CustomerUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `customerUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Possible error codes that could be returned by CustomerUserError. */ +export enum CustomerErrorCode { + /** 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', + /** Multipass token is not valid. */ + InvalidMultipassRequest = 'INVALID_MULTIPASS_REQUEST', +} + +/** Return type for `customerRecover` mutation. */ +export type CustomerRecoverPayload = { + __typename?: 'CustomerRecoverPayload' + /** List of errors that occurred executing the mutation. */ + customerUserErrors: Array<CustomerUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `customerUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Return type for `customerResetByUrl` mutation. */ +export type CustomerResetByUrlPayload = { + __typename?: 'CustomerResetByUrlPayload' + /** The customer object which was reset. */ + customer?: Maybe<Customer> + /** A newly created customer access token object for the customer. */ + customerAccessToken?: Maybe<CustomerAccessToken> + /** List of errors that occurred executing the mutation. */ + customerUserErrors: Array<CustomerUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `customerUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** 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'] +} + +/** Return type for `customerReset` mutation. */ +export type CustomerResetPayload = { + __typename?: 'CustomerResetPayload' + /** The customer object which was reset. */ + customer?: Maybe<Customer> + /** A newly created customer access token object for the customer. */ + customerAccessToken?: Maybe<CustomerAccessToken> + /** List of errors that occurred executing the mutation. */ + customerUserErrors: Array<CustomerUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `customerUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Specifies the fields required to update the Customer information. */ +export type CustomerUpdateInput = { + /** The customer’s first name. */ + firstName?: Maybe<Scalars['String']> + /** The customer’s last name. */ + lastName?: Maybe<Scalars['String']> + /** The customer’s email. */ + email?: Maybe<Scalars['String']> + /** + * A unique phone number for the customer. + * + * Formatted using E.164 standard. For example, _+16135551111_. To remove the phone number, specify `null`. + */ + phone?: Maybe<Scalars['String']> + /** The login password used by the customer. */ + password?: Maybe<Scalars['String']> + /** Indicates whether the customer has consented to be sent marketing material via email. */ + acceptsMarketing?: Maybe<Scalars['Boolean']> +} + +/** Return type for `customerUpdate` mutation. */ +export type CustomerUpdatePayload = { + __typename?: 'CustomerUpdatePayload' + /** The updated customer object. */ + customer?: Maybe<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. + */ + customerAccessToken?: Maybe<CustomerAccessToken> + /** List of errors that occurred executing the mutation. */ + customerUserErrors: Array<CustomerUserError> + /** + * List of errors that occurred executing the mutation. + * @deprecated Use `customerUserErrors` instead + */ + userErrors: Array<UserError> +} + +/** Represents an error that happens during execution of a customer mutation. */ +export type CustomerUserError = DisplayableError & { + __typename?: 'CustomerUserError' + /** Error code to uniquely identify the error. */ + code?: Maybe<CustomerErrorCode> + /** Path to the input field which caused the error. */ + field?: Maybe<Array<Scalars['String']>> + /** The error message. */ + message: Scalars['String'] +} + +/** 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', + /** Google Pay. */ + GooglePay = 'GOOGLE_PAY', + /** Shopify Pay. */ + ShopifyPay = 'SHOPIFY_PAY', +} + +/** An amount discounting the line that has been allocated by a discount. */ +export type DiscountAllocation = { + __typename?: 'DiscountAllocation' + /** Amount of discount allocated. */ + allocatedAmount: MoneyV2 + /** The discount this allocated amount originated from. */ + discountApplication: DiscountApplication +} + +/** + * 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. */ + allocationMethod: DiscountApplicationAllocationMethod + /** Which lines of targetType that the discount is allocated over. */ + targetSelection: DiscountApplicationTargetSelection + /** The type of line that the discount is applicable towards. */ + targetType: DiscountApplicationTargetType + /** The value of the discount application. */ + value: PricingValue +} + +/** The method by which the discount's value is allocated onto its entitled lines. */ +export enum DiscountApplicationAllocationMethod { + /** The value is spread across all entitled lines. */ + Across = 'ACROSS', + /** The value is applied onto every entitled line. */ + Each = 'EACH', + /** The value is specifically applied onto a particular line. */ + One = 'ONE', +} + +/** An auto-generated type for paginating through multiple DiscountApplications. */ +export type DiscountApplicationConnection = { + __typename?: 'DiscountApplicationConnection' + /** A list of edges. */ + edges: Array<DiscountApplicationEdge> + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** An auto-generated type which holds one DiscountApplication and a cursor during pagination. */ +export type DiscountApplicationEdge = { + __typename?: 'DiscountApplicationEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of 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. + */ +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. */ + 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. */ +export enum DiscountApplicationTargetType { + /** The discount applies onto line items. */ + LineItem = 'LINE_ITEM', + /** The discount applies onto shipping lines. */ + ShippingLine = 'SHIPPING_LINE', +} + +/** + * Discount code applications capture the intentions of a discount code at + * the time that it is applied. + */ +export type DiscountCodeApplication = DiscountApplication & { + __typename?: 'DiscountCodeApplication' + /** The method by which the discount's value is allocated to its entitled items. */ + allocationMethod: DiscountApplicationAllocationMethod + /** Specifies whether the discount code was applied successfully. */ + applicable: Scalars['Boolean'] + /** The string identifying the discount code that was used at the time of application. */ + code: Scalars['String'] + /** Which lines of targetType that the discount is allocated over. */ + targetSelection: DiscountApplicationTargetSelection + /** The type of line that the discount is applicable towards. */ + targetType: DiscountApplicationTargetType + /** The value of the discount application. */ + value: PricingValue +} + +/** Represents an error in the input of a mutation. */ +export type DisplayableError = { + /** Path to the input field which caused the error. */ + field?: Maybe<Array<Scalars['String']>> + /** The error message. */ + message: Scalars['String'] +} + +/** Represents a web address. */ +export type Domain = { + __typename?: 'Domain' + /** The host name of the domain (eg: `example.com`). */ + host: Scalars['String'] + /** Whether SSL is enabled or not. */ + sslEnabled: Scalars['Boolean'] + /** The URL of the domain (eg: `https://example.com`). */ + url: Scalars['URL'] +} + +/** Represents a video hosted outside of Shopify. */ +export type ExternalVideo = Node & + Media & { + __typename?: 'ExternalVideo' + /** A word or phrase to share the nature or contents of a media. */ + alt?: Maybe<Scalars['String']> + /** The URL. */ + embeddedUrl: Scalars['URL'] + /** Globally unique identifier. */ + id: Scalars['ID'] + /** The media content type. */ + mediaContentType: MediaContentType + /** The preview image for the media. */ + previewImage?: Maybe<Image> + } + +/** Represents a single fulfillment in an order. */ +export type Fulfillment = { + __typename?: 'Fulfillment' + /** List of the fulfillment's line items. */ + fulfillmentLineItems: FulfillmentLineItemConnection + /** The name of the tracking company. */ + trackingCompany?: Maybe<Scalars['String']> + /** + * Tracking information associated with the fulfillment, + * such as the tracking number and tracking URL. + */ + trackingInfo: Array<FulfillmentTrackingInfo> +} + +/** Represents a single fulfillment in an order. */ +export type FulfillmentFulfillmentLineItemsArgs = { + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> +} + +/** Represents a single fulfillment in an order. */ +export type FulfillmentTrackingInfoArgs = { + first?: Maybe<Scalars['Int']> +} + +/** Represents a single line item in a fulfillment. There is at most one fulfillment line item for each order line item. */ +export type FulfillmentLineItem = { + __typename?: 'FulfillmentLineItem' + /** The associated order's line item. */ + lineItem: OrderLineItem + /** The amount fulfilled in this fulfillment. */ + quantity: Scalars['Int'] +} + +/** An auto-generated type for paginating through multiple FulfillmentLineItems. */ +export type FulfillmentLineItemConnection = { + __typename?: 'FulfillmentLineItemConnection' + /** A list of edges. */ + edges: Array<FulfillmentLineItemEdge> + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** An auto-generated type which holds one FulfillmentLineItem and a cursor during pagination. */ +export type FulfillmentLineItemEdge = { + __typename?: 'FulfillmentLineItemEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of FulfillmentLineItemEdge. */ + node: FulfillmentLineItem +} + +/** Tracking information associated with the fulfillment. */ +export type FulfillmentTrackingInfo = { + __typename?: 'FulfillmentTrackingInfo' + /** The tracking number of the fulfillment. */ + number?: Maybe<Scalars['String']> + /** The URL to track the fulfillment. */ + url?: Maybe<Scalars['URL']> +} + +/** Represents information about the metafields associated to the specified resource. */ +export type HasMetafields = { + /** The metafield associated with the resource. */ + metafield?: Maybe<Metafield> + /** A paginated list of metafields associated with the resource. */ + metafields: MetafieldConnection +} + +/** Represents information about the metafields associated to the specified resource. */ +export type HasMetafieldsMetafieldArgs = { + namespace: Scalars['String'] + key: Scalars['String'] +} + +/** Represents information about the metafields associated to the specified resource. */ +export type HasMetafieldsMetafieldsArgs = { + namespace?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> +} + +/** Represents an image resource. */ +export type Image = { + __typename?: 'Image' + /** A word or phrase to share the nature or contents of an image. */ + altText?: Maybe<Scalars['String']> + /** The original height of the image in pixels. Returns `null` if the image is not hosted by Shopify. */ + height?: Maybe<Scalars['Int']> + /** A unique identifier for the image. */ + id?: Maybe<Scalars['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: 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) + * } + * } + * } + * } + * } + * ``` + * + */ + src: Scalars['URL'] + /** + * 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. + */ + transformedSrc: Scalars['URL'] + /** The original width of the image in pixels. Returns `null` if the image is not hosted by Shopify. */ + width?: Maybe<Scalars['Int']> +} + +/** Represents an image resource. */ +export type ImageTransformedSrcArgs = { + maxWidth?: Maybe<Scalars['Int']> + maxHeight?: Maybe<Scalars['Int']> + crop?: Maybe<CropRegion> + scale?: Maybe<Scalars['Int']> + preferredContentType?: Maybe<ImageContentType> +} + +/** An auto-generated type for paginating through multiple Images. */ +export type ImageConnection = { + __typename?: 'ImageConnection' + /** A list of edges. */ + edges: Array<ImageEdge> + /** 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 WEBP image. */ + Webp = 'WEBP', +} + +/** An auto-generated type which holds one Image and a cursor during pagination. */ +export type ImageEdge = { + __typename?: 'ImageEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of ImageEdge. */ + node: Image +} + +/** 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<Scalars['String']> + /** The second line of the address. Typically the number of the apartment, suite, or unit. */ + address2?: Maybe<Scalars['String']> + /** The name of the city, district, village, or town. */ + city?: Maybe<Scalars['String']> + /** The name of the customer's company or organization. */ + company?: Maybe<Scalars['String']> + /** The name of the country. */ + country?: Maybe<Scalars['String']> + /** + * The two-letter code for the country of the address. + * + * For example, US. + * @deprecated Use `countryCodeV2` instead + */ + countryCode?: Maybe<Scalars['String']> + /** + * The two-letter code for the country of the address. + * + * For example, US. + */ + countryCodeV2?: Maybe<CountryCode> + /** The first name of the customer. */ + firstName?: Maybe<Scalars['String']> + /** A formatted version of the address, customized by the provided arguments. */ + formatted: Array<Scalars['String']> + /** A comma-separated list of the values for city, province, and country. */ + formattedArea?: Maybe<Scalars['String']> + /** Globally unique identifier. */ + id: Scalars['ID'] + /** The last name of the customer. */ + lastName?: Maybe<Scalars['String']> + /** The latitude coordinate of the customer address. */ + latitude?: Maybe<Scalars['Float']> + /** The longitude coordinate of the customer address. */ + longitude?: Maybe<Scalars['Float']> + /** The full name of the customer, based on firstName and lastName. */ + name?: Maybe<Scalars['String']> + /** + * A unique phone number for the customer. + * + * Formatted using E.164 standard. For example, _+16135551111_. + */ + phone?: Maybe<Scalars['String']> + /** The region of the address, such as the province, state, or district. */ + province?: Maybe<Scalars['String']> + /** + * The two-letter code for the region. + * + * For example, ON. + */ + provinceCode?: Maybe<Scalars['String']> + /** The zip or postal code of the address. */ + zip?: Maybe<Scalars['String']> +} + +/** Represents a mailing address for customers and shipping. */ +export type MailingAddressFormattedArgs = { + withName?: Maybe<Scalars['Boolean']> + withCompany?: Maybe<Scalars['Boolean']> +} + +/** An auto-generated type for paginating through multiple MailingAddresses. */ +export type MailingAddressConnection = { + __typename?: 'MailingAddressConnection' + /** A list of edges. */ + edges: Array<MailingAddressEdge> + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** An auto-generated type which holds one MailingAddress and a cursor during pagination. */ +export type MailingAddressEdge = { + __typename?: 'MailingAddressEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of MailingAddressEdge. */ + node: MailingAddress +} + +/** 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<Scalars['String']> + /** The second line of the address. Typically the number of the apartment, suite, or unit. */ + address2?: Maybe<Scalars['String']> + /** The name of the city, district, village, or town. */ + city?: Maybe<Scalars['String']> + /** The name of the customer's company or organization. */ + company?: Maybe<Scalars['String']> + /** The name of the country. */ + country?: Maybe<Scalars['String']> + /** The first name of the customer. */ + firstName?: Maybe<Scalars['String']> + /** The last name of the customer. */ + lastName?: Maybe<Scalars['String']> + /** + * A unique phone number for the customer. + * + * Formatted using E.164 standard. For example, _+16135551111_. + */ + phone?: Maybe<Scalars['String']> + /** The region of the address, such as the province, state, or district. */ + province?: Maybe<Scalars['String']> + /** The zip or postal code of the address. */ + zip?: Maybe<Scalars['String']> +} + +/** 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. */ + allocationMethod: DiscountApplicationAllocationMethod + /** The description of the application. */ + description?: Maybe<Scalars['String']> + /** Which lines of targetType that the discount is allocated over. */ + targetSelection: DiscountApplicationTargetSelection + /** The type of line that the discount is applicable towards. */ + targetType: DiscountApplicationTargetType + /** The title of the application. */ + title: Scalars['String'] + /** The value of the discount application. */ + value: PricingValue +} + +/** Represents a media interface. */ +export type Media = { + /** A word or phrase to share the nature or contents of a media. */ + alt?: Maybe<Scalars['String']> + /** The media content type. */ + mediaContentType: MediaContentType + /** The preview image for the media. */ + previewImage?: Maybe<Image> +} + +/** An auto-generated type for paginating through multiple Media. */ +export type MediaConnection = { + __typename?: 'MediaConnection' + /** A list of edges. */ + edges: Array<MediaEdge> + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** The possible content types for a media object. */ +export enum MediaContentType { + /** An externally hosted video. */ + ExternalVideo = 'EXTERNAL_VIDEO', + /** A Shopify hosted image. */ + Image = 'IMAGE', + /** A 3d model. */ + Model_3D = 'MODEL_3D', + /** A Shopify hosted video. */ + Video = 'VIDEO', +} + +/** An auto-generated type which holds one Media and a cursor during pagination. */ +export type MediaEdge = { + __typename?: 'MediaEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of MediaEdge. */ + node: Media +} + +/** Represents a Shopify hosted image. */ +export type MediaImage = Node & + Media & { + __typename?: 'MediaImage' + /** A word or phrase to share the nature or contents of a media. */ + alt?: Maybe<Scalars['String']> + /** Globally unique identifier. */ + id: Scalars['ID'] + /** The image for the media. */ + image?: Maybe<Image> + /** The media content type. */ + mediaContentType: MediaContentType + /** The preview image for the media. */ + previewImage?: Maybe<Image> + } + +/** + * 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' + /** The date and time when the storefront metafield was created. */ + createdAt: Scalars['DateTime'] + /** The description of a metafield. */ + description?: Maybe<Scalars['String']> + /** Globally unique identifier. */ + id: Scalars['ID'] + /** The key name for a metafield. */ + key: Scalars['String'] + /** The namespace for a metafield. */ + namespace: Scalars['String'] + /** The parent object that the metafield belongs to. */ + parentResource: MetafieldParentResource + /** 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<MetafieldEdge> + /** 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 resource that the metafield belongs to. */ +export type MetafieldParentResource = Product | ProductVariant + +/** Metafield value types. */ +export enum MetafieldValueType { + /** A string metafield. */ + String = 'STRING', + /** An integer metafield. */ + Integer = 'INTEGER', + /** A json string metafield. */ + JsonString = 'JSON_STRING', +} + +/** Represents a Shopify hosted 3D model. */ +export type Model3d = Node & + Media & { + __typename?: 'Model3d' + /** A word or phrase to share the nature or contents of a media. */ + alt?: Maybe<Scalars['String']> + /** Globally unique identifier. */ + id: Scalars['ID'] + /** The media content type. */ + mediaContentType: MediaContentType + /** The preview image for the media. */ + previewImage?: Maybe<Image> + /** The sources for a 3d model. */ + sources: Array<Model3dSource> + } + +/** Represents a source for a Shopify hosted 3d model. */ +export type Model3dSource = { + __typename?: 'Model3dSource' + /** The filesize of the 3d model. */ + filesize: Scalars['Int'] + /** The format of the 3d model. */ + format: Scalars['String'] + /** The MIME type of the 3d model. */ + mimeType: Scalars['String'] + /** The URL of the 3d model. */ + url: Scalars['String'] +} + +/** Specifies the fields for a monetary value with currency. */ +export type MoneyInput = { + /** Decimal money amount. */ + amount: Scalars['Decimal'] + /** Currency of the money. */ + 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)). + */ +export type MoneyV2 = { + __typename?: 'MoneyV2' + /** Decimal money amount. */ + amount: Scalars['Decimal'] + /** Currency of the money. */ + currencyCode: CurrencyCode +} + +/** An auto-generated type for paginating through multiple MoneyV2s. */ +export type MoneyV2Connection = { + __typename?: 'MoneyV2Connection' + /** A list of edges. */ + edges: Array<MoneyV2Edge> + /** 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 of a checkout. + * @deprecated Use `checkoutAttributesUpdateV2` instead + */ + checkoutAttributesUpdate?: Maybe<CheckoutAttributesUpdatePayload> + /** Updates the attributes of a checkout. */ + checkoutAttributesUpdateV2?: Maybe<CheckoutAttributesUpdateV2Payload> + /** 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<CheckoutCompleteFreePayload> + /** + * Completes a checkout using a credit card token from Shopify's Vault. + * @deprecated Use `checkoutCompleteWithCreditCardV2` instead + */ + checkoutCompleteWithCreditCard?: Maybe<CheckoutCompleteWithCreditCardPayload> + /** 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). */ + checkoutCompleteWithCreditCardV2?: Maybe<CheckoutCompleteWithCreditCardV2Payload> + /** + * Completes a checkout with a tokenized payment. + * @deprecated Use `checkoutCompleteWithTokenizedPaymentV2` instead + */ + checkoutCompleteWithTokenizedPayment?: Maybe<CheckoutCompleteWithTokenizedPaymentPayload> + /** + * Completes a checkout with a tokenized payment. + * @deprecated Use `checkoutCompleteWithTokenizedPaymentV3` instead + */ + checkoutCompleteWithTokenizedPaymentV2?: Maybe<CheckoutCompleteWithTokenizedPaymentV2Payload> + /** Completes a checkout with a tokenized payment. */ + checkoutCompleteWithTokenizedPaymentV3?: Maybe<CheckoutCompleteWithTokenizedPaymentV3Payload> + /** Creates a new checkout. */ + checkoutCreate?: Maybe<CheckoutCreatePayload> + /** + * Associates a customer to the checkout. + * @deprecated Use `checkoutCustomerAssociateV2` instead + */ + checkoutCustomerAssociate?: Maybe<CheckoutCustomerAssociatePayload> + /** Associates a customer to the checkout. */ + checkoutCustomerAssociateV2?: Maybe<CheckoutCustomerAssociateV2Payload> + /** + * Disassociates the current checkout customer from the checkout. + * @deprecated Use `checkoutCustomerDisassociateV2` instead + */ + checkoutCustomerDisassociate?: Maybe<CheckoutCustomerDisassociatePayload> + /** Disassociates the current checkout customer from the checkout. */ + checkoutCustomerDisassociateV2?: Maybe<CheckoutCustomerDisassociateV2Payload> + /** + * Applies a discount to an existing checkout using a discount code. + * @deprecated Use `checkoutDiscountCodeApplyV2` instead + */ + checkoutDiscountCodeApply?: Maybe<CheckoutDiscountCodeApplyPayload> + /** Applies a discount to an existing checkout using a discount code. */ + checkoutDiscountCodeApplyV2?: Maybe<CheckoutDiscountCodeApplyV2Payload> + /** Removes the applied discount from an existing checkout. */ + checkoutDiscountCodeRemove?: Maybe<CheckoutDiscountCodeRemovePayload> + /** + * Updates the email on an existing checkout. + * @deprecated Use `checkoutEmailUpdateV2` instead + */ + checkoutEmailUpdate?: Maybe<CheckoutEmailUpdatePayload> + /** Updates the email on an existing checkout. */ + checkoutEmailUpdateV2?: Maybe<CheckoutEmailUpdateV2Payload> + /** + * 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<CheckoutGiftCardApplyPayload> + /** + * Removes an applied gift card from the checkout. + * @deprecated Use `checkoutGiftCardRemoveV2` instead + */ + checkoutGiftCardRemove?: Maybe<CheckoutGiftCardRemovePayload> + /** Removes an applied gift card from the checkout. */ + checkoutGiftCardRemoveV2?: Maybe<CheckoutGiftCardRemoveV2Payload> + /** Appends gift cards to an existing checkout. */ + checkoutGiftCardsAppend?: Maybe<CheckoutGiftCardsAppendPayload> + /** Adds a list of line items to a checkout. */ + checkoutLineItemsAdd?: Maybe<CheckoutLineItemsAddPayload> + /** Removes line items from an existing checkout. */ + checkoutLineItemsRemove?: Maybe<CheckoutLineItemsRemovePayload> + /** Sets a list of line items to a checkout. */ + checkoutLineItemsReplace?: Maybe<CheckoutLineItemsReplacePayload> + /** Updates line items on a checkout. */ + checkoutLineItemsUpdate?: Maybe<CheckoutLineItemsUpdatePayload> + /** + * Updates the shipping address of an existing checkout. + * @deprecated Use `checkoutShippingAddressUpdateV2` instead + */ + checkoutShippingAddressUpdate?: Maybe<CheckoutShippingAddressUpdatePayload> + /** Updates the shipping address of an existing checkout. */ + checkoutShippingAddressUpdateV2?: Maybe<CheckoutShippingAddressUpdateV2Payload> + /** Updates the shipping lines on an existing checkout. */ + checkoutShippingLineUpdate?: Maybe<CheckoutShippingLineUpdatePayload> + /** + * Creates a customer access token. + * The customer access token is required to modify the customer object in any way. + */ + customerAccessTokenCreate?: Maybe<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. + */ + customerAccessTokenCreateWithMultipass?: Maybe<CustomerAccessTokenCreateWithMultipassPayload> + /** Permanently destroys a customer access token. */ + customerAccessTokenDelete?: Maybe<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`. + */ + customerAccessTokenRenew?: Maybe<CustomerAccessTokenRenewPayload> + /** Activates a customer. */ + customerActivate?: Maybe<CustomerActivatePayload> + /** Activates a customer with the activation url received from `customerCreate`. */ + customerActivateByUrl?: Maybe<CustomerActivateByUrlPayload> + /** Creates a new address for a customer. */ + customerAddressCreate?: Maybe<CustomerAddressCreatePayload> + /** Permanently deletes the address of an existing customer. */ + customerAddressDelete?: Maybe<CustomerAddressDeletePayload> + /** Updates the address of an existing customer. */ + customerAddressUpdate?: Maybe<CustomerAddressUpdatePayload> + /** Creates a new customer. */ + customerCreate?: Maybe<CustomerCreatePayload> + /** Updates the default address of an existing customer. */ + customerDefaultAddressUpdate?: Maybe<CustomerDefaultAddressUpdatePayload> + /** Sends a reset password email to the customer, as the first step in the reset password process. */ + customerRecover?: Maybe<CustomerRecoverPayload> + /** Resets a customer’s password with a token received from `CustomerRecover`. */ + customerReset?: Maybe<CustomerResetPayload> + /** Resets a customer’s password with the reset password url received from `CustomerRecover`. */ + customerResetByUrl?: Maybe<CustomerResetByUrlPayload> + /** Updates an existing customer. */ + customerUpdate?: Maybe<CustomerUpdatePayload> +} + +/** 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 +} + +/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ +export type MutationCheckoutAttributesUpdateV2Args = { + checkoutId: Scalars['ID'] + input: CheckoutAttributesUpdateV2Input +} + +/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ +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'] + payment: TokenizedPaymentInputV3 +} + +/** 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'] +} + +/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ +export type MutationCheckoutCustomerAssociateV2Args = { + checkoutId: 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. */ +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'] +} + +/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ +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'] + 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 MutationCheckoutGiftCardsAppendArgs = { + giftCardCodes: Array<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 MutationCheckoutLineItemsAddArgs = { + lineItems: Array<CheckoutLineItemInput> + 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 MutationCheckoutLineItemsRemoveArgs = { + checkoutId: Scalars['ID'] + lineItemIds: Array<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 MutationCheckoutLineItemsReplaceArgs = { + lineItems: Array<CheckoutLineItemInput> + 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 MutationCheckoutLineItemsUpdateArgs = { + checkoutId: Scalars['ID'] + lineItems: Array<CheckoutLineItemUpdateInput> +} + +/** 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'] +} + +/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ +export type MutationCheckoutShippingLineUpdateArgs = { + checkoutId: Scalars['ID'] + shippingRateHandle: 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 MutationCustomerAccessTokenCreateArgs = { + input: CustomerAccessTokenCreateInput +} + +/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ +export type MutationCustomerAccessTokenCreateWithMultipassArgs = { + multipassToken: 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 MutationCustomerAccessTokenDeleteArgs = { + 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 MutationCustomerAccessTokenRenewArgs = { + 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 MutationCustomerActivateArgs = { + id: Scalars['ID'] + input: CustomerActivateInput +} + +/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ +export type MutationCustomerActivateByUrlArgs = { + activationUrl: Scalars['URL'] + password: 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 MutationCustomerAddressCreateArgs = { + customerAccessToken: Scalars['String'] + address: MailingAddressInput +} + +/** 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'] +} + +/** 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 = { + 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. */ +export type MutationCustomerCreateArgs = { + input: CustomerCreateInput +} + +/** 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'] +} + +/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ +export type MutationCustomerRecoverArgs = { + 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 MutationCustomerResetArgs = { + id: Scalars['ID'] + input: CustomerResetInput +} + +/** 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'] +} + +/** 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 +} + +/** An object with an ID to support global identification. */ +export type Node = { + /** Globally unique identifier. */ + id: Scalars['ID'] +} + +/** 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<OrderCancelReason> + /** The date and time when the order was canceled. Returns null if the order wasn't canceled. */ + canceledAt?: Maybe<Scalars['DateTime']> + /** 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<Scalars['String']> + /** The unique URL that the customer can use to access the order. */ + customerUrl?: Maybe<Scalars['URL']> + /** 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<Scalars['String']> + /** The financial status of the order. */ + financialStatus?: Maybe<OrderFinancialStatus> + /** 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<Scalars['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. + */ + processedAt: Scalars['DateTime'] + /** The address to where the order will be shipped. */ + shippingAddress?: Maybe<MailingAddress> + /** The discounts that have been allocated onto the shipping line by discount applications. */ + shippingDiscountAllocations: Array<DiscountAllocation> + /** 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<Scalars['Money']> + /** Price of the order before duties, shipping and taxes. */ + subtotalPriceV2?: Maybe<MoneyV2> + /** List of the order’s successful fulfillments. */ + successfulFulfillments?: Maybe<Array<Fulfillment>> + /** + * 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<Scalars['Money']> + /** The total cost of taxes. */ + totalTaxV2?: Maybe<MoneyV2> +} + +/** 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<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> +} + +/** 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<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> +} + +/** 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<Scalars['Int']> +} + +/** Represents the reason for the order's cancellation. */ +export enum OrderCancelReason { + /** The customer wanted to cancel the order. */ + Customer = 'CUSTOMER', + /** 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. */ +export type OrderConnection = { + __typename?: 'OrderConnection' + /** A list of edges. */ + edges: Array<OrderEdge> + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** An auto-generated type which holds one Order and a cursor during pagination. */ +export type OrderEdge = { + __typename?: 'OrderEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of OrderEdge. */ + node: Order +} + +/** Represents the order's current financial status. */ +export enum OrderFinancialStatus { + /** Displayed as **Pending**. */ + Pending = 'PENDING', + /** Displayed as **Authorized**. */ + Authorized = 'AUTHORIZED', + /** 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 **Refunded**. */ + Refunded = 'REFUNDED', +} + +/** Represents the order's current fulfillment status. */ +export enum OrderFulfillmentStatus { + /** Displayed as **Unfulfilled**. */ + Unfulfilled = 'UNFULFILLED', + /** Displayed as **Partially fulfilled**. */ + PartiallyFulfilled = 'PARTIALLY_FULFILLED', + /** Displayed as **Fulfilled**. */ + Fulfilled = 'FULFILLED', + /** Displayed as **Restocked**. */ + Restocked = 'RESTOCKED', + /** Displayed as **Pending fulfillment**. */ + PendingFulfillment = 'PENDING_FULFILLMENT', + /** Displayed as **Open**. */ + Open = 'OPEN', + /** Displayed as **In progress**. */ + InProgress = 'IN_PROGRESS', + /** Displayed as **Scheduled**. */ + Scheduled = 'SCHEDULED', +} + +/** Represents a single line in an order. There is one line item for each distinct product variant. */ +export type OrderLineItem = { + __typename?: 'OrderLineItem' + /** The number of entries associated to the line item minus the items that have been removed. */ + currentQuantity: Scalars['Int'] + /** List of custom attributes associated to the line item. */ + customAttributes: Array<Attribute> + /** The discounts that have been allocated onto the order line item by discount applications. */ + discountAllocations: Array<DiscountAllocation> + /** The total price of the line item, including discounts, and displayed in the presentment currency. */ + discountedTotalPrice: MoneyV2 + /** The total price of the line item, not including any discounts. The total price is calculated using the original unit price multiplied by the quantity, and it is displayed in the presentment currency. */ + originalTotalPrice: MoneyV2 + /** The number of products variants associated to the line item. */ + quantity: Scalars['Int'] + /** The title of the product combined with title of the variant. */ + title: Scalars['String'] + /** The product variant object associated to the line item. */ + variant?: Maybe<ProductVariant> +} + +/** An auto-generated type for paginating through multiple OrderLineItems. */ +export type OrderLineItemConnection = { + __typename?: 'OrderLineItemConnection' + /** A list of edges. */ + edges: Array<OrderLineItemEdge> + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** An auto-generated type which holds one OrderLineItem and a cursor during pagination. */ +export type OrderLineItemEdge = { + __typename?: 'OrderLineItemEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of OrderLineItemEdge. */ + node: OrderLineItem +} + +/** 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', + /** + * 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', +} + +/** 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<Seo> + /** 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'] +} + +/** An auto-generated type for paginating through multiple Pages. */ +export type PageConnection = { + __typename?: 'PageConnection' + /** A list of edges. */ + edges: Array<PageEdge> + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** An auto-generated type which holds one Page and a cursor during pagination. */ +export type PageEdge = { + __typename?: 'PageEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of PageEdge. */ + node: Page +} + +/** Information about pagination in a connection. */ +export type PageInfo = { + __typename?: 'PageInfo' + /** Indicates if there are more pages to fetch. */ + hasNextPage: Scalars['Boolean'] + /** Indicates if there are any pages prior to the current page. */ + hasPreviousPage: Scalars['Boolean'] +} + +/** The set of valid sort keys for the Page query. */ +export enum PageSortKeys { + /** 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. */ +export type Payment = Node & { + __typename?: 'Payment' + /** + * The amount of the payment. + * @deprecated Use `amountV2` instead + */ + amount: Scalars['Money'] + /** The amount of the payment. */ + amountV2: MoneyV2 + /** The billing address for the payment. */ + billingAddress?: Maybe<MailingAddress> + /** The checkout to which the payment belongs. */ + checkout: Checkout + /** The credit card used for the payment in the case of direct payments. */ + creditCard?: Maybe<CreditCard> + /** A message describing a processing error during asynchronous processing. */ + errorMessage?: Maybe<Scalars['String']> + /** Globally unique identifier. */ + id: Scalars['ID'] + /** A client-side generated token to identify a payment and perform idempotent operations. */ + idempotencyKey?: Maybe<Scalars['String']> + /** The URL where the customer needs to be redirected so they can complete the 3D Secure payment flow. */ + nextActionUrl?: Maybe<Scalars['URL']> + /** Whether or not 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'] + /** The actual transaction recorded by Shopify after having processed the payment with the gateway. */ + transaction?: Maybe<Transaction> +} + +/** Settings related to payments. */ +export type PaymentSettings = { + __typename?: 'PaymentSettings' + /** List of the card brands which the shop accepts. */ + acceptedCardBrands: Array<CardBrand> + /** The url pointing to the endpoint to vault credit cards. */ + cardVaultUrl: Scalars['URL'] + /** The country where the shop is located. */ + countryCode: CountryCode + /** The three-letter code for the shop's primary currency. */ + currencyCode: CurrencyCode + /** A list of enabled currencies (ISO 4217 format) that the shop accepts. Merchants can enable currencies from their Shopify Payments settings in the Shopify admin. */ + enabledPresentmentCurrencies: Array<CurrencyCode> + /** The shop’s Shopify Payments account id. */ + shopifyPaymentsAccountId?: Maybe<Scalars['String']> + /** List of the digital wallets which the shop supports. */ + supportedDigitalWallets: Array<DigitalWallet> +} + +/** The valid values for the types of payment token. */ +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', +} + +/** The value of the percentage pricing object. */ +export type PricingPercentageValue = { + __typename?: 'PricingPercentageValue' + /** The percentage value of the object. */ + percentage: Scalars['Float'] +} + +/** The price value (fixed or percentage) for a discount application. */ +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 & { + __typename?: 'Product' + /** Indicates if at least one product variant is available for sale. */ + availableForSale: Scalars['Boolean'] + /** List of collections a product belongs to. */ + collections: CollectionConnection + /** The compare at price of the product across all variants. */ + compareAtPriceRange: ProductPriceRange + /** The date and time when the product was created. */ + createdAt: Scalars['DateTime'] + /** Stripped description of the product, single line with HTML tags removed. */ + description: Scalars['String'] + /** The description of the product, complete with HTML formatting. */ + descriptionHtml: Scalars['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. + */ + handle: Scalars['String'] + /** 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. */ + metafield?: Maybe<Metafield> + /** 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. + */ + onlineStoreUrl?: Maybe<Scalars['URL']> + /** List of product options. */ + options: Array<ProductOption> + /** 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'] + /** 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<Scalars['String']> + /** The product’s title. */ + title: Scalars['String'] + /** The total quantity of inventory in stock for this Product. */ + totalInventory?: Maybe<Scalars['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. + */ + 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<ProductVariant> + /** List of the product’s variants. */ + variants: ProductVariantConnection + /** The product’s vendor name. */ + vendor: Scalars['String'] + } + +/** + * 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 ProductCollectionsArgs = { + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> +} + +/** + * 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 ProductDescriptionArgs = { + truncateAt?: Maybe<Scalars['Int']> +} + +/** + * 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 ProductImagesArgs = { + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> + sortKey?: Maybe<ProductImageSortKeys> + maxWidth?: Maybe<Scalars['Int']> + maxHeight?: Maybe<Scalars['Int']> + crop?: Maybe<CropRegion> + scale?: Maybe<Scalars['Int']> +} + +/** + * 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 ProductMediaArgs = { + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> + sortKey?: Maybe<ProductMediaSortKeys> +} + +/** + * 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 ProductMetafieldArgs = { + namespace: Scalars['String'] + key: Scalars['String'] +} + +/** + * 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 ProductMetafieldsArgs = { + namespace?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> +} + +/** + * 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 ProductOptionsArgs = { + first?: Maybe<Scalars['Int']> +} + +/** + * 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<Array<CurrencyCode>> + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> +} + +/** + * 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 ProductVariantBySelectedOptionsArgs = { + selectedOptions: Array<SelectedOptionInput> +} + +/** + * 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 ProductVariantsArgs = { + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> + sortKey?: Maybe<ProductVariantSortKeys> +} + +/** 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 `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', + /** + * 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', +} + +/** An auto-generated type for paginating through multiple Products. */ +export type ProductConnection = { + __typename?: 'ProductConnection' + /** A list of edges. */ + edges: Array<ProductEdge> + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** An auto-generated type which holds one Product and a cursor during pagination. */ +export type ProductEdge = { + __typename?: 'ProductEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of ProductEdge. */ + node: Product +} + +/** 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', + /** + * 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', +} + +/** 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', + /** + * 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', +} + +/** + * 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. */ + id: Scalars['ID'] + /** The product option’s name. */ + name: Scalars['String'] + /** The corresponding value to the product option name. */ + values: Array<Scalars['String']> +} + +/** The price range of the product. */ +export type ProductPriceRange = { + __typename?: 'ProductPriceRange' + /** The highest variant's price. */ + maxVariantPrice: MoneyV2 + /** The lowest variant's price. */ + minVariantPrice: MoneyV2 +} + +/** An auto-generated type for paginating through multiple ProductPriceRanges. */ +export type ProductPriceRangeConnection = { + __typename?: 'ProductPriceRangeConnection' + /** A list of edges. */ + edges: Array<ProductPriceRangeEdge> + /** 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 `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 product variant represents a different version of a product, such as differing sizes or differing colors. */ +export type ProductVariant = Node & + HasMetafields & { + __typename?: 'ProductVariant' + /** + * Indicates if the product variant is in stock. + * @deprecated Use `availableForSale` instead + */ + available?: Maybe<Scalars['Boolean']> + /** Indicates if the product variant is available for sale. */ + availableForSale: Scalars['Boolean'] + /** + * 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 + */ + compareAtPrice?: Maybe<Scalars['Money']> + /** 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<MoneyV2> + /** Whether a product is out of stock but still available for purchase (used for backorders). */ + currentlyNotInStock: Scalars['Boolean'] + /** 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?: Maybe<Image> + /** The metafield associated with the resource. */ + metafield?: Maybe<Metafield> + /** 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 product variant’s price. + * @deprecated Use `priceV2` instead + */ + price: Scalars['Money'] + /** The product variant’s price. */ + priceV2: MoneyV2 + /** The product object that the product variant belongs to. */ + product: Product + /** The total sellable quantity of the variant for online sales channels. */ + quantityAvailable?: Maybe<Scalars['Int']> + /** Whether a customer needs to provide a shipping address when placing an order for the product variant. */ + requiresShipping: Scalars['Boolean'] + /** List of product options applied to the variant. */ + selectedOptions: Array<SelectedOption> + /** The SKU (stock keeping unit) associated with the variant. */ + sku?: Maybe<Scalars['String']> + /** The product variant’s title. */ + title: Scalars['String'] + /** The unit price value for the variant based on the variant's measurement. */ + unitPrice?: Maybe<MoneyV2> + /** The unit price measurement for the variant. */ + unitPriceMeasurement?: Maybe<UnitPriceMeasurement> + /** The weight of the product variant in the unit system specified with `weight_unit`. */ + weight?: Maybe<Scalars['Float']> + /** Unit of measurement for weight. */ + weightUnit: WeightUnit + } + +/** A product variant represents a different version of a product, such as differing sizes or differing colors. */ +export type ProductVariantImageArgs = { + maxWidth?: Maybe<Scalars['Int']> + maxHeight?: Maybe<Scalars['Int']> + crop?: Maybe<CropRegion> + scale?: Maybe<Scalars['Int']> +} + +/** 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'] +} + +/** A product variant represents a different version of a product, such as differing sizes or differing colors. */ +export type ProductVariantMetafieldsArgs = { + namespace?: Maybe<Scalars['String']> + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> +} + +/** A product variant represents a different version of a product, such as differing sizes or differing colors. */ +export type ProductVariantPresentmentPricesArgs = { + presentmentCurrencies?: Maybe<Array<CurrencyCode>> + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> +} + +/** A product variant represents a different version of a product, such as differing sizes or differing colors. */ +export type ProductVariantPresentmentUnitPricesArgs = { + presentmentCurrencies?: Maybe<Array<CurrencyCode>> + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> +} + +/** An auto-generated type for paginating through multiple ProductVariants. */ +export type ProductVariantConnection = { + __typename?: 'ProductVariantConnection' + /** A list of edges. */ + edges: Array<ProductVariantEdge> + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** An auto-generated type which holds one ProductVariant and a cursor during pagination. */ +export type ProductVariantEdge = { + __typename?: 'ProductVariantEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of 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<MoneyV2> + /** 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<ProductVariantPricePairEdge> + /** 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', + /** + * 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', +} + +/** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ +export type QueryRoot = { + __typename?: 'QueryRoot' + /** List of the shop's articles. */ + articles: ArticleConnection + /** Find a blog by its handle. */ + blogByHandle?: Maybe<Blog> + /** List of the shop's blogs. */ + blogs: BlogConnection + /** Find a collection by its handle. */ + collectionByHandle?: Maybe<Collection> + /** List of the shop’s collections. */ + collections: CollectionConnection + /** Find a customer by its access token. */ + customer?: Maybe<Customer> + node?: Maybe<Node> + nodes: Array<Maybe<Node>> + /** Find a page by its handle. */ + pageByHandle?: Maybe<Page> + /** List of the shop's pages. */ + pages: PageConnection + /** Find a product by its handle. */ + productByHandle?: Maybe<Product> + /** + * 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<Array<Product>> + /** + * 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. */ + productTypes: StringConnection + /** List of the shop’s products. */ + products: ProductConnection + /** The list of public Storefront API versions, including supported, release candidate and unstable versions. */ + publicApiVersions: Array<ApiVersion> + /** The shop associated with the storefront access token. */ + shop: Shop +} + +/** 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<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> + sortKey?: Maybe<ArticleSortKeys> + query?: Maybe<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 QueryRootBlogByHandleArgs = { + 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 QueryRootBlogsArgs = { + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> + sortKey?: Maybe<BlogSortKeys> + query?: Maybe<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 QueryRootCollectionByHandleArgs = { + 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 QueryRootCollectionsArgs = { + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> + sortKey?: Maybe<CollectionSortKeys> + query?: Maybe<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 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 QueryRootNodeArgs = { + 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 QueryRootNodesArgs = { + ids: Array<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 QueryRootPageByHandleArgs = { + 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 QueryRootPagesArgs = { + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> + sortKey?: Maybe<PageSortKeys> + query?: Maybe<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 QueryRootProductByHandleArgs = { + 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 QueryRootProductRecommendationsArgs = { + productId: 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 QueryRootProductTagsArgs = { + first: Scalars['Int'] +} + +/** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ +export type QueryRootProductTypesArgs = { + first: Scalars['Int'] +} + +/** 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<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> + sortKey?: Maybe<ProductSortKeys> + query?: Maybe<Scalars['String']> +} + +/** SEO information. */ +export type Seo = { + __typename?: 'SEO' + /** The meta description. */ + description?: Maybe<Scalars['String']> + /** The SEO title. */ + title?: Maybe<Scalars['String']> +} + +/** + * 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. */ + targetType: DiscountApplicationTargetType + /** The title of the application as defined by the Script. */ + title: Scalars['String'] + /** The value of the discount application. */ + value: PricingValue +} + +/** + * Properties used by customers to select a product variant. + * Products can have multiple options, like different sizes or colors. + */ +export type SelectedOption = { + __typename?: 'SelectedOption' + /** The product option’s name. */ + name: Scalars['String'] + /** The product option’s value. */ + value: Scalars['String'] +} + +/** Specifies the input fields required for a selected option. */ +export type SelectedOptionInput = { + /** The product option’s name. */ + name: Scalars['String'] + /** The product option’s value. */ + value: Scalars['String'] +} + +/** A shipping rate to be applied to a checkout. */ +export type ShippingRate = { + __typename?: 'ShippingRate' + /** Human-readable unique identifier for this shipping rate. */ + handle: Scalars['String'] + /** + * Price of this shipping rate. + * @deprecated Use `priceV2` instead + */ + price: Scalars['Money'] + /** Price of this shipping rate. */ + priceV2: MoneyV2 + /** Title of this shipping rate. */ + title: Scalars['String'] +} + +/** 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<Collection> + /** + * 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<Scalars['String']> + /** 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<ShopPolicy> + /** + * Find a product by its handle. + * @deprecated Use `QueryRoot.productByHandle` instead. + */ + productByHandle?: Maybe<Product> + /** + * 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<ShopPolicy> + /** The shop’s shipping policy. */ + shippingPolicy?: Maybe<ShopPolicy> + /** Countries that the shop ships to. */ + shipsToCountries: Array<CountryCode> + /** + * The shop’s Shopify Payments account id. + * @deprecated Use `paymentSettings` instead + */ + shopifyPaymentsAccountId?: Maybe<Scalars['String']> + /** The shop’s terms of service. */ + termsOfService?: Maybe<ShopPolicy> +} + +/** Shop represents a collection of the general settings and information about the shop. */ +export type ShopArticlesArgs = { + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> + sortKey?: Maybe<ArticleSortKeys> + query?: Maybe<Scalars['String']> +} + +/** Shop represents a collection of the general settings and information about the shop. */ +export type ShopBlogsArgs = { + first?: Maybe<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> + sortKey?: Maybe<BlogSortKeys> + query?: Maybe<Scalars['String']> +} + +/** 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<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> + sortKey?: Maybe<CollectionSortKeys> + query?: Maybe<Scalars['String']> +} + +/** 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<Scalars['Int']> + after?: Maybe<Scalars['String']> + last?: Maybe<Scalars['Int']> + before?: Maybe<Scalars['String']> + reverse?: Maybe<Scalars['Boolean']> + sortKey?: Maybe<ProductSortKeys> + query?: Maybe<Scalars['String']> +} + +/** Policy that a merchant has configured for their store, such as their refund or privacy policy. */ +export type ShopPolicy = Node & { + __typename?: 'ShopPolicy' + /** Policy text, maximum size of 64kb. */ + body: Scalars['String'] + /** Policy’s handle. */ + handle: Scalars['String'] + /** Globally unique identifier. */ + id: Scalars['ID'] + /** Policy’s title. */ + title: Scalars['String'] + /** Public URL to the policy. */ + url: Scalars['URL'] +} + +/** An auto-generated type for paginating through multiple Strings. */ +export type StringConnection = { + __typename?: 'StringConnection' + /** A list of edges. */ + edges: Array<StringEdge> + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** An auto-generated type which holds one String and a cursor during pagination. */ +export type StringEdge = { + __typename?: 'StringEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of StringEdge. */ + node: Scalars['String'] +} + +/** + * 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. */ + 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<Scalars['Boolean']> + /** Public Hash Key used for AndroidPay payments only. */ + identifier?: Maybe<Scalars['String']> +} + +/** + * 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. */ + 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<Scalars['Boolean']> + /** Public Hash Key used for AndroidPay payments only. */ + identifier?: Maybe<Scalars['String']> + /** 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. */ + 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<Scalars['Boolean']> + /** Public Hash Key used for AndroidPay payments only. */ + identifier?: Maybe<Scalars['String']> + /** The type of payment token. */ + type: PaymentTokenType +} + +/** An object representing exchange of money for a product or service. */ +export type Transaction = { + __typename?: 'Transaction' + /** + * The amount of money that the transaction was for. + * @deprecated Use `amountV2` instead + */ + amount: Scalars['Money'] + /** The amount of money that the transaction was for. */ + amountV2: MoneyV2 + /** The kind of the transaction. */ + kind: TransactionKind + /** + * The status of the transaction. + * @deprecated Use `statusV2` instead + */ + status: TransactionStatus + /** The status of the transaction. */ + statusV2?: Maybe<TransactionStatus> + /** Whether the transaction was done in test mode or not. */ + test: Scalars['Boolean'] +} + +export enum TransactionKind { + Sale = 'SALE', + Capture = 'CAPTURE', + Authorization = 'AUTHORIZATION', + EmvAuthorization = 'EMV_AUTHORIZATION', + Change = 'CHANGE', +} + +export enum TransactionStatus { + Pending = 'PENDING', + Success = 'SUCCESS', + Failure = 'FAILURE', + Error = 'ERROR', +} + +/** 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. */ + measuredType?: Maybe<UnitPriceMeasurementMeasuredType> + /** The quantity unit for the unit price measurement. */ + quantityUnit?: Maybe<UnitPriceMeasurementMeasuredUnit> + /** The quantity value for the unit price measurement. */ + quantityValue: Scalars['Float'] + /** The reference unit for the unit price measurement. */ + referenceUnit?: Maybe<UnitPriceMeasurementMeasuredUnit> + /** The reference value for the unit price measurement. */ + referenceValue: Scalars['Int'] +} + +/** The accepted types of unit of measurement. */ +export enum UnitPriceMeasurementMeasuredType { + /** 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', + /** 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 length. */ + M = 'M', + /** Metric system unit of area. */ + M2 = 'M2', +} + +/** Represents an error in the input of a mutation. */ +export type UserError = DisplayableError & { + __typename?: 'UserError' + /** Path to the input field which caused the error. */ + field?: Maybe<Array<Scalars['String']>> + /** The error message. */ + message: Scalars['String'] +} + +/** Represents a Shopify hosted video. */ +export type Video = Node & + Media & { + __typename?: 'Video' + /** A word or phrase to share the nature or contents of a media. */ + alt?: Maybe<Scalars['String']> + /** Globally unique identifier. */ + id: Scalars['ID'] + /** The media content type. */ + mediaContentType: MediaContentType + /** The preview image for the media. */ + previewImage?: Maybe<Image> + /** The sources for a video. */ + sources: Array<VideoSource> + } + +/** Represents a source for a Shopify hosted video. */ +export type VideoSource = { + __typename?: 'VideoSource' + /** The format of the video source. */ + format: Scalars['String'] + /** The height of the video. */ + height: Scalars['Int'] + /** The video MIME type. */ + mimeType: Scalars['String'] + /** The URL of the video. */ + url: Scalars['String'] + /** The width of the video. */ + width: Scalars['Int'] +} + +/** 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', + /** Imperial system unit of mass. */ + Ounces = 'OUNCES', +} + +export type Unnamed_1_QueryVariables = Exact<{ + first: Scalars['Int'] +}> + +export type Unnamed_1_Query = { __typename?: 'QueryRoot' } & { + pages: { __typename?: 'PageConnection' } & { + edges: Array< + { __typename?: 'PageEdge' } & { + node: { __typename?: 'Page' } & Pick< + Page, + 'id' | 'title' | 'handle' | 'body' | 'bodySummary' | 'url' + > + } + > + } +} diff --git a/framework/shopify/schema.graphql b/framework/shopify/schema.graphql new file mode 100644 index 000000000..822e6007e --- /dev/null +++ b/framework/shopify/schema.graphql @@ -0,0 +1,9631 @@ +schema { + query: QueryRoot + mutation: Mutation +} + +""" +Marks an element of a GraphQL schema as having restricted access. +""" +directive @accessRestricted( + """ + Explains the reason around this restriction + """ + reason: String = null +) on FIELD_DEFINITION | OBJECT + +""" +A version of the API. +""" +type ApiVersion { + """ + The human-readable name of the version. + """ + displayName: String! + + """ + The unique identifier of an ApiVersion. All supported API versions have a date-based (YYYY-MM) or `unstable` handle. + """ + handle: String! + + """ + Whether the version is supported by Shopify. + """ + supported: Boolean! +} + +""" +Details about the gift card used on the checkout. +""" +type AppliedGiftCard implements Node { + """ + The amount that was taken from the gift card by applying it. + """ + amountUsed: Money! @deprecated(reason: "Use `amountUsedV2` instead") + + """ + The amount that was taken from the gift card by applying it. + """ + amountUsedV2: MoneyV2! + + """ + The amount left on the gift card. + """ + balance: Money! @deprecated(reason: "Use `balanceV2` instead") + + """ + The amount left on the gift card. + """ + balanceV2: MoneyV2! + + """ + Globally unique identifier. + """ + id: ID! + + """ + The last characters of the gift card. + """ + lastCharacters: String! + + """ + The amount that was applied to the checkout in its currency. + """ + presentmentAmountUsed: MoneyV2! +} + +""" +An article in an online store blog. +""" +type Article implements Node { + """ + The article's author. + """ + author: ArticleAuthor! @deprecated(reason: "Use `authorV2` instead") + + """ + The article's author. + """ + authorV2: ArticleAuthor + + """ + The blog that the article belongs to. + """ + blog: Blog! + + """ + 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 + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + ): CommentConnection! + + """ + Stripped content of the article, single line with HTML tags removed. + """ + content( + """ + Truncates string after the given length. + """ + truncateAt: Int + ): String! + + """ + The content of the article, complete with HTML formatting. + """ + contentHtml: HTML! + + """ + Stripped excerpt of the article, single line with HTML tags removed. + """ + excerpt( + """ + Truncates string after the given length. + """ + truncateAt: Int + ): String + + """ + The excerpt of the article, complete with HTML formatting. + """ + excerptHtml: HTML + + """ + A human-friendly unique string for the Article automatically generated from its title. + """ + handle: String! + + """ + Globally unique identifier. + """ + id: ID! + + """ + The image associated with the article. + """ + 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 + + """ + The date and time when the article was published. + """ + publishedAt: DateTime! + + """ + The article’s SEO information. + """ + seo: SEO + + """ + A categorization that a article can be tagged with. + """ + tags: [String!]! + + """ + The article’s name. + """ + title: String! + + """ + The url pointing to the article accessible from the web. + """ + url: URL! +} + +""" +The author of an article. +""" +type ArticleAuthor { + """ + The author's bio. + """ + bio: String + + """ + The author’s email. + """ + email: String! + + """ + The author's first name. + """ + firstName: String! + + """ + The author's last name. + """ + lastName: String! + + """ + The author's full name. + """ + name: String! +} + +""" +An auto-generated type for paginating through multiple Articles. +""" +type ArticleConnection { + """ + A list of edges. + """ + edges: [ArticleEdge!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +An auto-generated type which holds one Article and a cursor during pagination. +""" +type ArticleEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of ArticleEdge. + """ + node: Article! +} + +""" +The set of valid sort keys for the Article query. +""" +enum ArticleSortKeys { + """ + Sort by the `title` value. + """ + TITLE + + """ + Sort by the `blog_title` value. + """ + BLOG_TITLE + + """ + Sort by the `author` value. + """ + AUTHOR + + """ + Sort by the `updated_at` value. + """ + UPDATED_AT + + """ + Sort by the `published_at` value. + """ + PUBLISHED_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 +} + +""" +Represents a generic custom attribute. +""" +type Attribute { + """ + Key or name of the attribute. + """ + key: String! + + """ + Value of the attribute. + """ + value: String +} + +""" +Specifies the input fields required for an attribute. +""" +input AttributeInput { + """ + Key or name of the attribute. + """ + key: String! + + """ + Value of the attribute. + """ + value: String! +} + +""" +Automatic discount applications capture the intentions of a discount that was automatically applied. +""" +type AutomaticDiscountApplication implements DiscountApplication { + """ + The method by which the discount's value is allocated to its entitled items. + """ + allocationMethod: DiscountApplicationAllocationMethod! + + """ + Which lines of targetType that the discount is allocated over. + """ + targetSelection: DiscountApplicationTargetSelection! + + """ + The type of line that the discount is applicable towards. + """ + targetType: DiscountApplicationTargetType! + + """ + The title of the application. + """ + title: String! + + """ + The value of the discount application. + """ + value: PricingValue! +} + +""" +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`. + """ + ready: Boolean! + + """ + The fetched shipping rates. `null` until the `ready` field is `true`. + """ + shippingRates: [ShippingRate!] +} + +""" +An online store blog. +""" +type Blog implements Node { + """ + Find an article by its handle. + """ + articleByHandle( + """ + The handle of the article. + """ + handle: String! + ): Article + + """ + 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 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! + + """ + The authors who have contributed to the blog. + """ + authors: [ArticleAuthor!]! + + """ + A human-friendly unique string for the Blog automatically generated from its title. + """ + handle: String! + + """ + Globally unique identifier. + """ + id: ID! + + """ + The blog's SEO information. + """ + seo: SEO + + """ + 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. +""" +type BlogConnection { + """ + A list of edges. + """ + edges: [BlogEdge!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +An auto-generated type which holds one Blog and a cursor during pagination. +""" +type BlogEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of BlogEdge. + """ + node: Blog! +} + +""" +The set of valid sort keys for the Blog query. +""" +enum BlogSortKeys { + """ + Sort by the `handle` value. + """ + 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. + """ + RELEVANCE +} + +""" +Card brand, such as Visa or Mastercard, which can be used for payments. +""" +enum CardBrand { + """ + Visa + """ + VISA + + """ + Mastercard + """ + MASTERCARD + + """ + Discover + """ + DISCOVER + + """ + American Express + """ + AMERICAN_EXPRESS + + """ + Diners Club + """ + DINERS_CLUB + + """ + JCB + """ + JCB +} + +""" +A container for all the information required to checkout items and pay. +""" +type Checkout implements Node { + """ + The gift cards used on the checkout. + """ + appliedGiftCards: [AppliedGiftCard!]! + + """ + The available shipping rates for this Checkout. + Should only be used when checkout `requiresShipping` is `true` and + the shipping address is valid. + """ + availableShippingRates: AvailableShippingRates + + """ + The date and time when the checkout was completed. + """ + completedAt: DateTime + + """ + The date and time when the checkout was created. + """ + createdAt: DateTime! + + """ + The currency code for the Checkout. + """ + currencyCode: CurrencyCode! + + """ + A list of extra information that is added to the checkout. + """ + 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 + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + ): DiscountApplicationConnection! + + """ + The email attached to this checkout. + """ + email: String + + """ + Globally unique identifier. + """ + id: ID! + + """ + 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 + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + ): CheckoutLineItemConnection! + + """ + The sum of all the prices of all the items in the checkout. Duties, taxes, shipping and discounts excluded. + """ + lineItemsSubtotalPrice: MoneyV2! + + """ + The note associated with the checkout. + """ + note: String + + """ + The resulting order from a paid checkout. + """ + order: Order + + """ + The Order Status Page for this Checkout, null when checkout is not completed. + """ + orderStatusUrl: URL + + """ + 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") + + """ + 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: Boolean! + + """ + States whether or not the fulfillment requires shipping. + """ + requiresShipping: Boolean! + + """ + The shipping address to where the line items will be shipped. + """ + shippingAddress: MailingAddress + + """ + The discounts that have been allocated onto the shipping line by discount applications. + """ + shippingDiscountAllocations: [DiscountAllocation!]! + + """ + Once a shipping rate is selected by the customer it is transitioned to a `shipping_line` object. + """ + shippingLine: ShippingRate + + """ + Price of the checkout before shipping and taxes. + """ + subtotalPrice: Money! @deprecated(reason: "Use `subtotalPriceV2` instead") + + """ + Price of the checkout before duties, shipping and taxes. + """ + subtotalPriceV2: MoneyV2! + + """ + Specifies if the Checkout is tax exempt. + """ + taxExempt: Boolean! + + """ + Specifies if 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. + """ + totalPrice: Money! @deprecated(reason: "Use `totalPriceV2` instead") + + """ + The sum of all the prices of all the items in the checkout, duties, taxes and discounts included. + """ + 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") + + """ + The sum of all the taxes applied to the line items and shipping lines in the checkout. + """ + totalTaxV2: MoneyV2! + + """ + The date and time when the checkout was last updated. + """ + updatedAt: DateTime! + + """ + The url pointing to the checkout accessible from the web. + """ + 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 + + """ + 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 `checkoutAttributesUpdateV2` mutation. +""" +type CheckoutAttributesUpdateV2Payload { + """ + 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 `checkoutCompleteFree` mutation. +""" +type CheckoutCompleteFreePayload { + """ + 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 `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") +} + +""" +Return type for `checkoutCompleteWithCreditCardV2` mutation. +""" +type CheckoutCompleteWithCreditCardV2Payload { + """ + 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 `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") +} + +""" +Return type for `checkoutCompleteWithTokenizedPaymentV3` mutation. +""" +type CheckoutCompleteWithTokenizedPaymentV3Payload { + """ + 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") +} + +""" +Specifies the fields required to create a checkout. +""" +input CheckoutCreateInput { + """ + The email with which the customer wants to checkout. + """ + email: String + + """ + A list of line item objects, each one containing information about an item in the checkout. + """ + 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. + """ + 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 +} + +""" +Return type for `checkoutCreate` mutation. +""" +type CheckoutCreatePayload { + """ + The new 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 `checkoutCustomerAssociate` mutation. +""" +type CheckoutCustomerAssociatePayload { + """ + The updated checkout object. + """ + checkout: Checkout! + + """ + The associated customer object. + """ + customer: Customer + + """ + List of errors that occurred executing the mutation. + """ + userErrors: [UserError!]! +} + +""" +Return type for `checkoutCustomerAssociateV2` mutation. +""" +type CheckoutCustomerAssociateV2Payload { + """ + The updated checkout object. + """ + checkout: Checkout + + """ + List of errors that occurred executing the mutation. + """ + checkoutUserErrors: [CheckoutUserError!]! + + """ + The associated customer object. + """ + customer: Customer + + """ + List of errors that occurred 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") +} + +""" +Return type for `checkoutCustomerDisassociateV2` mutation. +""" +type CheckoutCustomerDisassociateV2Payload { + """ + 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 `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") +} + +""" +Return type for `checkoutDiscountCodeApplyV2` mutation. +""" +type CheckoutDiscountCodeApplyV2Payload { + """ + 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 `checkoutDiscountCodeRemove` mutation. +""" +type CheckoutDiscountCodeRemovePayload { + """ + 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 `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") +} + +""" +Return type for `checkoutEmailUpdateV2` mutation. +""" +type CheckoutEmailUpdateV2Payload { + """ + 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") +} + +""" +Possible error codes that could 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. + """ + 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 + + """ + Cart does not meet discount requirements notice. + """ + CART_DOES_NOT_MEET_DISCOUNT_REQUIREMENTS_NOTICE + + """ + Discount expired. + """ + DISCOUNT_EXPIRED + + """ + Discount disabled. + """ + DISCOUNT_DISABLED + + """ + Discount limit reached. + """ + DISCOUNT_LIMIT_REACHED + + """ + Discount not found. + """ + 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. + """ + NOT_ENOUGH_IN_STOCK + + """ + Missing payment input. + """ + MISSING_PAYMENT_INPUT + + """ + The amount of the payment does not match the value to be paid. + """ + TOTAL_PRICE_MISMATCH + + """ + Line item was not found in checkout. + """ + LINE_ITEM_NOT_FOUND + + """ + 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") +} + +""" +Return type for `checkoutGiftCardRemoveV2` mutation. +""" +type CheckoutGiftCardRemoveV2Payload { + """ + 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 `checkoutGiftCardsAppend` mutation. +""" +type CheckoutGiftCardsAppendPayload { + """ + 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") +} + +""" +A single line item in the checkout, grouped by variant and attributes. +""" +type CheckoutLineItem implements Node { + """ + Extra information in the form of an array of Key-Value pairs about the line item. + """ + customAttributes: [Attribute!]! + + """ + The discounts that have been allocated onto the checkout line item by discount applications. + """ + discountAllocations: [DiscountAllocation!]! + + """ + Globally unique identifier. + """ + id: ID! + + """ + The quantity of the line item. + """ + quantity: Int! + + """ + Title of the line item. Defaults to the product's title. + """ + title: String! + + """ + Unit price of the line item. + """ + unitPrice: MoneyV2 + + """ + Product variant of the line item. + """ + variant: ProductVariant +} + +""" +An auto-generated type for paginating through multiple CheckoutLineItems. +""" +type CheckoutLineItemConnection { + """ + A list of edges. + """ + edges: [CheckoutLineItemEdge!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +An auto-generated type which holds one CheckoutLineItem and a cursor during pagination. +""" +type CheckoutLineItemEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of CheckoutLineItemEdge. + """ + node: CheckoutLineItem! +} + +""" +Specifies the input fields to create a line item on a checkout. +""" +input CheckoutLineItemInput { + """ + Extra information in the form of an array of Key-Value pairs about the line item. + """ + customAttributes: [AttributeInput!] + + """ + The quantity of the line item. + """ + quantity: Int! + + """ + The identifier of the product variant for the line item. + """ + variantId: ID! +} + +""" +Specifies the input fields to update a line item on the checkout. +""" +input CheckoutLineItemUpdateInput { + """ + 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. + """ + customAttributes: [AttributeInput!] +} + +""" +Return type for `checkoutLineItemsAdd` mutation. +""" +type CheckoutLineItemsAddPayload { + """ + 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 `checkoutLineItemsRemove` mutation. +""" +type CheckoutLineItemsRemovePayload { + """ + 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 `checkoutLineItemsReplace` mutation. +""" +type CheckoutLineItemsReplacePayload { + """ + The updated checkout object. + """ + checkout: Checkout + + """ + List of errors that occurred executing the mutation. + """ + userErrors: [CheckoutUserError!]! +} + +""" +Return type for `checkoutLineItemsUpdate` mutation. +""" +type CheckoutLineItemsUpdatePayload { + """ + 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 `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") +} + +""" +Return type for `checkoutShippingAddressUpdateV2` mutation. +""" +type CheckoutShippingAddressUpdateV2Payload { + """ + 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 `checkoutShippingLineUpdate` mutation. +""" +type CheckoutShippingLineUpdatePayload { + """ + 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") +} + +""" +Represents an error that happens during execution of a checkout mutation. +""" +type CheckoutUserError implements DisplayableError { + """ + Error code to uniquely identify the error. + """ + code: CheckoutErrorCode + + """ + Path to the input field which caused the error. + """ + field: [String!] + + """ + The error message. + """ + message: String! +} + +""" +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 { + """ + Stripped description of the collection, single line with HTML tags removed. + """ + description( + """ + Truncates string after the given length. + """ + truncateAt: Int + ): String! + + """ + The description of the collection, complete with HTML formatting. + """ + descriptionHtml: HTML! + + """ + A human-friendly unique string for the collection automatically generated from its title. + Limit of 255 characters. + """ + handle: String! + + """ + Globally unique identifier. + """ + id: ID! + + """ + Image associated with the collection. + """ + 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 + + """ + 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 + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + + """ + Sort the underlying list by the given key. + """ + sortKey: ProductCollectionSortKeys = COLLECTION_DEFAULT + ): ProductConnection! + + """ + The collection’s name. Limit of 255 characters. + """ + title: String! + + """ + The date and time when the collection was last modified. + """ + updatedAt: DateTime! +} + +""" +An auto-generated type for paginating through multiple Collections. +""" +type CollectionConnection { + """ + A list of edges. + """ + edges: [CollectionEdge!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +An auto-generated type which holds one Collection and a cursor during pagination. +""" +type CollectionEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of CollectionEdge. + """ + node: Collection! +} + +""" +The set of valid sort keys for the Collection query. +""" +enum CollectionSortKeys { + """ + Sort by the `title` value. + """ + TITLE + + """ + 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 +} + +""" +A comment on an article. +""" +type Comment implements Node { + """ + The comment’s author. + """ + author: CommentAuthor! + + """ + Stripped content of the comment, single line with HTML tags removed. + """ + content( + """ + Truncates string after the given length. + """ + truncateAt: Int + ): String! + + """ + The content of the comment, complete with HTML formatting. + """ + contentHtml: HTML! + + """ + Globally unique identifier. + """ + id: ID! +} + +""" +The author of a comment. +""" +type CommentAuthor { + """ + The author's email. + """ + email: String! + + """ + The author’s name. + """ + name: String! +} + +""" +An auto-generated type for paginating through multiple Comments. +""" +type CommentConnection { + """ + A list of edges. + """ + edges: [CommentEdge!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +An auto-generated type which holds one Comment and a cursor during pagination. +""" +type CommentEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of CommentEdge. + """ + node: Comment! +} + +""" +ISO 3166-1 alpha-2 country codes with some differences. +""" +enum CountryCode { + """ + Afghanistan. + """ + AF + + """ + Åland Islands. + """ + AX + + """ + Albania. + """ + AL + + """ + Algeria. + """ + DZ + + """ + Andorra. + """ + AD + + """ + Angola. + """ + AO + + """ + Anguilla. + """ + AI + + """ + Antigua & Barbuda. + """ + AG + + """ + Argentina. + """ + AR + + """ + Armenia. + """ + AM + + """ + Aruba. + """ + AW + + """ + Australia. + """ + AU + + """ + Austria. + """ + AT + + """ + 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. + """ + BW + + """ + Bouvet Island. + """ + BV + + """ + Brazil. + """ + BR + + """ + British Indian Ocean Territory. + """ + IO + + """ + Brunei. + """ + BN + + """ + Bulgaria. + """ + BG + + """ + Burkina Faso. + """ + BF + + """ + Burundi. + """ + BI + + """ + Cambodia. + """ + KH + + """ + Canada. + """ + CA + + """ + Cape Verde. + """ + CV + + """ + Caribbean Netherlands. + """ + BQ + + """ + Cayman Islands. + """ + KY + + """ + Central African Republic. + """ + CF + + """ + Chad. + """ + TD + + """ + Chile. + """ + CL + + """ + China. + """ + CN + + """ + Christmas Island. + """ + CX + + """ + Cocos (Keeling) Islands. + """ + CC + + """ + Colombia. + """ + CO + + """ + Comoros. + """ + KM + + """ + Congo - Brazzaville. + """ + CG + + """ + Congo - Kinshasa. + """ + CD + + """ + Cook Islands. + """ + CK + + """ + Costa Rica. + """ + CR + + """ + Croatia. + """ + HR + + """ + Cuba. + """ + CU + + """ + Curaçao. + """ + CW + + """ + Cyprus. + """ + CY + + """ + Czechia. + """ + CZ + + """ + Côte d’Ivoire. + """ + CI + + """ + Denmark. + """ + DK + + """ + Djibouti. + """ + DJ + + """ + Dominica. + """ + DM + + """ + Dominican Republic. + """ + DO + + """ + Ecuador. + """ + EC + + """ + Egypt. + """ + EG + + """ + El Salvador. + """ + SV + + """ + Equatorial Guinea. + """ + GQ + + """ + Eritrea. + """ + ER + + """ + Estonia. + """ + EE + + """ + Eswatini. + """ + SZ + + """ + Ethiopia. + """ + ET + + """ + Falkland Islands. + """ + FK + + """ + Faroe Islands. + """ + FO + + """ + Fiji. + """ + FJ + + """ + Finland. + """ + FI + + """ + France. + """ + FR + + """ + French Guiana. + """ + GF + + """ + French Polynesia. + """ + PF + + """ + French Southern Territories. + """ + TF + + """ + Gabon. + """ + GA + + """ + Gambia. + """ + GM + + """ + Georgia. + """ + GE + + """ + Germany. + """ + DE + + """ + Ghana. + """ + GH + + """ + Gibraltar. + """ + GI + + """ + Greece. + """ + GR + + """ + Greenland. + """ + GL + + """ + Grenada. + """ + GD + + """ + Guadeloupe. + """ + GP + + """ + Guatemala. + """ + GT + + """ + Guernsey. + """ + GG + + """ + Guinea. + """ + GN + + """ + Guinea-Bissau. + """ + GW + + """ + Guyana. + """ + GY + + """ + Haiti. + """ + HT + + """ + Heard & McDonald Islands. + """ + HM + + """ + Vatican City. + """ + VA + + """ + Honduras. + """ + HN + + """ + Hong Kong SAR. + """ + HK + + """ + Hungary. + """ + HU + + """ + Iceland. + """ + IS + + """ + India. + """ + IN + + """ + Indonesia. + """ + ID + + """ + Iran. + """ + IR + + """ + Iraq. + """ + IQ + + """ + Ireland. + """ + IE + + """ + Isle of Man. + """ + IM + + """ + Israel. + """ + IL + + """ + Italy. + """ + IT + + """ + Jamaica. + """ + JM + + """ + Japan. + """ + JP + + """ + Jersey. + """ + JE + + """ + Jordan. + """ + JO + + """ + Kazakhstan. + """ + KZ + + """ + Kenya. + """ + KE + + """ + Kiribati. + """ + KI + + """ + North Korea. + """ + KP + + """ + Kosovo. + """ + XK + + """ + Kuwait. + """ + KW + + """ + Kyrgyzstan. + """ + KG + + """ + Laos. + """ + LA + + """ + Latvia. + """ + LV + + """ + Lebanon. + """ + LB + + """ + Lesotho. + """ + LS + + """ + Liberia. + """ + LR + + """ + Libya. + """ + LY + + """ + Liechtenstein. + """ + LI + + """ + Lithuania. + """ + LT + + """ + Luxembourg. + """ + LU + + """ + Macao SAR. + """ + MO + + """ + Madagascar. + """ + MG + + """ + Malawi. + """ + MW + + """ + Malaysia. + """ + MY + + """ + Maldives. + """ + MV + + """ + Mali. + """ + ML + + """ + Malta. + """ + MT + + """ + Martinique. + """ + MQ + + """ + Mauritania. + """ + MR + + """ + Mauritius. + """ + MU + + """ + Mayotte. + """ + YT + + """ + Mexico. + """ + MX + + """ + Moldova. + """ + MD + + """ + Monaco. + """ + MC + + """ + Mongolia. + """ + MN + + """ + Montenegro. + """ + ME + + """ + Montserrat. + """ + MS + + """ + Morocco. + """ + MA + + """ + 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. + """ + MK + + """ + Norway. + """ + NO + + """ + Oman. + """ + OM + + """ + Pakistan. + """ + PK + + """ + Palestinian Territories. + """ + PS + + """ + Panama. + """ + PA + + """ + Papua New Guinea. + """ + PG + + """ + Paraguay. + """ + PY + + """ + Peru. + """ + PE + + """ + Philippines. + """ + PH + + """ + Pitcairn Islands. + """ + PN + + """ + Poland. + """ + PL + + """ + Portugal. + """ + PT + + """ + Qatar. + """ + QA + + """ + Cameroon. + """ + CM + + """ + Réunion. + """ + RE + + """ + Romania. + """ + RO + + """ + Russia. + """ + RU + + """ + Rwanda. + """ + 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. + """ + 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 + + """ + Sudan. + """ + SD + + """ + Suriname. + """ + SR + + """ + Svalbard & Jan Mayen. + """ + SJ + + """ + Sweden. + """ + SE + + """ + Switzerland. + """ + CH + + """ + Syria. + """ + SY + + """ + Taiwan. + """ + TW + + """ + Tajikistan. + """ + TJ + + """ + Tanzania. + """ + TZ + + """ + Thailand. + """ + TH + + """ + Timor-Leste. + """ + TL + + """ + Togo. + """ + TG + + """ + Tokelau. + """ + TK + + """ + Tonga. + """ + TO + + """ + Trinidad & Tobago. + """ + TT + + """ + Tunisia. + """ + TN + + """ + Turkey. + """ + TR + + """ + Turkmenistan. + """ + TM + + """ + Turks & Caicos Islands. + """ + TC + + """ + Tuvalu. + """ + TV + + """ + Uganda. + """ + UG + + """ + Ukraine. + """ + UA + + """ + United Arab Emirates. + """ + AE + + """ + United Kingdom. + """ + GB + + """ + United States. + """ + US + + """ + U.S. Outlying Islands. + """ + UM + + """ + Uruguay. + """ + UY + + """ + Uzbekistan. + """ + UZ + + """ + Vanuatu. + """ + VU + + """ + Venezuela. + """ + VE + + """ + Vietnam. + """ + VN + + """ + British Virgin Islands. + """ + VG + + """ + Wallis & Futuna. + """ + WF + + """ + Western Sahara. + """ + EH + + """ + Yemen. + """ + YE + + """ + Zambia. + """ + ZM + + """ + Zimbabwe. + """ + ZW +} + +""" +Credit card information used for a payment. +""" +type CreditCard { + """ + The brand of the credit card. + """ + brand: String + + """ + The expiry month of the credit card. + """ + expiryMonth: Int + + """ + The expiry year of the credit card. + """ + expiryYear: Int + + """ + The credit card's BIN number. + """ + firstDigits: String + + """ + The first name of the card holder. + """ + firstName: String + + """ + The last 4 digits of the credit card. + """ + lastDigits: String + + """ + The last name of the card holder. + """ + lastName: String + + """ + The masked credit card number with only the last 4 digits displayed. + """ + 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. + """ + idempotencyKey: String! + + """ + The billing address for the payment. + """ + billingAddress: MailingAddressInput! + + """ + The ID returned by Shopify's Card Vault. + """ + vaultId: 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. + """ + idempotencyKey: String! + + """ + The billing address for the payment. + """ + billingAddress: MailingAddressInput! + + """ + 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 left of the image. + """ + LEFT + + """ + Keep the right of the image. + """ + RIGHT +} + +""" +Currency codes. +""" +enum CurrencyCode { + """ + United States Dollars (USD). + """ + USD + + """ + Euro (EUR). + """ + EUR + + """ + United Kingdom Pounds (GBP). + """ + GBP + + """ + Canadian Dollars (CAD). + """ + CAD + + """ + Afghan Afghani (AFN). + """ + AFN + + """ + Albanian Lek (ALL). + """ + ALL + + """ + Algerian Dinar (DZD). + """ + DZD + + """ + Angolan Kwanza (AOA). + """ + AOA + + """ + Argentine Pesos (ARS). + """ + ARS + + """ + Armenian Dram (AMD). + """ + AMD + + """ + Aruban Florin (AWG). + """ + AWG + + """ + Australian Dollars (AUD). + """ + AUD + + """ + Barbadian Dollar (BBD). + """ + BBD + + """ + Azerbaijani Manat (AZN). + """ + AZN + + """ + Bangladesh Taka (BDT). + """ + BDT + + """ + Bahamian Dollar (BSD). + """ + BSD + + """ + Bahraini Dinar (BHD). + """ + BHD + + """ + Burundian Franc (BIF). + """ + BIF + + """ + Belarusian Ruble (BYN). + """ + BYN + + """ + Belarusian Ruble (BYR). + """ + BYR + + """ + 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). + """ + BGN + + """ + Burmese Kyat (MMK). + """ + MMK + + """ + Cambodian Riel. + """ + KHR + + """ + Cape Verdean escudo (CVE). + """ + CVE + + """ + Cayman Dollars (KYD). + """ + KYD + + """ + Central African CFA Franc (XAF). + """ + XAF + + """ + Chilean Peso (CLP). + """ + CLP + + """ + Chinese Yuan Renminbi (CNY). + """ + CNY + + """ + Colombian Peso (COP). + """ + COP + + """ + Comorian Franc (KMF). + """ + KMF + + """ + Congolese franc (CDF). + """ + CDF + + """ + Costa Rican Colones (CRC). + """ + CRC + + """ + Croatian Kuna (HRK). + """ + HRK + + """ + Czech Koruny (CZK). + """ + CZK + + """ + Danish Kroner (DKK). + """ + DKK + + """ + Djiboutian Franc (DJF). + """ + DJF + + """ + Dominican Peso (DOP). + """ + DOP + + """ + East Caribbean Dollar (XCD). + """ + XCD + + """ + Egyptian Pound (EGP). + """ + EGP + + """ + Eritrean Nakfa (ERN). + """ + ERN + + """ + Ethiopian Birr (ETB). + """ + ETB + + """ + Falkland Islands Pounds (FKP). + """ + FKP + + """ + CFP Franc (XPF). + """ + XPF + + """ + Fijian Dollars (FJD). + """ + FJD + + """ + Gibraltar Pounds (GIP). + """ + GIP + + """ + Gambian Dalasi (GMD). + """ + GMD + + """ + Ghanaian Cedi (GHS). + """ + GHS + + """ + Guatemalan Quetzal (GTQ). + """ + GTQ + + """ + Guyanese Dollar (GYD). + """ + GYD + + """ + Georgian Lari (GEL). + """ + GEL + + """ + Guinean Franc (GNF). + """ + GNF + + """ + Haitian Gourde (HTG). + """ + HTG + + """ + Honduran Lempira (HNL). + """ + HNL + + """ + Hong Kong Dollars (HKD). + """ + HKD + + """ + Hungarian Forint (HUF). + """ + HUF + + """ + Icelandic Kronur (ISK). + """ + ISK + + """ + Indian Rupees (INR). + """ + INR + + """ + Indonesian Rupiah (IDR). + """ + IDR + + """ + Israeli New Shekel (NIS). + """ + ILS + + """ + Iranian Rial (IRR). + """ + IRR + + """ + Iraqi Dinar (IQD). + """ + IQD + + """ + Jamaican Dollars (JMD). + """ + JMD + + """ + Japanese Yen (JPY). + """ + JPY + + """ + Jersey Pound. + """ + JEP + + """ + Jordanian Dinar (JOD). + """ + JOD + + """ + Kazakhstani Tenge (KZT). + """ + KZT + + """ + Kenyan Shilling (KES). + """ + KES + + """ + Kiribati Dollar (KID). + """ + KID + + """ + Kuwaiti Dinar (KWD). + """ + KWD + + """ + Kyrgyzstani Som (KGS). + """ + KGS + + """ + Laotian Kip (LAK). + """ + LAK + + """ + Latvian Lati (LVL). + """ + LVL + + """ + Lebanese Pounds (LBP). + """ + LBP + + """ + Lesotho Loti (LSL). + """ + LSL + + """ + Liberian Dollar (LRD). + """ + LRD + + """ + Libyan Dinar (LYD). + """ + LYD + + """ + Lithuanian Litai (LTL). + """ + LTL + + """ + Malagasy Ariary (MGA). + """ + MGA + + """ + Macedonia Denar (MKD). + """ + MKD + + """ + Macanese Pataca (MOP). + """ + MOP + + """ + Malawian Kwacha (MWK). + """ + MWK + + """ + Maldivian Rufiyaa (MVR). + """ + MVR + + """ + Mauritanian Ouguiya (MRU). + """ + MRU + + """ + Mexican Pesos (MXN). + """ + MXN + + """ + Malaysian Ringgits (MYR). + """ + MYR + + """ + Mauritian Rupee (MUR). + """ + MUR + + """ + Moldovan Leu (MDL). + """ + MDL + + """ + Moroccan Dirham. + """ + MAD + + """ + Mongolian Tugrik. + """ + MNT + + """ + Mozambican Metical. + """ + MZN + + """ + Namibian Dollar. + """ + NAD + + """ + Nepalese Rupee (NPR). + """ + NPR + + """ + Netherlands Antillean Guilder. + """ + ANG + + """ + New Zealand Dollars (NZD). + """ + NZD + + """ + Nicaraguan Córdoba (NIO). + """ + NIO + + """ + Nigerian Naira (NGN). + """ + NGN + + """ + Norwegian Kroner (NOK). + """ + NOK + + """ + Omani Rial (OMR). + """ + OMR + + """ + Panamian Balboa (PAB). + """ + PAB + + """ + Pakistani Rupee (PKR). + """ + PKR + + """ + Papua New Guinean Kina (PGK). + """ + PGK + + """ + Paraguayan Guarani (PYG). + """ + PYG + + """ + Peruvian Nuevo Sol (PEN). + """ + PEN + + """ + Philippine Peso (PHP). + """ + PHP + + """ + Polish Zlotych (PLN). + """ + PLN + + """ + Qatari Rial (QAR). + """ + QAR + + """ + Romanian Lei (RON). + """ + RON + + """ + Russian Rubles (RUB). + """ + RUB + + """ + Rwandan Franc (RWF). + """ + RWF + + """ + Samoan Tala (WST). + """ + WST + + """ + Saint Helena Pounds (SHP). + """ + SHP + + """ + Saudi Riyal (SAR). + """ + SAR + + """ + Sao Tome And Principe Dobra (STD). + """ + STD + + """ + Serbian dinar (RSD). + """ + RSD + + """ + Seychellois Rupee (SCR). + """ + SCR + + """ + Sierra Leonean Leone (SLL). + """ + SLL + + """ + Singapore Dollars (SGD). + """ + SGD + + """ + Sudanese Pound (SDG). + """ + SDG + + """ + Somali Shilling (SOS). + """ + SOS + + """ + 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). + """ + LKR + + """ + Surinamese Dollar (SRD). + """ + SRD + + """ + Swazi Lilangeni (SZL). + """ + SZL + + """ + Swedish Kronor (SEK). + """ + SEK + + """ + Swiss Francs (CHF). + """ + CHF + + """ + Taiwan Dollars (TWD). + """ + TWD + + """ + Thai baht (THB). + """ + THB + + """ + Tajikistani Somoni (TJS). + """ + TJS + + """ + Tanzanian Shilling (TZS). + """ + TZS + + """ + Tongan Pa'anga (TOP). + """ + TOP + + """ + Trinidad and Tobago Dollars (TTD). + """ + TTD + + """ + Tunisian Dinar (TND). + """ + TND + + """ + Turkish Lira (TRY). + """ + TRY + + """ + Turkmenistani Manat (TMT). + """ + TMT + + """ + Ugandan Shilling (UGX). + """ + UGX + + """ + Ukrainian Hryvnia (UAH). + """ + UAH + + """ + United Arab Emirates Dirham (AED). + """ + AED + + """ + Uruguayan Pesos (UYU). + """ + UYU + + """ + Uzbekistan som (UZS). + """ + UZS + + """ + Vanuatu Vatu (VUV). + """ + VUV + + """ + Venezuelan Bolivares (VEF). + """ + VEF + + """ + Venezuelan Bolivares (VES). + """ + VES + + """ + Vietnamese đồng (VND). + """ + VND + + """ + West African CFA franc (XOF). + """ + XOF + + """ + Yemeni Rial (YER). + """ + YER + + """ + Zambian Kwacha (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. +""" +type Customer { + """ + Indicates whether the customer has consented to be sent marketing material via email. + """ + acceptsMarketing: Boolean! + + """ + 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 + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + ): MailingAddressConnection! + + """ + The date and time when the customer was created. + """ + createdAt: DateTime! + + """ + The customer’s default address. + """ + defaultAddress: MailingAddress + + """ + The customer’s name, email or phone number. + """ + displayName: String! + + """ + The customer’s email address. + """ + email: String + + """ + The customer’s first name. + """ + firstName: String + + """ + A unique identifier for the customer. + """ + id: ID! + + """ + The customer's most recently updated, incomplete checkout. + """ + lastIncompleteCheckout: Checkout + + """ + The customer’s last name. + """ + lastName: String + + """ + 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 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: 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! + + """ + The customer’s phone number. + """ + phone: String + + """ + A comma separated list of tags that have been added to the customer. + Additional access scope required: unauthenticated_read_customer_tags. + """ + tags: [String!]! + + """ + The date and time when the customer information was updated. + """ + updatedAt: DateTime! +} + +""" +A CustomerAccessToken represents the unique token required to make modifications to the customer object. +""" +type CustomerAccessToken { + """ + The customer’s access token. + """ + accessToken: String! + + """ + The date and time when the customer access token expires. + """ + expiresAt: DateTime! +} + +""" +Specifies the input fields required to create a customer access token. +""" +input CustomerAccessTokenCreateInput { + """ + The email associated to the customer. + """ + email: String! + + """ + The login password to be used by the customer. + """ + password: String! +} + +""" +Return type for `customerAccessTokenCreate` mutation. +""" +type CustomerAccessTokenCreatePayload { + """ + The newly created customer access token object. + """ + customerAccessToken: CustomerAccessToken + + """ + List of errors that occurred executing the mutation. + """ + customerUserErrors: [CustomerUserError!]! + + """ + List of errors that occurred executing the mutation. + """ + userErrors: [UserError!]! + @deprecated(reason: "Use `customerUserErrors` instead") +} + +""" +Return type for `customerAccessTokenCreateWithMultipass` mutation. +""" +type CustomerAccessTokenCreateWithMultipassPayload { + """ + An access token object associated with the customer. + """ + customerAccessToken: CustomerAccessToken + + """ + List of errors that occurred executing the mutation. + """ + customerUserErrors: [CustomerUserError!]! +} + +""" +Return type for `customerAccessTokenDelete` mutation. +""" +type CustomerAccessTokenDeletePayload { + """ + The destroyed access token. + """ + deletedAccessToken: String + + """ + ID of the destroyed customer access token. + """ + deletedCustomerAccessTokenId: String + + """ + List of errors that occurred executing the mutation. + """ + userErrors: [UserError!]! +} + +""" +Return type for `customerAccessTokenRenew` mutation. +""" +type CustomerAccessTokenRenewPayload { + """ + The renewed customer access token object. + """ + customerAccessToken: CustomerAccessToken + + """ + List of errors that occurred executing the mutation. + """ + userErrors: [UserError!]! +} + +""" +Return type for `customerActivateByUrl` mutation. +""" +type CustomerActivateByUrlPayload { + """ + The customer that was activated. + """ + customer: Customer + + """ + A new customer access token for the customer. + """ + customerAccessToken: CustomerAccessToken + + """ + List of errors that occurred executing the mutation. + """ + customerUserErrors: [CustomerUserError!]! +} + +""" +Specifies the input fields required to activate a customer. +""" +input CustomerActivateInput { + """ + The activation token required to activate the customer. + """ + activationToken: String! + + """ + New password that will be set during activation. + """ + password: String! +} + +""" +Return type for `customerActivate` mutation. +""" +type CustomerActivatePayload { + """ + The customer object. + """ + customer: Customer + + """ + A newly created customer access token object for the customer. + """ + customerAccessToken: CustomerAccessToken + + """ + List of errors that occurred executing the mutation. + """ + customerUserErrors: [CustomerUserError!]! + + """ + List of errors that occurred executing the mutation. + """ + userErrors: [UserError!]! + @deprecated(reason: "Use `customerUserErrors` instead") +} + +""" +Return type for `customerAddressCreate` mutation. +""" +type CustomerAddressCreatePayload { + """ + The new customer address object. + """ + customerAddress: MailingAddress + + """ + List of errors that occurred executing the mutation. + """ + customerUserErrors: [CustomerUserError!]! + + """ + List of errors that occurred executing the mutation. + """ + userErrors: [UserError!]! + @deprecated(reason: "Use `customerUserErrors` instead") +} + +""" +Return type for `customerAddressDelete` mutation. +""" +type CustomerAddressDeletePayload { + """ + List of errors that occurred executing the mutation. + """ + customerUserErrors: [CustomerUserError!]! + + """ + ID of the deleted customer address. + """ + deletedCustomerAddressId: String + + """ + List of errors that occurred executing the mutation. + """ + userErrors: [UserError!]! + @deprecated(reason: "Use `customerUserErrors` instead") +} + +""" +Return type for `customerAddressUpdate` mutation. +""" +type CustomerAddressUpdatePayload { + """ + The customer’s updated mailing address. + """ + customerAddress: MailingAddress + + """ + List of errors that occurred executing the mutation. + """ + customerUserErrors: [CustomerUserError!]! + + """ + List of errors that occurred executing the mutation. + """ + userErrors: [UserError!]! + @deprecated(reason: "Use `customerUserErrors` instead") +} + +""" +Specifies the fields required to create a new customer. +""" +input CustomerCreateInput { + """ + The customer’s first name. + """ + firstName: String + + """ + The customer’s last name. + """ + 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 +} + +""" +Return type for `customerCreate` mutation. +""" +type CustomerCreatePayload { + """ + The created customer object. + """ + customer: Customer + + """ + List of errors that occurred executing the mutation. + """ + customerUserErrors: [CustomerUserError!]! + + """ + List of errors that occurred executing the mutation. + """ + userErrors: [UserError!]! + @deprecated(reason: "Use `customerUserErrors` instead") +} + +""" +Return type for `customerDefaultAddressUpdate` mutation. +""" +type CustomerDefaultAddressUpdatePayload { + """ + The updated customer object. + """ + customer: Customer + + """ + List of errors that occurred executing the mutation. + """ + customerUserErrors: [CustomerUserError!]! + + """ + List of errors that occurred executing the mutation. + """ + userErrors: [UserError!]! + @deprecated(reason: "Use `customerUserErrors` instead") +} + +""" +Possible error codes that could be returned by CustomerUserError. +""" +enum CustomerErrorCode { + """ + 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. + """ + CONTAINS_HTML_TAGS + + """ + Input contains URL. + """ + CONTAINS_URL + + """ + Invalid activation token. + """ + TOKEN_INVALID + + """ + Customer already enabled. + """ + ALREADY_ENABLED + + """ + Address does not exist. + """ + NOT_FOUND + + """ + Input email contains an invalid domain name. + """ + BAD_DOMAIN + + """ + Multipass token is not valid. + """ + INVALID_MULTIPASS_REQUEST +} + +""" +Return type for `customerRecover` mutation. +""" +type CustomerRecoverPayload { + """ + List of errors that occurred executing the mutation. + """ + customerUserErrors: [CustomerUserError!]! + + """ + List of errors that occurred executing the mutation. + """ + userErrors: [UserError!]! + @deprecated(reason: "Use `customerUserErrors` instead") +} + +""" +Return type for `customerResetByUrl` mutation. +""" +type CustomerResetByUrlPayload { + """ + The customer object which was reset. + """ + customer: Customer + + """ + A newly created customer access token object for the customer. + """ + customerAccessToken: CustomerAccessToken + + """ + List of errors that occurred executing the mutation. + """ + customerUserErrors: [CustomerUserError!]! + + """ + List of errors that occurred executing the mutation. + """ + userErrors: [UserError!]! + @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! +} + +""" +Return type for `customerReset` mutation. +""" +type CustomerResetPayload { + """ + The customer object which was reset. + """ + customer: Customer + + """ + A newly created customer access token object for the customer. + """ + customerAccessToken: CustomerAccessToken + + """ + List of errors that occurred executing the mutation. + """ + customerUserErrors: [CustomerUserError!]! + + """ + List of errors that occurred executing the mutation. + """ + userErrors: [UserError!]! + @deprecated(reason: "Use `customerUserErrors` instead") +} + +""" +Specifies the fields required to update the Customer information. +""" +input CustomerUpdateInput { + """ + The customer’s first name. + """ + firstName: String + + """ + The customer’s last name. + """ + 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 +} + +""" +Return type for `customerUpdate` mutation. +""" +type CustomerUpdatePayload { + """ + The updated customer object. + """ + 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. + """ + customerAccessToken: CustomerAccessToken + + """ + List of errors that occurred executing the mutation. + """ + customerUserErrors: [CustomerUserError!]! + + """ + List of errors that occurred executing the mutation. + """ + userErrors: [UserError!]! + @deprecated(reason: "Use `customerUserErrors` instead") +} + +""" +Represents an error that happens during execution of a customer mutation. +""" +type CustomerUserError implements DisplayableError { + """ + Error code to uniquely identify the error. + """ + code: CustomerErrorCode + + """ + Path to the input field which caused the error. + """ + field: [String!] + + """ + The error message. + """ + message: String! +} + +""" +An ISO-8601 encoded UTC date time string. Example value: `"2019-07-03T20:47:55Z"`. +""" +scalar DateTime + +""" +A signed decimal number, which supports arbitrary precision and is serialized as a string. Example value: `"29.99"`. +""" +scalar Decimal + +""" +Digital wallet, such as Apple Pay, which can be used for accelerated checkouts. +""" +enum DigitalWallet { + """ + Apple Pay. + """ + APPLE_PAY + + """ + Android Pay. + """ + ANDROID_PAY + + """ + Google Pay. + """ + GOOGLE_PAY + + """ + Shopify Pay. + """ + SHOPIFY_PAY +} + +""" +An amount discounting the line that has been allocated by a discount. +""" +type DiscountAllocation { + """ + Amount of discount allocated. + """ + allocatedAmount: MoneyV2! + + """ + The discount this allocated amount originated from. + """ + discountApplication: DiscountApplication! +} + +""" +Discount applications capture the intentions of a discount source at +the time of application. +""" +interface DiscountApplication { + """ + The method by which the discount's value is allocated to its entitled items. + """ + allocationMethod: DiscountApplicationAllocationMethod! + + """ + Which lines of targetType that the discount is allocated over. + """ + targetSelection: DiscountApplicationTargetSelection! + + """ + The type of line that the discount is applicable towards. + """ + targetType: DiscountApplicationTargetType! + + """ + The value of the discount application. + """ + value: PricingValue! +} + +""" +The method by which the discount's value is allocated onto its entitled lines. +""" +enum DiscountApplicationAllocationMethod { + """ + The value is spread across all entitled lines. + """ + ACROSS + + """ + The value is applied onto every entitled line. + """ + EACH + + """ + The value is specifically applied onto a particular line. + """ + ONE +} + +""" +An auto-generated type for paginating through multiple DiscountApplications. +""" +type DiscountApplicationConnection { + """ + A list of edges. + """ + edges: [DiscountApplicationEdge!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +An auto-generated type which holds one DiscountApplication and a cursor during pagination. +""" +type DiscountApplicationEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of 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. +""" +enum DiscountApplicationTargetSelection { + """ + The discount is allocated onto all the lines. + """ + ALL + + """ + The discount is allocated onto only the lines it is entitled for. + """ + ENTITLED + + """ + The discount is allocated onto explicitly chosen lines. + """ + EXPLICIT +} + +""" +The type of line (i.e. line item or shipping line) on an order that the discount is applicable towards. +""" +enum DiscountApplicationTargetType { + """ + The discount applies onto line items. + """ + LINE_ITEM + + """ + The discount applies onto shipping lines. + """ + SHIPPING_LINE +} + +""" +Discount code applications capture the intentions of a discount code at +the time that it is applied. +""" +type DiscountCodeApplication implements DiscountApplication { + """ + The method by which the discount's value is allocated to its entitled items. + """ + allocationMethod: DiscountApplicationAllocationMethod! + + """ + Specifies whether the discount code was applied successfully. + """ + applicable: Boolean! + + """ + The string identifying the discount code that was used at the time of application. + """ + code: String! + + """ + Which lines of targetType that the discount is allocated over. + """ + targetSelection: DiscountApplicationTargetSelection! + + """ + The type of line that the discount is applicable towards. + """ + targetType: DiscountApplicationTargetType! + + """ + The value of the discount application. + """ + value: PricingValue! +} + +""" +Represents an error in the input of a mutation. +""" +interface DisplayableError { + """ + Path to the input field which caused the error. + """ + field: [String!] + + """ + The error message. + """ + message: String! +} + +""" +Represents a web address. +""" +type Domain { + """ + The host name of the domain (eg: `example.com`). + """ + host: String! + + """ + Whether SSL is enabled or not. + """ + sslEnabled: Boolean! + + """ + The URL of the domain (eg: `https://example.com`). + """ + url: URL! +} + +""" +Represents a video hosted outside of Shopify. +""" +type ExternalVideo implements Node & Media { + """ + A word or phrase to share the nature or contents of a media. + """ + alt: String + + """ + The URL. + """ + embeddedUrl: URL! + + """ + Globally unique identifier. + """ + id: ID! + + """ + The media content type. + """ + mediaContentType: MediaContentType! + + """ + The preview image for the media. + """ + previewImage: Image +} + +""" +Represents a single fulfillment in an order. +""" +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 + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + ): FulfillmentLineItemConnection! + + """ + The name of the tracking company. + """ + trackingCompany: String + + """ + Tracking information associated with the fulfillment, + such as the tracking number and tracking URL. + """ + trackingInfo( + """ + Truncate the array result to this size. + """ + first: Int + ): [FulfillmentTrackingInfo!]! +} + +""" +Represents a single line item in a fulfillment. There is at most one fulfillment line item for each order line item. +""" +type FulfillmentLineItem { + """ + The associated order's line item. + """ + lineItem: OrderLineItem! + + """ + The amount fulfilled in this fulfillment. + """ + quantity: Int! +} + +""" +An auto-generated type for paginating through multiple FulfillmentLineItems. +""" +type FulfillmentLineItemConnection { + """ + A list of edges. + """ + edges: [FulfillmentLineItemEdge!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +An auto-generated type which holds one FulfillmentLineItem and a cursor during pagination. +""" +type FulfillmentLineItemEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of FulfillmentLineItemEdge. + """ + node: FulfillmentLineItem! +} + +""" +Tracking information associated with the fulfillment. +""" +type FulfillmentTrackingInfo { + """ + The tracking number of the fulfillment. + """ + number: String + + """ + The URL to track the fulfillment. + """ + url: URL +} + +""" +A string containing HTML code. Example value: `"<p>Grey cotton knit sweater.</p>"`. +""" +scalar HTML + +""" +Represents information about the metafields associated to the specified resource. +""" +interface HasMetafields { + """ + The metafield associated with the resource. + """ + metafield( + """ + Container for a set of metafields (maximum of 20 characters). + """ + namespace: String! + + """ + Identifier for the metafield (maximum of 30 characters). + """ + key: String! + ): Metafield + + """ + A paginated list of metafields associated with the resource. + """ + metafields( + """ + Container for a set of metafields (maximum of 20 characters). + """ + 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! +} + +""" +Represents an image resource. +""" +type Image { + """ + A word or phrase to share the nature or contents of an image. + """ + altText: String + + """ + The original height of the image in pixels. Returns `null` if the image is not hosted by Shopify. + """ + height: Int + + """ + A unique identifier for the 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 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" + ) + + """ + 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. + """ + transformedSrc( + """ + Image width in pixels between 1 and 5760. + """ + maxWidth: Int + + """ + Image height in pixels between 1 and 5760. + """ + maxHeight: Int + + """ + Crops the image according to the specified region. + """ + crop: CropRegion + + """ + Image size multiplier for high-resolution retina displays. Must be between 1 and 3. + """ + scale: Int = 1 + + """ + Best effort conversion of image into content type (SVG -> PNG, Anything -> JGP, Anything -> WEBP are supported). + """ + preferredContentType: ImageContentType + ): URL! + + """ + The original width of the image in pixels. Returns `null` if the image is not hosted by Shopify. + """ + width: Int +} + +""" +An auto-generated type for paginating through multiple Images. +""" +type ImageConnection { + """ + A list of edges. + """ + edges: [ImageEdge!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +List of supported image content types. +""" +enum ImageContentType { + """ + A PNG image. + """ + PNG + + """ + A JPG image. + """ + JPG + + """ + A WEBP image. + """ + WEBP +} + +""" +An auto-generated type which holds one Image and a cursor during pagination. +""" +type ImageEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of ImageEdge. + """ + node: Image! +} + +""" +Represents a mailing address for customers and shipping. +""" +type MailingAddress implements Node { + """ + The first line of the address. Typically the street address or PO Box number. + """ + address1: String + + """ + The second line of the address. Typically the number of the apartment, suite, or unit. + """ + address2: String + + """ + The name of the city, district, village, or town. + """ + city: String + + """ + The name of the customer's company or organization. + """ + company: String + + """ + The name of the country. + """ + country: String + + """ + The two-letter code for the country of the address. + + For example, US. + """ + countryCode: String @deprecated(reason: "Use `countryCodeV2` instead") + + """ + The two-letter code for the country of the address. + + For example, US. + """ + countryCodeV2: CountryCode + + """ + The first name of the customer. + """ + firstName: String + + """ + 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 + ): [String!]! + + """ + A comma-separated list of the values for city, province, and country. + """ + formattedArea: String + + """ + Globally unique identifier. + """ + id: ID! + + """ + The last name of the customer. + """ + lastName: String + + """ + The latitude coordinate of the customer address. + """ + latitude: Float + + """ + The longitude coordinate of the customer address. + """ + longitude: Float + + """ + The full name of the customer, based on firstName and lastName. + """ + name: String + + """ + A unique phone number for the customer. + + Formatted using E.164 standard. For example, _+16135551111_. + """ + phone: String + + """ + The region of the address, such as the province, state, or district. + """ + province: String + + """ + The two-letter code for the region. + + For example, ON. + """ + provinceCode: String + + """ + The zip or postal code of the address. + """ + zip: String +} + +""" +An auto-generated type for paginating through multiple MailingAddresses. +""" +type MailingAddressConnection { + """ + A list of edges. + """ + edges: [MailingAddressEdge!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +An auto-generated type which holds one MailingAddress and a cursor during pagination. +""" +type MailingAddressEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of MailingAddressEdge. + """ + node: MailingAddress! +} + +""" +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. + """ + address1: String + + """ + The second line of the address. Typically the number of the apartment, suite, or unit. + """ + address2: String + + """ + The name of the city, district, village, or town. + """ + city: String + + """ + The name of the customer's company or organization. + """ + company: String + + """ + The name of the country. + """ + country: String + + """ + The first name of the customer. + """ + firstName: String + + """ + The last name of the customer. + """ + lastName: String + + """ + A unique phone number for the customer. + + Formatted using E.164 standard. For example, _+16135551111_. + """ + phone: String + + """ + The region of the address, such as the province, state, or district. + """ + province: String + + """ + The zip or postal code of the address. + """ + zip: String +} + +""" +Manual discount applications capture the intentions of a discount that was manually created. +""" +type ManualDiscountApplication implements DiscountApplication { + """ + The method by which the discount's value is allocated to its entitled items. + """ + allocationMethod: DiscountApplicationAllocationMethod! + + """ + The description of the application. + """ + description: String + + """ + Which lines of targetType that the discount is allocated over. + """ + targetSelection: DiscountApplicationTargetSelection! + + """ + The type of line that the discount is applicable towards. + """ + targetType: DiscountApplicationTargetType! + + """ + The title of the application. + """ + title: String! + + """ + The value of the discount application. + """ + value: PricingValue! +} + +""" +Represents a media interface. +""" +interface Media { + """ + A word or phrase to share the nature or contents of a media. + """ + alt: String + + """ + The media content type. + """ + mediaContentType: MediaContentType! + + """ + The preview image for the media. + """ + previewImage: Image +} + +""" +An auto-generated type for paginating through multiple Media. +""" +type MediaConnection { + """ + A list of edges. + """ + edges: [MediaEdge!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +The possible content types for a media object. +""" +enum MediaContentType { + """ + An externally hosted video. + """ + EXTERNAL_VIDEO + + """ + A Shopify hosted image. + """ + IMAGE + + """ + A 3d model. + """ + MODEL_3D + + """ + A Shopify hosted video. + """ + VIDEO +} + +""" +An auto-generated type which holds one Media and a cursor during pagination. +""" +type MediaEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of MediaEdge. + """ + node: Media! +} + +""" +Represents a Shopify hosted image. +""" +type MediaImage implements Node & Media { + """ + A word or phrase to share the nature or contents of a media. + """ + alt: String + + """ + Globally unique identifier. + """ + id: ID! + + """ + The image for the media. + """ + image: Image + + """ + The media content type. + """ + mediaContentType: MediaContentType! + + """ + The preview image for the media. + """ + previewImage: Image +} + +""" +Metafields represent custom metadata attached to a resource. Metafields can be sorted into namespaces and are +comprised of keys, values, and value types. +""" +type Metafield implements Node { + """ + The date and time when the storefront metafield was created. + """ + createdAt: DateTime! + + """ + The description of a metafield. + """ + description: String + + """ + Globally unique identifier. + """ + id: ID! + + """ + The key name for a metafield. + """ + key: String! + + """ + The namespace for a metafield. + """ + namespace: String! + + """ + The parent object that the metafield belongs to. + """ + parentResource: MetafieldParentResource! + + """ + The date and time when the storefront metafield was updated. + """ + updatedAt: DateTime! + + """ + 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 list of edges. + """ + edges: [MetafieldEdge!]! + + """ + Information to aid in pagination. + """ + 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! + + """ + The item at the end of MetafieldEdge. + """ + node: Metafield! +} + +""" +A resource that the metafield belongs to. +""" +union MetafieldParentResource = Product | ProductVariant + +""" +Metafield value types. +""" +enum MetafieldValueType { + """ + A string metafield. + """ + STRING + + """ + An integer metafield. + """ + INTEGER + + """ + A json string metafield. + """ + JSON_STRING +} + +""" +Represents a Shopify hosted 3D model. +""" +type Model3d implements Node & Media { + """ + A word or phrase to share the nature or contents of a media. + """ + alt: String + + """ + Globally unique identifier. + """ + id: ID! + + """ + The media content type. + """ + mediaContentType: MediaContentType! + + """ + The preview image for the media. + """ + previewImage: Image + + """ + The sources for a 3d model. + """ + sources: [Model3dSource!]! +} + +""" +Represents a source for a Shopify hosted 3d model. +""" +type Model3dSource { + """ + The filesize of the 3d model. + """ + filesize: Int! + + """ + The format of the 3d model. + """ + format: String! + + """ + The MIME type of the 3d model. + """ + mimeType: String! + + """ + The URL of the 3d model. + """ + url: String! +} + +""" +A monetary value string. Example value: `"100.57"`. +""" +scalar Money + +""" +Specifies the fields for a monetary value with currency. +""" +input MoneyInput { + """ + Decimal money amount. + """ + amount: Decimal! + + """ + Currency of the money. + """ + 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)). +""" +type MoneyV2 { + """ + Decimal money amount. + """ + amount: Decimal! + + """ + Currency of the money. + """ + 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. + """ + checkoutAttributesUpdate( + """ + The ID of the checkout. + """ + checkoutId: ID! + + """ + The fields used to update a checkout's attributes. + """ + input: CheckoutAttributesUpdateInput! + ): CheckoutAttributesUpdatePayload + @deprecated(reason: "Use `checkoutAttributesUpdateV2` instead") + + """ + Updates the attributes of a checkout. + """ + checkoutAttributesUpdateV2( + """ + The ID of the checkout. + """ + checkoutId: ID! + + """ + The checkout attributes to update. + """ + input: CheckoutAttributesUpdateV2Input! + ): CheckoutAttributesUpdateV2Payload + + """ + 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( + """ + The ID of the checkout. + """ + checkoutId: ID! + ): 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). + """ + checkoutCompleteWithCreditCardV2( + """ + The ID of the checkout. + """ + checkoutId: ID! + + """ + The credit card info to apply as a payment. + """ + 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. + """ + checkoutCompleteWithTokenizedPaymentV3( + """ + The ID of the checkout. + """ + checkoutId: ID! + + """ + The info to apply as a tokenized payment. + """ + payment: TokenizedPaymentInputV3! + ): CheckoutCompleteWithTokenizedPaymentV3Payload + + """ + Creates a new checkout. + """ + checkoutCreate( + """ + The fields used to create a checkout. + """ + input: CheckoutCreateInput! + ): 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. + """ + checkoutCustomerAssociateV2( + """ + The ID of the checkout. + """ + checkoutId: ID! + + """ + The customer access token of the customer to associate. + """ + 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. + """ + checkoutCustomerDisassociateV2( + """ + The ID of the checkout. + """ + 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! + ): CheckoutDiscountCodeApplyV2Payload + + """ + Removes the applied discount from an existing checkout. + """ + checkoutDiscountCodeRemove( + """ + The ID of the checkout. + """ + 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. + """ + checkoutEmailUpdateV2( + """ + The ID of the checkout. + """ + checkoutId: ID! + + """ + The email to update the checkout with. + """ + 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. + """ + checkoutGiftCardRemoveV2( + """ + The ID of the Applied Gift Card to remove from the Checkout. + """ + appliedGiftCardId: ID! + + """ + The ID of the checkout. + """ + checkoutId: ID! + ): CheckoutGiftCardRemoveV2Payload + + """ + 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! + ): 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! + ): CheckoutLineItemsAddPayload + + """ + Removes line items from an existing checkout. + """ + checkoutLineItemsRemove( + """ + The checkout on which to remove line items. + """ + checkoutId: ID! + + """ + Line item ids to remove. + """ + lineItemIds: [ID!]! + ): CheckoutLineItemsRemovePayload + + """ + 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! + ): CheckoutLineItemsReplacePayload + + """ + Updates line items on a checkout. + """ + checkoutLineItemsUpdate( + """ + The checkout on which to update line items. + """ + checkoutId: ID! + + """ + Line items to update. + """ + 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! + ): CheckoutShippingAddressUpdateV2Payload + + """ + Updates the shipping lines on an existing checkout. + """ + checkoutShippingLineUpdate( + """ + The ID of the checkout. + """ + checkoutId: ID! + + """ + A unique identifier to a Checkout’s shipping provider, price, and title combination, enabling the customer to select the availableShippingRates. + """ + shippingRateHandle: String! + ): CheckoutShippingLineUpdatePayload + + """ + Creates a customer access token. + The customer access token is required to modify the customer object in any way. + """ + customerAccessTokenCreate( + """ + The fields used to create a customer access token. + """ + 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. + """ + customerAccessTokenCreateWithMultipass( + """ + A valid multipass token to be authenticated. + """ + multipassToken: String! + ): CustomerAccessTokenCreateWithMultipassPayload + + """ + Permanently destroys a customer access token. + """ + customerAccessTokenDelete( + """ + The access token used to identify the customer. + """ + 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`. + """ + customerAccessTokenRenew( + """ + The access token used to identify the customer. + """ + customerAccessToken: String! + ): CustomerAccessTokenRenewPayload + + """ + Activates a customer. + """ + customerActivate( + """ + Specifies the customer to activate. + """ + id: ID! + + """ + The fields used to activate a customer. + """ + input: CustomerActivateInput! + ): CustomerActivatePayload + + """ + Activates a customer with the activation url received from `customerCreate`. + """ + customerActivateByUrl( + """ + The customer activation URL. + """ + activationUrl: URL! + + """ + A new password set during activation. + """ + password: String! + ): CustomerActivateByUrlPayload + + """ + 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! + ): 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! + ): CustomerAddressDeletePayload + + """ + Updates the address of an existing customer. + """ + customerAddressUpdate( + """ + The access token used to identify the customer. + """ + customerAccessToken: String! + + """ + Specifies the customer address to update. + """ + id: ID! + + """ + The customer’s mailing address. + """ + address: MailingAddressInput! + ): CustomerAddressUpdatePayload + + """ + Creates a new customer. + """ + customerCreate( + """ + The fields used to create a new customer. + """ + input: CustomerCreateInput! + ): CustomerCreatePayload + + """ + 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! + ): CustomerDefaultAddressUpdatePayload + + """ + Sends a reset password email to the customer, as the first step in the reset password process. + """ + customerRecover( + """ + The email address of the customer to recover. + """ + email: String! + ): CustomerRecoverPayload + + """ + Resets a customer’s password with a token received from `CustomerRecover`. + """ + customerReset( + """ + Specifies the customer to reset. + """ + id: ID! + + """ + The fields used to reset a customer’s password. + """ + input: CustomerResetInput! + ): CustomerResetPayload + + """ + Resets a customer’s password with the reset password url received from `CustomerRecover`. + """ + customerResetByUrl( + """ + The customer's reset password url. + """ + resetUrl: URL! + + """ + New password that will be set as part of the reset password process. + """ + password: String! + ): CustomerResetByUrlPayload + + """ + Updates an existing customer. + """ + customerUpdate( + """ + The access token used to identify the customer. + """ + customerAccessToken: String! + + """ + The customer object input. + """ + customer: CustomerUpdateInput! + ): CustomerUpdatePayload +} + +""" +An object with an ID to support global identification. +""" +interface Node { + """ + Globally unique identifier. + """ + id: ID! +} + +""" +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 { + """ + The reason for the order's cancellation. Returns `null` if the order wasn't canceled. + """ + cancelReason: OrderCancelReason + + """ + The date and time when the order was canceled. Returns null if the order wasn't canceled. + """ + canceledAt: DateTime + + """ + 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: String + + """ + The unique URL that the customer can use to access the order. + """ + customerUrl: URL + + """ + 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 + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + ): DiscountApplicationConnection! + + """ + Whether the order has had any edits applied or not. + """ + edited: Boolean! + + """ + The customer's email address. + """ + email: String + + """ + The financial status of the order. + """ + financialStatus: OrderFinancialStatus + + """ + The fulfillment status for the order. + """ + fulfillmentStatus: OrderFulfillmentStatus! + + """ + Globally unique identifier. + """ + id: ID! + + """ + 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 + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + ): OrderLineItemConnection! + + """ + Unique identifier for the order that appears on the order. + For example, _#1000_ or _Store1001. + """ + name: String! + + """ + A unique numeric identifier for the order for use by shop owner and customer. + """ + orderNumber: Int! + + """ + The total price of the order before any applied edits. + """ + originalTotalPrice: MoneyV2! + + """ + The customer's phone number for receiving SMS notifications. + """ + 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. + """ + processedAt: DateTime! + + """ + The address to where the order will be shipped. + """ + shippingAddress: MailingAddress + + """ + The discounts that have been allocated onto the shipping line by discount applications. + """ + shippingDiscountAllocations: [DiscountAllocation!]! + + """ + The unique URL for the order's status page. + """ + statusUrl: URL! + + """ + Price of the order before shipping and taxes. + """ + subtotalPrice: Money @deprecated(reason: "Use `subtotalPriceV2` instead") + + """ + Price of the order before duties, shipping and taxes. + """ + subtotalPriceV2: MoneyV2 + + """ + List of the order’s successful fulfillments. + """ + successfulFulfillments( + """ + Truncate the array result to this size. + """ + first: Int + ): [Fulfillment!] + + """ + 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") + + """ + 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. + """ + totalRefunded: Money! @deprecated(reason: "Use `totalRefundedV2` instead") + + """ + The total amount that has been refunded. + """ + totalRefundedV2: MoneyV2! + + """ + The total cost of shipping. + """ + totalShippingPrice: Money! + @deprecated(reason: "Use `totalShippingPriceV2` instead") + + """ + The total cost of shipping. + """ + totalShippingPriceV2: MoneyV2! + + """ + The total cost of taxes. + """ + totalTax: Money @deprecated(reason: "Use `totalTaxV2` instead") + + """ + The total cost of taxes. + """ + totalTaxV2: MoneyV2 +} + +""" +Represents the reason for the order's cancellation. +""" +enum OrderCancelReason { + """ + The customer wanted to cancel the order. + """ + CUSTOMER + + """ + The order was fraudulent. + """ + FRAUD + + """ + There was insufficient inventory. + """ + INVENTORY + + """ + Payment was declined. + """ + DECLINED + + """ + The order was canceled for an unlisted reason. + """ + OTHER +} + +""" +An auto-generated type for paginating through multiple Orders. +""" +type OrderConnection { + """ + A list of edges. + """ + edges: [OrderEdge!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +An auto-generated type which holds one Order and a cursor during pagination. +""" +type OrderEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of OrderEdge. + """ + node: Order! +} + +""" +Represents the order's current financial status. +""" +enum OrderFinancialStatus { + """ + Displayed as **Pending**. + """ + PENDING + + """ + Displayed as **Authorized**. + """ + AUTHORIZED + + """ + Displayed as **Partially paid**. + """ + PARTIALLY_PAID + + """ + Displayed as **Partially refunded**. + """ + PARTIALLY_REFUNDED + + """ + Displayed as **Voided**. + """ + VOIDED + + """ + Displayed as **Paid**. + """ + PAID + + """ + Displayed as **Refunded**. + """ + REFUNDED +} + +""" +Represents the order's current fulfillment status. +""" +enum OrderFulfillmentStatus { + """ + Displayed as **Unfulfilled**. + """ + UNFULFILLED + + """ + Displayed as **Partially fulfilled**. + """ + PARTIALLY_FULFILLED + + """ + Displayed as **Fulfilled**. + """ + FULFILLED + + """ + Displayed as **Restocked**. + """ + RESTOCKED + + """ + Displayed as **Pending fulfillment**. + """ + PENDING_FULFILLMENT + + """ + Displayed as **Open**. + """ + OPEN + + """ + Displayed as **In progress**. + """ + IN_PROGRESS + + """ + Displayed as **Scheduled**. + """ + SCHEDULED +} + +""" +Represents a single line in an order. There is one line item for each distinct product variant. +""" +type OrderLineItem { + """ + The number of entries associated to the line item minus the items that have been removed. + """ + currentQuantity: Int! + + """ + List of custom attributes associated to the line item. + """ + customAttributes: [Attribute!]! + + """ + The discounts that have been allocated onto the order line item by discount applications. + """ + discountAllocations: [DiscountAllocation!]! + + """ + The total price of the line item, including discounts, and displayed in the presentment currency. + """ + discountedTotalPrice: MoneyV2! + + """ + The total price of the line item, not including any discounts. The total price is calculated using the original unit price multiplied by the quantity, and it is displayed in the presentment currency. + """ + originalTotalPrice: MoneyV2! + + """ + The number of products variants associated to the line item. + """ + quantity: Int! + + """ + The title of the product combined with title of the variant. + """ + title: String! + + """ + The product variant object associated to the line item. + """ + variant: ProductVariant +} + +""" +An auto-generated type for paginating through multiple OrderLineItems. +""" +type OrderLineItemConnection { + """ + A list of edges. + """ + edges: [OrderLineItemEdge!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +An auto-generated type which holds one OrderLineItem and a cursor during pagination. +""" +type OrderLineItemEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of OrderLineItemEdge. + """ + node: OrderLineItem! +} + +""" +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. + """ + RELEVANCE +} + +""" +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 { + """ + The description of the page, complete with HTML formatting. + """ + body: HTML! + + """ + Summary of the page body. + """ + bodySummary: String! + + """ + The timestamp of the page creation. + """ + createdAt: DateTime! + + """ + A human-friendly unique string for the page automatically generated from its title. + """ + handle: String! + + """ + Globally unique identifier. + """ + id: ID! + + """ + The page's SEO information. + """ + seo: SEO + + """ + The title of the page. + """ + title: String! + + """ + 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. +""" +type PageConnection { + """ + A list of edges. + """ + edges: [PageEdge!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +An auto-generated type which holds one Page and a cursor during pagination. +""" +type PageEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of PageEdge. + """ + node: Page! +} + +""" +Information about pagination in a connection. +""" +type PageInfo { + """ + Indicates if there are more pages to fetch. + """ + hasNextPage: Boolean! + + """ + Indicates if there are any pages prior to the current page. + """ + hasPreviousPage: Boolean! +} + +""" +The set of valid sort keys for the Page query. +""" +enum PageSortKeys { + """ + Sort by the `title` value. + """ + TITLE + + """ + 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 +} + +""" +A payment applied to a checkout. +""" +type Payment implements Node { + """ + The amount of the payment. + """ + amount: Money! @deprecated(reason: "Use `amountV2` instead") + + """ + The amount of the payment. + """ + amountV2: MoneyV2! + + """ + The billing address for the payment. + """ + billingAddress: MailingAddress + + """ + The checkout to which the payment belongs. + """ + checkout: Checkout! + + """ + The credit card used for the payment in the case of direct payments. + """ + creditCard: CreditCard + + """ + A message describing a processing error during asynchronous processing. + """ + errorMessage: String + + """ + Globally unique identifier. + """ + id: ID! + + """ + A client-side generated token to identify a payment and perform idempotent operations. + """ + idempotencyKey: String + + """ + The URL where the customer needs to be redirected so they can complete the 3D Secure payment flow. + """ + nextActionUrl: URL + + """ + Whether or not the payment is still processing asynchronously. + """ + ready: Boolean! + + """ + A flag to indicate if the payment is to be done in test mode for gateways that support it. + """ + test: Boolean! + + """ + The actual transaction recorded by Shopify after having processed the payment with the gateway. + """ + transaction: Transaction +} + +""" +Settings related to payments. +""" +type PaymentSettings { + """ + List of the card brands which the shop accepts. + """ + acceptedCardBrands: [CardBrand!]! + + """ + The url pointing to the endpoint to vault credit cards. + """ + cardVaultUrl: URL! + + """ + The country where the shop is located. + """ + countryCode: CountryCode! + + """ + The three-letter code for the shop's primary currency. + """ + currencyCode: CurrencyCode! + + """ + A list of enabled currencies (ISO 4217 format) that the shop accepts. Merchants can enable currencies from their Shopify Payments settings in the Shopify admin. + """ + enabledPresentmentCurrencies: [CurrencyCode!]! + + """ + The shop’s Shopify Payments account id. + """ + shopifyPaymentsAccountId: String + + """ + List of the digital wallets which the shop supports. + """ + supportedDigitalWallets: [DigitalWallet!]! +} + +""" +The valid values for the types of payment token. +""" +enum PaymentTokenType { + """ + Apple Pay token type. + """ + APPLE_PAY + + """ + Vault payment token type. + """ + VAULT + + """ + Shopify Pay token type. + """ + SHOPIFY_PAY + + """ + Google Pay token type. + """ + GOOGLE_PAY +} + +""" +The value of the percentage pricing object. +""" +type PricingPercentageValue { + """ + The percentage value of the object. + """ + percentage: Float! +} + +""" +The price value (fixed or percentage) for a discount application. +""" +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 { + """ + Indicates if at least one product variant is available for sale. + """ + availableForSale: Boolean! + + """ + 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 + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + ): CollectionConnection! + + """ + The compare at price of the product across all variants. + """ + compareAtPriceRange: ProductPriceRange! + + """ + The date and time when the product was created. + """ + createdAt: DateTime! + + """ + Stripped description of the product, single line with HTML tags removed. + """ + description( + """ + Truncates string after the given length. + """ + truncateAt: Int + ): String! + + """ + The description of the product, complete with HTML formatting. + """ + 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. + """ + handle: String! + + """ + Globally unique identifier. + """ + id: ID! + + """ + 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 + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + + """ + 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 + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + + """ + Sort the underlying list by the given key. + """ + sortKey: ProductMediaSortKeys = POSITION + ): MediaConnection! + + """ + The metafield associated with the resource. + """ + metafield( + """ + Container for a set of metafields (maximum of 20 characters). + """ + namespace: String! + + """ + Identifier for the metafield (maximum of 30 characters). + """ + key: String! + ): Metafield + + """ + A paginated list of metafields associated with the resource. + """ + metafields( + """ + Container for a set of metafields (maximum of 20 characters). + """ + 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! + + """ + The online store URL for the product. + A value of `null` indicates that the product is not published to the Online Store sales channel. + """ + onlineStoreUrl: URL + + """ + List of product options. + """ + options( + """ + Truncate the array result to this size. + """ + 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. + """ + priceRange: ProductPriceRange! + + """ + A categorization that a product can be tagged with, commonly used for filtering and searching. + """ + productType: String! + + """ + The date and time when the product was published to the channel. + """ + publishedAt: DateTime! + + """ + 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: [String!]! + + """ + The product’s title. + """ + title: String! + + """ + The total quantity of inventory in stock for this Product. + """ + 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. + """ + 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. + """ + variantBySelectedOptions( + """ + The input fields used for a selected option. + """ + selectedOptions: [SelectedOptionInput!]! + ): ProductVariant + + """ + 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 + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + + """ + Sort the underlying list by the given key. + """ + sortKey: ProductVariantSortKeys = POSITION + ): ProductVariantConnection! + + """ + The product’s vendor name. + """ + vendor: String! +} + +""" +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 `created` value. + """ + CREATED + + """ + Sort by the `id` value. + """ + ID + + """ + Sort by the `manual` value. + """ + MANUAL + + """ + Sort by the `collection-default` value. + """ + COLLECTION_DEFAULT + + """ + 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 +} + +""" +An auto-generated type for paginating through multiple Products. +""" +type ProductConnection { + """ + A list of edges. + """ + edges: [ProductEdge!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +An auto-generated type which holds one Product and a cursor during pagination. +""" +type ProductEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of ProductEdge. + """ + node: Product! +} + +""" +The set of valid sort keys for the ProductImage query. +""" +enum ProductImageSortKeys { + """ + Sort by the `created_at` value. + """ + 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. + """ + RELEVANCE +} + +""" +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. + """ + 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. +""" +type ProductOption implements Node { + """ + Globally unique identifier. + """ + id: ID! + + """ + The product option’s name. + """ + name: String! + + """ + The corresponding value to the product option name. + """ + values: [String!]! +} + +""" +The price range of the product. +""" +type ProductPriceRange { + """ + The highest variant's price. + """ + maxVariantPrice: MoneyV2! + + """ + The lowest variant's price. + """ + 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. + """ + TITLE + + """ + Sort by the `product_type` value. + """ + PRODUCT_TYPE + + """ + Sort by the `vendor` value. + """ + VENDOR + + """ + Sort by the `updated_at` value. + """ + UPDATED_AT + + """ + Sort by the `created_at` value. + """ + CREATED_AT + + """ + Sort by the `best_selling` value. + """ + BEST_SELLING + + """ + Sort by the `price` value. + """ + 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. + """ + RELEVANCE +} + +""" +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") + + """ + Indicates if the product variant is available for sale. + """ + availableForSale: Boolean! + + """ + 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") + + """ + 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: MoneyV2 + + """ + Whether a product is out of stock but still available for purchase (used for backorders). + """ + currentlyNotInStock: Boolean! + + """ + 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 + + """ + The metafield associated with the resource. + """ + metafield( + """ + Container for a set of metafields (maximum of 20 characters). + """ + namespace: String! + + """ + Identifier for the metafield (maximum of 30 characters). + """ + key: String! + ): Metafield + + """ + A paginated list of metafields associated with the resource. + """ + metafields( + """ + Container for a set of metafields (maximum of 20 characters). + """ + 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! + + """ + The product variant’s price. + """ + price: Money! @deprecated(reason: "Use `priceV2` instead") + + """ + The product variant’s price. + """ + priceV2: MoneyV2! + + """ + The product object that the product variant belongs to. + """ + product: Product! + + """ + The total sellable quantity of the variant for online sales channels. + """ + quantityAvailable: Int + + """ + Whether a customer needs to provide a shipping address when placing an order for the product variant. + """ + requiresShipping: Boolean! + + """ + List of product options applied to the variant. + """ + selectedOptions: [SelectedOption!]! + + """ + The SKU (stock keeping unit) associated with the variant. + """ + sku: String + + """ + The product variant’s title. + """ + title: String! + + """ + The unit price value for the variant based on the variant's measurement. + """ + unitPrice: MoneyV2 + + """ + The unit price measurement for the variant. + """ + unitPriceMeasurement: UnitPriceMeasurement + + """ + The weight of the product variant in the unit system specified with `weight_unit`. + """ + weight: Float + + """ + Unit of measurement for weight. + """ + weightUnit: WeightUnit! +} + +""" +An auto-generated type for paginating through multiple ProductVariants. +""" +type ProductVariantConnection { + """ + A list of edges. + """ + edges: [ProductVariantEdge!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +An auto-generated type which holds one ProductVariant and a cursor during pagination. +""" +type ProductVariantEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of 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. + """ + TITLE + + """ + Sort by the `sku` value. + """ + SKU + + """ + 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. + """ + RELEVANCE +} + +""" +The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. +""" +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 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! + + """ + Find a blog by its handle. + """ + blogByHandle( + """ + The handle of the blog. + """ + handle: String! + ): Blog + + """ + 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 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! + + """ + Find a collection by its handle. + """ + collectionByHandle( + """ + The handle of the collection. + """ + handle: String! + ): Collection + + """ + 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! + + """ + Find a customer by its access token. + """ + customer( + """ + The customer access token. + """ + customerAccessToken: String! + ): Customer + node( + """ + The ID of the Node to return. + """ + id: ID! + ): Node + nodes( + """ + The IDs of the Nodes to return. + """ + ids: [ID!]! + ): [Node]! + + """ + Find a page by its handle. + """ + pageByHandle( + """ + The handle of the page. + """ + handle: String! + ): Page + + """ + 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 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: 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! + + """ + Find a product by its handle. + """ + productByHandle( + """ + The handle of the product. + """ + handle: String! + ): Product + + """ + 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( + """ + The id of the product. + """ + productId: ID! + ): [Product!] + + """ + Tags 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! + + """ + List of product types for the shop's products that are published to your app. + """ + productTypes( + """ + Returns up to the first `n` elements from the list. + """ + first: Int! + ): StringConnection! + + """ + 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! + + """ + The list of public Storefront API versions, including supported, release candidate and unstable versions. + """ + publicApiVersions: [ApiVersion!]! + + """ + The shop associated with the storefront access token. + """ + shop: Shop! +} + +""" +SEO information. +""" +type SEO { + """ + The meta description. + """ + description: String + + """ + The SEO title. + """ + title: String +} + +""" +Script discount applications capture the intentions of a discount that +was created by a Shopify Script. +""" +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. + """ + targetSelection: DiscountApplicationTargetSelection! + + """ + The type of line that the discount is applicable towards. + """ + targetType: DiscountApplicationTargetType! + + """ + The title of the application as defined by the Script. + """ + title: String! + + """ + The value of the discount application. + """ + value: PricingValue! +} + +""" +Properties used by customers to select a product variant. +Products can have multiple options, like different sizes or colors. +""" +type SelectedOption { + """ + The product option’s name. + """ + name: String! + + """ + The product option’s value. + """ + value: String! +} + +""" +Specifies the input fields required for a selected option. +""" +input SelectedOptionInput { + """ + The product option’s name. + """ + name: String! + + """ + The product option’s value. + """ + value: String! +} + +""" +A shipping rate to be applied to a checkout. +""" +type ShippingRate { + """ + Human-readable unique identifier for this shipping rate. + """ + handle: String! + + """ + Price of this shipping rate. + """ + price: Money! @deprecated(reason: "Use `priceV2` instead") + + """ + Price of this shipping rate. + """ + priceV2: MoneyV2! + + """ + Title of this shipping rate. + """ + title: String! +} + +""" +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") + + """ + A description of the shop. + """ + description: String + + """ + A string representing the way currency is formatted when the currency isn’t specified. + """ + moneyFormat: String! + + """ + The shop’s name. + """ + name: String! + + """ + Settings related to payments. + """ + paymentSettings: PaymentSettings! + + """ + The shop’s primary domain. + """ + primaryDomain: Domain! + + """ + The shop’s privacy policy. + """ + 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. + """ + refundPolicy: ShopPolicy + + """ + The shop’s shipping policy. + """ + shippingPolicy: ShopPolicy + + """ + Countries that the shop ships to. + """ + shipsToCountries: [CountryCode!]! + + """ + The shop’s Shopify Payments account id. + """ + shopifyPaymentsAccountId: String + @deprecated(reason: "Use `paymentSettings` instead") + + """ + The shop’s terms of service. + """ + termsOfService: ShopPolicy +} + +""" +Policy that a merchant has configured for their store, such as their refund or privacy policy. +""" +type ShopPolicy implements Node { + """ + Policy text, maximum size of 64kb. + """ + body: String! + + """ + Policy’s handle. + """ + handle: String! + + """ + Globally unique identifier. + """ + id: ID! + + """ + Policy’s title. + """ + title: String! + + """ + Public URL to the policy. + """ + url: URL! +} + +""" +An auto-generated type for paginating through multiple Strings. +""" +type StringConnection { + """ + A list of edges. + """ + edges: [StringEdge!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +An auto-generated type which holds one String and a cursor during pagination. +""" +type StringEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of 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. + """ + 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. + """ + 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. +""" +input 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. + """ + 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: PaymentTokenType! +} + +""" +An object representing exchange of money for a product or service. +""" +type Transaction { + """ + The amount of money that the transaction was for. + """ + amount: Money! @deprecated(reason: "Use `amountV2` instead") + + """ + The amount of money that the transaction was for. + """ + amountV2: MoneyV2! + + """ + The kind of the transaction. + """ + kind: TransactionKind! + + """ + The status of the transaction. + """ + status: TransactionStatus! @deprecated(reason: "Use `statusV2` instead") + + """ + The status of the transaction. + """ + statusV2: TransactionStatus + + """ + Whether the transaction was done in test mode or not. + """ + test: Boolean! +} + +enum TransactionKind { + SALE + CAPTURE + AUTHORIZATION + EMV_AUTHORIZATION + CHANGE +} + +enum TransactionStatus { + PENDING + SUCCESS + FAILURE + ERROR +} + +""" +An RFC 3986 and RFC 3987 compliant URI string. + +Example value: `"https://johns-apparel.myshopify.com"`. +""" +scalar URL + +""" +The measurement used to calculate a unit price for a product variant (e.g. $9.99 / 100ml). +""" +type UnitPriceMeasurement { + """ + The type of unit of measurement for the unit price measurement. + """ + measuredType: UnitPriceMeasurementMeasuredType + + """ + The quantity unit for the unit price measurement. + """ + quantityUnit: UnitPriceMeasurementMeasuredUnit + + """ + The quantity value for the unit price measurement. + """ + quantityValue: Float! + + """ + The reference unit for the unit price measurement. + """ + referenceUnit: UnitPriceMeasurementMeasuredUnit + + """ + The reference value for the unit price measurement. + """ + referenceValue: Int! +} + +""" +The accepted types of unit of measurement. +""" +enum UnitPriceMeasurementMeasuredType { + """ + Unit of measurements representing volumes. + """ + VOLUME + + """ + 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. + """ + L + + """ + 1 cubic meter equals 1000 liters. + """ + M3 + + """ + 1000 milligrams equals 1 gram. + """ + MG + + """ + Metric system unit of weight. + """ + G + + """ + 1 kilogram equals 1000 grams. + """ + KG + + """ + 1000 millimeters equals 1 meter. + """ + MM + + """ + 100 centimeters equals 1 meter. + """ + CM + + """ + Metric system unit of length. + """ + M + + """ + Metric system unit of area. + """ + M2 +} + +""" +Represents an error in the input of a mutation. +""" +type UserError implements DisplayableError { + """ + Path to the input field which caused the error. + """ + field: [String!] + + """ + The error message. + """ + message: String! +} + +""" +Represents a Shopify hosted video. +""" +type Video implements Node & Media { + """ + A word or phrase to share the nature or contents of a media. + """ + alt: String + + """ + Globally unique identifier. + """ + id: ID! + + """ + The media content type. + """ + mediaContentType: MediaContentType! + + """ + The preview image for the media. + """ + previewImage: Image + + """ + The sources for a video. + """ + sources: [VideoSource!]! +} + +""" +Represents a source for a Shopify hosted video. +""" +type VideoSource { + """ + The format of the video source. + """ + format: String! + + """ + The height of the video. + """ + height: Int! + + """ + The video MIME type. + """ + mimeType: String! + + """ + The URL of the video. + """ + url: String! + + """ + The width of the video. + """ + width: Int! +} + +""" +Units of measurement for weight. +""" +enum WeightUnit { + """ + 1 kilogram equals 1000 grams. + """ + KILOGRAMS + + """ + Metric system unit of mass. + """ + GRAMS + + """ + 1 pound equals 16 ounces. + """ + POUNDS + + """ + Imperial system unit of mass. + """ + OUNCES +} diff --git a/framework/shopify/types.ts b/framework/shopify/types.ts new file mode 100644 index 000000000..e7bcb2476 --- /dev/null +++ b/framework/shopify/types.ts @@ -0,0 +1,43 @@ +import * as Core from '@commerce/types' +import { CheckoutLineItem } from './schema' + +export type ShopifyCheckout = { + id: string + webUrl: string + lineItems: CheckoutLineItem[] +} + +export type Cart = Core.Cart & { + lineItems: LineItem[] +} +export interface LineItem extends Core.LineItem { + options?: any[] +} + +/** + * Cart mutations + */ + +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 GetCartHandlerBody = Core.GetCartHandlerBody + +export type AddCartItemBody = Core.AddCartItemBody<CartItemBody> + +export type AddCartItemHandlerBody = Core.AddCartItemHandlerBody<CartItemBody> + +export type UpdateCartItemBody = Core.UpdateCartItemBody<CartItemBody> + +export type UpdateCartItemHandlerBody = Core.UpdateCartItemHandlerBody<CartItemBody> + +export type RemoveCartItemBody = Core.RemoveCartItemBody + +export type RemoveCartItemHandlerBody = Core.RemoveCartItemHandlerBody diff --git a/framework/shopify/utils/checkout-create.ts b/framework/shopify/utils/checkout-create.ts new file mode 100644 index 000000000..359d16315 --- /dev/null +++ b/framework/shopify/utils/checkout-create.ts @@ -0,0 +1,33 @@ +import Cookies from 'js-cookie' + +import { + SHOPIFY_CHECKOUT_ID_COOKIE, + SHOPIFY_CHECKOUT_URL_COOKIE, + SHOPIFY_COOKIE_EXPIRE, +} from '../const' + +import checkoutCreateMutation from './mutations/checkout-create' +import { CheckoutCreatePayload } from '../schema' + +export const checkoutCreate = async ( + fetch: any +): Promise<CheckoutCreatePayload> => { + const data = await fetch({ + query: checkoutCreateMutation, + }) + + const checkout = data.checkoutCreate?.checkout + const checkoutId = checkout?.id + + if (checkoutId) { + const options = { + expires: SHOPIFY_COOKIE_EXPIRE, + } + Cookies.set(SHOPIFY_CHECKOUT_ID_COOKIE, checkoutId, options) + Cookies.set(SHOPIFY_CHECKOUT_URL_COOKIE, checkout.webUrl, options) + } + + return checkout +} + +export default checkoutCreate diff --git a/framework/shopify/utils/checkout-to-cart.ts b/framework/shopify/utils/checkout-to-cart.ts new file mode 100644 index 000000000..034ff11d7 --- /dev/null +++ b/framework/shopify/utils/checkout-to-cart.ts @@ -0,0 +1,48 @@ +import { Cart } from '../types' +import { CommerceError } from '@commerce/utils/errors' + +import { + CheckoutLineItemsAddPayload, + CheckoutLineItemsRemovePayload, + CheckoutLineItemsUpdatePayload, + CheckoutCreatePayload, + CheckoutUserError, + Checkout, + Maybe, +} from '../schema' + +import { normalizeCart } from './normalize' +import throwUserErrors from './throw-user-errors' + +export type CheckoutQuery = { + checkout: Checkout + checkoutUserErrors?: Array<CheckoutUserError> +} + +export type CheckoutPayload = + | CheckoutLineItemsAddPayload + | CheckoutLineItemsUpdatePayload + | CheckoutLineItemsRemovePayload + | CheckoutCreatePayload + | CheckoutQuery + +const checkoutToCart = (checkoutPayload?: Maybe<CheckoutPayload>): Cart => { + if (!checkoutPayload) { + throw new CommerceError({ + message: 'Missing checkout payload from response', + }) + } + + const checkout = checkoutPayload?.checkout + throwUserErrors(checkoutPayload?.checkoutUserErrors) + + if (!checkout) { + throw new CommerceError({ + message: 'Missing checkout object from response', + }) + } + + return normalizeCart(checkout) +} + +export default checkoutToCart diff --git a/framework/shopify/utils/customer-token.ts b/framework/shopify/utils/customer-token.ts new file mode 100644 index 000000000..85454cb83 --- /dev/null +++ b/framework/shopify/utils/customer-token.ts @@ -0,0 +1,21 @@ +import Cookies, { CookieAttributes } from 'js-cookie' +import { SHOPIFY_COOKIE_EXPIRE, SHOPIFY_CUSTOMER_TOKEN_COOKIE } from '../const' + +export const getCustomerToken = () => Cookies.get(SHOPIFY_CUSTOMER_TOKEN_COOKIE) + +export const setCustomerToken = ( + token: string | null, + options?: CookieAttributes +) => { + if (!token) { + Cookies.remove(SHOPIFY_CUSTOMER_TOKEN_COOKIE) + } else { + Cookies.set( + SHOPIFY_CUSTOMER_TOKEN_COOKIE, + token, + options ?? { + expires: SHOPIFY_COOKIE_EXPIRE, + } + ) + } +} diff --git a/framework/shopify/utils/get-categories.ts b/framework/shopify/utils/get-categories.ts new file mode 100644 index 000000000..cce4b2ad7 --- /dev/null +++ b/framework/shopify/utils/get-categories.ts @@ -0,0 +1,29 @@ +import { ShopifyConfig } from '../api' +import { CollectionEdge } from '../schema' +import getSiteCollectionsQuery from './queries/get-all-collections-query' + +export type Category = { + entityId: string + name: string + path: string +} + +const getCategories = async (config: ShopifyConfig): Promise<Category[]> => { + const { data } = await config.fetch(getSiteCollectionsQuery, { + variables: { + first: 250, + }, + }) + + return ( + data.collections?.edges?.map( + ({ node: { id: entityId, title: name, handle } }: CollectionEdge) => ({ + entityId, + name, + path: `/${handle}`, + }) + ) ?? [] + ) +} + +export default getCategories diff --git a/framework/shopify/utils/get-checkout-id.ts b/framework/shopify/utils/get-checkout-id.ts new file mode 100644 index 000000000..11e3802d9 --- /dev/null +++ b/framework/shopify/utils/get-checkout-id.ts @@ -0,0 +1,8 @@ +import Cookies from 'js-cookie' +import { SHOPIFY_CHECKOUT_ID_COOKIE } from '../const' + +const getCheckoutId = (id?: string) => { + return id ?? Cookies.get(SHOPIFY_CHECKOUT_ID_COOKIE) +} + +export default getCheckoutId diff --git a/framework/shopify/utils/get-search-variables.ts b/framework/shopify/utils/get-search-variables.ts new file mode 100644 index 000000000..c1b40ae5d --- /dev/null +++ b/framework/shopify/utils/get-search-variables.ts @@ -0,0 +1,27 @@ +import getSortVariables from './get-sort-variables' +import type { SearchProductsInput } from '../product/use-search' + +export const getSearchVariables = ({ + brandId, + search, + categoryId, + sort, +}: SearchProductsInput) => { + let query = '' + + if (search) { + query += `product_type:${search} OR title:${search} OR tag:${search}` + } + + if (brandId) { + query += `${search ? ' AND ' : ''}vendor:${brandId}` + } + + return { + categoryId, + query, + ...getSortVariables(sort, !!categoryId), + } +} + +export default getSearchVariables diff --git a/framework/shopify/utils/get-sort-variables.ts b/framework/shopify/utils/get-sort-variables.ts new file mode 100644 index 000000000..141d9a180 --- /dev/null +++ b/framework/shopify/utils/get-sort-variables.ts @@ -0,0 +1,32 @@ +const getSortVariables = (sort?: string, isCategory: boolean = false) => { + let output = {} + switch (sort) { + case 'price-asc': + output = { + sortKey: 'PRICE', + reverse: false, + } + break + case 'price-desc': + output = { + sortKey: 'PRICE', + reverse: true, + } + break + case 'trending-desc': + output = { + sortKey: 'BEST_SELLING', + reverse: false, + } + break + case 'latest-desc': + output = { + sortKey: isCategory ? 'CREATED' : 'CREATED_AT', + reverse: true, + } + break + } + return output +} + +export default getSortVariables diff --git a/framework/shopify/utils/get-vendors.ts b/framework/shopify/utils/get-vendors.ts new file mode 100644 index 000000000..24843f177 --- /dev/null +++ b/framework/shopify/utils/get-vendors.ts @@ -0,0 +1,40 @@ +import { ShopifyConfig } from '../api' +import fetchAllProducts from '../api/utils/fetch-all-products' +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 getVendors = async (config: ShopifyConfig): Promise<BrandEdge[]> => { + const vendors = await fetchAllProducts({ + config, + query: getAllProductVendors, + variables: { + first: 250, + }, + }) + + let vendorsStrings = vendors.map(({ node: { vendor } }) => vendor) + + return [...new Set(vendorsStrings)].map((v) => { + const id = v.replace(/\s+/g, '-').toLowerCase() + return { + node: { + entityId: id, + name: v, + path: `brands/${id}`, + }, + } + }) +} + +export default getVendors diff --git a/framework/shopify/utils/handle-account-activation.ts b/framework/shopify/utils/handle-account-activation.ts new file mode 100644 index 000000000..d11f80ba1 --- /dev/null +++ b/framework/shopify/utils/handle-account-activation.ts @@ -0,0 +1,30 @@ +import { FetcherOptions } from '@commerce/utils/types' +import throwUserErrors from './throw-user-errors' + +import { + MutationCustomerActivateArgs, + MutationCustomerActivateByUrlArgs, +} from '../schema' +import { Mutation } from '../schema' +import { customerActivateByUrlMutation } from './mutations' + +const handleAccountActivation = async ( + fetch: <T = any, B = Body>(options: FetcherOptions<B>) => Promise<T>, + input: MutationCustomerActivateByUrlArgs +) => { + try { + const { customerActivateByUrl } = await fetch< + Mutation, + MutationCustomerActivateArgs + >({ + query: customerActivateByUrlMutation, + variables: { + input, + }, + }) + + throwUserErrors(customerActivateByUrl?.customerUserErrors) + } catch (error) {} +} + +export default handleAccountActivation diff --git a/framework/shopify/utils/handle-fetch-response.ts b/framework/shopify/utils/handle-fetch-response.ts new file mode 100644 index 000000000..91d362d7d --- /dev/null +++ b/framework/shopify/utils/handle-fetch-response.ts @@ -0,0 +1,27 @@ +import { FetcherError } from '@commerce/utils/errors' + +export function getError(errors: any[] | null, status: number) { + errors = errors ?? [{ message: 'Failed to fetch Shopify API' }] + return new FetcherError({ errors, status }) +} + +export async function getAsyncError(res: Response) { + const data = await res.json() + return getError(data.errors, res.status) +} + +const handleFetchResponse = async (res: Response) => { + if (res.ok) { + const { data, errors } = await res.json() + + if (errors && errors.length) { + throw getError(errors, res.status) + } + + return data + } + + throw await getAsyncError(res) +} + +export default handleFetchResponse diff --git a/framework/shopify/utils/handle-login.ts b/framework/shopify/utils/handle-login.ts new file mode 100644 index 000000000..de86fa1d2 --- /dev/null +++ b/framework/shopify/utils/handle-login.ts @@ -0,0 +1,36 @@ +import { FetcherOptions } from '@commerce/utils/types' +import { CustomerAccessTokenCreateInput } from '../schema' +import { setCustomerToken } from './customer-token' +import { customerAccessTokenCreateMutation } from './mutations' +import throwUserErrors from './throw-user-errors' + +const handleLogin = (data: any) => { + const response = data.customerAccessTokenCreate + throwUserErrors(response?.customerUserErrors) + + const customerAccessToken = response?.customerAccessToken + const accessToken = customerAccessToken?.accessToken + + if (accessToken) { + setCustomerToken(accessToken) + } + + return customerAccessToken +} + +export const handleAutomaticLogin = async ( + fetch: <T = any, B = Body>(options: FetcherOptions<B>) => Promise<T>, + input: CustomerAccessTokenCreateInput +) => { + try { + const loginData = await fetch({ + query: customerAccessTokenCreateMutation, + variables: { + input, + }, + }) + handleLogin(loginData) + } catch (error) {} +} + +export default handleLogin diff --git a/framework/shopify/utils/index.ts b/framework/shopify/utils/index.ts new file mode 100644 index 000000000..61e5975d7 --- /dev/null +++ b/framework/shopify/utils/index.ts @@ -0,0 +1,15 @@ +export { default as handleFetchResponse } from './handle-fetch-response' +export { default as getSearchVariables } from './get-search-variables' +export { default as getSortVariables } from './get-sort-variables' +export { default as getVendors } from './get-vendors' +export { default as getCategories } from './get-categories' +export { default as getCheckoutId } from './get-checkout-id' +export { default as checkoutCreate } from './checkout-create' +export { default as checkoutToCart } from './checkout-to-cart' +export { default as handleLogin, handleAutomaticLogin } from './handle-login' +export { default as handleAccountActivation } from './handle-account-activation' +export { default as throwUserErrors } from './throw-user-errors' +export * from './queries' +export * from './mutations' +export * from './normalize' +export * from './customer-token' diff --git a/framework/shopify/utils/mutations/associate-customer-with-checkout.ts b/framework/shopify/utils/mutations/associate-customer-with-checkout.ts new file mode 100644 index 000000000..6b1350e05 --- /dev/null +++ b/framework/shopify/utils/mutations/associate-customer-with-checkout.ts @@ -0,0 +1,18 @@ +const associateCustomerWithCheckoutMutation = /* GraphQl */ ` +mutation associateCustomerWithCheckout($checkoutId: ID!, $customerAccessToken: String!) { + checkoutCustomerAssociateV2(checkoutId: $checkoutId, customerAccessToken: $customerAccessToken) { + checkout { + id + } + checkoutUserErrors { + code + field + message + } + customer { + id + } + } + } +` +export default associateCustomerWithCheckoutMutation diff --git a/framework/shopify/utils/mutations/checkout-create.ts b/framework/shopify/utils/mutations/checkout-create.ts new file mode 100644 index 000000000..ffbd555c7 --- /dev/null +++ b/framework/shopify/utils/mutations/checkout-create.ts @@ -0,0 +1,17 @@ +import { checkoutDetailsFragment } from '../queries/get-checkout-query' + +const checkoutCreateMutation = /* GraphQL */ ` + mutation { + checkoutCreate(input: {}) { + checkoutUserErrors { + code + field + message + } + checkout { + ${checkoutDetailsFragment} + } + } + } +` +export default checkoutCreateMutation diff --git a/framework/shopify/utils/mutations/checkout-line-item-add.ts b/framework/shopify/utils/mutations/checkout-line-item-add.ts new file mode 100644 index 000000000..2282c4e26 --- /dev/null +++ b/framework/shopify/utils/mutations/checkout-line-item-add.ts @@ -0,0 +1,17 @@ +import { checkoutDetailsFragment } from '../queries/get-checkout-query' + +const checkoutLineItemAddMutation = /* GraphQL */ ` + mutation($checkoutId: ID!, $lineItems: [CheckoutLineItemInput!]!) { + checkoutLineItemsAdd(checkoutId: $checkoutId, lineItems: $lineItems) { + checkoutUserErrors { + code + field + message + } + checkout { + ${checkoutDetailsFragment} + } + } + } +` +export default checkoutLineItemAddMutation diff --git a/framework/shopify/utils/mutations/checkout-line-item-remove.ts b/framework/shopify/utils/mutations/checkout-line-item-remove.ts new file mode 100644 index 000000000..8dea4ce08 --- /dev/null +++ b/framework/shopify/utils/mutations/checkout-line-item-remove.ts @@ -0,0 +1,20 @@ +import { checkoutDetailsFragment } from '../queries/get-checkout-query' + +const checkoutLineItemRemoveMutation = /* GraphQL */ ` + mutation($checkoutId: ID!, $lineItemIds: [ID!]!) { + checkoutLineItemsRemove( + checkoutId: $checkoutId + lineItemIds: $lineItemIds + ) { + checkoutUserErrors { + code + field + message + } + checkout { + ${checkoutDetailsFragment} + } + } + } +` +export default checkoutLineItemRemoveMutation diff --git a/framework/shopify/utils/mutations/checkout-line-item-update.ts b/framework/shopify/utils/mutations/checkout-line-item-update.ts new file mode 100644 index 000000000..76254341e --- /dev/null +++ b/framework/shopify/utils/mutations/checkout-line-item-update.ts @@ -0,0 +1,17 @@ +import { checkoutDetailsFragment } from '../queries/get-checkout-query' + +const checkoutLineItemUpdateMutation = /* GraphQL */ ` + mutation($checkoutId: ID!, $lineItems: [CheckoutLineItemUpdateInput!]!) { + checkoutLineItemsUpdate(checkoutId: $checkoutId, lineItems: $lineItems) { + checkoutUserErrors { + code + field + message + } + checkout { + ${checkoutDetailsFragment} + } + } + } +` +export default checkoutLineItemUpdateMutation diff --git a/framework/shopify/utils/mutations/customer-access-token-create.ts b/framework/shopify/utils/mutations/customer-access-token-create.ts new file mode 100644 index 000000000..7a45c3f49 --- /dev/null +++ b/framework/shopify/utils/mutations/customer-access-token-create.ts @@ -0,0 +1,16 @@ +const customerAccessTokenCreateMutation = /* GraphQL */ ` + mutation customerAccessTokenCreate($input: CustomerAccessTokenCreateInput!) { + customerAccessTokenCreate(input: $input) { + customerAccessToken { + accessToken + expiresAt + } + customerUserErrors { + code + field + message + } + } + } +` +export default customerAccessTokenCreateMutation diff --git a/framework/shopify/utils/mutations/customer-access-token-delete.ts b/framework/shopify/utils/mutations/customer-access-token-delete.ts new file mode 100644 index 000000000..c46eff1e5 --- /dev/null +++ b/framework/shopify/utils/mutations/customer-access-token-delete.ts @@ -0,0 +1,14 @@ +const customerAccessTokenDeleteMutation = /* GraphQL */ ` + mutation customerAccessTokenDelete($customerAccessToken: String!) { + customerAccessTokenDelete(customerAccessToken: $customerAccessToken) { + deletedAccessToken + deletedCustomerAccessTokenId + userErrors { + field + message + } + } + } +` + +export default customerAccessTokenDeleteMutation diff --git a/framework/shopify/utils/mutations/customer-activate-by-url.ts b/framework/shopify/utils/mutations/customer-activate-by-url.ts new file mode 100644 index 000000000..345d502bd --- /dev/null +++ b/framework/shopify/utils/mutations/customer-activate-by-url.ts @@ -0,0 +1,19 @@ +const customerActivateByUrlMutation = /* GraphQL */ ` + mutation customerActivateByUrl($activationUrl: URL!, $password: String!) { + customerActivateByUrl(activationUrl: $activationUrl, password: $password) { + customer { + id + } + customerAccessToken { + accessToken + expiresAt + } + customerUserErrors { + code + field + message + } + } + } +` +export default customerActivateByUrlMutation diff --git a/framework/shopify/utils/mutations/customer-activate.ts b/framework/shopify/utils/mutations/customer-activate.ts new file mode 100644 index 000000000..b1d057c69 --- /dev/null +++ b/framework/shopify/utils/mutations/customer-activate.ts @@ -0,0 +1,19 @@ +const customerActivateMutation = /* GraphQL */ ` + mutation customerActivate($id: ID!, $input: CustomerActivateInput!) { + customerActivate(id: $id, input: $input) { + customer { + id + } + customerAccessToken { + accessToken + expiresAt + } + customerUserErrors { + code + field + message + } + } + } +` +export default customerActivateMutation diff --git a/framework/shopify/utils/mutations/customer-create.ts b/framework/shopify/utils/mutations/customer-create.ts new file mode 100644 index 000000000..05c728a25 --- /dev/null +++ b/framework/shopify/utils/mutations/customer-create.ts @@ -0,0 +1,15 @@ +const customerCreateMutation = /* GraphQL */ ` + mutation customerCreate($input: CustomerCreateInput!) { + customerCreate(input: $input) { + customerUserErrors { + code + field + message + } + customer { + id + } + } + } +` +export default customerCreateMutation diff --git a/framework/shopify/utils/mutations/index.ts b/framework/shopify/utils/mutations/index.ts new file mode 100644 index 000000000..165fb192d --- /dev/null +++ b/framework/shopify/utils/mutations/index.ts @@ -0,0 +1,9 @@ +export { default as customerCreateMutation } from './customer-create' +export { default as checkoutCreateMutation } from './checkout-create' +export { default as checkoutLineItemAddMutation } from './checkout-line-item-add' +export { default as checkoutLineItemUpdateMutation } from './checkout-line-item-update' +export { default as checkoutLineItemRemoveMutation } from './checkout-line-item-remove' +export { default as customerAccessTokenCreateMutation } from './customer-access-token-create' +export { default as customerAccessTokenDeleteMutation } from './customer-access-token-delete' +export { default as customerActivateMutation } from './customer-activate' +export { default as customerActivateByUrlMutation } from './customer-activate-by-url' diff --git a/framework/shopify/utils/normalize.ts b/framework/shopify/utils/normalize.ts new file mode 100644 index 000000000..3917c0814 --- /dev/null +++ b/framework/shopify/utils/normalize.ts @@ -0,0 +1,160 @@ +import { Product } from '@commerce/types' + +import { + Product as ShopifyProduct, + Checkout, + CheckoutLineItemEdge, + SelectedOption, + ImageConnection, + ProductVariantConnection, + MoneyV2, + ProductOption, +} from '../schema' + +import type { Cart, LineItem } from '../types' + +const money = ({ amount, currencyCode }: MoneyV2) => { + return { + value: +amount, + currencyCode, + } +} + +const normalizeProductOption = ({ + id, + name: displayName, + values, +}: ProductOption) => { + return { + __typename: 'MultipleChoiceOption', + id, + displayName, + values: values.map((value) => { + let output: any = { + label: value, + } + if (displayName.match(/colou?r/gi)) { + output = { + ...output, + hexColors: [value], + } + } + return output + }), + } +} + +const normalizeProductImages = ({ edges }: ImageConnection) => + edges?.map(({ node: { originalSrc: url, ...rest } }) => ({ + url, + ...rest, + })) + +const normalizeProductVariants = ({ edges }: ProductVariantConnection) => { + return edges?.map( + ({ + node: { id, selectedOptions, sku, title, priceV2, compareAtPriceV2 }, + }) => { + return { + id, + name: title, + sku: sku ?? id, + price: +priceV2.amount, + listPrice: +compareAtPriceV2?.amount, + requiresShipping: true, + options: selectedOptions.map(({ name, value }: SelectedOption) => { + const options = normalizeProductOption({ + id, + name, + values: [value], + }) + + return options + }), + } + } + ) +} + +export function normalizeProduct(productNode: ShopifyProduct): Product { + const { + id, + title: name, + vendor, + images, + variants, + description, + descriptionHtml, + handle, + priceRange, + options, + ...rest + } = productNode + + const product = { + id, + name, + vendor, + path: `/${handle}`, + slug: handle?.replace(/^\/+|\/+$/g, ''), + price: money(priceRange?.minVariantPrice), + images: normalizeProductImages(images), + variants: variants ? normalizeProductVariants(variants) : [], + options: options + ? options + .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 }), + ...(descriptionHtml && { descriptionHtml }), + ...rest, + } + + return product +} + +export function normalizeCart(checkout: Checkout): Cart { + return { + id: checkout.id, + customerId: '', + email: '', + createdAt: checkout.createdAt, + currency: { + code: checkout.totalPriceV2?.currencyCode, + }, + taxesIncluded: checkout.taxesIncluded, + lineItems: checkout.lineItems?.edges.map(normalizeLineItem), + lineItemsSubtotalPrice: +checkout.subtotalPriceV2?.amount, + subtotalPrice: +checkout.subtotalPriceV2?.amount, + totalPrice: checkout.totalPriceV2?.amount, + discounts: [], + } +} + +function normalizeLineItem({ + node: { id, title, variant, quantity, ...rest }, +}: CheckoutLineItemEdge): LineItem { + return { + id, + variantId: String(variant?.id), + productId: String(variant?.id), + name: `${title}`, + quantity, + variant: { + id: String(variant?.id), + sku: variant?.sku ?? '', + name: variant?.title!, + image: { + url: variant?.image?.originalSrc ?? '/product-img-placeholder.svg', + }, + requiresShipping: variant?.requiresShipping ?? false, + price: variant?.priceV2?.amount, + listPrice: variant?.compareAtPriceV2?.amount, + }, + path: String(variant?.product?.handle), + discounts: [], + options: + // By default Shopify adds a default variant with default names, we're removing it. https://community.shopify.com/c/Shopify-APIs-SDKs/Adding-new-product-variant-is-automatically-adding-quot-Default/td-p/358095 + variant?.title == 'Default Title' ? [] : variant?.selectedOptions, + } +} diff --git a/framework/shopify/utils/queries/get-all-collections-query.ts b/framework/shopify/utils/queries/get-all-collections-query.ts new file mode 100644 index 000000000..2abf374d6 --- /dev/null +++ b/framework/shopify/utils/queries/get-all-collections-query.ts @@ -0,0 +1,14 @@ +const getSiteCollectionsQuery = /* GraphQL */ ` + query getSiteCollections($first: Int!) { + collections(first: $first) { + edges { + node { + id + title + handle + } + } + } + } +` +export default getSiteCollectionsQuery diff --git a/framework/shopify/utils/queries/get-all-pages-query.ts b/framework/shopify/utils/queries/get-all-pages-query.ts new file mode 100644 index 000000000..e3aee1f10 --- /dev/null +++ b/framework/shopify/utils/queries/get-all-pages-query.ts @@ -0,0 +1,14 @@ +export const getAllPagesQuery = /* GraphQL */ ` + query getAllPages($first: Int = 250) { + pages(first: $first) { + edges { + node { + id + title + handle + } + } + } + } +` +export default getAllPagesQuery diff --git a/framework/shopify/utils/queries/get-all-product-vendors-query.ts b/framework/shopify/utils/queries/get-all-product-vendors-query.ts new file mode 100644 index 000000000..be08b8ec6 --- /dev/null +++ b/framework/shopify/utils/queries/get-all-product-vendors-query.ts @@ -0,0 +1,17 @@ +const getAllProductVendors = /* GraphQL */ ` + query getAllProductVendors($first: Int = 250, $cursor: String) { + products(first: $first, after: $cursor) { + pageInfo { + hasNextPage + hasPreviousPage + } + edges { + node { + vendor + } + cursor + } + } + } +` +export default getAllProductVendors diff --git a/framework/shopify/utils/queries/get-all-products-paths-query.ts b/framework/shopify/utils/queries/get-all-products-paths-query.ts new file mode 100644 index 000000000..56298c204 --- /dev/null +++ b/framework/shopify/utils/queries/get-all-products-paths-query.ts @@ -0,0 +1,17 @@ +const getAllProductsPathsQuery = /* GraphQL */ ` + query getAllProductPaths($first: Int = 250, $cursor: String) { + products(first: $first, after: $cursor) { + pageInfo { + hasNextPage + hasPreviousPage + } + edges { + node { + handle + } + cursor + } + } + } +` +export default getAllProductsPathsQuery diff --git a/framework/shopify/utils/queries/get-all-products-query.ts b/framework/shopify/utils/queries/get-all-products-query.ts new file mode 100644 index 000000000..f48140d31 --- /dev/null +++ b/framework/shopify/utils/queries/get-all-products-query.ts @@ -0,0 +1,56 @@ +export const productConnection = ` +pageInfo { + hasNextPage + hasPreviousPage +} +edges { + node { + id + title + vendor + handle + priceRange { + minVariantPrice { + amount + currencyCode + } + } + images(first: 1) { + pageInfo { + hasNextPage + hasPreviousPage + } + edges { + node { + originalSrc + altText + width + height + } + } + } + } +}` + +export const productsFragment = ` +products( + first: $first + sortKey: $sortKey + reverse: $reverse + query: $query +) { + ${productConnection} +} +` + +const getAllProductsQuery = /* GraphQL */ ` + query getAllProducts( + $first: Int = 250 + $query: String = "" + $sortKey: ProductSortKeys = RELEVANCE + $reverse: Boolean = false + ) { + ${productsFragment} + } +` +export default getAllProductsQuery diff --git a/framework/shopify/utils/queries/get-checkout-query.ts b/framework/shopify/utils/queries/get-checkout-query.ts new file mode 100644 index 000000000..39b732b9e --- /dev/null +++ b/framework/shopify/utils/queries/get-checkout-query.ts @@ -0,0 +1,69 @@ +export const checkoutDetailsFragment = ` + id + webUrl + subtotalPriceV2{ + amount + currencyCode + } + totalTaxV2 { + amount + currencyCode + } + totalPriceV2 { + amount + currencyCode + } + completedAt + createdAt + taxesIncluded + lineItems(first: 250) { + pageInfo { + hasNextPage + hasPreviousPage + } + edges { + node { + id + title + variant { + id + sku + title + selectedOptions { + name + value + } + image { + originalSrc + altText + width + height + } + priceV2{ + amount + currencyCode + } + compareAtPriceV2{ + amount + currencyCode + } + product { + handle + } + } + quantity + } + } + } +` + +const getCheckoutQuery = /* GraphQL */ ` + query($checkoutId: ID!) { + node(id: $checkoutId) { + ... on Checkout { + ${checkoutDetailsFragment} + } + } + } +` +export default getCheckoutQuery diff --git a/framework/shopify/utils/queries/get-collection-products-query.ts b/framework/shopify/utils/queries/get-collection-products-query.ts new file mode 100644 index 000000000..04766caa4 --- /dev/null +++ b/framework/shopify/utils/queries/get-collection-products-query.ts @@ -0,0 +1,24 @@ +import { productConnection } from './get-all-products-query' + +const getCollectionProductsQuery = /* GraphQL */ ` + query getProductsFromCollection( + $categoryId: ID! + $first: Int = 250 + $sortKey: ProductCollectionSortKeys = RELEVANCE + $reverse: Boolean = false + ) { + node(id: $categoryId) { + id + ... on Collection { + products( + first: $first + sortKey: $sortKey + reverse: $reverse + ) { + ${productConnection} + } + } + } + } +` +export default getCollectionProductsQuery diff --git a/framework/shopify/utils/queries/get-customer-id-query.ts b/framework/shopify/utils/queries/get-customer-id-query.ts new file mode 100644 index 000000000..076ceb10b --- /dev/null +++ b/framework/shopify/utils/queries/get-customer-id-query.ts @@ -0,0 +1,8 @@ +export const getCustomerQuery = /* GraphQL */ ` + query getCustomerId($customerAccessToken: String!) { + customer(customerAccessToken: $customerAccessToken) { + id + } + } +` +export default getCustomerQuery diff --git a/framework/shopify/utils/queries/get-customer-query.ts b/framework/shopify/utils/queries/get-customer-query.ts new file mode 100644 index 000000000..87e37e68d --- /dev/null +++ b/framework/shopify/utils/queries/get-customer-query.ts @@ -0,0 +1,16 @@ +export const getCustomerQuery = /* GraphQL */ ` + query getCustomer($customerAccessToken: String!) { + customer(customerAccessToken: $customerAccessToken) { + id + firstName + lastName + displayName + email + phone + tags + acceptsMarketing + createdAt + } + } +` +export default getCustomerQuery diff --git a/framework/shopify/utils/queries/get-page-query.ts b/framework/shopify/utils/queries/get-page-query.ts new file mode 100644 index 000000000..2ca79abd4 --- /dev/null +++ b/framework/shopify/utils/queries/get-page-query.ts @@ -0,0 +1,14 @@ +export const getPageQuery = /* GraphQL */ ` + query($id: ID!) { + node(id: $id) { + id + ... on Page { + title + handle + body + bodySummary + } + } + } +` +export default getPageQuery diff --git a/framework/shopify/utils/queries/get-product-query.ts b/framework/shopify/utils/queries/get-product-query.ts new file mode 100644 index 000000000..5c109901b --- /dev/null +++ b/framework/shopify/utils/queries/get-product-query.ts @@ -0,0 +1,69 @@ +const getProductQuery = /* GraphQL */ ` + query getProductBySlug($slug: String!) { + productByHandle(handle: $slug) { + id + handle + title + productType + vendor + description + descriptionHtml + options { + id + name + values + } + priceRange { + maxVariantPrice { + amount + currencyCode + } + minVariantPrice { + amount + currencyCode + } + } + variants(first: 250) { + pageInfo { + hasNextPage + hasPreviousPage + } + edges { + node { + id + title + sku + selectedOptions { + name + value + } + priceV2 { + amount + currencyCode + } + compareAtPriceV2 { + amount + currencyCode + } + } + } + } + images(first: 250) { + pageInfo { + hasNextPage + hasPreviousPage + } + edges { + node { + originalSrc + altText + width + height + } + } + } + } + } +` + +export default getProductQuery diff --git a/framework/shopify/utils/queries/index.ts b/framework/shopify/utils/queries/index.ts new file mode 100644 index 000000000..e19be9c8c --- /dev/null +++ b/framework/shopify/utils/queries/index.ts @@ -0,0 +1,10 @@ +export { default as getSiteCollectionsQuery } from './get-all-collections-query' +export { default as getProductQuery } from './get-product-query' +export { default as getAllProductsQuery } from './get-all-products-query' +export { default as getAllProductsPathtsQuery } from './get-all-products-paths-query' +export { default as getAllProductVendors } from './get-all-product-vendors-query' +export { default as getCollectionProductsQuery } from './get-collection-products-query' +export { default as getCheckoutQuery } from './get-checkout-query' +export { default as getAllPagesQuery } from './get-all-pages-query' +export { default as getPageQuery } from './get-page-query' +export { default as getCustomerQuery } from './get-customer-query' diff --git a/framework/shopify/utils/throw-user-errors.ts b/framework/shopify/utils/throw-user-errors.ts new file mode 100644 index 000000000..5488ba282 --- /dev/null +++ b/framework/shopify/utils/throw-user-errors.ts @@ -0,0 +1,38 @@ +import { ValidationError } from '@commerce/utils/errors' + +import { + CheckoutErrorCode, + CheckoutUserError, + CustomerErrorCode, + CustomerUserError, +} from '../schema' + +export type UserErrors = Array<CheckoutUserError | CustomerUserError> + +export type UserErrorCode = + | CustomerErrorCode + | CheckoutErrorCode + | null + | undefined + +const getCustomMessage = (code: UserErrorCode, message: string) => { + switch (code) { + case 'UNIDENTIFIED_CUSTOMER': + message = 'Cannot find an account that matches the provided credentials' + break + } + return message +} + +export const throwUserErrors = (errors?: UserErrors) => { + if (errors && errors.length) { + throw new ValidationError({ + errors: errors.map(({ code, message }) => ({ + code: code ?? 'validation_error', + message: getCustomMessage(code, message), + })), + }) + } +} + +export default throwUserErrors diff --git a/framework/shopify/wishlist/use-add-item.tsx b/framework/shopify/wishlist/use-add-item.tsx new file mode 100644 index 000000000..75f067c3a --- /dev/null +++ b/framework/shopify/wishlist/use-add-item.tsx @@ -0,0 +1,13 @@ +import { useCallback } from 'react' + +export function emptyHook() { + const useEmptyHook = async (options = {}) => { + return useCallback(async function () { + return Promise.resolve() + }, []) + } + + return useEmptyHook +} + +export default emptyHook diff --git a/framework/shopify/wishlist/use-remove-item.tsx b/framework/shopify/wishlist/use-remove-item.tsx new file mode 100644 index 000000000..a2d3a8a05 --- /dev/null +++ b/framework/shopify/wishlist/use-remove-item.tsx @@ -0,0 +1,17 @@ +import { useCallback } from 'react' + +type Options = { + includeProducts?: boolean +} + +export function emptyHook(options?: Options) { + const useEmptyHook = async ({ id }: { id: string | number }) => { + return useCallback(async function () { + return Promise.resolve() + }, []) + } + + return useEmptyHook +} + +export default emptyHook diff --git a/framework/shopify/wishlist/use-wishlist.tsx b/framework/shopify/wishlist/use-wishlist.tsx new file mode 100644 index 000000000..d2ce9db5b --- /dev/null +++ b/framework/shopify/wishlist/use-wishlist.tsx @@ -0,0 +1,46 @@ +// TODO: replace this hook and other wishlist hooks with a handler, or remove them if +// Shopify doesn't have a wishlist + +import { HookFetcher } from '@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 +} + +export interface UseWishlistInput extends UseWishlistOptions { + customerId?: number +} + +export const fetcher: HookFetcher<Wishlist | null, UseWishlistInput> = () => { + return null +} + +export function extendHook( + customFetcher: typeof fetcher, + // swrOptions?: SwrOptions<Wishlist | null, UseWishlistInput> + swrOptions?: any +) { + const useWishlist = ({ includeProducts }: UseWishlistOptions = {}) => { + return { data: null } + } + + useWishlist.extend = extendHook + + return useWishlist +} + +export default extendHook(fetcher) diff --git a/global.d.ts b/global.d.ts new file mode 100644 index 000000000..498a1f9fe --- /dev/null +++ b/global.d.ts @@ -0,0 +1,2 @@ +// Declarations for modules without types +declare module 'next-themes' diff --git a/lib/bigcommerce/api/index.ts b/lib/bigcommerce/api/index.ts deleted file mode 100644 index 01e607320..000000000 --- a/lib/bigcommerce/api/index.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { - CommerceAPI, - CommerceAPIOptions, - CommerceAPIFetchOptions, -} from 'lib/commerce/api'; -import { GetAllProductsQuery } from '../schema'; -import { getAllProductsQuery } from './operations/get-all-products'; - -type RecursivePartial<T> = { - [P in keyof T]?: RecursivePartial<T[P]>; -}; - -export interface GetAllProductsResult<T> { - products: T extends GetAllProductsQuery - ? T['site']['products']['edges'] - : unknown; -} - -export default class BigcommerceAPI implements CommerceAPI { - protected commerceUrl: string; - protected apiToken: string; - - constructor({ commerceUrl, apiToken }: CommerceAPIOptions) { - this.commerceUrl = commerceUrl; - this.apiToken = apiToken; - } - - async fetch<T>( - query: string, - { variables, preview }: CommerceAPIFetchOptions = {} - ): Promise<T> { - const res = await fetch(this.commerceUrl + (preview ? '/preview' : ''), { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${this.apiToken}`, - }, - body: JSON.stringify({ - query, - variables, - }), - }); - - const json = await res.json(); - if (json.errors) { - console.error(json.errors); - throw new Error('Failed to fetch API'); - } - return json.data; - } - - async getAllProducts<T>(opts: { - query: string; - }): Promise<GetAllProductsResult<T>>; - async getAllProducts<T = GetAllProductsQuery>({ - query, - }: { query?: string } = {}): Promise< - GetAllProductsResult<T | GetAllProductsQuery> - // T extends GetAllProductsQuery - // ? GetAllProductsResult<T['site']['products']['edges']> - // : Partial<GetAllProductsResult<any>> - > { - if (!query) { - const data = await this.fetch<GetAllProductsQuery>(getAllProductsQuery); - - return { - products: data.site.products.edges, - }; - } - - return { - products: undefined, - }; - } -} - -let h = new BigcommerceAPI({ apiToken: '', commerceUrl: '' }); - -async function yay() { - const x = await h.getAllProducts<{ custom: 'val' }>({ query: 'yes' }); - const y = await h.getAllProducts(); - - console.log(x.products); -} diff --git a/lib/bigcommerce/api/operations/get-all-products.ts b/lib/bigcommerce/api/operations/get-all-products.ts deleted file mode 100644 index 37340703a..000000000 --- a/lib/bigcommerce/api/operations/get-all-products.ts +++ /dev/null @@ -1,79 +0,0 @@ -export const responsiveImageFragment = /* GraphQL */ ` - fragment responsiveImage on Image { - url320wide: url(width: 320) - url640wide: url(width: 640) - url960wide: url(width: 960) - url1280wide: url(width: 1280) - } -`; - -export const getAllProductsQuery = /* GraphQL */ ` - query getAllProducts { - site { - products(first: 4) { - pageInfo { - startCursor - endCursor - } - edges { - cursor - node { - entityId - name - path - brand { - name - } - description - prices { - price { - value - currencyCode - } - salePrice { - value - currencyCode - } - } - images { - edges { - node { - ...responsiveImage - } - } - } - variants { - edges { - node { - entityId - defaultImage { - ...responsiveImage - } - } - } - } - options { - edges { - node { - entityId - displayName - isRequired - values { - edges { - node { - entityId - label - } - } - } - } - } - } - } - } - } - } - } - - ${responsiveImageFragment} -`; diff --git a/lib/bigcommerce/cart.tsx b/lib/bigcommerce/cart.tsx deleted file mode 100644 index cbe5438c8..000000000 --- a/lib/bigcommerce/cart.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { - CartProvider as CommerceCartProvider, - useCart as useCommerceCart, -} from 'lib/commerce/cart'; - -export type Cart = any; - -export function CartProvider({ children }) { - return <CommerceCartProvider>{children}</CommerceCartProvider>; -} - -export function useCart() { - return useCommerceCart<Cart>(); -} diff --git a/lib/bigcommerce/index.tsx b/lib/bigcommerce/index.tsx deleted file mode 100644 index 4e10e09eb..000000000 --- a/lib/bigcommerce/index.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { - CommerceProvider as CoreCommerceProvider, - Connector, - useCommerce as useCoreCommerce, -} from 'lib/commerce'; - -async function getText(res: Response) { - try { - return (await res.text()) || res.statusText; - } catch (error) { - return res.statusText; - } -} - -async function getError(res: Response) { - if (res.headers.get('Content-Type')?.includes('application/json')) { - const data = await res.json(); - return data.errors[0]; - } - return { message: await getText(res) }; -} - -async function fetcher(url: string, query: string) { - const res = await fetch(url); - - if (res.ok) { - return res.json(); - } - - throw await getError(res); -} - -export const bigcommerce: Connector = { - locale: 'en-us', - fetcher, -}; - -// TODO: The connector should be extendable when a developer is using it -export function CommerceProvider({ children }) { - return ( - <CoreCommerceProvider connector={bigcommerce}> - {children} - </CoreCommerceProvider> - ); -} - -export const useCommerce = () => useCoreCommerce(); diff --git a/lib/bigcommerce/schema.d.ts b/lib/bigcommerce/schema.d.ts deleted file mode 100644 index ab186f894..000000000 --- a/lib/bigcommerce/schema.d.ts +++ /dev/null @@ -1,1733 +0,0 @@ -export type Maybe<T> = T | null; -export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] }; -/** All built-in and custom scalars, mapped to their actual values */ -export type Scalars = { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; - DateTime: any; - /** The `BigDecimal` scalar type represents signed fractional values with arbitrary precision. */ - BigDecimal: any; - /** The `Long` scalar type represents non-fractional signed whole numeric values. Long can represent values between -(2^63) and 2^63 - 1. */ - Long: any; -}; - -/** Login result */ -export type LoginResult = { - __typename?: 'LoginResult'; - /** The result of a login */ - result: Scalars['String']; -}; - -/** Logout result */ -export type LogoutResult = { - __typename?: 'LogoutResult'; - /** The result of a logout */ - result: Scalars['String']; -}; - -export type Mutation = { - __typename?: 'Mutation'; - login: LoginResult; - logout: LogoutResult; -}; - - -export type MutationLoginArgs = { - email: Scalars['String']; - password: Scalars['String']; -}; - -/** Aggregated */ -export type Aggregated = { - __typename?: 'Aggregated'; - /** Number of available products in stock. This can be 'null' if inventory is not set orif the store's Inventory Settings disable displaying stock levels on the storefront. */ - availableToSell: Scalars['Long']; - /** Indicates a threshold low-stock level. This can be 'null' if the inventory warning level is not set or if the store's Inventory Settings disable displaying stock levels on the storefront. */ - warningLevel: Scalars['Int']; -}; - -/** Aggregated Product Inventory */ -export type AggregatedInventory = { - __typename?: 'AggregatedInventory'; - /** Number of available products in stock. This can be 'null' if inventory is not set orif the store's Inventory Settings disable displaying stock levels on the storefront. */ - availableToSell: Scalars['Int']; - /** Indicates a threshold low-stock level. This can be 'null' if the inventory warning level is not set or if the store's Inventory Settings disable displaying stock levels on the storefront. */ - warningLevel: Scalars['Int']; -}; - -/** Brand */ -export type Brand = Node & { - __typename?: 'Brand'; - /** The ID of an object */ - id: Scalars['ID']; - /** Id of the brand. */ - entityId: Scalars['Int']; - /** Name of the brand. */ - name: Scalars['String']; - /** Default image for brand. */ - defaultImage?: Maybe<Image>; - /** Page title for the brand. */ - pageTitle: Scalars['String']; - /** Meta description for the brand. */ - metaDesc: Scalars['String']; - /** Meta keywords for the brand. */ - metaKeywords: Array<Scalars['String']>; - /** Search keywords for the brand. */ - searchKeywords: Array<Scalars['String']>; - /** Path for the brand page. */ - path: Scalars['String']; - products: ProductConnection; - /** Metafield data related to a brand. */ - metafields: MetafieldConnection; -}; - - -/** Brand */ -export type BrandProductsArgs = { - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - - -/** Brand */ -export type BrandMetafieldsArgs = { - namespace: Scalars['String']; - keys?: Maybe<Array<Scalars['String']>>; - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - -/** A connection to a list of items. */ -export type BrandConnection = { - __typename?: 'BrandConnection'; - /** Information to aid in pagination. */ - pageInfo: PageInfo; - /** A list of edges. */ - edges?: Maybe<Array<Maybe<BrandEdge>>>; -}; - -/** An edge in a connection. */ -export type BrandEdge = { - __typename?: 'BrandEdge'; - /** The item at the end of the edge. */ - node: Brand; - /** A cursor for use in pagination. */ - cursor: Scalars['String']; -}; - -/** Bulk pricing tier that sets a fixed price for the product or variant. */ -export type BulkPricingFixedPriceDiscount = BulkPricingTier & { - __typename?: 'BulkPricingFixedPriceDiscount'; - /** This price will override the current product price. */ - price: Scalars['BigDecimal']; - /** Minimum item quantity that applies to this bulk pricing tier. */ - minimumQuantity: Scalars['Int']; - /** Maximum item quantity that applies to this bulk pricing tier - if not defined then the tier does not have an upper bound. */ - maximumQuantity?: Maybe<Scalars['Int']>; -}; - -/** Bulk pricing tier that reduces the price of the product or variant by a percentage. */ -export type BulkPricingPercentageDiscount = BulkPricingTier & { - __typename?: 'BulkPricingPercentageDiscount'; - /** The percentage that will be removed from the product price. */ - percentOff: Scalars['BigDecimal']; - /** Minimum item quantity that applies to this bulk pricing tier. */ - minimumQuantity: Scalars['Int']; - /** Maximum item quantity that applies to this bulk pricing tier - if not defined then the tier does not have an upper bound. */ - maximumQuantity?: Maybe<Scalars['Int']>; -}; - -/** Bulk pricing tier that will subtract an amount from the price of the product or variant. */ -export type BulkPricingRelativePriceDiscount = BulkPricingTier & { - __typename?: 'BulkPricingRelativePriceDiscount'; - /** The price of the product/variant will be reduced by this priceAdjustment. */ - priceAdjustment: Scalars['BigDecimal']; - /** Minimum item quantity that applies to this bulk pricing tier. */ - minimumQuantity: Scalars['Int']; - /** Maximum item quantity that applies to this bulk pricing tier - if not defined then the tier does not have an upper bound. */ - maximumQuantity?: Maybe<Scalars['Int']>; -}; - -/** A set of bulk pricing tiers that define price discounts which apply when purchasing specified quantities of a product or variant. */ -export type BulkPricingTier = { - /** Minimum item quantity that applies to this bulk pricing tier. */ - minimumQuantity: Scalars['Int']; - /** Maximum item quantity that applies to this bulk pricing tier - if not defined then the tier does not have an upper bound. */ - maximumQuantity?: Maybe<Scalars['Int']>; -}; - -/** Product Option */ -export type CatalogProductOption = { - /** Unique ID for the option. */ - entityId: Scalars['Int']; - /** Display name for the option. */ - displayName: Scalars['String']; - /** One of the option values is required to be selected for the checkout. */ - isRequired: Scalars['Boolean']; -}; - -/** Product Option Value */ -export type CatalogProductOptionValue = { - /** Unique ID for the option value. */ - entityId: Scalars['Int']; - /** Label for the option value. */ - label: Scalars['String']; - /** Indicates whether this value is the chosen default selected value. */ - isDefault: Scalars['Boolean']; -}; - -/** Category */ -export type Category = Node & { - __typename?: 'Category'; - /** The ID of an object */ - id: Scalars['ID']; - /** Unique ID for the category. */ - entityId: Scalars['Int']; - /** Category name. */ - name: Scalars['String']; - /** Category path. */ - path: Scalars['String']; - /** Default image for the category. */ - defaultImage?: Maybe<Image>; - /** Category description. */ - description: Scalars['String']; - products: ProductConnection; - /** Metafield data related to a category. */ - metafields: MetafieldConnection; -}; - - -/** Category */ -export type CategoryProductsArgs = { - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - - -/** Category */ -export type CategoryMetafieldsArgs = { - namespace: Scalars['String']; - keys?: Maybe<Array<Scalars['String']>>; - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - -/** A connection to a list of items. */ -export type CategoryConnection = { - __typename?: 'CategoryConnection'; - /** Information to aid in pagination. */ - pageInfo: PageInfo; - /** A list of edges. */ - edges?: Maybe<Array<Maybe<CategoryEdge>>>; -}; - -/** An edge in a connection. */ -export type CategoryEdge = { - __typename?: 'CategoryEdge'; - /** The item at the end of the edge. */ - node: Category; - /** A cursor for use in pagination. */ - cursor: Scalars['String']; -}; - -/** An item in a tree of categories. */ -export type CategoryTreeItem = { - __typename?: 'CategoryTreeItem'; - /** The id category. */ - entityId: Scalars['Int']; - /** The name of category. */ - name: Scalars['String']; - /** Path assigned to this category */ - path: Scalars['String']; - /** The description of this category. */ - description: Scalars['String']; - /** The number of products in this category. */ - productCount: Scalars['Int']; - /** Subcategories of this category */ - children: Array<CategoryTreeItem>; -}; - -/** A simple yes/no question represented by a checkbox. */ -export type CheckboxOption = CatalogProductOption & { - __typename?: 'CheckboxOption'; - /** Indicates the default checked status. */ - checkedByDefault: Scalars['Boolean']; - /** Unique ID for the option. */ - entityId: Scalars['Int']; - /** Display name for the option. */ - displayName: Scalars['String']; - /** One of the option values is required to be selected for the checkout. */ - isRequired: Scalars['Boolean']; -}; - -/** Contact field */ -export type ContactField = { - __typename?: 'ContactField'; - /** Store address line. */ - address: Scalars['String']; - /** Store country. */ - country: Scalars['String']; - /** Store address type. */ - addressType: Scalars['String']; - /** Store email. */ - email: Scalars['String']; - /** Store phone number. */ - phone: Scalars['String']; -}; - -/** Custom field */ -export type CustomField = { - __typename?: 'CustomField'; - /** Custom field id. */ - entityId: Scalars['Int']; - /** Name of the custom field. */ - name: Scalars['String']; - /** Value of the custom field. */ - value: Scalars['String']; -}; - -/** A connection to a list of items. */ -export type CustomFieldConnection = { - __typename?: 'CustomFieldConnection'; - /** Information to aid in pagination. */ - pageInfo: PageInfo; - /** A list of edges. */ - edges?: Maybe<Array<Maybe<CustomFieldEdge>>>; -}; - -/** An edge in a connection. */ -export type CustomFieldEdge = { - __typename?: 'CustomFieldEdge'; - /** The item at the end of the edge. */ - node: CustomField; - /** A cursor for use in pagination. */ - cursor: Scalars['String']; -}; - -/** A customer that shops on a store */ -export type Customer = { - __typename?: 'Customer'; - /** The ID of the customer. */ - entityId: Scalars['Int']; - /** The company name of the customer. */ - company: Scalars['String']; - /** The customer group id of the customer. */ - customerGroupId: Scalars['Int']; - /** The email address of the customer. */ - email: Scalars['String']; - /** The first name of the customer. */ - firstName: Scalars['String']; - /** The last name of the customer. */ - lastName: Scalars['String']; - /** The notes of the customer. */ - notes: Scalars['String']; - /** The phone number of the customer. */ - phone: Scalars['String']; - /** The tax exempt category of the customer. */ - taxExemptCategory: Scalars['String']; - /** Customer addresses count. */ - addressCount: Scalars['Int']; - /** Customer attributes count. */ - attributeCount: Scalars['Int']; - /** Customer store credit. */ - storeCredit: Array<Money>; - /** Customer attributes. */ - attributes: CustomerAttributes; -}; - -/** A custom, store-specific attribute for a customer */ -export type CustomerAttribute = { - __typename?: 'CustomerAttribute'; - /** The ID of the custom customer attribute */ - entityId: Scalars['Int']; - /** The value of the custom customer attribute */ - value?: Maybe<Scalars['String']>; - /** The name of the custom customer attribute */ - name: Scalars['String']; -}; - -/** Custom, store-specific customer attributes */ -export type CustomerAttributes = { - __typename?: 'CustomerAttributes'; - attribute: CustomerAttribute; -}; - - -/** Custom, store-specific customer attributes */ -export type CustomerAttributesAttributeArgs = { - entityId: Scalars['Int']; -}; - -/** A calendar for allowing selection of a date. */ -export type DateFieldOption = CatalogProductOption & { - __typename?: 'DateFieldOption'; - /** Unique ID for the option. */ - entityId: Scalars['Int']; - /** Display name for the option. */ - displayName: Scalars['String']; - /** One of the option values is required to be selected for the checkout. */ - isRequired: Scalars['Boolean']; -}; - - -/** Date Time Extended */ -export type DateTimeExtended = { - __typename?: 'DateTimeExtended'; - /** ISO-8601 formatted date in UTC */ - utc: Scalars['DateTime']; -}; - -/** Display field */ -export type DisplayField = { - __typename?: 'DisplayField'; - /** Short date format. */ - shortDateFormat: Scalars['String']; - /** Extended date format. */ - extendedDateFormat: Scalars['String']; -}; - -/** A form allowing selection and uploading of a file from the user's local computer. */ -export type FileUploadFieldOption = CatalogProductOption & { - __typename?: 'FileUploadFieldOption'; - /** Unique ID for the option. */ - entityId: Scalars['Int']; - /** Display name for the option. */ - displayName: Scalars['String']; - /** One of the option values is required to be selected for the checkout. */ - isRequired: Scalars['Boolean']; -}; - -/** Image */ -export type Image = { - __typename?: 'Image'; - /** Absolute path to image using store CDN. */ - url: Scalars['String']; - /** Text description of an image that can be used for SEO and/or accessibility purposes. */ - altText: Scalars['String']; - /** Indicates whether this is the primary image. */ - isDefault: Scalars['Boolean']; -}; - - -/** Image */ -export type ImageUrlArgs = { - width: Scalars['Int']; - height?: Maybe<Scalars['Int']>; -}; - -/** A connection to a list of items. */ -export type ImageConnection = { - __typename?: 'ImageConnection'; - /** Information to aid in pagination. */ - pageInfo: PageInfo; - /** A list of edges. */ - edges?: Maybe<Array<Maybe<ImageEdge>>>; -}; - -/** An edge in a connection. */ -export type ImageEdge = { - __typename?: 'ImageEdge'; - /** The item at the end of the edge. */ - node: Image; - /** A cursor for use in pagination. */ - cursor: Scalars['String']; -}; - -/** An inventory */ -export type Inventory = { - __typename?: 'Inventory'; - /** Locations */ - locations: LocationConnection; -}; - - -/** An inventory */ -export type InventoryLocationsArgs = { - entityIds?: Maybe<Array<Scalars['Int']>>; - codes?: Maybe<Array<Scalars['String']>>; - typeIds?: Maybe<Array<Scalars['String']>>; - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - -/** Inventory By Locations */ -export type InventoryByLocations = { - __typename?: 'InventoryByLocations'; - /** Location id. */ - locationEntityId: Scalars['Long']; - /** Number of available products in stock. */ - availableToSell: Scalars['Long']; - /** Indicates a threshold low-stock level. */ - warningLevel: Scalars['Int']; - /** Indicates whether this product is in stock. */ - isInStock: Scalars['Boolean']; -}; - -/** A connection to a list of items. */ -export type LocationConnection = { - __typename?: 'LocationConnection'; - /** Information to aid in pagination. */ - pageInfo: PageInfo; - /** A list of edges. */ - edges?: Maybe<Array<Maybe<LocationEdge>>>; -}; - -/** An edge in a connection. */ -export type LocationEdge = { - __typename?: 'LocationEdge'; - /** The item at the end of the edge. */ - node: InventoryByLocations; - /** A cursor for use in pagination. */ - cursor: Scalars['String']; -}; - -/** Logo field */ -export type LogoField = { - __typename?: 'LogoField'; - /** Logo title. */ - title: Scalars['String']; - /** Store logo image. */ - image: Image; -}; - -/** Measurement */ -export type Measurement = { - __typename?: 'Measurement'; - /** Unformatted weight measurement value. */ - value: Scalars['Float']; - /** Unit of measurement. */ - unit: Scalars['String']; -}; - -/** A connection to a list of items. */ -export type MetafieldConnection = { - __typename?: 'MetafieldConnection'; - /** Information to aid in pagination. */ - pageInfo: PageInfo; - /** A list of edges. */ - edges?: Maybe<Array<Maybe<MetafieldEdge>>>; -}; - -/** An edge in a connection. */ -export type MetafieldEdge = { - __typename?: 'MetafieldEdge'; - /** The item at the end of the edge. */ - node: Metafields; - /** A cursor for use in pagination. */ - cursor: Scalars['String']; -}; - -/** Key/Value pairs of data attached tied to a resource entity (product, brand, category, etc.) */ -export type Metafields = { - __typename?: 'Metafields'; - /** The ID of an object */ - id: Scalars['ID']; - /** The ID of the metafield when referencing via our backend API. */ - entityId: Scalars['Int']; - /** A label for identifying a metafield data value. */ - key: Scalars['String']; - /** A metafield value. */ - value: Scalars['String']; -}; - -/** A money object - includes currency code and a money amount */ -export type Money = { - __typename?: 'Money'; - /** Currency code of the current money. */ - currencyCode: Scalars['String']; - /** The amount of money. */ - value: Scalars['BigDecimal']; -}; - -/** A min and max pair of money objects */ -export type MoneyRange = { - __typename?: 'MoneyRange'; - /** Minimum money object. */ - min: Money; - /** Maximum money object. */ - max: Money; -}; - -/** A multi-line text input field, aka a text box. */ -export type MultiLineTextFieldOption = CatalogProductOption & { - __typename?: 'MultiLineTextFieldOption'; - /** Unique ID for the option. */ - entityId: Scalars['Int']; - /** Display name for the option. */ - displayName: Scalars['String']; - /** One of the option values is required to be selected for the checkout. */ - isRequired: Scalars['Boolean']; -}; - -/** An option type that has a fixed list of values. */ -export type MultipleChoiceOption = CatalogProductOption & { - __typename?: 'MultipleChoiceOption'; - /** The chosen display style for this multiple choice option. */ - displayStyle: Scalars['String']; - /** List of option values. */ - values: ProductOptionValueConnection; - /** Unique ID for the option. */ - entityId: Scalars['Int']; - /** Display name for the option. */ - displayName: Scalars['String']; - /** One of the option values is required to be selected for the checkout. */ - isRequired: Scalars['Boolean']; -}; - - -/** An option type that has a fixed list of values. */ -export type MultipleChoiceOptionValuesArgs = { - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - -/** A simple multiple choice value comprised of an id and a label. */ -export type MultipleChoiceOptionValue = CatalogProductOptionValue & { - __typename?: 'MultipleChoiceOptionValue'; - /** Unique ID for the option value. */ - entityId: Scalars['Int']; - /** Label for the option value. */ - label: Scalars['String']; - /** Indicates whether this value is the chosen default selected value. */ - isDefault: Scalars['Boolean']; -}; - -/** An object with an ID */ -export type Node = { - /** The id of the object. */ - id: Scalars['ID']; -}; - -/** A single line text input field that only accepts numbers. */ -export type NumberFieldOption = CatalogProductOption & { - __typename?: 'NumberFieldOption'; - /** Unique ID for the option. */ - entityId: Scalars['Int']; - /** Display name for the option. */ - displayName: Scalars['String']; - /** One of the option values is required to be selected for the checkout. */ - isRequired: Scalars['Boolean']; -}; - -/** A connection to a list of items. */ -export type OptionConnection = { - __typename?: 'OptionConnection'; - /** Information to aid in pagination. */ - pageInfo: PageInfo; - /** A list of edges. */ - edges?: Maybe<Array<Maybe<OptionEdge>>>; -}; - -/** An edge in a connection. */ -export type OptionEdge = { - __typename?: 'OptionEdge'; - /** The item at the end of the edge. */ - node: ProductOption; - /** A cursor for use in pagination. */ - cursor: Scalars['String']; -}; - -/** A connection to a list of items. */ -export type OptionValueConnection = { - __typename?: 'OptionValueConnection'; - /** Information to aid in pagination. */ - pageInfo: PageInfo; - /** A list of edges. */ - edges?: Maybe<Array<Maybe<OptionValueEdge>>>; -}; - -/** An edge in a connection. */ -export type OptionValueEdge = { - __typename?: 'OptionValueEdge'; - /** The item at the end of the edge. */ - node: ProductOptionValue; - /** A cursor for use in pagination. */ - cursor: Scalars['String']; -}; - -export type OptionValueId = { - optionEntityId: Scalars['Int']; - valueEntityId: Scalars['Int']; -}; - -/** Information about pagination in a connection. */ -export type PageInfo = { - __typename?: 'PageInfo'; - /** When paginating forwards, are there more items? */ - hasNextPage: Scalars['Boolean']; - /** When paginating backwards, are there more items? */ - hasPreviousPage: Scalars['Boolean']; - /** When paginating backwards, the cursor to continue. */ - startCursor?: Maybe<Scalars['String']>; - /** When paginating forwards, the cursor to continue. */ - endCursor?: Maybe<Scalars['String']>; -}; - -/** The min and max range of prices that apply to this product. */ -export type PriceRanges = { - __typename?: 'PriceRanges'; - /** Product price min/max range. */ - priceRange: MoneyRange; - /** Product retail price min/max range. */ - retailPriceRange?: Maybe<MoneyRange>; -}; - -/** The various prices that can be set on a product. */ -export type Prices = { - __typename?: 'Prices'; - /** Calculated price of the product. */ - price: Money; - /** Sale price of the product. */ - salePrice?: Maybe<Money>; - /** Original price of the product. */ - basePrice?: Maybe<Money>; - /** Retail price of the product. */ - retailPrice?: Maybe<Money>; - /** Minimum advertised price of the product. */ - mapPrice?: Maybe<Money>; - /** Product price min/max range. */ - priceRange: MoneyRange; - /** Product retail price min/max range. */ - retailPriceRange?: Maybe<MoneyRange>; - /** The difference between the retail price (MSRP) and the current price, which can be presented to the shopper as their savings. */ - saved?: Maybe<Money>; - /** List of bulk pricing tiers applicable to a product or variant. */ - bulkPricing: Array<BulkPricingTier>; -}; - -/** Product */ -export type Product = Node & { - __typename?: 'Product'; - /** The ID of an object */ - id: Scalars['ID']; - /** Id of the product. */ - entityId: Scalars['Int']; - /** Default product variant when no options are selected. */ - sku: Scalars['String']; - /** Relative URL path to product page. */ - path: Scalars['String']; - /** Name of the product. */ - name: Scalars['String']; - /** Description of the product. */ - description: Scalars['String']; - /** Description of the product in plain text. */ - plainTextDescription: Scalars['String']; - /** Warranty information of the product. */ - warranty: Scalars['String']; - /** Minimum purchasable quantity for this product in a single order. */ - minPurchaseQuantity?: Maybe<Scalars['Int']>; - /** Maximum purchasable quantity for this product in a single order. */ - maxPurchaseQuantity?: Maybe<Scalars['Int']>; - /** Absolute URL path for adding a product to cart. */ - addToCartUrl: Scalars['String']; - /** Absolute URL path for adding a product to customer's wishlist. */ - addToWishlistUrl: Scalars['String']; - /** Prices object determined by supplied product ID, variant ID, and selected option IDs. */ - prices?: Maybe<Prices>; - /** - * The minimum and maximum price of this product based on variant pricing and/or modifier price rules. - * @deprecated Use priceRanges inside prices node instead. - */ - priceRanges?: Maybe<PriceRanges>; - /** Weight of the product. */ - weight?: Maybe<Measurement>; - /** Height of the product. */ - height?: Maybe<Measurement>; - /** Width of the product. */ - width?: Maybe<Measurement>; - /** Depth of the product. */ - depth?: Maybe<Measurement>; - /** Product options. */ - options: OptionConnection; - /** Product options. */ - productOptions: ProductOptionConnection; - /** Summary of the product reviews, includes the total number of reviews submitted and summation of the ratings on the reviews (ratings range from 0-5 per review). */ - reviewSummary: Reviews; - /** Type of product, ex: physical, digital */ - type: Scalars['String']; - /** - * The availability state of the product. - * @deprecated Use status inside availabilityV2 instead. - */ - availability: Scalars['String']; - /** - * A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. - * @deprecated Use description inside availabilityV2 instead. - */ - availabilityDescription: Scalars['String']; - /** The availability state of the product. */ - availabilityV2: ProductAvailability; - /** List of categories associated with the product. */ - categories: CategoryConnection; - /** Brand associated with the product. */ - brand?: Maybe<Brand>; - /** Variants associated with the product. */ - variants: VariantConnection; - /** Custom fields of the product. */ - customFields: CustomFieldConnection; - /** A list of the images for a product. */ - images: ImageConnection; - /** Default image for a product. */ - defaultImage?: Maybe<Image>; - /** Related products for this product. */ - relatedProducts: RelatedProductsConnection; - /** Inventory information of the product. */ - inventory: ProductInventory; - /** Metafield data related to a product. */ - metafields: MetafieldConnection; - /** - * Product creation date - * @deprecated Alpha version. Do not use in production. - */ - createdAt: DateTimeExtended; -}; - - -/** Product */ -export type ProductPlainTextDescriptionArgs = { - characterLimit?: Maybe<Scalars['Int']>; -}; - - -/** Product */ -export type ProductPricesArgs = { - includeTax?: Maybe<Scalars['Boolean']>; - currencyCode?: Maybe<CurrencyCode>; -}; - - -/** Product */ -export type ProductPriceRangesArgs = { - includeTax?: Maybe<Scalars['Boolean']>; -}; - - -/** Product */ -export type ProductOptionsArgs = { - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - - -/** Product */ -export type ProductProductOptionsArgs = { - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - - -/** Product */ -export type ProductCategoriesArgs = { - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - - -/** Product */ -export type ProductVariantsArgs = { - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; - entityIds?: Maybe<Array<Scalars['Int']>>; - optionValueIds?: Maybe<Array<OptionValueId>>; -}; - - -/** Product */ -export type ProductCustomFieldsArgs = { - names?: Maybe<Array<Scalars['String']>>; - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - - -/** Product */ -export type ProductImagesArgs = { - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - - -/** Product */ -export type ProductRelatedProductsArgs = { - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - - -/** Product */ -export type ProductMetafieldsArgs = { - namespace: Scalars['String']; - keys?: Maybe<Array<Scalars['String']>>; - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - -/** Product availability */ -export type ProductAvailability = { - /** The availability state of the product. */ - status: ProductAvailabilityStatus; - /** A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. */ - description: Scalars['String']; -}; - -/** Product availability status */ -export enum ProductAvailabilityStatus { - Available = 'Available', - Preorder = 'Preorder', - Unavailable = 'Unavailable' -} - -/** Available Product */ -export type ProductAvailable = ProductAvailability & { - __typename?: 'ProductAvailable'; - /** The availability state of the product. */ - status: ProductAvailabilityStatus; - /** A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. */ - description: Scalars['String']; -}; - -/** A connection to a list of items. */ -export type ProductConnection = { - __typename?: 'ProductConnection'; - /** Information to aid in pagination. */ - pageInfo: PageInfo; - /** A list of edges. */ - edges?: Maybe<Array<Maybe<ProductEdge>>>; -}; - -/** An edge in a connection. */ -export type ProductEdge = { - __typename?: 'ProductEdge'; - /** The item at the end of the edge. */ - node: Product; - /** A cursor for use in pagination. */ - cursor: Scalars['String']; -}; - -/** Product Inventory Information */ -export type ProductInventory = { - __typename?: 'ProductInventory'; - /** Indicates whether this product is in stock. */ - isInStock: Scalars['Boolean']; - /** Indicates whether this product's inventory is being tracked on variant level. If true, you may wish to check the variants node to understand the true inventory of each individual variant, rather than relying on this product-level aggregate to understand how many items may be added to cart. */ - hasVariantInventory: Scalars['Boolean']; - /** Aggregated product inventory information. This data may not be available if not set or if the store's Inventory Settings have disabled displaying stock levels on the storefront. */ - aggregated?: Maybe<AggregatedInventory>; -}; - -/** Product Option */ -export type ProductOption = { - __typename?: 'ProductOption'; - /** Unique ID for the option. */ - entityId: Scalars['Int']; - /** Display name for the option. */ - displayName: Scalars['String']; - /** One of the option values is required to be selected for the checkout. */ - isRequired: Scalars['Boolean']; - /** Option values. */ - values: OptionValueConnection; -}; - - -/** Product Option */ -export type ProductOptionValuesArgs = { - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - -/** A connection to a list of items. */ -export type ProductOptionConnection = { - __typename?: 'ProductOptionConnection'; - /** Information to aid in pagination. */ - pageInfo: PageInfo; - /** A list of edges. */ - edges?: Maybe<Array<Maybe<ProductOptionEdge>>>; -}; - -/** An edge in a connection. */ -export type ProductOptionEdge = { - __typename?: 'ProductOptionEdge'; - /** The item at the end of the edge. */ - node: CatalogProductOption; - /** A cursor for use in pagination. */ - cursor: Scalars['String']; -}; - -/** Product Option Value */ -export type ProductOptionValue = { - __typename?: 'ProductOptionValue'; - /** Unique ID for the option value. */ - entityId: Scalars['Int']; - /** Label for the option value. */ - label: Scalars['String']; -}; - -/** A connection to a list of items. */ -export type ProductOptionValueConnection = { - __typename?: 'ProductOptionValueConnection'; - /** Information to aid in pagination. */ - pageInfo: PageInfo; - /** A list of edges. */ - edges?: Maybe<Array<Maybe<ProductOptionValueEdge>>>; -}; - -/** An edge in a connection. */ -export type ProductOptionValueEdge = { - __typename?: 'ProductOptionValueEdge'; - /** The item at the end of the edge. */ - node: CatalogProductOptionValue; - /** A cursor for use in pagination. */ - cursor: Scalars['String']; -}; - -/** A Product PickList Value - a product to be mapped to the base product if selected. */ -export type ProductPickListOptionValue = CatalogProductOptionValue & { - __typename?: 'ProductPickListOptionValue'; - /** The ID of the product associated with this option value. */ - productId: Scalars['Int']; - /** Unique ID for the option value. */ - entityId: Scalars['Int']; - /** Label for the option value. */ - label: Scalars['String']; - /** Indicates whether this value is the chosen default selected value. */ - isDefault: Scalars['Boolean']; -}; - -/** PreOrder Product */ -export type ProductPreOrder = ProductAvailability & { - __typename?: 'ProductPreOrder'; - /** The message to be shown in the store when a product is put into the pre-order availability state, e.g. "Expected release date is %%DATE%%" */ - message?: Maybe<Scalars['String']>; - /** Product release date */ - willBeReleasedAt?: Maybe<DateTimeExtended>; - /** The availability state of the product. */ - status: ProductAvailabilityStatus; - /** A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. */ - description: Scalars['String']; -}; - -/** Unavailable Product */ -export type ProductUnavailable = ProductAvailability & { - __typename?: 'ProductUnavailable'; - /** The message to be shown in the store when "Call for pricing" is enabled for this product, e.g. "Contact us at 555-5555" */ - message?: Maybe<Scalars['String']>; - /** The availability state of the product. */ - status: ProductAvailabilityStatus; - /** A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. */ - description: Scalars['String']; -}; - -export type Query = { - __typename?: 'Query'; - site: Site; - /** The currently logged in customer. */ - customer?: Maybe<Customer>; - /** Fetches an object given its ID */ - node?: Maybe<Node>; - /** @deprecated Alpha version. Do not use in production. */ - inventory: Inventory; -}; - - -export type QueryNodeArgs = { - id: Scalars['ID']; -}; - -/** A connection to a list of items. */ -export type RelatedProductsConnection = { - __typename?: 'RelatedProductsConnection'; - /** Information to aid in pagination. */ - pageInfo: PageInfo; - /** A list of edges. */ - edges?: Maybe<Array<Maybe<RelatedProductsEdge>>>; -}; - -/** An edge in a connection. */ -export type RelatedProductsEdge = { - __typename?: 'RelatedProductsEdge'; - /** The item at the end of the edge. */ - node: Product; - /** A cursor for use in pagination. */ - cursor: Scalars['String']; -}; - -/** Review Rating Summary */ -export type Reviews = { - __typename?: 'Reviews'; - /** Total number of reviews on product. */ - numberOfReviews: Scalars['Int']; - /** Summation of rating scores from each review. */ - summationOfRatings: Scalars['Int']; -}; - -/** route */ -export type Route = { - __typename?: 'Route'; - /** node */ - node?: Maybe<Node>; -}; - -/** Store settings information from the control panel. */ -export type Settings = { - __typename?: 'Settings'; - /** The name of the store. */ - storeName: Scalars['String']; - /** The hash of the store. */ - storeHash: Scalars['String']; - /** The current store status. */ - status: StorefrontStatusType; - /** Logo information for the store. */ - logo: LogoField; - /** Contact information for the store. */ - contact?: Maybe<ContactField>; - /** Store urls. */ - url: UrlField; - /** Store display format information. */ - display: DisplayField; - /** Channel ID. */ - channelId: Scalars['Long']; -}; - -/** A site */ -export type Site = { - __typename?: 'Site'; - categoryTree: Array<CategoryTreeItem>; - /** Details of the brand. */ - brands: BrandConnection; - /** Details of the products. */ - products: ProductConnection; - /** Details of the newest products. */ - newestProducts: ProductConnection; - /** Details of the best selling products. */ - bestSellingProducts: ProductConnection; - /** Details of the featured products. */ - featuredProducts: ProductConnection; - /** A single product object with variant pricing overlay capabilities. */ - product?: Maybe<Product>; - /** Route for a node */ - route: Route; - /** Store settings. */ - settings?: Maybe<Settings>; -}; - - -/** A site */ -export type SiteBrandsArgs = { - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; - productEntityIds?: Maybe<Array<Scalars['Int']>>; -}; - - -/** A site */ -export type SiteProductsArgs = { - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; - ids?: Maybe<Array<Scalars['ID']>>; - entityIds?: Maybe<Array<Scalars['Int']>>; -}; - - -/** A site */ -export type SiteNewestProductsArgs = { - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - - -/** A site */ -export type SiteBestSellingProductsArgs = { - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - - -/** A site */ -export type SiteFeaturedProductsArgs = { - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - - -/** A site */ -export type SiteProductArgs = { - id?: Maybe<Scalars['ID']>; - entityId?: Maybe<Scalars['Int']>; - variantEntityId?: Maybe<Scalars['Int']>; - optionValueIds?: Maybe<Array<OptionValueId>>; - sku?: Maybe<Scalars['String']>; -}; - - -/** A site */ -export type SiteRouteArgs = { - path: Scalars['String']; -}; - -/** Storefront Mode */ -export enum StorefrontStatusType { - Launched = 'LAUNCHED', - Maintenance = 'MAINTENANCE', - PreLaunch = 'PRE_LAUNCH', - Hibernation = 'HIBERNATION' -} - -/** A swatch option value - swatch values can be associated with a list of hexidecimal colors or an image. */ -export type SwatchOptionValue = CatalogProductOptionValue & { - __typename?: 'SwatchOptionValue'; - /** List of up to 3 hex encoded colors to associate with a swatch value. */ - hexColors: Array<Scalars['String']>; - /** Absolute path of a swatch texture image. */ - imageUrl?: Maybe<Scalars['String']>; - /** Unique ID for the option value. */ - entityId: Scalars['Int']; - /** Label for the option value. */ - label: Scalars['String']; - /** Indicates whether this value is the chosen default selected value. */ - isDefault: Scalars['Boolean']; -}; - - -/** A swatch option value - swatch values can be associated with a list of hexidecimal colors or an image. */ -export type SwatchOptionValueImageUrlArgs = { - width: Scalars['Int']; - height?: Maybe<Scalars['Int']>; -}; - -/** A single line text input field. */ -export type TextFieldOption = CatalogProductOption & { - __typename?: 'TextFieldOption'; - /** Unique ID for the option. */ - entityId: Scalars['Int']; - /** Display name for the option. */ - displayName: Scalars['String']; - /** One of the option values is required to be selected for the checkout. */ - isRequired: Scalars['Boolean']; -}; - -/** Url field */ -export type UrlField = { - __typename?: 'UrlField'; - /** Store url. */ - vanityUrl: Scalars['String']; - /** CDN url to fetch assets. */ - cdnUrl: Scalars['String']; -}; - -/** Variant */ -export type Variant = Node & { - __typename?: 'Variant'; - /** The ID of an object */ - id: Scalars['ID']; - /** Id of the variant. */ - entityId: Scalars['Int']; - /** Sku of the variant. */ - sku: Scalars['String']; - /** The variant's weight. If a weight was not explicitly specified on the variant, this will be the product's weight. */ - weight?: Maybe<Measurement>; - /** The variant's height. If a height was not explicitly specified on the variant, this will be the product's height. */ - height?: Maybe<Measurement>; - /** The variant's width. If a width was not explicitly specified on the variant, this will be the product's width. */ - width?: Maybe<Measurement>; - /** The variant's depth. If a depth was not explicitly specified on the variant, this will be the product's depth. */ - depth?: Maybe<Measurement>; - /** The options which define a variant. */ - options: OptionConnection; - /** Product options that compose this variant. */ - productOptions: ProductOptionConnection; - /** Default image for a variant. */ - defaultImage?: Maybe<Image>; - /** Variant prices */ - prices?: Maybe<Prices>; - /** Variant inventory */ - inventory?: Maybe<VariantInventory>; - /** Metafield data related to a variant. */ - metafields: MetafieldConnection; -}; - - -/** Variant */ -export type VariantOptionsArgs = { - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - - -/** Variant */ -export type VariantProductOptionsArgs = { - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - - -/** Variant */ -export type VariantPricesArgs = { - includeTax?: Maybe<Scalars['Boolean']>; - currencyCode?: Maybe<CurrencyCode>; -}; - - -/** Variant */ -export type VariantMetafieldsArgs = { - namespace: Scalars['String']; - keys?: Maybe<Array<Scalars['String']>>; - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - -/** A connection to a list of items. */ -export type VariantConnection = { - __typename?: 'VariantConnection'; - /** Information to aid in pagination. */ - pageInfo: PageInfo; - /** A list of edges. */ - edges?: Maybe<Array<Maybe<VariantEdge>>>; -}; - -/** An edge in a connection. */ -export type VariantEdge = { - __typename?: 'VariantEdge'; - /** The item at the end of the edge. */ - node: Variant; - /** A cursor for use in pagination. */ - cursor: Scalars['String']; -}; - -/** Variant Inventory */ -export type VariantInventory = { - __typename?: 'VariantInventory'; - /** Aggregated product variant inventory information. This data may not be available if not set or if the store's Inventory Settings have disabled displaying stock levels on the storefront. */ - aggregated?: Maybe<Aggregated>; - /** Indicates whether this product is in stock. */ - isInStock: Scalars['Boolean']; - /** Inventory by locations. */ - byLocation?: Maybe<LocationConnection>; -}; - - -/** Variant Inventory */ -export type VariantInventoryByLocationArgs = { - locationEntityIds?: Maybe<Array<Scalars['Int']>>; - before?: Maybe<Scalars['String']>; - after?: Maybe<Scalars['String']>; - first?: Maybe<Scalars['Int']>; - last?: Maybe<Scalars['Int']>; -}; - -/** Please select a currency */ -export enum CurrencyCode { - Adp = 'ADP', - Aed = 'AED', - Afa = 'AFA', - Afn = 'AFN', - Alk = 'ALK', - All = 'ALL', - Amd = 'AMD', - Ang = 'ANG', - Aoa = 'AOA', - Aok = 'AOK', - Aon = 'AON', - Aor = 'AOR', - Ara = 'ARA', - Arl = 'ARL', - Arm = 'ARM', - Arp = 'ARP', - Ars = 'ARS', - Ats = 'ATS', - Aud = 'AUD', - Awg = 'AWG', - Azm = 'AZM', - Azn = 'AZN', - Bad = 'BAD', - Bam = 'BAM', - Ban = 'BAN', - Bbd = 'BBD', - Bdt = 'BDT', - Bec = 'BEC', - Bef = 'BEF', - Bel = 'BEL', - Bgl = 'BGL', - Bgm = 'BGM', - Bgn = 'BGN', - Bgo = 'BGO', - Bhd = 'BHD', - Bif = 'BIF', - Bmd = 'BMD', - Bnd = 'BND', - Bob = 'BOB', - Bol = 'BOL', - Bop = 'BOP', - Bov = 'BOV', - Brb = 'BRB', - Brc = 'BRC', - Bre = 'BRE', - Brl = 'BRL', - Brn = 'BRN', - Brr = 'BRR', - Brz = 'BRZ', - Bsd = 'BSD', - Btn = 'BTN', - Buk = 'BUK', - Bwp = 'BWP', - Byb = 'BYB', - Byr = 'BYR', - Bzd = 'BZD', - Cad = 'CAD', - Cdf = 'CDF', - Che = 'CHE', - Chf = 'CHF', - Chw = 'CHW', - Cle = 'CLE', - Clf = 'CLF', - Clp = 'CLP', - Cnx = 'CNX', - Cny = 'CNY', - Cop = 'COP', - Cou = 'COU', - Crc = 'CRC', - Csd = 'CSD', - Csk = 'CSK', - Cve = 'CVE', - Cyp = 'CYP', - Czk = 'CZK', - Ddm = 'DDM', - Dem = 'DEM', - Djf = 'DJF', - Dkk = 'DKK', - Dop = 'DOP', - Dzd = 'DZD', - Ecs = 'ECS', - Ecv = 'ECV', - Eek = 'EEK', - Egp = 'EGP', - Ern = 'ERN', - Esa = 'ESA', - Esb = 'ESB', - Esp = 'ESP', - Etb = 'ETB', - Eur = 'EUR', - Fim = 'FIM', - Fjd = 'FJD', - Fkp = 'FKP', - Frf = 'FRF', - Gbp = 'GBP', - Gek = 'GEK', - Gel = 'GEL', - Ghc = 'GHC', - Ghs = 'GHS', - Gip = 'GIP', - Gmd = 'GMD', - Gnf = 'GNF', - Gns = 'GNS', - Gqe = 'GQE', - Grd = 'GRD', - Gtq = 'GTQ', - Gwe = 'GWE', - Gwp = 'GWP', - Gyd = 'GYD', - Hkd = 'HKD', - Hnl = 'HNL', - Hrd = 'HRD', - Hrk = 'HRK', - Htg = 'HTG', - Huf = 'HUF', - Idr = 'IDR', - Iep = 'IEP', - Ilp = 'ILP', - Ilr = 'ILR', - Ils = 'ILS', - Inr = 'INR', - Iqd = 'IQD', - Isj = 'ISJ', - Isk = 'ISK', - Itl = 'ITL', - Jmd = 'JMD', - Jod = 'JOD', - Jpy = 'JPY', - Kes = 'KES', - Kgs = 'KGS', - Khr = 'KHR', - Kmf = 'KMF', - Krh = 'KRH', - Kro = 'KRO', - Krw = 'KRW', - Kwd = 'KWD', - Kyd = 'KYD', - Kzt = 'KZT', - Lak = 'LAK', - Lbp = 'LBP', - Lkr = 'LKR', - Lrd = 'LRD', - Lsl = 'LSL', - Ltl = 'LTL', - Ltt = 'LTT', - Luc = 'LUC', - Luf = 'LUF', - Lul = 'LUL', - Lvl = 'LVL', - Lvr = 'LVR', - Lyd = 'LYD', - Mad = 'MAD', - Maf = 'MAF', - Mcf = 'MCF', - Mdc = 'MDC', - Mdl = 'MDL', - Mga = 'MGA', - Mgf = 'MGF', - Mkd = 'MKD', - Mkn = 'MKN', - Mlf = 'MLF', - Mmk = 'MMK', - Mnt = 'MNT', - Mop = 'MOP', - Mro = 'MRO', - Mtl = 'MTL', - Mtp = 'MTP', - Mur = 'MUR', - Mvp = 'MVP', - Mvr = 'MVR', - Mwk = 'MWK', - Mxn = 'MXN', - Mxp = 'MXP', - Mxv = 'MXV', - Myr = 'MYR', - Mze = 'MZE', - Mzm = 'MZM', - Mzn = 'MZN', - Nad = 'NAD', - Ngn = 'NGN', - Nic = 'NIC', - Nio = 'NIO', - Nlg = 'NLG', - Nok = 'NOK', - Npr = 'NPR', - Nzd = 'NZD', - Omr = 'OMR', - Pab = 'PAB', - Pei = 'PEI', - Pen = 'PEN', - Pes = 'PES', - Pgk = 'PGK', - Php = 'PHP', - Pkr = 'PKR', - Pln = 'PLN', - Plz = 'PLZ', - Pte = 'PTE', - Pyg = 'PYG', - Qar = 'QAR', - Rhd = 'RHD', - Rol = 'ROL', - Ron = 'RON', - Rsd = 'RSD', - Rub = 'RUB', - Rur = 'RUR', - Rwf = 'RWF', - Sar = 'SAR', - Sbd = 'SBD', - Scr = 'SCR', - Sdd = 'SDD', - Sdg = 'SDG', - Sdp = 'SDP', - Sek = 'SEK', - Sgd = 'SGD', - Shp = 'SHP', - Sit = 'SIT', - Skk = 'SKK', - Sll = 'SLL', - Sos = 'SOS', - Srd = 'SRD', - Srg = 'SRG', - Ssp = 'SSP', - Std = 'STD', - Sur = 'SUR', - Svc = 'SVC', - Syp = 'SYP', - Szl = 'SZL', - Thb = 'THB', - Tjr = 'TJR', - Tjs = 'TJS', - Tmm = 'TMM', - Tmt = 'TMT', - Tnd = 'TND', - Top = 'TOP', - Tpe = 'TPE', - Trl = 'TRL', - Try = 'TRY', - Ttd = 'TTD', - Twd = 'TWD', - Tzs = 'TZS', - Uah = 'UAH', - Uak = 'UAK', - Ugs = 'UGS', - Ugx = 'UGX', - Usd = 'USD', - Usn = 'USN', - Uss = 'USS', - Uyi = 'UYI', - Uyp = 'UYP', - Uyu = 'UYU', - Uzs = 'UZS', - Veb = 'VEB', - Vef = 'VEF', - Vnd = 'VND', - Vnn = 'VNN', - Vuv = 'VUV', - Wst = 'WST', - Xaf = 'XAF', - Xcd = 'XCD', - Xeu = 'XEU', - Xfo = 'XFO', - Xfu = 'XFU', - Xof = 'XOF', - Xpf = 'XPF', - Xre = 'XRE', - Ydd = 'YDD', - Yer = 'YER', - Yud = 'YUD', - Yum = 'YUM', - Yun = 'YUN', - Yur = 'YUR', - Zal = 'ZAL', - Zar = 'ZAR', - Zmk = 'ZMK', - Zmw = 'ZMW', - Zrn = 'ZRN', - Zrz = 'ZRZ', - Zwd = 'ZWD', - Zwl = 'ZWL', - Zwr = 'ZWR' -} - - - -export type ResponsiveImageFragment = ( - { __typename?: 'Image' } - & { url320wide: Image['url'], url640wide: Image['url'], url960wide: Image['url'], url1280wide: Image['url'] } -); - -export type GetAllProductsQueryVariables = Exact<{ [key: string]: never; }>; - - -export type GetAllProductsQuery = ( - { __typename?: 'Query' } - & { site: ( - { __typename?: 'Site' } - & { products: ( - { __typename?: 'ProductConnection' } - & { pageInfo: ( - { __typename?: 'PageInfo' } - & Pick<PageInfo, 'startCursor' | 'endCursor'> - ), edges?: Maybe<Array<Maybe<( - { __typename?: 'ProductEdge' } - & Pick<ProductEdge, 'cursor'> - & { node: ( - { __typename?: 'Product' } - & Pick<Product, 'entityId' | 'name' | 'path' | 'description'> - & { brand?: Maybe<( - { __typename?: 'Brand' } - & Pick<Brand, 'name'> - )>, prices?: Maybe<( - { __typename?: 'Prices' } - & { price: ( - { __typename?: 'Money' } - & Pick<Money, 'value' | 'currencyCode'> - ), salePrice?: Maybe<( - { __typename?: 'Money' } - & Pick<Money, 'value' | 'currencyCode'> - )> } - )>, images: ( - { __typename?: 'ImageConnection' } - & { edges?: Maybe<Array<Maybe<( - { __typename?: 'ImageEdge' } - & { node: ( - { __typename?: 'Image' } - & ResponsiveImageFragment - ) } - )>>> } - ), variants: ( - { __typename?: 'VariantConnection' } - & { edges?: Maybe<Array<Maybe<( - { __typename?: 'VariantEdge' } - & { node: ( - { __typename?: 'Variant' } - & Pick<Variant, 'entityId'> - & { defaultImage?: Maybe<( - { __typename?: 'Image' } - & ResponsiveImageFragment - )> } - ) } - )>>> } - ), options: ( - { __typename?: 'OptionConnection' } - & { edges?: Maybe<Array<Maybe<( - { __typename?: 'OptionEdge' } - & { node: ( - { __typename?: 'ProductOption' } - & Pick<ProductOption, 'entityId' | 'displayName' | 'isRequired'> - & { values: ( - { __typename?: 'OptionValueConnection' } - & { edges?: Maybe<Array<Maybe<( - { __typename?: 'OptionValueEdge' } - & { node: ( - { __typename?: 'ProductOptionValue' } - & Pick<ProductOptionValue, 'entityId' | 'label'> - ) } - )>>> } - ) } - ) } - )>>> } - ) } - ) } - )>>> } - ) } - ) } -); diff --git a/lib/bigcommerce/schema.graphql b/lib/bigcommerce/schema.graphql deleted file mode 100644 index 09bf64f90..000000000 --- a/lib/bigcommerce/schema.graphql +++ /dev/null @@ -1,1529 +0,0 @@ -"""Login result""" -type LoginResult { - """The result of a login""" - result: String! -} - -"""Logout result""" -type LogoutResult { - """The result of a logout""" - result: String! -} - -type Mutation { - login(email: String!, password: String!): LoginResult! - logout: LogoutResult! -} - -"""Aggregated""" -type Aggregated { - """ - Number of available products in stock. This can be 'null' if inventory is not set orif the store's Inventory Settings disable displaying stock levels on the storefront. - """ - availableToSell: Long! - - """ - Indicates a threshold low-stock level. This can be 'null' if the inventory warning level is not set or if the store's Inventory Settings disable displaying stock levels on the storefront. - """ - warningLevel: Int! -} - -"""Aggregated Product Inventory""" -type AggregatedInventory { - """ - Number of available products in stock. This can be 'null' if inventory is not set orif the store's Inventory Settings disable displaying stock levels on the storefront. - """ - availableToSell: Int! - - """ - Indicates a threshold low-stock level. This can be 'null' if the inventory warning level is not set or if the store's Inventory Settings disable displaying stock levels on the storefront. - """ - warningLevel: Int! -} - -"""Brand""" -type Brand implements Node { - """The ID of an object""" - id: ID! - - """Id of the brand.""" - entityId: Int! - - """Name of the brand.""" - name: String! - - """Default image for brand.""" - defaultImage: Image - - """Page title for the brand.""" - pageTitle: String! - - """Meta description for the brand.""" - metaDesc: String! - - """Meta keywords for the brand.""" - metaKeywords: [String!]! - - """Search keywords for the brand.""" - searchKeywords: [String!]! - - """Path for the brand page.""" - path: String! - products(before: String, after: String, first: Int, last: Int): ProductConnection! - - """Metafield data related to a brand.""" - metafields(namespace: String!, keys: [String!] = [], before: String, after: String, first: Int, last: Int): MetafieldConnection! -} - -"""A connection to a list of items.""" -type BrandConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [BrandEdge] -} - -"""An edge in a connection.""" -type BrandEdge { - """The item at the end of the edge.""" - node: Brand! - - """A cursor for use in pagination.""" - cursor: String! -} - -"""Bulk pricing tier that sets a fixed price for the product or variant.""" -type BulkPricingFixedPriceDiscount implements BulkPricingTier { - """This price will override the current product price.""" - price: BigDecimal! - - """Minimum item quantity that applies to this bulk pricing tier.""" - minimumQuantity: Int! - - """ - Maximum item quantity that applies to this bulk pricing tier - if not defined then the tier does not have an upper bound. - """ - maximumQuantity: Int -} - -""" -Bulk pricing tier that reduces the price of the product or variant by a percentage. -""" -type BulkPricingPercentageDiscount implements BulkPricingTier { - """The percentage that will be removed from the product price.""" - percentOff: BigDecimal! - - """Minimum item quantity that applies to this bulk pricing tier.""" - minimumQuantity: Int! - - """ - Maximum item quantity that applies to this bulk pricing tier - if not defined then the tier does not have an upper bound. - """ - maximumQuantity: Int -} - -""" -Bulk pricing tier that will subtract an amount from the price of the product or variant. -""" -type BulkPricingRelativePriceDiscount implements BulkPricingTier { - """ - The price of the product/variant will be reduced by this priceAdjustment. - """ - priceAdjustment: BigDecimal! - - """Minimum item quantity that applies to this bulk pricing tier.""" - minimumQuantity: Int! - - """ - Maximum item quantity that applies to this bulk pricing tier - if not defined then the tier does not have an upper bound. - """ - maximumQuantity: Int -} - -""" -A set of bulk pricing tiers that define price discounts which apply when purchasing specified quantities of a product or variant. -""" -interface BulkPricingTier { - """Minimum item quantity that applies to this bulk pricing tier.""" - minimumQuantity: Int! - - """ - Maximum item quantity that applies to this bulk pricing tier - if not defined then the tier does not have an upper bound. - """ - maximumQuantity: Int -} - -"""Product Option""" -interface CatalogProductOption { - """Unique ID for the option.""" - entityId: Int! - - """Display name for the option.""" - displayName: String! - - """One of the option values is required to be selected for the checkout.""" - isRequired: Boolean! -} - -"""Product Option Value""" -interface CatalogProductOptionValue { - """Unique ID for the option value.""" - entityId: Int! - - """Label for the option value.""" - label: String! - - """Indicates whether this value is the chosen default selected value.""" - isDefault: Boolean! -} - -"""Category""" -type Category implements Node { - """The ID of an object""" - id: ID! - - """Unique ID for the category.""" - entityId: Int! - - """Category name.""" - name: String! - - """Category path.""" - path: String! - - """Default image for the category.""" - defaultImage: Image - - """Category description.""" - description: String! - products(before: String, after: String, first: Int, last: Int): ProductConnection! - - """Metafield data related to a category.""" - metafields(namespace: String!, keys: [String!] = [], before: String, after: String, first: Int, last: Int): MetafieldConnection! -} - -"""A connection to a list of items.""" -type CategoryConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [CategoryEdge] -} - -"""An edge in a connection.""" -type CategoryEdge { - """The item at the end of the edge.""" - node: Category! - - """A cursor for use in pagination.""" - cursor: String! -} - -"""An item in a tree of categories.""" -type CategoryTreeItem { - """The id category.""" - entityId: Int! - - """The name of category.""" - name: String! - - """Path assigned to this category""" - path: String! - - """The description of this category.""" - description: String! - - """The number of products in this category.""" - productCount: Int! - - """Subcategories of this category""" - children: [CategoryTreeItem!]! -} - -"""A simple yes/no question represented by a checkbox.""" -type CheckboxOption implements CatalogProductOption { - """Indicates the default checked status.""" - checkedByDefault: Boolean! - - """Unique ID for the option.""" - entityId: Int! - - """Display name for the option.""" - displayName: String! - - """One of the option values is required to be selected for the checkout.""" - isRequired: Boolean! -} - -"""Contact field""" -type ContactField { - """Store address line.""" - address: String! - - """Store country.""" - country: String! - - """Store address type.""" - addressType: String! - - """Store email.""" - email: String! - - """Store phone number.""" - phone: String! -} - -"""Custom field""" -type CustomField { - """Custom field id.""" - entityId: Int! - - """Name of the custom field.""" - name: String! - - """Value of the custom field.""" - value: String! -} - -"""A connection to a list of items.""" -type CustomFieldConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [CustomFieldEdge] -} - -"""An edge in a connection.""" -type CustomFieldEdge { - """The item at the end of the edge.""" - node: CustomField! - - """A cursor for use in pagination.""" - cursor: String! -} - -"""A customer that shops on a store""" -type Customer { - """The ID of the customer.""" - entityId: Int! - - """The company name of the customer.""" - company: String! - - """The customer group id of the customer.""" - customerGroupId: Int! - - """The email address of the customer.""" - email: String! - - """The first name of the customer.""" - firstName: String! - - """The last name of the customer.""" - lastName: String! - - """The notes of the customer.""" - notes: String! - - """The phone number of the customer.""" - phone: String! - - """The tax exempt category of the customer.""" - taxExemptCategory: String! - - """Customer addresses count.""" - addressCount: Int! - - """Customer attributes count.""" - attributeCount: Int! - - """Customer store credit.""" - storeCredit: [Money!]! - - """Customer attributes.""" - attributes: CustomerAttributes! -} - -"""A custom, store-specific attribute for a customer""" -type CustomerAttribute { - """The ID of the custom customer attribute""" - entityId: Int! - - """The value of the custom customer attribute""" - value: String - - """The name of the custom customer attribute""" - name: String! -} - -"""Custom, store-specific customer attributes""" -type CustomerAttributes { - attribute( - """The ID of the customer attribute""" - entityId: Int! - ): CustomerAttribute! -} - -"""A calendar for allowing selection of a date.""" -type DateFieldOption implements CatalogProductOption { - """Unique ID for the option.""" - entityId: Int! - - """Display name for the option.""" - displayName: String! - - """One of the option values is required to be selected for the checkout.""" - isRequired: Boolean! -} - -scalar DateTime - -"""Date Time Extended""" -type DateTimeExtended { - """ISO-8601 formatted date in UTC""" - utc: DateTime! -} - -"""Display field""" -type DisplayField { - """Short date format.""" - shortDateFormat: String! - - """Extended date format.""" - extendedDateFormat: String! -} - -""" -A form allowing selection and uploading of a file from the user's local computer. -""" -type FileUploadFieldOption implements CatalogProductOption { - """Unique ID for the option.""" - entityId: Int! - - """Display name for the option.""" - displayName: String! - - """One of the option values is required to be selected for the checkout.""" - isRequired: Boolean! -} - -"""Image""" -type Image { - """Absolute path to image using store CDN.""" - url(width: Int!, height: Int): String! - - """ - Text description of an image that can be used for SEO and/or accessibility purposes. - """ - altText: String! - - """Indicates whether this is the primary image.""" - isDefault: Boolean! -} - -"""A connection to a list of items.""" -type ImageConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [ImageEdge] -} - -"""An edge in a connection.""" -type ImageEdge { - """The item at the end of the edge.""" - node: Image! - - """A cursor for use in pagination.""" - cursor: String! -} - -"""An inventory""" -type Inventory { - """Locations""" - locations(entityIds: [Int!], codes: [String!], typeIds: [String!], before: String, after: String, first: Int, last: Int): LocationConnection! -} - -"""Inventory By Locations""" -type InventoryByLocations { - """Location id.""" - locationEntityId: Long! - - """Number of available products in stock.""" - availableToSell: Long! - - """Indicates a threshold low-stock level.""" - warningLevel: Int! - - """Indicates whether this product is in stock.""" - isInStock: Boolean! -} - -"""A connection to a list of items.""" -type LocationConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [LocationEdge] -} - -"""An edge in a connection.""" -type LocationEdge { - """The item at the end of the edge.""" - node: InventoryByLocations! - - """A cursor for use in pagination.""" - cursor: String! -} - -"""Logo field""" -type LogoField { - """Logo title.""" - title: String! - - """Store logo image.""" - image: Image! -} - -"""Measurement""" -type Measurement { - """Unformatted weight measurement value.""" - value: Float! - - """Unit of measurement.""" - unit: String! -} - -"""A connection to a list of items.""" -type MetafieldConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [MetafieldEdge] -} - -"""An edge in a connection.""" -type MetafieldEdge { - """The item at the end of the edge.""" - node: Metafields! - - """A cursor for use in pagination.""" - cursor: String! -} - -""" -Key/Value pairs of data attached tied to a resource entity (product, brand, category, etc.) -""" -type Metafields { - """The ID of an object""" - id: ID! - - """The ID of the metafield when referencing via our backend API.""" - entityId: Int! - - """A label for identifying a metafield data value.""" - key: String! - - """A metafield value.""" - value: String! -} - -"""A money object - includes currency code and a money amount""" -type Money { - """Currency code of the current money.""" - currencyCode: String! - - """The amount of money.""" - value: BigDecimal! -} - -"""A min and max pair of money objects""" -type MoneyRange { - """Minimum money object.""" - min: Money! - - """Maximum money object.""" - max: Money! -} - -"""A multi-line text input field, aka a text box.""" -type MultiLineTextFieldOption implements CatalogProductOption { - """Unique ID for the option.""" - entityId: Int! - - """Display name for the option.""" - displayName: String! - - """One of the option values is required to be selected for the checkout.""" - isRequired: Boolean! -} - -"""An option type that has a fixed list of values.""" -type MultipleChoiceOption implements CatalogProductOption { - """The chosen display style for this multiple choice option.""" - displayStyle: String! - - """List of option values.""" - values(before: String, after: String, first: Int, last: Int): ProductOptionValueConnection! - - """Unique ID for the option.""" - entityId: Int! - - """Display name for the option.""" - displayName: String! - - """One of the option values is required to be selected for the checkout.""" - isRequired: Boolean! -} - -"""A simple multiple choice value comprised of an id and a label.""" -type MultipleChoiceOptionValue implements CatalogProductOptionValue { - """Unique ID for the option value.""" - entityId: Int! - - """Label for the option value.""" - label: String! - - """Indicates whether this value is the chosen default selected value.""" - isDefault: Boolean! -} - -"""An object with an ID""" -interface Node { - """The id of the object.""" - id: ID! -} - -"""A single line text input field that only accepts numbers.""" -type NumberFieldOption implements CatalogProductOption { - """Unique ID for the option.""" - entityId: Int! - - """Display name for the option.""" - displayName: String! - - """One of the option values is required to be selected for the checkout.""" - isRequired: Boolean! -} - -"""A connection to a list of items.""" -type OptionConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [OptionEdge] -} - -"""An edge in a connection.""" -type OptionEdge { - """The item at the end of the edge.""" - node: ProductOption! - - """A cursor for use in pagination.""" - cursor: String! -} - -"""A connection to a list of items.""" -type OptionValueConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [OptionValueEdge] -} - -"""An edge in a connection.""" -type OptionValueEdge { - """The item at the end of the edge.""" - node: ProductOptionValue! - - """A cursor for use in pagination.""" - cursor: String! -} - -input OptionValueId { - optionEntityId: Int! - valueEntityId: Int! -} - -"""Information about pagination in a connection.""" -type PageInfo { - """When paginating forwards, are there more items?""" - hasNextPage: Boolean! - - """When paginating backwards, are there more items?""" - hasPreviousPage: Boolean! - - """When paginating backwards, the cursor to continue.""" - startCursor: String - - """When paginating forwards, the cursor to continue.""" - endCursor: String -} - -"""The min and max range of prices that apply to this product.""" -type PriceRanges { - """Product price min/max range.""" - priceRange: MoneyRange! - - """Product retail price min/max range.""" - retailPriceRange: MoneyRange -} - -"""The various prices that can be set on a product.""" -type Prices { - """Calculated price of the product.""" - price: Money! - - """Sale price of the product.""" - salePrice: Money - - """Original price of the product.""" - basePrice: Money - - """Retail price of the product.""" - retailPrice: Money - - """Minimum advertised price of the product.""" - mapPrice: Money - - """Product price min/max range.""" - priceRange: MoneyRange! - - """Product retail price min/max range.""" - retailPriceRange: MoneyRange - - """ - The difference between the retail price (MSRP) and the current price, which can be presented to the shopper as their savings. - """ - saved: Money - - """List of bulk pricing tiers applicable to a product or variant.""" - bulkPricing: [BulkPricingTier!]! -} - -"""Product""" -type Product implements Node { - """The ID of an object""" - id: ID! - - """Id of the product.""" - entityId: Int! - - """Default product variant when no options are selected.""" - sku: String! - - """Relative URL path to product page.""" - path: String! - - """Name of the product.""" - name: String! - - """Description of the product.""" - description: String! - - """Description of the product in plain text.""" - plainTextDescription(characterLimit: Int = 120): String! - - """Warranty information of the product.""" - warranty: String! - - """Minimum purchasable quantity for this product in a single order.""" - minPurchaseQuantity: Int - - """Maximum purchasable quantity for this product in a single order.""" - maxPurchaseQuantity: Int - - """Absolute URL path for adding a product to cart.""" - addToCartUrl: String! - - """Absolute URL path for adding a product to customer's wishlist.""" - addToWishlistUrl: String! - - """ - Prices object determined by supplied product ID, variant ID, and selected option IDs. - """ - prices(includeTax: Boolean = false, currencyCode: currencyCode): Prices - - """ - The minimum and maximum price of this product based on variant pricing and/or modifier price rules. - """ - priceRanges(includeTax: Boolean = false): PriceRanges @deprecated(reason: "Use priceRanges inside prices node instead.") - - """Weight of the product.""" - weight: Measurement - - """Height of the product.""" - height: Measurement - - """Width of the product.""" - width: Measurement - - """Depth of the product.""" - depth: Measurement - - """Product options.""" - options(before: String, after: String, first: Int, last: Int): OptionConnection! - - """Product options.""" - productOptions(before: String, after: String, first: Int, last: Int): ProductOptionConnection! - - """ - Summary of the product reviews, includes the total number of reviews submitted and summation of the ratings on the reviews (ratings range from 0-5 per review). - """ - reviewSummary: Reviews! - - """Type of product, ex: physical, digital""" - type: String! - - """The availability state of the product.""" - availability: String! @deprecated(reason: "Use status inside availabilityV2 instead.") - - """ - A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. - """ - availabilityDescription: String! @deprecated(reason: "Use description inside availabilityV2 instead.") - - """The availability state of the product.""" - availabilityV2: ProductAvailability! - - """List of categories associated with the product.""" - categories(before: String, after: String, first: Int, last: Int): CategoryConnection! - - """Brand associated with the product.""" - brand: Brand - - """Variants associated with the product.""" - variants(before: String, after: String, first: Int, last: Int, entityIds: [Int!] = [], optionValueIds: [OptionValueId!] = []): VariantConnection! - - """Custom fields of the product.""" - customFields(names: [String!] = [], before: String, after: String, first: Int, last: Int): CustomFieldConnection! - - """A list of the images for a product.""" - images(before: String, after: String, first: Int, last: Int): ImageConnection! - - """Default image for a product.""" - defaultImage: Image - - """Related products for this product.""" - relatedProducts(before: String, after: String, first: Int, last: Int): RelatedProductsConnection! - - """Inventory information of the product.""" - inventory: ProductInventory! - - """Metafield data related to a product.""" - metafields(namespace: String!, keys: [String!] = [], before: String, after: String, first: Int, last: Int): MetafieldConnection! - - """Product creation date""" - createdAt: DateTimeExtended! @deprecated(reason: "Alpha version. Do not use in production.") -} - -"""Product availability""" -interface ProductAvailability { - """The availability state of the product.""" - status: ProductAvailabilityStatus! - - """ - A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. - """ - description: String! -} - -"""Product availability status""" -enum ProductAvailabilityStatus { - Available - Preorder - Unavailable -} - -"""Available Product""" -type ProductAvailable implements ProductAvailability { - """The availability state of the product.""" - status: ProductAvailabilityStatus! - - """ - A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. - """ - description: String! -} - -"""A connection to a list of items.""" -type ProductConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [ProductEdge] -} - -"""An edge in a connection.""" -type ProductEdge { - """The item at the end of the edge.""" - node: Product! - - """A cursor for use in pagination.""" - cursor: String! -} - -"""Product Inventory Information""" -type ProductInventory { - """Indicates whether this product is in stock.""" - isInStock: Boolean! - - """ - Indicates whether this product's inventory is being tracked on variant level. If true, you may wish to check the variants node to understand the true inventory of each individual variant, rather than relying on this product-level aggregate to understand how many items may be added to cart. - """ - hasVariantInventory: Boolean! - - """ - Aggregated product inventory information. This data may not be available if not set or if the store's Inventory Settings have disabled displaying stock levels on the storefront. - """ - aggregated: AggregatedInventory -} - -"""Product Option""" -type ProductOption { - """Unique ID for the option.""" - entityId: Int! - - """Display name for the option.""" - displayName: String! - - """One of the option values is required to be selected for the checkout.""" - isRequired: Boolean! - - """Option values.""" - values(before: String, after: String, first: Int, last: Int): OptionValueConnection! -} - -"""A connection to a list of items.""" -type ProductOptionConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [ProductOptionEdge] -} - -"""An edge in a connection.""" -type ProductOptionEdge { - """The item at the end of the edge.""" - node: CatalogProductOption! - - """A cursor for use in pagination.""" - cursor: String! -} - -"""Product Option Value""" -type ProductOptionValue { - """Unique ID for the option value.""" - entityId: Int! - - """Label for the option value.""" - label: String! -} - -"""A connection to a list of items.""" -type ProductOptionValueConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [ProductOptionValueEdge] -} - -"""An edge in a connection.""" -type ProductOptionValueEdge { - """The item at the end of the edge.""" - node: CatalogProductOptionValue! - - """A cursor for use in pagination.""" - cursor: String! -} - -""" -A Product PickList Value - a product to be mapped to the base product if selected. -""" -type ProductPickListOptionValue implements CatalogProductOptionValue { - """The ID of the product associated with this option value.""" - productId: Int! - - """Unique ID for the option value.""" - entityId: Int! - - """Label for the option value.""" - label: String! - - """Indicates whether this value is the chosen default selected value.""" - isDefault: Boolean! -} - -"""PreOrder Product""" -type ProductPreOrder implements ProductAvailability { - """ - The message to be shown in the store when a product is put into the pre-order availability state, e.g. "Expected release date is %%DATE%%" - """ - message: String - - """Product release date""" - willBeReleasedAt: DateTimeExtended - - """The availability state of the product.""" - status: ProductAvailabilityStatus! - - """ - A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. - """ - description: String! -} - -"""Unavailable Product""" -type ProductUnavailable implements ProductAvailability { - """ - The message to be shown in the store when "Call for pricing" is enabled for this product, e.g. "Contact us at 555-5555" - """ - message: String - - """The availability state of the product.""" - status: ProductAvailabilityStatus! - - """ - A few words telling the customer how long it will normally take to ship this product, such as 'Usually ships in 24 hours'. - """ - description: String! -} - -type Query { - site: Site! - - """The currently logged in customer.""" - customer: Customer - - """Fetches an object given its ID""" - node( - """The ID of an object""" - id: ID! - ): Node - inventory: Inventory! @deprecated(reason: "Alpha version. Do not use in production.") -} - -"""A connection to a list of items.""" -type RelatedProductsConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [RelatedProductsEdge] -} - -"""An edge in a connection.""" -type RelatedProductsEdge { - """The item at the end of the edge.""" - node: Product! - - """A cursor for use in pagination.""" - cursor: String! -} - -"""Review Rating Summary""" -type Reviews { - """Total number of reviews on product.""" - numberOfReviews: Int! - - """Summation of rating scores from each review.""" - summationOfRatings: Int! -} - -"""route""" -type Route { - """node""" - node: Node -} - -"""Store settings information from the control panel.""" -type Settings { - """The name of the store.""" - storeName: String! - - """The hash of the store.""" - storeHash: String! - - """The current store status.""" - status: StorefrontStatusType! - - """Logo information for the store.""" - logo: LogoField! - - """Contact information for the store.""" - contact: ContactField - - """Store urls.""" - url: UrlField! - - """Store display format information.""" - display: DisplayField! - - """Channel ID.""" - channelId: Long! -} - -"""A site""" -type Site { - categoryTree: [CategoryTreeItem!]! - - """Details of the brand.""" - brands(before: String, after: String, first: Int, last: Int, productEntityIds: [Int!] = []): BrandConnection! - - """Details of the products.""" - products(before: String, after: String, first: Int, last: Int, ids: [ID!] = [], entityIds: [Int!] = []): ProductConnection! - - """Details of the newest products.""" - newestProducts(before: String, after: String, first: Int, last: Int): ProductConnection! - - """Details of the best selling products.""" - bestSellingProducts(before: String, after: String, first: Int, last: Int): ProductConnection! - - """Details of the featured products.""" - featuredProducts(before: String, after: String, first: Int, last: Int): ProductConnection! - - """A single product object with variant pricing overlay capabilities.""" - product(id: ID, entityId: Int, variantEntityId: Int, optionValueIds: [OptionValueId!] = [], sku: String): Product - - """Route for a node""" - route(path: String!): Route! - - """Store settings.""" - settings: Settings -} - -"""Storefront Mode""" -enum StorefrontStatusType { - LAUNCHED - MAINTENANCE - PRE_LAUNCH - HIBERNATION -} - -""" -A swatch option value - swatch values can be associated with a list of hexidecimal colors or an image. -""" -type SwatchOptionValue implements CatalogProductOptionValue { - """List of up to 3 hex encoded colors to associate with a swatch value.""" - hexColors: [String!]! - - """Absolute path of a swatch texture image.""" - imageUrl(width: Int!, height: Int): String - - """Unique ID for the option value.""" - entityId: Int! - - """Label for the option value.""" - label: String! - - """Indicates whether this value is the chosen default selected value.""" - isDefault: Boolean! -} - -"""A single line text input field.""" -type TextFieldOption implements CatalogProductOption { - """Unique ID for the option.""" - entityId: Int! - - """Display name for the option.""" - displayName: String! - - """One of the option values is required to be selected for the checkout.""" - isRequired: Boolean! -} - -"""Url field""" -type UrlField { - """Store url.""" - vanityUrl: String! - - """CDN url to fetch assets.""" - cdnUrl: String! -} - -"""Variant""" -type Variant implements Node { - """The ID of an object""" - id: ID! - - """Id of the variant.""" - entityId: Int! - - """Sku of the variant.""" - sku: String! - - """ - 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. - """ - height: Measurement - - """ - 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. - """ - depth: Measurement - - """The options which define a variant.""" - options(before: String, after: String, first: Int, last: Int): OptionConnection! - - """Product options that compose this variant.""" - productOptions(before: String, after: String, first: Int, last: Int): ProductOptionConnection! - - """Default image for a variant.""" - defaultImage: Image - - """Variant prices""" - prices(includeTax: Boolean = false, currencyCode: currencyCode): Prices - - """Variant inventory""" - inventory: VariantInventory - - """Metafield data related to a variant.""" - metafields(namespace: String!, keys: [String!] = [], before: String, after: String, first: Int, last: Int): MetafieldConnection! -} - -"""A connection to a list of items.""" -type VariantConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [VariantEdge] -} - -"""An edge in a connection.""" -type VariantEdge { - """The item at the end of the edge.""" - node: Variant! - - """A cursor for use in pagination.""" - cursor: String! -} - -"""Variant Inventory""" -type VariantInventory { - """ - Aggregated product variant inventory information. This data may not be available if not set or if the store's Inventory Settings have disabled displaying stock levels on the storefront. - """ - aggregated: Aggregated - - """Indicates whether this product is in stock.""" - isInStock: Boolean! - - """Inventory by locations.""" - byLocation(locationEntityIds: [Int!] = [], before: String, after: String, first: Int, last: Int): LocationConnection -} - -"""Please select a currency""" -enum currencyCode { - ADP - AED - AFA - AFN - ALK - ALL - AMD - ANG - AOA - AOK - AON - AOR - ARA - ARL - ARM - ARP - ARS - ATS - AUD - AWG - AZM - AZN - BAD - BAM - BAN - BBD - BDT - BEC - BEF - BEL - BGL - BGM - BGN - BGO - BHD - BIF - BMD - BND - BOB - BOL - BOP - BOV - BRB - BRC - BRE - BRL - BRN - BRR - BRZ - BSD - BTN - BUK - BWP - BYB - BYR - BZD - CAD - CDF - CHE - CHF - CHW - CLE - CLF - CLP - CNX - CNY - COP - COU - CRC - CSD - CSK - CVE - CYP - CZK - DDM - DEM - DJF - DKK - DOP - DZD - ECS - ECV - EEK - EGP - ERN - ESA - ESB - ESP - ETB - EUR - FIM - FJD - FKP - FRF - GBP - GEK - GEL - GHC - GHS - GIP - GMD - GNF - GNS - GQE - GRD - GTQ - GWE - GWP - GYD - HKD - HNL - HRD - HRK - HTG - HUF - IDR - IEP - ILP - ILR - ILS - INR - IQD - ISJ - ISK - ITL - JMD - JOD - JPY - KES - KGS - KHR - KMF - KRH - KRO - KRW - KWD - KYD - KZT - LAK - LBP - LKR - LRD - LSL - LTL - LTT - LUC - LUF - LUL - LVL - LVR - LYD - MAD - MAF - MCF - MDC - MDL - MGA - MGF - MKD - MKN - MLF - MMK - MNT - MOP - MRO - MTL - MTP - MUR - MVP - MVR - MWK - MXN - MXP - MXV - MYR - MZE - MZM - MZN - NAD - NGN - NIC - NIO - NLG - NOK - NPR - NZD - OMR - PAB - PEI - PEN - PES - PGK - PHP - PKR - PLN - PLZ - PTE - PYG - QAR - RHD - ROL - RON - RSD - RUB - RUR - RWF - SAR - SBD - SCR - SDD - SDG - SDP - SEK - SGD - SHP - SIT - SKK - SLL - SOS - SRD - SRG - SSP - STD - SUR - SVC - SYP - SZL - THB - TJR - TJS - TMM - TMT - TND - TOP - TPE - TRL - TRY - TTD - TWD - TZS - UAH - UAK - UGS - UGX - USD - USN - USS - UYI - UYP - UYU - UZS - VEB - VEF - VND - VNN - VUV - WST - XAF - XCD - XEU - XFO - XFU - XOF - XPF - XRE - YDD - YER - YUD - YUM - YUN - YUR - ZAL - ZAR - ZMK - ZMW - ZRN - ZRZ - ZWD - ZWL - ZWR -} - -""" -The `BigDecimal` scalar type represents signed fractional values with arbitrary precision. -""" -scalar BigDecimal - -""" -The `Long` scalar type represents non-fractional signed whole numeric values. Long can represent values between -(2^63) and 2^63 - 1. -""" -scalar Long diff --git a/lib/cart.js b/lib/cart.js deleted file mode 100644 index 56ca447b1..000000000 --- a/lib/cart.js +++ /dev/null @@ -1,105 +0,0 @@ -import { useState, useCallback } from "react"; -import useSWR, { mutate } from "swr"; - -async function getText(res) { - try { - return (await res.text()) || res.statusText; - } catch (error) { - return res.statusText; - } -} - -async function getError(res) { - if (res.headers.get("Content-Type")?.includes("application/json")) { - const data = await res.json(); - return data.errors[0]; - } - return { message: await getText(res) }; -} - -async function fetcher(url) { - const res = await fetch(url); - - if (res.status === 200) { - return res.json(); - } - throw await getError(res); -} - -export function useCart() { - return useSWR("/api/cart", fetcher); -} - -export function useAddToCart() { - const [{ addingToCart, error }, setStatus] = useState({ - addingToCart: false, - }); - const addToCart = useCallback(async ({ product }) => { - setStatus({ addingToCart: true }); - - const res = await fetch("/api/cart", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ product }), - }); - - // Product added as expected - if (res.status === 200) { - setStatus({ addingToCart: false }); - return mutate("/api/cart"); - } - - const error = await getError(res); - - console.error("Adding product to cart failed with:", res.status, error); - setStatus({ addingToCart: false, error }); - }, []); - - return { addToCart, addingToCart, error }; -} - -export function useUpdateCart() { - const [{ updatingCart, error }, setStatus] = useState({ - updatingCart: false, - }); - const updateCart = useCallback(async ({ product, item }) => { - setStatus({ updatingCart: true }); - - const res = await fetch( - `/api/cart?itemId=${item.id}`, - product.quantity < 1 - ? { method: "DELETE" } - : { - method: "PUT", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ product }), - } - ); - - // Product updated as expected - if (res.status === 200) { - setStatus({ updatingCart: false }); - return mutate("/api/cart"); - } - - const error = await getError(res); - - console.error("Update to cart failed with:", res.status, error); - setStatus({ updatingCart: false, error }); - }, []); - - return { updateCart, updatingCart, error }; -} - -export function useRemoveFromCart() { - const { updateCart, updatingCart, error } = useUpdateCart(); - const removeFromCart = async ({ item }) => { - updateCart({ item, product: { quantity: 0 } }); - }; - - return { removeFromCart, removingFromCart: updatingCart, error }; -} diff --git a/lib/click-outside/click-outside.tsx b/lib/click-outside/click-outside.tsx new file mode 100644 index 000000000..3c6b0ef28 --- /dev/null +++ b/lib/click-outside/click-outside.tsx @@ -0,0 +1,42 @@ +import React, { useRef, useEffect, MouseEvent } from 'react' +import hasParent from './has-parent' + +interface ClickOutsideProps { + active: boolean + onClick: (e?: MouseEvent) => void + children: any +} + +const ClickOutside = ({ + active = true, + onClick, + children, +}: ClickOutsideProps) => { + const innerRef = useRef() + + const handleClick = (event: any) => { + if (!hasParent(event.target, innerRef?.current)) { + if (typeof onClick === 'function') { + onClick(event) + } + } + } + + useEffect(() => { + if (active) { + document.addEventListener('mousedown', handleClick) + document.addEventListener('touchstart', handleClick) + } + + return () => { + if (active) { + document.removeEventListener('mousedown', handleClick) + document.removeEventListener('touchstart', handleClick) + } + } + }) + + return React.cloneElement(children, { ref: innerRef }) +} + +export default ClickOutside diff --git a/lib/click-outside/has-parent.js b/lib/click-outside/has-parent.js new file mode 100644 index 000000000..06cd3ca91 --- /dev/null +++ b/lib/click-outside/has-parent.js @@ -0,0 +1,5 @@ +import isInDOM from './is-in-dom' + +export default function hasParent(element, root) { + return root && root.contains(element) && isInDOM(element) +} diff --git a/lib/click-outside/index.ts b/lib/click-outside/index.ts new file mode 100644 index 000000000..2df916f9c --- /dev/null +++ b/lib/click-outside/index.ts @@ -0,0 +1 @@ +export { default } from './click-outside' diff --git a/lib/click-outside/is-in-dom.js b/lib/click-outside/is-in-dom.js new file mode 100644 index 000000000..5d7438ed7 --- /dev/null +++ b/lib/click-outside/is-in-dom.js @@ -0,0 +1,3 @@ +export default function isInDom(obj) { + return Boolean(obj.closest('body')) +} diff --git a/lib/colors.ts b/lib/colors.ts new file mode 100644 index 000000000..139cda23d --- /dev/null +++ b/lib/colors.ts @@ -0,0 +1,202 @@ +import random from 'lodash.random' + +export function getRandomPairOfColors() { + const colors = ['#37B679', '#DA3C3C', '#3291FF', '#7928CA', '#79FFE1'] + const getRandomIdx = () => random(0, colors.length - 1) + let idx = getRandomIdx() + let idx2 = getRandomIdx() + + // Has to be a different color + while (idx2 === idx) { + idx2 = getRandomIdx() + } + + // Returns a pair of colors + return [colors[idx], colors[idx2]] +} + +function hexToRgb(hex: string = '') { + // @ts-ignore + const match = hex.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i) + + if (!match) { + return [0, 0, 0] + } + + let colorString = match[0] + + if (match[0].length === 3) { + colorString = colorString + .split('') + .map((char: string) => { + return char + char + }) + .join('') + } + + const integer = parseInt(colorString, 16) + const r = (integer >> 16) & 0xff + const g = (integer >> 8) & 0xff + const b = integer & 0xff + + return [r, g, b] +} + +const colorMap: Record<string, string> = { + aliceblue: '#F0F8FF', + antiquewhite: '#FAEBD7', + aqua: '#00FFFF', + aquamarine: '#7FFFD4', + azure: '#F0FFFF', + beige: '#F5F5DC', + bisque: '#FFE4C4', + black: '#000000', + blanchedalmond: '#FFEBCD', + blue: '#0000FF', + blueviolet: '#8A2BE2', + brown: '#A52A2A', + burlywood: '#DEB887', + cadetblue: '#5F9EA0', + chartreuse: '#7FFF00', + chocolate: '#D2691E', + coral: '#FF7F50', + cornflowerblue: '#6495ED', + cornsilk: '#FFF8DC', + crimson: '#DC143C', + cyan: '#00FFFF', + darkblue: '#00008B', + darkcyan: '#008B8B', + darkgoldenrod: '#B8860B', + darkgray: '#A9A9A9', + darkgreen: '#006400', + darkgrey: '#A9A9A9', + darkkhaki: '#BDB76B', + darkmagenta: '#8B008B', + darkolivegreen: '#556B2F', + darkorange: '#FF8C00', + darkorchid: '#9932CC', + darkred: '#8B0000', + darksalmon: '#E9967A', + darkseagreen: '#8FBC8F', + darkslateblue: '#483D8B', + darkslategray: '#2F4F4F', + darkslategrey: '#2F4F4F', + darkturquoise: '#00CED1', + darkviolet: '#9400D3', + deeppink: '#FF1493', + deepskyblue: '#00BFFF', + dimgray: '#696969', + dimgrey: '#696969', + dodgerblue: '#1E90FF', + firebrick: '#B22222', + floralwhite: '#FFFAF0', + forestgreen: '#228B22', + fuchsia: '#FF00FF', + gainsboro: '#DCDCDC', + ghostwhite: '#F8F8FF', + gold: '#FFD700', + goldenrod: '#DAA520', + gray: '#808080', + green: '#008000', + greenyellow: '#ADFF2F', + grey: '#808080', + honeydew: '#F0FFF0', + hotpink: '#FF69B4', + indianred: '#CD5C5C', + indigo: '#4B0082', + ivory: '#FFFFF0', + khaki: '#F0E68C', + lavender: '#E6E6FA', + lavenderblush: '#FFF0F5', + lawngreen: '#7CFC00', + lemonchiffon: '#FFFACD', + lightblue: '#ADD8E6', + lightcoral: '#F08080', + lightcyan: '#E0FFFF', + lightgoldenrodyellow: '#FAFAD2', + lightgray: '#D3D3D3', + lightgreen: '#90EE90', + lightgrey: '#D3D3D3', + lightpink: '#FFB6C1', + lightsalmon: '#FFA07A', + lightseagreen: '#20B2AA', + lightskyblue: '#87CEFA', + lightslategray: '#778899', + lightslategrey: '#778899', + lightsteelblue: '#B0C4DE', + lightyellow: '#FFFFE0', + lime: '#00FF00', + limegreen: '#32CD32', + linen: '#FAF0E6', + magenta: '#FF00FF', + maroon: '#800000', + mediumaquamarine: '#66CDAA', + mediumblue: '#0000CD', + mediumorchid: '#BA55D3', + mediumpurple: '#9370DB', + mediumseagreen: '#3CB371', + mediumslateblue: '#7B68EE', + mediumspringgreen: '#00FA9A', + mediumturquoise: '#48D1CC', + mediumvioletred: '#C71585', + midnightblue: '#191970', + mintcream: '#F5FFFA', + mistyrose: '#FFE4E1', + moccasin: '#FFE4B5', + navajowhite: '#FFDEAD', + navy: '#000080', + oldlace: '#FDF5E6', + olive: '#808000', + olivedrab: '#6B8E23', + orange: '#FFA500', + orangered: '#FF4500', + orchid: '#DA70D6', + palegoldenrod: '#EEE8AA', + palegreen: '#98FB98', + paleturquoise: '#AFEEEE', + palevioletred: '#DB7093', + papayawhip: '#FFEFD5', + peachpuff: '#FFDAB9', + peru: '#CD853F', + pink: '#FFC0CB', + plum: '#DDA0DD', + powderblue: '#B0E0E6', + purple: '#800080', + rebeccapurple: '#663399', + red: '#FF0000', + rosybrown: '#BC8F8F', + royalblue: '#4169E1', + saddlebrown: '#8B4513', + salmon: '#FA8072', + sandybrown: '#F4A460', + seagreen: '#2E8B57', + seashell: '#FFF5EE', + sienna: '#A0522D', + silver: '#C0C0C0', + skyblue: '#87CEEB', + slateblue: '#6A5ACD', + slategray: '#708090', + slategrey: '#708090', + snow: '#FFFAFA', + springgreen: '#00FF7F', + steelblue: '#4682B4', + tan: '#D2B48C', + teal: '#008080', + thistle: '#D8BFD8', + tomato: '#FF6347', + turquoise: '#40E0D0', + violet: '#EE82EE', + wheat: '#F5DEB3', + white: '#FFFFFF', + whitesmoke: '#F5F5F5', + yellow: '#FFFF00', + yellowgreen: '#9ACD32', +} + +export function isDark(color: string = ''): boolean { + color = color.toLowerCase() + // Equation from http://24ways.org/2010/calculating-color-contrast + let rgb = colorMap[color] ? hexToRgb(colorMap[color]) : hexToRgb(color) + const res = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000 + return res < 128 +} diff --git a/lib/commerce/api/index.ts b/lib/commerce/api/index.ts deleted file mode 100644 index 27fafd902..000000000 --- a/lib/commerce/api/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -export interface CommerceAPIOptions { - commerceUrl: string; - apiToken: string; -} - -export interface CommerceAPIFetchOptions { - variables?: object; - preview?: boolean; -} - -export interface CommerceAPI { - commerceUrl: string; - apiToken: string; - - fetch<T>(query: string, queryData?: CommerceAPIFetchOptions): Promise<T>; - - getAllProducts(options?: { query?: string }): Promise<any>; -} - -// export default class CommerceAPI { -// getAllProducts(query: string) { - -// } -// } diff --git a/lib/commerce/cart.tsx b/lib/commerce/cart.tsx deleted file mode 100644 index 509737fda..000000000 --- a/lib/commerce/cart.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { createContext, useContext } from 'react'; -import useSWR, { responseInterface } from 'swr'; -import { useCommerce } from '.'; - -export type Cart = any; - -export type CartResponse<C extends Cart> = responseInterface<C, Error> & { - isEmpty: boolean; -}; - -const CartContext = createContext<CartResponse<Cart>>(null); - -function getCartCookie() { - // TODO: Figure how the cart should be persisted - return null; -} - -export function CartProvider({ children }) { - const { hooks, fetcher } = useCommerce<Cart>(); - const { useCart } = hooks; - const cartId = getCartCookie(); - const response = useSWR( - () => (cartId ? [useCart.url, useCart.query, useCart.resolver] : null), - fetcher - ); - const isEmpty = true; - - return ( - <CartContext.Provider value={{ ...response, isEmpty }}> - {children} - </CartContext.Provider> - ); -} - -export function useCart<C extends Cart>() { - return useContext(CartContext) as CartResponse<C>; -} diff --git a/lib/commerce/index.tsx b/lib/commerce/index.tsx deleted file mode 100644 index 267d7dfd8..000000000 --- a/lib/commerce/index.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { createContext, ReactNode, useContext } from 'react'; - -const Commerce = createContext<Connector>(null); - -export type CommerceProps = { - children?: ReactNode; - connector: Connector; -}; - -export type Connector = { - fetcher: Fetcher<any>; - locale: string; -}; - -export type Fetcher<T> = (...args: any) => T | Promise<T>; - -export function CommerceProvider({ children, connector }: CommerceProps) { - if (!connector) { - throw new Error( - 'CommerceProvider requires a valid headless commerce connector' - ); - } - - return <Commerce.Provider value={connector}>{children}</Commerce.Provider>; -} - -export function useCommerce<T extends Connector>() { - return useContext(Commerce) as T; -} diff --git a/lib/defaults.ts b/lib/defaults.ts new file mode 100644 index 000000000..e74227732 --- /dev/null +++ b/lib/defaults.ts @@ -0,0 +1,14 @@ +// Fallback to CMS Data + +export const defaultPageProps = { + header: { + links: [ + { + link: { + title: 'New Arrivals', + url: '/', + }, + }, + ], + }, +} diff --git a/lib/focus-trap.tsx b/lib/focus-trap.tsx new file mode 100644 index 000000000..6e1dc5fef --- /dev/null +++ b/lib/focus-trap.tsx @@ -0,0 +1,64 @@ +import React, { useEffect, RefObject } from 'react' +import { tabbable } from 'tabbable' + +interface Props { + children: React.ReactNode | any + focusFirst?: boolean +} + +export default function FocusTrap({ children, focusFirst = false }: Props) { + const root: RefObject<any> = React.useRef() + const anchor: RefObject<any> = React.useRef(document.activeElement) + + const returnFocus = () => { + // Returns focus to the last focused element prior to trap. + if (anchor) { + anchor.current.focus() + } + } + + const trapFocus = () => { + // Focus the container element + if (root.current) { + root.current.focus() + if (focusFirst) { + selectFirstFocusableEl() + } + } + } + + const selectFirstFocusableEl = () => { + // Try to find focusable elements, if match then focus + // Up to 6 seconds of load time threshold + let match = false + let end = 60 // Try to find match at least n times + let i = 0 + const timer = setInterval(() => { + if (!match !== i > end) { + match = !!tabbable(root.current).length + if (match) { + // Attempt to focus the first el + tabbable(root.current)[0].focus() + } + i = i + 1 + } else { + // Clear interval after n attempts + clearInterval(timer) + } + }, 100) + } + + useEffect(() => { + setTimeout(trapFocus, 20) + return () => { + returnFocus() + } + }, [root, children]) + + return React.createElement('div', { + ref: root, + children, + className: 'outline-none focus-trap', + tabIndex: -1, + }) +} diff --git a/lib/get-slug.ts b/lib/get-slug.ts new file mode 100644 index 000000000..329c5a27e --- /dev/null +++ b/lib/get-slug.ts @@ -0,0 +1,5 @@ +// Remove trailing and leading slash, usually included in nodes +// returned by the BigCommerce API +const getSlug = (path: string) => path.replace(/^\/|\/$/g, '') + +export default getSlug diff --git a/lib/hooks/useAcceptCookies.ts b/lib/hooks/useAcceptCookies.ts new file mode 100644 index 000000000..7f33adf47 --- /dev/null +++ b/lib/hooks/useAcceptCookies.ts @@ -0,0 +1,24 @@ +import Cookies from 'js-cookie' +import { useEffect, useState } from 'react' + +const COOKIE_NAME = 'accept_cookies' + +export const useAcceptCookies = () => { + const [acceptedCookies, setAcceptedCookies] = useState(true) + + useEffect(() => { + if (!Cookies.get(COOKIE_NAME)) { + setAcceptedCookies(false) + } + }, []) + + const acceptCookies = () => { + setAcceptedCookies(true) + Cookies.set(COOKIE_NAME, 'accepted', { expires: 365 }) + } + + return { + acceptedCookies, + onAcceptCookies: acceptCookies, + } +} diff --git a/lib/hooks/useUserAvatar.ts b/lib/hooks/useUserAvatar.ts new file mode 100644 index 000000000..840daae6d --- /dev/null +++ b/lib/hooks/useUserAvatar.ts @@ -0,0 +1,26 @@ +import { useEffect } from 'react' +import { useUI } from '@components/ui/context' +import { getRandomPairOfColors } from '@lib/colors' + +export const useUserAvatar = (name = 'userAvatar') => { + const { userAvatar, setUserAvatar } = useUI() + + useEffect(() => { + if (!userAvatar && localStorage.getItem(name)) { + // Get bg from localStorage and push it to the context. + setUserAvatar(localStorage.getItem(name)) + } + if (!localStorage.getItem(name)) { + // bg not set locally, generating one, setting localStorage and context to persist. + const bg = getRandomPairOfColors() + const value = `linear-gradient(140deg, ${bg[0]}, ${bg[1]} 100%)` + localStorage.setItem(name, value) + setUserAvatar(value) + } + }, []) + + return { + userAvatar, + setUserAvatar, + } +} diff --git a/lib/range-map.ts b/lib/range-map.ts new file mode 100644 index 000000000..886f20d6b --- /dev/null +++ b/lib/range-map.ts @@ -0,0 +1,7 @@ +export default function rangeMap(n: number, fn: (i: number) => any) { + const arr = [] + while (n > arr.length) { + arr.push(fn(arr.length)) + } + return arr +} diff --git a/lib/search.tsx b/lib/search.tsx new file mode 100644 index 000000000..87b42db36 --- /dev/null +++ b/lib/search.tsx @@ -0,0 +1,52 @@ +import { useEffect, useState } from 'react' +import getSlug from './get-slug' + +export function useSearchMeta(asPath: string) { + const [pathname, setPathname] = useState<string>('/search') + const [category, setCategory] = useState<string | undefined>() + const [brand, setBrand] = useState<string | undefined>() + + useEffect(() => { + // Only access asPath after hydration to avoid a server mismatch + const path = asPath.split('?')[0] + const parts = path.split('/') + + let c = parts[2] + let b = parts[3] + + if (c === 'designers') { + c = parts[4] + } + + setPathname(path) + if (c !== category) setCategory(c) + if (b !== brand) setBrand(b) + }, [asPath]) + + return { pathname, category, brand } +} + +// Removes empty query parameters from the query object +export const filterQuery = (query: any) => + Object.keys(query).reduce<any>((obj, key) => { + if (query[key]?.length) { + obj[key] = query[key] + } + return obj + }, {}) + +export const getCategoryPath = (path: string, brand?: string) => { + const category = getSlug(path) + + return `/search${brand ? `/designers/${brand}` : ''}${ + category ? `/${category}` : '' + }` +} + +export const getDesignerPath = (path: string, category?: string) => { + const designer = getSlug(path).replace(/^brands/, 'designers') + + return `/search${designer ? `/${designer}` : ''}${ + category ? `/${category}` : '' + }` +} diff --git a/lib/to-pixels.ts b/lib/to-pixels.ts new file mode 100644 index 000000000..1701a85fa --- /dev/null +++ b/lib/to-pixels.ts @@ -0,0 +1,13 @@ +// Convert numbers or strings to pixel value +// Helpful for styled-jsx when using a prop +// height: ${toPixels(height)}; (supports height={20} and height="20px") + +const toPixels = (value: string | number) => { + if (typeof value === 'number') { + return `${value}px` + } + + return value +} + +export default toPixels diff --git a/lib/usage-warns.ts b/lib/usage-warns.ts new file mode 100644 index 000000000..2033cd029 --- /dev/null +++ b/lib/usage-warns.ts @@ -0,0 +1,26 @@ +/** + * The utils here are used to help developers use the example + */ + +export function missingLocaleInPages(): [string[], () => void] { + const invalidPaths: string[] = [] + const log = () => { + if (invalidPaths.length) { + const single = invalidPaths.length === 1 + const pages = single ? 'page' : 'pages' + + console.log( + `The ${pages} "${invalidPaths.join(', ')}" ${ + single ? 'does' : 'do' + } not include a locale, or the locale is not supported. When using i18n, web pages from +BigCommerce are expected to have a locale or they will be ignored.\n +Please update the ${pages} to include the default locale or make the ${pages} invisible by +unchecking the "Navigation Menu" option in the settings of ${ + single ? 'the' : 'each' + } web page\n` + ) + } + } + + return [invalidPaths, log] +} diff --git a/license.md b/license.md new file mode 100644 index 000000000..fa5d39b62 --- /dev/null +++ b/license.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2020 Vercel, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/next.config.js b/next.config.js new file mode 100644 index 000000000..c8694f1e0 --- /dev/null +++ b/next.config.js @@ -0,0 +1,48 @@ +const commerce = require('./commerce.config.json') +const { + withCommerceConfig, + getProviderName, +} = require('./framework/commerce/config') + +const provider = commerce.provider || getProviderName() +const isBC = provider === 'bigcommerce' +const isShopify = provider === 'shopify' + +module.exports = withCommerceConfig({ + commerce, + i18n: { + locales: ['en-US', 'es'], + defaultLocale: 'en-US', + }, + rewrites() { + return [ + (isBC || isShopify) && { + source: '/checkout', + destination: '/api/bigcommerce/checkout', + }, + // The logout is also an action so this route is not required, but it's also another way + // you can allow a logout! + isBC && { + source: '/logout', + destination: '/api/bigcommerce/customers/logout?redirect_to=/', + }, + // Rewrites for /search + { + source: '/search/designers/:name', + destination: '/search', + }, + { + source: '/search/designers/:name/:category', + destination: '/search', + }, + { + // This rewrite will also handle `/search/designers` + source: '/search/:category', + destination: '/search', + }, + ].filter((x) => x) + }, +}) + +// Don't delete this console log, useful to see the commerce config in Vercel deployments +console.log('next.config.js', JSON.stringify(module.exports, null, 2)) diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 7c59367ca..000000000 --- a/package-lock.json +++ /dev/null @@ -1,6710 +0,0 @@ -{ - "name": "e-comm-example", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@ampproject/toolbox-core": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@ampproject/toolbox-core/-/toolbox-core-2.6.0.tgz", - "integrity": "sha512-sDMnHj8WaX3tqJS5VsIHkeW98nq5WQ0C9RoFc1PPS3rmYIlS0vhAfHbrjJw6wtuxBTQFxccje+Ew+2OJ2D15kA==", - "requires": { - "cross-fetch": "3.0.5", - "lru-cache": "6.0.0" - } - }, - "@ampproject/toolbox-optimizer": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@ampproject/toolbox-optimizer/-/toolbox-optimizer-2.6.0.tgz", - "integrity": "sha512-saToXVopb15a6zKK6kW4B1N/sYZZddkECcqmfTotRxJ2DaLE+wFB6jgWLbaPkgHwvLPQyA2IjV9BHJ/KUFuGzg==", - "requires": { - "@ampproject/toolbox-core": "^2.6.0", - "@ampproject/toolbox-runtime-version": "^2.6.0", - "@ampproject/toolbox-script-csp": "^2.5.4", - "@ampproject/toolbox-validator-rules": "^2.5.4", - "abort-controller": "3.0.0", - "cross-fetch": "3.0.5", - "cssnano-simple": "1.0.5", - "dom-serializer": "1.0.1", - "domhandler": "3.0.0", - "domutils": "2.1.0", - "htmlparser2": "4.1.0", - "https-proxy-agent": "5.0.0", - "lru-cache": "6.0.0", - "node-fetch": "2.6.0", - "normalize-html-whitespace": "1.0.0", - "postcss": "7.0.32", - "postcss-safe-parser": "4.0.2", - "terser": "4.8.0" - }, - "dependencies": { - "cssnano-simple": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/cssnano-simple/-/cssnano-simple-1.0.5.tgz", - "integrity": "sha512-NJjx2Er1C3pa75v1GwMKm0w6xAp1GsW2Ql1As4CWPNFxTgYFN5e8wblYeHfna13sANAhyIdSIPqKJjBO4CU5Eg==", - "requires": { - "cssnano-preset-simple": "1.1.4", - "postcss": "^7.0.32" - } - } - } - }, - "@ampproject/toolbox-runtime-version": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@ampproject/toolbox-runtime-version/-/toolbox-runtime-version-2.6.0.tgz", - "integrity": "sha512-wT+Ehsoq2PRXqpgjebygHD01BpSlaAE4HfDEVxgPVT8oAsLzE4ywZgzI2VQZfaCdb8qLyO5+WXrLSoJXxDBo2Q==", - "requires": { - "@ampproject/toolbox-core": "^2.6.0" - } - }, - "@ampproject/toolbox-script-csp": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@ampproject/toolbox-script-csp/-/toolbox-script-csp-2.5.4.tgz", - "integrity": "sha512-+knTYetI5nWllRZ9wFcj7mYxelkiiFVRAAW/hl0ad8EnKHMH82tRlk40CapEnUHhp6Er5sCYkumQ8dngs3Q4zQ==" - }, - "@ampproject/toolbox-validator-rules": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@ampproject/toolbox-validator-rules/-/toolbox-validator-rules-2.5.4.tgz", - "integrity": "sha512-bS7uF+h0s5aiklc/iRaujiSsiladOsZBLrJ6QImJDXvubCAQtvE7om7ShlGSXixkMAO0OVMDWyuwLlEy8V1Ing==", - "requires": { - "cross-fetch": "3.0.5" - } - }, - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/compat-data": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz", - "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==", - "requires": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" - } - }, - "@babel/core": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.7.tgz", - "integrity": "sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ==", - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.7", - "@babel/helpers": "^7.7.4", - "@babel/parser": "^7.7.7", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@babel/generator": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", - "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", - "requires": { - "@babel/types": "^7.11.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-react-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", - "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-react-jsx-experimental": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.11.5.tgz", - "integrity": "sha512-Vc4aPJnRZKWfzeCBsqTBnzulVNjABVdahSPhtdMD3Vs80ykx4a87jTHtF/VR+alSrDmNvat7l13yrRHauGcHVw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/types": "^7.11.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", - "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", - "requires": { - "@babel/compat-data": "^7.10.4", - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "levenary": "^1.1.1", - "semver": "^5.5.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", - "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.10.5", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" - } - }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz", - "integrity": "sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", - "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", - "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/template": "^7.10.4", - "@babel/types": "^7.11.0", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "requires": { - "lodash": "^4.17.19" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz", - "integrity": "sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", - "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz", - "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==", - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/helper-wrap-function": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", - "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==" - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", - "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", - "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", - "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz", - "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", - "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz", - "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", - "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", - "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", - "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", - "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz", - "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", - "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", - "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", - "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", - "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", - "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz", - "integrity": "sha512-oSAEz1YkBCAKr5Yiq8/BNtvSAPwkp/IyUnwZogd8p+F0RuYQQrLeRUzIQhueQTTBy/F+a40uS7OFKxnkRvmvFQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", - "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", - "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", - "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz", - "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", - "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", - "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", - "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", - "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", - "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", - "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", - "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", - "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", - "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", - "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", - "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", - "requires": { - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", - "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", - "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", - "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", - "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", - "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", - "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", - "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", - "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", - "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", - "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", - "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz", - "integrity": "sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz", - "integrity": "sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==", - "requires": { - "@babel/helper-builder-react-jsx": "^7.10.4", - "@babel/helper-builder-react-jsx-experimental": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.11.5.tgz", - "integrity": "sha512-cImAmIlKJ84sDmpQzm4/0q/2xrXlDezQoixy3qoz1NJeZL/8PRon6xZtluvr4H4FzwlDGI5tCcFupMnXGtr+qw==", - "requires": { - "@babel/helper-builder-react-jsx-experimental": "^7.11.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz", - "integrity": "sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.5.tgz", - "integrity": "sha512-wTeqHVkN1lfPLubRiZH3o73f4rfon42HpgxUSs86Nc+8QIcm/B9s8NNVXu/gwGcOyd7yDib9ikxoDLxJP0UiDA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz", - "integrity": "sha512-+njZkqcOuS8RaPakrnR9KvxjoG1ASJWpoIv/doyWngId88JoFlPlISenGXjrVacZUIALGUr6eodRs1vmPnF23A==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", - "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", - "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.5.tgz", - "integrity": "sha512-9aIoee+EhjySZ6vY5hnLjigHzunBlscx9ANKutkeWTJTx6m5Rbq6Ic01tLvO54lSusR+BxV7u4UDdCmXv5aagg==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "resolve": "^1.8.1", - "semver": "^5.5.1" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", - "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz", - "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", - "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", - "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", - "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.11.0.tgz", - "integrity": "sha512-edJsNzTtvb3MaXQwj8403B7mZoGu9ElDJQZOKjGUnvilquxBA3IQoEIOvkX/1O8xfAsnHS/oQhe2w/IXrr+w0w==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-typescript": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", - "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", - "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/preset-env": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.5.tgz", - "integrity": "sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA==", - "requires": { - "@babel/compat-data": "^7.11.0", - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-proposal-async-generator-functions": "^7.10.4", - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-export-namespace-from": "^7.10.4", - "@babel/plugin-proposal-json-strings": "^7.10.4", - "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-numeric-separator": "^7.10.4", - "@babel/plugin-proposal-object-rest-spread": "^7.11.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.11.0", - "@babel/plugin-proposal-private-methods": "^7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.4", - "@babel/plugin-transform-arrow-functions": "^7.10.4", - "@babel/plugin-transform-async-to-generator": "^7.10.4", - "@babel/plugin-transform-block-scoped-functions": "^7.10.4", - "@babel/plugin-transform-block-scoping": "^7.10.4", - "@babel/plugin-transform-classes": "^7.10.4", - "@babel/plugin-transform-computed-properties": "^7.10.4", - "@babel/plugin-transform-destructuring": "^7.10.4", - "@babel/plugin-transform-dotall-regex": "^7.10.4", - "@babel/plugin-transform-duplicate-keys": "^7.10.4", - "@babel/plugin-transform-exponentiation-operator": "^7.10.4", - "@babel/plugin-transform-for-of": "^7.10.4", - "@babel/plugin-transform-function-name": "^7.10.4", - "@babel/plugin-transform-literals": "^7.10.4", - "@babel/plugin-transform-member-expression-literals": "^7.10.4", - "@babel/plugin-transform-modules-amd": "^7.10.4", - "@babel/plugin-transform-modules-commonjs": "^7.10.4", - "@babel/plugin-transform-modules-systemjs": "^7.10.4", - "@babel/plugin-transform-modules-umd": "^7.10.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", - "@babel/plugin-transform-new-target": "^7.10.4", - "@babel/plugin-transform-object-super": "^7.10.4", - "@babel/plugin-transform-parameters": "^7.10.4", - "@babel/plugin-transform-property-literals": "^7.10.4", - "@babel/plugin-transform-regenerator": "^7.10.4", - "@babel/plugin-transform-reserved-words": "^7.10.4", - "@babel/plugin-transform-shorthand-properties": "^7.10.4", - "@babel/plugin-transform-spread": "^7.11.0", - "@babel/plugin-transform-sticky-regex": "^7.10.4", - "@babel/plugin-transform-template-literals": "^7.10.4", - "@babel/plugin-transform-typeof-symbol": "^7.10.4", - "@babel/plugin-transform-unicode-escapes": "^7.10.4", - "@babel/plugin-transform-unicode-regex": "^7.10.4", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.11.5", - "browserslist": "^4.12.0", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.10.4.tgz", - "integrity": "sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-transform-react-display-name": "^7.10.4", - "@babel/plugin-transform-react-jsx": "^7.10.4", - "@babel/plugin-transform-react-jsx-development": "^7.10.4", - "@babel/plugin-transform-react-jsx-self": "^7.10.4", - "@babel/plugin-transform-react-jsx-source": "^7.10.4", - "@babel/plugin-transform-react-pure-annotations": "^7.10.4" - } - }, - "@babel/preset-typescript": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.10.4.tgz", - "integrity": "sha512-SdYnvGPv+bLlwkF2VkJnaX/ni1sMNetcGI1+nThF1gyv6Ph8Qucc4ZZAjM5yZcE/AKRXIOTZz7eSRDWOEjPyRQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-transform-typescript": "^7.10.4" - } - }, - "@babel/runtime": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", - "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", - "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.5", - "@babel/types": "^7.11.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", - "dev": true - }, - "@fullhuman/postcss-purgecss": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-2.3.0.tgz", - "integrity": "sha512-qnKm5dIOyPGJ70kPZ5jiz0I9foVOic0j+cOzNDoo8KoCf6HjicIZ99UfO2OmE7vCYSKAAepEwJtNzpiiZAh9xw==", - "dev": true, - "requires": { - "postcss": "7.0.32", - "purgecss": "^2.3.0" - } - }, - "@next/polyfill-module": { - "version": "9.5.4-canary.20", - "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-9.5.4-canary.20.tgz", - "integrity": "sha512-9C/RQIiXA62TheJLatVRR6UVOBZVIMZ5J7DJIn2WRxgT2srRI0Ku6C+tgPJekjHp9XjbWRzc0JCKG1mYwkmdtA==" - }, - "@next/react-dev-overlay": { - "version": "9.5.4-canary.20", - "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-9.5.4-canary.20.tgz", - "integrity": "sha512-Q8/iSvIJuLQnF3KQ4lV15wAm2j3ZFgT6Hn6y4+rj6p0DU9bB/Cp4XqDbVh3VIo+yyGNsw0cT/vmcimFe1MSqFg==", - "requires": { - "@babel/code-frame": "7.10.4", - "ally.js": "1.4.1", - "anser": "1.4.9", - "chalk": "4.0.0", - "classnames": "2.2.6", - "data-uri-to-buffer": "3.0.0", - "shell-quote": "1.7.2", - "source-map": "0.8.0-beta.0", - "stacktrace-parser": "0.1.10", - "strip-ansi": "6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", - "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "requires": { - "whatwg-url": "^7.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@next/react-refresh-utils": { - "version": "9.5.4-canary.20", - "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-9.5.4-canary.20.tgz", - "integrity": "sha512-5B9/GLFqnv6/lx/7kySB8EiqB/R/mXWmH53pcbHKVNdXvoD4oi2fT7PWHXA05JQdr0P1cYIPA1ytrrnIf8F1EQ==" - }, - "@npmcli/move-file": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", - "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", - "requires": { - "mkdirp": "^1.0.4" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==" - }, - "@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", - "dev": true - }, - "@types/react": { - "version": "16.9.49", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.49.tgz", - "integrity": "sha512-DtLFjSj0OYAdVLBbyjhuV9CdGVHCkHn2R+xr3XkBvK2rS1Y1tkc14XSGjYgm5Fjjr90AxH9tiSzc1pCFMGO06g==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - }, - "dependencies": { - "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "adjust-sourcemap-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", - "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", - "requires": { - "assert": "1.4.1", - "camelcase": "5.0.0", - "loader-utils": "1.2.3", - "object-path": "0.11.4", - "regex-parser": "2.2.10" - }, - "dependencies": { - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - } - } - }, - "agent-base": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", - "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", - "requires": { - "debug": "4" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz", - "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" - }, - "ally.js": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/ally.js/-/ally.js-1.4.1.tgz", - "integrity": "sha1-n7fmuljvrE7pExyymqnuO1QLzx4=", - "requires": { - "css.escape": "^1.5.0", - "platform": "1.3.3" - } - }, - "anser": { - "version": "1.4.9", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz", - "integrity": "sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA==" - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=" - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "requires": { - "util": "0.10.3" - } - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, - "ast-types": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz", - "integrity": "sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==" - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "colorette": "^1.2.1", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" - }, - "babel-plugin-transform-define": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-define/-/babel-plugin-transform-define-2.0.0.tgz", - "integrity": "sha512-0dv5RNRUlUKxGYIIErl01lpvi8b7W2R04Qcl1mCj70ahwZcgiklfXnFlh4FGnRh6aayCfSZKdhiMryVzcq5Dmg==", - "requires": { - "lodash": "^4.17.11", - "traverse": "0.6.6" - } - }, - "babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "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" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz", - "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", - "requires": { - "caniuse-lite": "^1.0.30001093", - "electron-to-chromium": "^1.3.488", - "escalade": "^3.0.1", - "node-releases": "^1.1.58" - } - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "cacache": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", - "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", - "requires": { - "@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.0", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "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" - } - }, - "camelcase": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz", - "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==" - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001135", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001135.tgz", - "integrity": "sha512-ziNcheTGTHlu9g34EVoHQdIu5g4foc8EsxMGC7Xkokmvw0dqNtX8BS8RgCgFBaAiSp2IdjvBxNdh0ssib28eVQ==" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "requires": { - "tslib": "^1.9.0" - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", - "requires": { - "arity-n": "^1.0.4" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", - "requires": { - "browserslist": "^4.8.5", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.5.tgz", - "integrity": "sha512-FFLcLtraisj5eteosnX1gf01qYDCOc4fDy0+euOt8Kn9YBY2NtXL/pCoYPavw24NIQkQqm5ZOLsGD5Zzj0gyew==", - "requires": { - "node-fetch": "2.6.0" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - } - }, - "css-blank-pseudo": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", - "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - } - }, - "css-has-pseudo": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", - "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", - "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^5.0.0-rc.4" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "css-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.3.0.tgz", - "integrity": "sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg==", - "requires": { - "camelcase": "^6.0.0", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^2.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.3", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.1", - "semver": "^7.3.2" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - } - } - }, - "css-prefers-color-scheme": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", - "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - } - }, - "css-unit-converter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", - "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==", - "dev": true - }, - "css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=" - }, - "cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano-preset-simple": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/cssnano-preset-simple/-/cssnano-preset-simple-1.1.4.tgz", - "integrity": "sha512-EYKDo65W+AxMViUijv/hvhbEnxUjmu3V7omcH1MatPOwjRLrAgVArUOE8wTUyc1ePFEtvV8oCT4/QSRJDorm/A==", - "requires": { - "postcss": "^7.0.32" - } - }, - "cssnano-simple": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/cssnano-simple/-/cssnano-simple-1.2.0.tgz", - "integrity": "sha512-pton9cZ70/wOCWMAbEGHO1ACsW1KggTB6Ikj7k71uOEsz6SfByH++86+WAmXjRSc9q/g9gxkpFP9bDX9vRotdA==", - "requires": { - "cssnano-preset-simple": "1.2.0", - "postcss": "^7.0.32" - }, - "dependencies": { - "cssnano-preset-simple": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/cssnano-preset-simple/-/cssnano-preset-simple-1.2.0.tgz", - "integrity": "sha512-zojGlY+KasFeQT/SnD/WqYXHcKddz2XHRDtIwxrWpGqGHp5IyLWsWFS3UW7pOf3AWvfkpYSRdxOSlYuJPz8j8g==", - "requires": { - "caniuse-lite": "^1.0.30001093", - "postcss": "^7.0.32" - } - } - } - }, - "csstype": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", - "integrity": "sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==", - "dev": true - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "data-uri-to-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.0.tgz", - "integrity": "sha512-MJ6mFTZ+nPQO+39ua/ltwNePXrfdF3Ww0wP1Od7EePySXN1cP9XNqRQOG3FxTfipp8jx898LUCgBCEP11Qw/ZQ==", - "requires": { - "buffer-from": "^1.1.1" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "requires": { - "ms": "2.1.2" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", - "dev": true, - "requires": { - "acorn-node": "^1.6.1", - "defined": "^1.0.0", - "minimist": "^1.1.1" - } - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "dom-serializer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.0.1.tgz", - "integrity": "sha512-1Aj1Qy3YLbdslkI75QEOfdp9TkQ3o8LRISAzxOibjBs/xWwr1WxZFOQphFkZuepHFGo+kB8e5FVJSS0faAJ4Rw==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "entities": "^2.0.0" - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - }, - "domelementtype": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", - "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==" - }, - "domhandler": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.0.0.tgz", - "integrity": "sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw==", - "requires": { - "domelementtype": "^2.0.1" - } - }, - "domutils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.1.0.tgz", - "integrity": "sha512-CD9M0Dm1iaHfQ1R/TI+z3/JWp/pgub0j4jIQKH89ARR4ATAV2nbaOQS5XxU9maJP5jHaPdDDQSEHuE2UmpUTKg==", - "requires": { - "dom-serializer": "^0.2.1", - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0" - }, - "dependencies": { - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - } - } - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "electron-to-chromium": { - "version": "1.3.571", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.571.tgz", - "integrity": "sha512-UYEQ2Gtc50kqmyOmOVtj6Oqi38lm5yRJY3pLuWt6UIot0No1L09uu6Ja6/1XKwmz/p0eJFZTUZi+khd1PV1hHA==" - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.18.0-next.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.0.tgz", - "integrity": "sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.0.tgz", - "integrity": "sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==" - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", - "dev": true - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "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-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "html-tags": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", - "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", - "dev": true - }, - "htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", - "requires": { - "postcss": "^7.0.14" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==" - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "requires": { - "leven": "^3.1.0" - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "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" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", - "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", - "requires": { - "minimist": "^1.2.5" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "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" - } - }, - "native-url": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.3.4.tgz", - "integrity": "sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA==", - "requires": { - "querystring": "^0.2.0" - } - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" - }, - "next": { - "version": "9.5.4-canary.20", - "resolved": "https://registry.npmjs.org/next/-/next-9.5.4-canary.20.tgz", - "integrity": "sha512-rQvdk3NDYyrB1KvQv2SzAoZlcpOJV2GA93l7BVbByp0l006d3dkFDML7XKEqqtYcvtDlzdKS/V9hde0psKFkAg==", - "requires": { - "@ampproject/toolbox-optimizer": "2.6.0", - "@babel/code-frame": "7.10.4", - "@babel/core": "7.7.7", - "@babel/plugin-proposal-class-properties": "7.10.4", - "@babel/plugin-proposal-export-namespace-from": "7.10.4", - "@babel/plugin-proposal-numeric-separator": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.11.0", - "@babel/plugin-syntax-bigint": "7.8.3", - "@babel/plugin-syntax-dynamic-import": "7.8.3", - "@babel/plugin-syntax-jsx": "7.10.4", - "@babel/plugin-transform-modules-commonjs": "7.10.4", - "@babel/plugin-transform-runtime": "7.11.5", - "@babel/preset-env": "7.11.5", - "@babel/preset-modules": "0.1.4", - "@babel/preset-react": "7.10.4", - "@babel/preset-typescript": "7.10.4", - "@babel/runtime": "7.11.2", - "@babel/types": "7.11.5", - "@next/polyfill-module": "9.5.4-canary.20", - "@next/react-dev-overlay": "9.5.4-canary.20", - "@next/react-refresh-utils": "9.5.4-canary.20", - "ast-types": "0.13.2", - "babel-plugin-transform-define": "2.0.0", - "babel-plugin-transform-react-remove-prop-types": "0.4.24", - "browserslist": "4.13.0", - "buffer": "5.6.0", - "cacache": "15.0.5", - "caniuse-lite": "^1.0.30001113", - "chokidar": "2.1.8", - "crypto-browserify": "3.12.0", - "css-loader": "4.3.0", - "cssnano-simple": "1.2.0", - "find-cache-dir": "3.3.1", - "jest-worker": "24.9.0", - "loader-utils": "2.0.0", - "mkdirp": "0.5.3", - "native-url": "0.3.4", - "neo-async": "2.6.1", - "node-html-parser": "^1.2.19", - "path-browserify": "1.0.1", - "pnp-webpack-plugin": "1.6.4", - "postcss": "7.0.32", - "process": "0.11.10", - "prop-types": "15.7.2", - "react-is": "16.13.1", - "react-refresh": "0.8.3", - "resolve-url-loader": "3.1.1", - "sass-loader": "10.0.2", - "schema-utils": "2.7.1", - "stream-browserify": "3.0.0", - "style-loader": "1.2.1", - "styled-jsx": "3.3.0", - "use-subscription": "1.4.1", - "vm-browserify": "1.1.2", - "watchpack": "2.0.0-beta.13", - "web-vitals": "0.2.4", - "webpack": "4.44.1", - "webpack-sources": "1.4.3" - } - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", - "dev": true, - "requires": { - "lodash.toarray": "^4.4.0" - } - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" - }, - "node-html-parser": { - "version": "1.2.21", - "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.2.21.tgz", - "integrity": "sha512-6vDhgen6J332syN5HUmeT4FfBG7m6bFRrPN+FXY8Am7FGuVpsIxTASVbeoO5PF2IHbX2s+WEIudb1hgxOjllNQ==", - "requires": { - "he": "1.2.0" - } - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - } - } - }, - "node-releases": { - "version": "1.1.61", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.61.tgz", - "integrity": "sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g==" - }, - "normalize-html-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz", - "integrity": "sha512-9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "normalize.css": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", - "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==", - "dev": true - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-hash": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.3.tgz", - "integrity": "sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==", - "dev": true - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", - "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.0", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "optional": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - } - }, - "platform": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.3.tgz", - "integrity": "sha1-ZGx3ARiZhwtqCQPnXpl+jlHadGE=" - }, - "pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", - "requires": { - "ts-pnp": "^1.1.6" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^6.0.2" - } - }, - "postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", - "dev": true, - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", - "dev": true, - "requires": { - "postcss": "^7.0.14", - "postcss-values-parser": "^2.0.1" - } - }, - "postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", - "dev": true, - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", - "dev": true, - "requires": { - "postcss": "^7.0.14" - } - }, - "postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", - "dev": true, - "requires": { - "postcss": "^7.0.17", - "postcss-values-parser": "^2.0.1" - } - }, - "postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-dir-pseudo-class": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", - "dev": true, - "requires": { - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-flexbugs-fixes": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", - "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", - "dev": true, - "requires": { - "postcss": "^7.0.26" - } - }, - "postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-focus-within": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-font-variant": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz", - "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-functions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz", - "integrity": "sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=", - "dev": true, - "requires": { - "glob": "^7.1.2", - "object-assign": "^4.1.1", - "postcss": "^6.0.9", - "postcss-value-parser": "^3.3.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-initial": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz", - "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==", - "dev": true, - "requires": { - "lodash.template": "^4.5.0", - "postcss": "^7.0.2" - } - }, - "postcss-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-2.0.3.tgz", - "integrity": "sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w==", - "dev": true, - "requires": { - "camelcase-css": "^2.0.1", - "postcss": "^7.0.18" - } - }, - "postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", - "dev": true, - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "requires": { - "postcss": "^7.0.5" - } - }, - "postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - } - }, - "postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "postcss-nested": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.0.tgz", - "integrity": "sha512-jQVUwMOkDJPHyY1o3bxLErHnxIFsO3yDgdDsL/rjSkUHrWNdtNGhP50O0P+vUjEwPo+ekCRhLXTe8TziARoS0w==", - "requires": { - "postcss-selector-parser": "^6.0.2" - } - }, - "postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "dev": true, - "requires": { - "autoprefixer": "^9.6.1", - "browserslist": "^4.6.4", - "caniuse-lite": "^1.0.30000981", - "css-blank-pseudo": "^0.1.4", - "css-has-pseudo": "^0.10.0", - "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.4.0", - "postcss": "^7.0.17", - "postcss-attribute-case-insensitive": "^4.0.1", - "postcss-color-functional-notation": "^2.0.1", - "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.3", - "postcss-color-mod-function": "^3.0.3", - "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.8", - "postcss-custom-properties": "^8.0.11", - "postcss-custom-selectors": "^5.1.2", - "postcss-dir-pseudo-class": "^5.0.0", - "postcss-double-position-gradients": "^1.0.0", - "postcss-env-function": "^2.0.2", - "postcss-focus-visible": "^4.0.0", - "postcss-focus-within": "^3.0.0", - "postcss-font-variant": "^4.0.0", - "postcss-gap-properties": "^2.0.0", - "postcss-image-set-function": "^3.0.1", - "postcss-initial": "^3.0.0", - "postcss-lab-function": "^2.0.1", - "postcss-logical": "^3.0.0", - "postcss-media-minmax": "^4.0.0", - "postcss-nesting": "^7.0.0", - "postcss-overflow-shorthand": "^2.0.0", - "postcss-page-break": "^2.0.0", - "postcss-place": "^4.0.1", - "postcss-pseudo-class-any-link": "^6.0.0", - "postcss-replace-overflow-wrap": "^3.0.0", - "postcss-selector-matches": "^4.0.0", - "postcss-selector-not": "^4.0.0" - } - }, - "postcss-pseudo-class-any-link": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", - "dev": true, - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-replace-overflow-wrap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-safe-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", - "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", - "requires": { - "postcss": "^7.0.26" - } - }, - "postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "postcss-selector-not": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz", - "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "postcss-selector-parser": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.3.tgz", - "integrity": "sha512-0ClFaY4X1ra21LRqbW6y3rUbWcxnSVkDFG57R7Nxus9J9myPFlv+jYDMohzpkBx0RrjjiqjtycpchQ+PLGmZ9w==", - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", - "util-deprecate": "^1.0.2" - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, - "postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", - "dev": true, - "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "purgecss": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.3.0.tgz", - "integrity": "sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ==", - "dev": true, - "requires": { - "commander": "^5.0.0", - "glob": "^7.0.0", - "postcss": "7.0.32", - "postcss-selector-parser": "^6.0.2" - }, - "dependencies": { - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true - } - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "react": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", - "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-dom": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", - "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "react-refresh": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", - "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "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" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "reduce-css-calc": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.7.tgz", - "integrity": "sha512-fDnlZ+AybAS3C7Q9xDq5y8A2z+lT63zLbynew/lur/IR24OQF5x98tfNwf79mzEdfywZ0a2wpM860FhFfMxZlA==", - "dev": true, - "requires": { - "css-unit-converter": "^1.1.1", - "postcss-value-parser": "^3.3.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regex-parser": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", - "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==" - }, - "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "resolve-url-loader": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz", - "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==", - "requires": { - "adjust-sourcemap-loader": "2.0.0", - "camelcase": "5.3.1", - "compose-function": "3.0.3", - "convert-source-map": "1.7.0", - "es6-iterator": "2.0.3", - "loader-utils": "1.2.3", - "postcss": "7.0.21", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.6.1" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - } - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", - "requires": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" - }, - "dependencies": { - "convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=" - } - } - }, - "rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "requires": { - "aproba": "^1.1.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sass-loader": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.0.2.tgz", - "integrity": "sha512-wV6NDUVB8/iEYMalV/+139+vl2LaRFlZGEd5/xmdcdzQcgmis+npyco6NsDTVOlNA3y2NV9Gcz+vHyFMIT+ffg==", - "requires": { - "klona": "^2.0.3", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.2", - "schema-utils": "^2.7.1", - "semver": "^7.3.2" - }, - "dependencies": { - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - } - } - }, - "scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "requires": { - "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": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", - "requires": { - "minipass": "^3.1.1" - } - }, - "stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "requires": { - "type-fest": "^0.7.1" - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "requires": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "string-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=" - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "style-loader": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz", - "integrity": "sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==", - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.6.6" - } - }, - "styled-jsx": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-3.3.0.tgz", - "integrity": "sha512-sh8BI5eGKyJlwL4kNXHjb27/a/GJV8wP4ElRIkRXrGW3sHKOsY9Pa1VZRNxyvf3+lisdPwizD9JDkzVO9uGwZw==", - "requires": { - "@babel/types": "7.8.3", - "babel-plugin-syntax-jsx": "6.18.0", - "convert-source-map": "1.7.0", - "loader-utils": "1.2.3", - "source-map": "0.7.3", - "string-hash": "1.1.3", - "stylis": "3.5.4", - "stylis-rule-sheet": "0.0.10" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - } - } - }, - "stylis": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", - "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" - }, - "stylis-rule-sheet": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", - "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "swr": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/swr/-/swr-0.3.3.tgz", - "integrity": "sha512-UxjfbvLdk4CzdchQBKmthUc1rO7KaCXdNL69oW7V/I2BOMv905rsL+kJdpO19OYwOPOpWZPvffTEE7yACwXc8w==", - "requires": { - "fast-deep-equal": "2.0.1" - }, - "dependencies": { - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - } - } - }, - "tailwindcss": { - "version": "1.8.10", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-1.8.10.tgz", - "integrity": "sha512-7QkERG/cWCzsuMqHMwjOaLMVixOGLNBiXsrkssxlE1aWfkxVbGqiuMokR2162xRyaH2mBIHKxmlf1qb3DvIPqw==", - "dev": true, - "requires": { - "@fullhuman/postcss-purgecss": "^2.1.2", - "autoprefixer": "^9.4.5", - "browserslist": "^4.12.0", - "bytes": "^3.0.0", - "chalk": "^3.0.0 || ^4.0.0", - "color": "^3.1.2", - "detective": "^5.2.0", - "fs-extra": "^8.0.0", - "html-tags": "^3.1.0", - "lodash": "^4.17.20", - "node-emoji": "^1.8.1", - "normalize.css": "^8.0.1", - "object-hash": "^2.0.3", - "postcss": "^7.0.11", - "postcss-functions": "^3.0.0", - "postcss-js": "^2.0.0", - "postcss-nested": "^4.1.1", - "postcss-selector-parser": "^6.0.0", - "postcss-value-parser": "^4.1.0", - "pretty-hrtime": "^1.0.3", - "reduce-css-calc": "^2.1.6", - "resolve": "^1.14.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "postcss-nested": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-4.2.3.tgz", - "integrity": "sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw==", - "dev": true, - "requires": { - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - }, - "tar": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", - "requires": { - "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" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } - } - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "requires": { - "setimmediate": "^1.0.4" - } - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "requires": { - "punycode": "^2.1.0" - } - }, - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" - }, - "ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" - }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "typescript": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz", - "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==", - "dev": true - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - }, - "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "use-subscription": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.4.1.tgz", - "integrity": "sha512-7+IIwDG/4JICrWHL/Q/ZPK5yozEnvRm6vHImu0LKwQlmWGKeiF7mbAenLlK/cTNXrTtXHU/SFASQHzB6+oSJMQ==", - "requires": { - "object-assign": "^4.1.1" - } - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "watchpack": { - "version": "2.0.0-beta.13", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.0.0-beta.13.tgz", - "integrity": "sha512-ZEFq2mx/k5qgQwgi6NOm+2ImICb8ngAkA/rZ6oyXZ7SgPn3pncf+nfhYTCrs3lmHwOxnPtGLTOuFLfpSMh1VMA==", - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", - "optional": true, - "requires": { - "chokidar": "^2.1.8" - } - }, - "web-vitals": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-0.2.4.tgz", - "integrity": "sha512-6BjspCO9VriYy12z356nL6JBS0GYeEcA457YyRzD+dD6XYCQ75NKhcOHUMHentOE7OcVCIXXDvOm0jKFfQG2Gg==" - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "webpack": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz", - "integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "optional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "optional": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "optional": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chokidar": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", - "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", - "optional": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "optional": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "optional": true - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "optional": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "optional": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", - "optional": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "optional": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "watchpack": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", - "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.0" - } - } - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "requires": { - "errno": "~0.1.7" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } -} diff --git a/package.json b/package.json index 5b45cf5b8..8b4a496c9 100644 --- a/package.json +++ b/package.json @@ -1,41 +1,117 @@ { - "name": "e-comm-example", - "version": "0.1.0", - "private": true, + "name": "nextjs-commerce", + "version": "1.0.0", "scripts": { "dev": "next dev", "build": "next build", "start": "next start", - "generate": "graphql-codegen" - }, - "graphql": { - "schema": "lib/bigcommerce/schema.graphql", - "documents": "lib/bigcommerce/**/*.{graphql,js,ts,jsx,tsx}" + "analyze": "BUNDLE_ANALYZE=both yarn build", + "prettier-fix": "prettier --write .", + "find:unused": "next-unused", + "generate": "graphql-codegen", + "generate:definitions": "node framework/bigcommerce/scripts/generate-definitions.js" }, + "sideEffects": false, + "license": "MIT", "dependencies": { - "@tailwindcss/ui": "^0.6.2", - "@types/classnames": "^2.2.10", + "@reach/portal": "^0.11.2", + "@vercel/fetch": "^6.1.0", + "autoprefixer": "^10.2.4", + "body-scroll-lock": "^3.1.5", + "bowser": "^2.11.0", "classnames": "^2.2.6", - "next": "^9.5.4-canary.20", - "postcss-nested": "^5.0.0", - "react": "^16.13.1", - "react-dom": "^16.13.1", - "swr": "^0.3.3" + "cookie": "^0.4.1", + "dot-object": "^2.1.4", + "email-validator": "^2.0.4", + "immutability-helper": "^3.1.1", + "js-cookie": "^2.2.1", + "keen-slider": "^5.2.4", + "lodash.debounce": "^4.0.8", + "lodash.random": "^3.2.0", + "lodash.throttle": "^4.1.1", + "next": "10.2.0", + "next-seo": "^4.11.0", + "next-themes": "^0.0.4", + "postcss": "^8.2.6", + "postcss-nesting": "^7.0.1", + "react": "^17.0.1", + "react-dom": "^17.0.1", + "react-merge-refs": "^1.1.0", + "react-ticker": "^1.2.2", + "shopify-buy": "^2.11.0", + "swr": "^0.4.0", + "tabbable": "^5.1.5", + "tailwindcss": "^2.0.3" }, "devDependencies": { - "@graphql-codegen/cli": "^1.17.10", - "@graphql-codegen/schema-ast": "^1.17.8", - "@graphql-codegen/typescript": "^1.17.10", - "@graphql-codegen/typescript-operations": "^1.17.8", - "@types/node": "^14.11.2", - "@types/react": "^16.9.49", - "graphql": "^15.3.0", + "@graphql-codegen/cli": "^1.20.0", + "@graphql-codegen/schema-ast": "^1.18.1", + "@graphql-codegen/typescript": "^1.19.0", + "@graphql-codegen/typescript-operations": "^1.17.13", + "@manifoldco/swagger-to-ts": "^2.1.0", + "@next/bundle-analyzer": "^10.0.1", + "@types/body-scroll-lock": "^2.6.1", + "@types/classnames": "^2.2.10", + "@types/cookie": "^0.4.0", + "@types/js-cookie": "^2.2.6", + "@types/lodash.debounce": "^4.0.6", + "@types/lodash.random": "^3.2.6", + "@types/lodash.throttle": "^4.1.6", + "@types/node": "^14.14.16", + "@types/react": "^17.0.0", + "@types/shopify-buy": "^2.10.5", + "deepmerge": "^4.2.2", + "graphql": "^15.4.0", + "husky": "^4.3.8", + "lint-staged": "^10.5.3", + "next-unused": "^0.0.3", "postcss-flexbugs-fixes": "^4.2.1", "postcss-preset-env": "^6.7.0", - "tailwindcss": "^1.8.10", + "prettier": "^2.2.1", "typescript": "^4.0.3" }, - "resolutions": { - "webpack": "^5.0.0-beta.30" + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "**/*.{js,jsx,ts,tsx}": [ + "prettier --write", + "git add" + ], + "**/*.{md,mdx,json}": [ + "prettier --write", + "git add" + ] + }, + "next-unused": { + "alias": { + "@lib/*": [ + "lib/*" + ], + "@assets/*": [ + "assets/*" + ], + "@config/*": [ + "config/*" + ], + "@components/*": [ + "components/*" + ], + "@utils/*": [ + "utils/*" + ] + }, + "debug": true, + "include": [ + "components", + "lib", + "pages" + ], + "exclude": [], + "entrypoints": [ + "pages" + ] } } diff --git a/pages/[...pages].tsx b/pages/[...pages].tsx new file mode 100644 index 000000000..3f39845b5 --- /dev/null +++ b/pages/[...pages].tsx @@ -0,0 +1,74 @@ +import type { + GetStaticPathsContext, + GetStaticPropsContext, + InferGetStaticPropsType, +} from 'next' +import { Text } from '@components/ui' +import { Layout } from '@components/common' +import getSlug from '@lib/get-slug' +import { missingLocaleInPages } from '@lib/usage-warns' +import { getConfig } from '@framework/api' +import getPage from '@framework/common/get-page' +import getAllPages from '@framework/common/get-all-pages' +import { defaultPageProps } from '@lib/defaults' + +export async function getStaticProps({ + preview, + params, + locale, +}: GetStaticPropsContext<{ pages: string[] }>) { + const config = getConfig({ locale }) + const { pages } = await getAllPages({ preview, config }) + const path = params?.pages.join('/') + const slug = locale ? `${locale}/${path}` : path + + const pageItem = pages.find((p) => (p.url ? getSlug(p.url) === slug : false)) + const data = + pageItem && + (await getPage({ variables: { id: pageItem.id! }, config, preview })) + const page = data?.page + + if (!page) { + // We throw to make sure this fails at build time as this is never expected to happen + throw new Error(`Page with slug '${slug}' not found`) + } + + return { + props: { ...defaultPageProps, pages, page }, + revalidate: 60 * 60, // Every hour + } +} + +export async function getStaticPaths({ locales }: GetStaticPathsContext) { + const { pages } = await getAllPages() + const [invalidPaths, log] = missingLocaleInPages() + const paths = pages + .map((page) => page.url) + .filter((url) => { + if (!url || !locales) return url + // If there are locales, only include the pages that include one of the available locales + if (locales.includes(getSlug(url).split('/')[0])) return url + + invalidPaths.push(url) + }) + log() + + return { + paths, + // Fallback shouldn't be enabled here or otherwise this route + // will catch every page, even 404s, and we don't want that + fallback: false, + } +} + +export default function Pages({ + page, +}: InferGetStaticPropsType<typeof getStaticProps>) { + return ( + <div className="max-w-2xl mx-8 sm:mx-auto py-20"> + {page?.body && <Text html={page.body} />} + </div> + ) +} + +Pages.Layout = Layout diff --git a/pages/_app.tsx b/pages/_app.tsx index 68a70e9de..b43b74997 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -1,9 +1,31 @@ -import "@assets/global.css"; +import '@assets/main.css' +import '@assets/chrome-bug.css' +import 'keen-slider/keen-slider.min.css' + +import { FC, useEffect } from 'react' +import type { AppProps } from 'next/app' +import { Head } from '@components/common' +import { ManagedUIContext } from '@components/ui/context' + +const Noop: FC<{ children: React.ReactNode }> = ({ children }) => ( + <>{children}</> +) + +export default function MyApp({ Component, pageProps }: AppProps) { + const Layout = (Component as any).Layout || Noop + + useEffect(() => { + document.body.classList?.remove('loading') + }, []) -export default function MyApp({ Component, pageProps }) { return ( <> - <Component {...pageProps} /> + <Head /> + <ManagedUIContext> + <Layout pageProps={pageProps}> + <Component {...pageProps} /> + </Layout> + </ManagedUIContext> </> - ); + ) } diff --git a/pages/_document.tsx b/pages/_document.tsx index 693a1c1ae..dcd214e4f 100644 --- a/pages/_document.tsx +++ b/pages/_document.tsx @@ -1,18 +1,17 @@ -import Document_, { Html, Head, Main, NextScript } from "next/document"; +import Document, { Head, Html, Main, NextScript } from 'next/document' -export default class Document extends Document_ { +class MyDocument extends Document { render() { return ( - <Html lang="en"> + <Html> <Head /> - <body> + <body className="loading"> <Main /> <NextScript /> - {/** - * Here add your GA and more scripts. - */} </body> </Html> - ); + ) } } + +export default MyDocument diff --git a/pages/api/bigcommerce/cart.ts b/pages/api/bigcommerce/cart.ts new file mode 100644 index 000000000..68ffc3b15 --- /dev/null +++ b/pages/api/bigcommerce/cart.ts @@ -0,0 +1,3 @@ +import cartApi from '@framework/api/cart' + +export default cartApi() diff --git a/pages/api/bigcommerce/catalog/products.ts b/pages/api/bigcommerce/catalog/products.ts new file mode 100644 index 000000000..ac342c82a --- /dev/null +++ b/pages/api/bigcommerce/catalog/products.ts @@ -0,0 +1,3 @@ +import catalogProductsApi from '@framework/api/catalog/products' + +export default catalogProductsApi() diff --git a/pages/api/bigcommerce/checkout.ts b/pages/api/bigcommerce/checkout.ts new file mode 100644 index 000000000..bd754deab --- /dev/null +++ b/pages/api/bigcommerce/checkout.ts @@ -0,0 +1,3 @@ +import checkoutApi from '@framework/api/checkout' + +export default checkoutApi() diff --git a/pages/api/bigcommerce/customers/index.ts b/pages/api/bigcommerce/customers/index.ts new file mode 100644 index 000000000..7b55d3aa8 --- /dev/null +++ b/pages/api/bigcommerce/customers/index.ts @@ -0,0 +1,3 @@ +import customersApi from '@framework/api/customers' + +export default customersApi() diff --git a/pages/api/bigcommerce/customers/login.ts b/pages/api/bigcommerce/customers/login.ts new file mode 100644 index 000000000..aac529751 --- /dev/null +++ b/pages/api/bigcommerce/customers/login.ts @@ -0,0 +1,3 @@ +import loginApi from '@framework/api/customers/login' + +export default loginApi() diff --git a/pages/api/bigcommerce/customers/logout.ts b/pages/api/bigcommerce/customers/logout.ts new file mode 100644 index 000000000..e872ff95d --- /dev/null +++ b/pages/api/bigcommerce/customers/logout.ts @@ -0,0 +1,3 @@ +import logoutApi from '@framework/api/customers/logout' + +export default logoutApi() diff --git a/pages/api/bigcommerce/customers/signup.ts b/pages/api/bigcommerce/customers/signup.ts new file mode 100644 index 000000000..59f2f840a --- /dev/null +++ b/pages/api/bigcommerce/customers/signup.ts @@ -0,0 +1,3 @@ +import signupApi from '@framework/api/customers/signup' + +export default signupApi() diff --git a/pages/api/bigcommerce/wishlist.ts b/pages/api/bigcommerce/wishlist.ts new file mode 100644 index 000000000..0d6a895a5 --- /dev/null +++ b/pages/api/bigcommerce/wishlist.ts @@ -0,0 +1,3 @@ +import wishlistApi from '@framework/api/wishlist' + +export default wishlistApi() diff --git a/pages/blog.tsx b/pages/blog.tsx new file mode 100644 index 000000000..eca3b2295 --- /dev/null +++ b/pages/blog.tsx @@ -0,0 +1,97 @@ +import type { GetStaticPropsContext } from 'next' +import { getConfig } from '@framework/api' +import getAllPages from '@framework/common/get-all-pages' +import { Layout } from '@components/common' +import { Container } from '@components/ui' + +export async function getStaticProps({ + preview, + locale, +}: GetStaticPropsContext) { + const config = getConfig({ locale }) + const { pages } = await getAllPages({ config, preview }) + return { + props: { pages }, + } +} + +export default function Blog() { + return ( + <div className="pb-20"> + <div className="text-center pt-40 pb-56 bg-violet"> + <Container> + <h2 className="text-4xl tracking-tight leading-10 font-extrabold text-white sm:text-5xl sm:leading-none md:text-6xl"> + Welcome to Acme, the simplest way to start publishing with Next.js + </h2> + <p className="mt-3 max-w-md mx-auto text-gray-100 sm:text-lg md:mt-5 md:text-xl md:max-w-3xl"> + The Yeezy BOOST 350 V2 lineup continues to grow. We recently had the + ‘Carbon’ iteration, and now release details have been locked in for + this ‘Natural’ joint. Revealed by Yeezy Mafia earlier this year, the + shoe was originally called ‘Abez’, which translated to ‘Tin’ in + Hebrew. It’s now undergone a name change, and will be referred to as + ‘Natura` + </p> + <div className="mt-5 max-w-md mx-auto sm:flex sm:justify-center md:mt-12"> + <div className="flex"> + <div className="flex-shrink-0 inline-flex rounded-full border-2 border-white"> + <img + className="h-12 w-12 rounded-full" + src="https://vercel.com/api/www/avatar/61182a9f6bda512b4d9263c9c8a60aabe0402f4c?s=204" + alt="Avatar" + /> + </div> + <div className="ml-4"> + <div className="leading-6 font-medium text-white"> + José Rodriguez + </div> + <div className="leading-6 font-medium text-gray-200"> + CEO, Acme + </div> + </div> + </div> + </div> + </Container> + </div> + <Container> + <div className="-mt-96 mx-auto"> + <img src="/jacket.png" alt="Jacket" /> + </div> + {/** Replace by HTML Content */} + <div className="text-lg leading-7 font-medium py-6 text-justify max-w-6xl mx-auto"> + <p className="py-6"> + Biscuit oat cake wafer icing ice cream tiramisu pudding cupcake. + Candy canes bonbon dragée jujubes chocolate bar. Cotton candy gummi + bears toffee cake muffin caramels. Gummi bears danish liquorice ice + cream pie chocolate cake lemon drops tootsie roll tart. Biscuit + gingerbread fruitcake cake powder pudding cotton candy chocolate + bar. Sweet donut marshmallow powder gummies jelly tart powder. + Cheesecake bonbon caramels cupcake jujubes halvah donut dessert + chocolate bar. Jelly gummies liquorice lollipop chocolate bar + chocolate cake sugar plum. Lollipop toffee dragée chocolate bar + jelly beans biscuit. Halvah danish cheesecake. Tiramisu donut + lollipop pie donut caramels tiramisu. Jujubes candy canes pudding + danish fruitcake chupa chups jujubes carrot cake bonbon. Halvah + donut jelly halvah bonbon. + </p> + <p className="py-6"> + Biscuit sugar plum sweet chocolate cake sesame snaps soufflé + topping. Gummies topping bonbon chocolate pudding cookie. Wafer + icing cake pastry. Gummies candy dessert chupa chups lemon drops. + Soufflé marshmallow oat cake chocolate jelly-o caramels pie marzipan + jelly beans. Cheesecake liquorice donut jujubes halvah ice cream + cotton candy cupcake sugar plum. Ice cream ice cream sweet roll + fruitcake icing. Muffin candy canes bonbon croissant gummies lemon + drops pie danish. Oat cake chocolate toffee cake jelly tart + caramels. Sweet donut cheesecake pastry pie sweet. Bonbon lollipop + brownie. Soufflé pudding macaroon cotton candy gingerbread. Biscuit + macaroon gummi bears candy canes chocolate cake lemon drops + marshmallow. Chocolate cake cotton candy marshmallow cake sweet + tootsie roll bonbon carrot cake sugar plum. + </p> + </div> + </Container> + </div> + ) +} + +Blog.Layout = Layout diff --git a/pages/cart.tsx b/pages/cart.tsx new file mode 100644 index 000000000..ea2f32515 --- /dev/null +++ b/pages/cart.tsx @@ -0,0 +1,181 @@ +import type { GetStaticPropsContext } from 'next' +import { getConfig } from '@framework/api' +import getAllPages from '@framework/common/get-all-pages' +import useCart from '@framework/cart/use-cart' +import usePrice from '@framework/product/use-price' +import { Layout } from '@components/common' +import { Button, Text } from '@components/ui' +import { Bag, Cross, Check, MapPin, CreditCard } from '@components/icons' +import { CartItem } from '@components/cart' + +export async function getStaticProps({ + preview, + locale, +}: GetStaticPropsContext) { + const config = getConfig({ locale }) + const { pages } = await getAllPages({ config, preview }) + return { + props: { pages }, + } +} + +export default function Cart() { + const error = null + const success = null + const { data, isLoading, isEmpty } = useCart() + + const { price: subTotal } = usePrice( + data && { + amount: Number(data.subtotalPrice), + currencyCode: data.currency.code, + } + ) + const { price: total } = usePrice( + data && { + amount: Number(data.totalPrice), + currencyCode: data.currency.code, + } + ) + + return ( + <div className="grid lg:grid-cols-12 w-full max-w-7xl mx-auto"> + <div className="lg:col-span-8"> + {isLoading || isEmpty ? ( + <div className="flex-1 px-12 py-24 flex flex-col justify-center items-center "> + <span className="border border-dashed border-secondary flex items-center justify-center w-16 h-16 bg-primary p-12 rounded-lg text-primary"> + <Bag className="absolute" /> + </span> + <h2 className="pt-6 text-2xl font-bold tracking-wide text-center"> + Your cart is empty + </h2> + <p className="text-accents-6 px-10 text-center pt-2"> + Biscuit oat cake wafer icing ice cream tiramisu pudding cupcake. + </p> + </div> + ) : error ? ( + <div className="flex-1 px-4 flex flex-col justify-center items-center"> + <span className="border border-white rounded-full flex items-center justify-center w-16 h-16"> + <Cross width={24} height={24} /> + </span> + <h2 className="pt-6 text-xl font-light text-center"> + We couldn’t process the purchase. Please check your card + information and try again. + </h2> + </div> + ) : success ? ( + <div className="flex-1 px-4 flex flex-col justify-center items-center"> + <span className="border border-white rounded-full flex items-center justify-center w-16 h-16"> + <Check /> + </span> + <h2 className="pt-6 text-xl font-light text-center"> + Thank you for your order. + </h2> + </div> + ) : ( + <div className="px-4 sm:px-6 flex-1"> + <Text variant="pageHeading">My Cart</Text> + <Text variant="sectionHeading">Review your Order</Text> + <ul className="py-6 space-y-6 sm:py-0 sm:space-y-0 sm:divide-y sm:divide-accents-2 border-b border-accents-2"> + {data!.lineItems.map((item) => ( + <CartItem + key={item.id} + item={item} + currencyCode={data?.currency.code!} + /> + ))} + </ul> + <div className="my-6"> + <Text> + Before you leave, take a look at these items. We picked them + just for you + </Text> + <div className="flex py-6 space-x-6"> + {[1, 2, 3, 4, 5, 6].map((x) => ( + <div + key={x} + className="border border-accents-3 w-full h-24 bg-accents-2 bg-opacity-50 transform cursor-pointer hover:scale-110 duration-75" + /> + ))} + </div> + </div> + </div> + )} + </div> + <div className="lg:col-span-4"> + <div className="flex-shrink-0 px-4 py-24 sm:px-6"> + {process.env.COMMERCE_CHECKOUT_ENABLED && ( + <> + {/* Shipping Address */} + {/* Only available with checkout set to true - Meaning that the provider does offer checkout functionality. */} + <div className="rounded-md border border-accents-2 px-6 py-6 mb-4 text-center flex items-center justify-center cursor-pointer hover:border-accents-4"> + <div className="mr-5"> + <MapPin /> + </div> + <div className="text-sm text-center font-medium"> + <span className="uppercase">+ Add Shipping Address</span> + {/* <span> + 1046 Kearny Street.<br/> + San Franssisco, California + </span> */} + </div> + </div> + {/* Payment Method */} + {/* Only available with checkout set to true - Meaning that the provider does offer checkout functionality. */} + <div className="rounded-md border border-accents-2 px-6 py-6 mb-4 text-center flex items-center justify-center cursor-pointer hover:border-accents-4"> + <div className="mr-5"> + <CreditCard /> + </div> + <div className="text-sm text-center font-medium"> + <span className="uppercase">+ Add Payment Method</span> + {/* <span>VISA #### #### #### 2345</span> */} + </div> + </div> + </> + )} + <div className="border-t border-accents-2"> + <ul className="py-3"> + <li className="flex justify-between py-1"> + <span>Subtotal</span> + <span>{subTotal}</span> + </li> + <li className="flex justify-between py-1"> + <span>Taxes</span> + <span>Calculated at checkout</span> + </li> + <li className="flex justify-between py-1"> + <span>Estimated Shipping</span> + <span className="font-bold tracking-wide">FREE</span> + </li> + </ul> + <div className="flex justify-between border-t border-accents-2 py-3 font-bold mb-10"> + <span>Total</span> + <span>{total}</span> + </div> + </div> + <div className="flex flex-row justify-end"> + { + // If CUSTOM CHECKOUT is enabled, then add your functionality here. + } + <div className="w-full"> + {isEmpty ? ( + <Button href="/" Component="a" width="100%"> + Continue Shopping + </Button> + ) : process.env.COMMERCE_CHECKOUT_ENABLED ? ( + <Button Component="a" width="100%" disabled> + Proceed to Pay + </Button> + ) : ( + <Button href="/checkout" Component="a" width="100%"> + Proceed to Checkout + </Button> + )} + </div> + </div> + </div> + </div> + </div> + ) +} + +Cart.Layout = Layout diff --git a/pages/checkout/new-shipping.tsx b/pages/checkout/new-shipping.tsx new file mode 100644 index 000000000..66b65e091 --- /dev/null +++ b/pages/checkout/new-shipping.tsx @@ -0,0 +1,42 @@ +import { Layout } from '@components/common' +import { getConfig } from '@framework/api' +import { Text, Container, Input } from '@components/ui' +import { defaultPageProps } from '@lib/defaults' +import type { GetStaticPropsContext } from 'next' +import getAllPages from '@framework/common/get-all-pages' + +export async function getStaticProps({ + preview, + locale, +}: GetStaticPropsContext) { + // Disabling page if Feature is not available + if (!process.env.COMMERCE_CHECKOUT_ENABLED) { + return { + notFound: true, + } + } + + const config = getConfig({ locale }) + const { pages } = await getAllPages({ config, preview }) + return { + props: { + pages, + ...defaultPageProps, + }, + } +} + +export default function NewShipping() { + return ( + <Container> + <div className="mt-3 mb-20"> + <Text variant="pageHeading">New Shipping Address</Text> + <div> + <Input type="country" placeholder="Country" /> + </div> + </div> + </Container> + ) +} + +NewShipping.Layout = Layout diff --git a/pages/index.tsx b/pages/index.tsx index 3f7ab723f..3a84112e5 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,13 +1,114 @@ -import { Layout } from "@components/core"; +import { Layout } from '@components/common' +import { Grid, Marquee, Hero } from '@components/ui' +import { ProductCard } from '@components/product' +// import HomeAllProductsGrid from '@components/common/HomeAllProductsGrid' +import type { GetStaticPropsContext, InferGetStaticPropsType } from 'next' -export default function Home() { - return ( - <Layout> - <div className="h-full grid grid-cols-1 h-full lg:grid-cols-3 lg:grid-rows-2"> - <div className="lg:row-span-2 lg:col-span-2 bg-violet h-full"></div> - <div className="lg:row-span-1 lg:col-span-1 bg-black h-full"></div> - <div className="lg:row-span-1 lg:col-span-1 bg-pink"></div> - </div> - </Layout> - ); +import { getConfig } from '@framework/api' +import getAllProducts from '@framework/product/get-all-products' +import getSiteInfo from '@framework/common/get-site-info' +import getAllPages from '@framework/common/get-all-pages' + +export async function getStaticProps({ + preview, + locale, +}: GetStaticPropsContext) { + const config = getConfig({ locale }) + + const { products } = await getAllProducts({ + variables: { first: 12 }, + config, + preview, + }) + + const { categories, brands } = await getSiteInfo({ config, preview }) + const { pages } = await getAllPages({ config, preview }) + + return { + props: { + products, + categories, + brands, + pages, + }, + revalidate: 14400, + } } + +export default function Home({ + products, + brands, + categories, +}: InferGetStaticPropsType<typeof getStaticProps>) { + return ( + <> + <Grid> + {products.slice(0, 3).map((product, i) => ( + <ProductCard + key={product.id} + product={product} + imgProps={{ + width: i === 0 ? 1080 : 540, + height: i === 0 ? 1080 : 540, + }} + /> + ))} + </Grid> + <Marquee variant="secondary"> + {products.slice(0, 3).map((product, i) => ( + <ProductCard + key={product.id} + product={product} + variant="slim" + imgProps={{ + width: 320, + height: 320, + }} + /> + ))} + </Marquee> + <Hero + headline="Release Details: The Yeezy BOOST 350 V2 ‘Natural'" + description=" + The Yeezy BOOST 350 V2 lineup continues to grow. We recently had the + ‘Carbon’ iteration, and now release details have been locked in for + this ‘Natural’ joint. Revealed by Yeezy Mafia earlier this year, the + shoe was originally called ‘Abez’, which translated to ‘Tin’ in + Hebrew. It’s now undergone a name change, and will be referred to as + ‘Natural’." + /> + <Grid layout="B"> + {products.slice(0, 3).map((product, i) => ( + <ProductCard + key={product.id} + product={product} + imgProps={{ + width: i === 0 ? 1080 : 540, + height: i === 0 ? 1080 : 540, + }} + /> + ))} + </Grid> + <Marquee> + {products.slice(0, 3).map((product, i) => ( + <ProductCard + key={product.id} + product={product} + variant="slim" + imgProps={{ + width: 320, + height: 320, + }} + /> + ))} + </Marquee> + {/* <HomeAllProductsGrid + newestProducts={products} + categories={categories} + brands={brands} + /> */} + </> + ) +} + +Home.Layout = Layout diff --git a/pages/orders.tsx b/pages/orders.tsx new file mode 100644 index 000000000..db4ab55b2 --- /dev/null +++ b/pages/orders.tsx @@ -0,0 +1,38 @@ +import type { GetStaticPropsContext } from 'next' +import { Bag } from '@components/icons' +import { Layout } from '@components/common' +import { Container, Text } from '@components/ui' +import { getConfig } from '@framework/api' +import getAllPages from '@framework/common/get-all-pages' + +export async function getStaticProps({ + preview, + locale, +}: GetStaticPropsContext) { + const config = getConfig({ locale }) + const { pages } = await getAllPages({ config, preview }) + return { + props: { pages }, + } +} + +export default function Orders() { + return ( + <Container> + <Text variant="pageHeading">My Orders</Text> + <div className="flex-1 p-24 flex flex-col justify-center items-center "> + <span className="border border-dashed border-secondary rounded-full flex items-center justify-center w-16 h-16 p-12 bg-primary text-primary"> + <Bag className="absolute" /> + </span> + <h2 className="pt-6 text-2xl font-bold tracking-wide text-center"> + No orders found + </h2> + <p className="text-accents-6 px-10 text-center pt-2"> + Biscuit oat cake wafer icing ice cream tiramisu pudding cupcake. + </p> + </div> + </Container> + ) +} + +Orders.Layout = Layout diff --git a/pages/product/[id].tsx b/pages/product/[id].tsx deleted file mode 100644 index 347459bee..000000000 --- a/pages/product/[id].tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { useRouter } from "next/router"; -import { Layout } from "@components/core"; -import { ProductView } from "@components/product"; - -export async function getStaticProps() { - const productData = { - description: ` - Nothing undercover about this tee. Nope. This is the official Bad - Boys tee. Printed in white or black ink on Black, Brown, or Oatmeal. - Like everything in this collection, it is extremely limited edition - and available for 10 days only. This is a limited edition production - run. Printing starts when the drop ends. Reminder: Bad Boys For - Life. Shipping may take 10+ days due to COVID-19. - `, - }; - return { - props: { - productData, - }, - revalidate: 200, - }; -} - -export async function getStaticPaths() { - return { - paths: [], - fallback: "unstable_blocking", - }; -} - -export default function Home({ productData }) { - const router = useRouter(); - return ( - <Layout> - {router.isFallback ? ( - <h1>Loading...</h1> - ) : ( - <ProductView productData={productData} /> - )} - </Layout> - ); -} diff --git a/pages/product/[slug].tsx b/pages/product/[slug].tsx new file mode 100644 index 000000000..397a71699 --- /dev/null +++ b/pages/product/[slug].tsx @@ -0,0 +1,71 @@ +import type { + GetStaticPathsContext, + GetStaticPropsContext, + InferGetStaticPropsType, +} from 'next' +import { useRouter } from 'next/router' +import { Layout } from '@components/common' +import { ProductView } from '@components/product' + +import { getConfig } from '@framework/api' +import getProduct from '@framework/product/get-product' +import getAllPages from '@framework/common/get-all-pages' +import getAllProductPaths from '@framework/product/get-all-product-paths' +import { debug } from 'node:console' + +export async function getStaticProps({ + params, + locale, + preview, +}: GetStaticPropsContext<{ slug: string }>) { + const config = getConfig({ locale }) + const { pages } = await getAllPages({ config, preview }) + const { product } = await getProduct({ + variables: { slug: params!.slug }, + config, + preview, + }) + + if (!product) { + throw new Error(`Product with slug '${params!.slug}' not found`) + } + + return { + props: { + pages, + product, + }, + revalidate: 200, + } +} + +export async function getStaticPaths({ locales }: GetStaticPathsContext) { + const { products } = await getAllProductPaths() + + return { + paths: locales + ? locales.reduce<string[]>((arr, locale) => { + // Add a product path for every locale + products.forEach((product) => { + arr.push(`/${locale}/product${product.node.path}`) + }) + return arr + }, []) + : products.map((product) => `/product${product.node.path}`), + fallback: 'blocking', + } +} + +export default function Slug({ + product, +}: InferGetStaticPropsType<typeof getStaticProps>) { + const router = useRouter() + + return router.isFallback ? ( + <h1>Loading...</h1> // TODO (BC) Add Skeleton Views + ) : ( + <ProductView product={product as any} /> + ) +} + +Slug.Layout = Layout diff --git a/pages/profile.tsx b/pages/profile.tsx new file mode 100644 index 000000000..ec845c879 --- /dev/null +++ b/pages/profile.tsx @@ -0,0 +1,44 @@ +import type { GetStaticPropsContext } from 'next' +import { getConfig } from '@framework/api' +import getAllPages from '@framework/common/get-all-pages' +import useCustomer from '@framework/customer/use-customer' +import { Layout } from '@components/common' +import { Container, Text } from '@components/ui' + +export async function getStaticProps({ + preview, + locale, +}: GetStaticPropsContext) { + const config = getConfig({ locale }) + const { pages } = await getAllPages({ config, preview }) + return { + props: { pages }, + } +} + +export default function Profile() { + const { data } = useCustomer() + return ( + <Container> + <Text variant="pageHeading">My Profile</Text> + {data && ( + <div className="grid lg:grid-cols-12"> + <div className="lg:col-span-8 pr-4"> + <div> + <Text variant="sectionHeading">Full Name</Text> + <span> + {data.firstName} {data.lastName} + </span> + </div> + <div className="mt-5"> + <Text variant="sectionHeading">Email</Text> + <span>{data.email}</span> + </div> + </div> + </div> + )} + </Container> + ) +} + +Profile.Layout = Layout diff --git a/pages/search.tsx b/pages/search.tsx new file mode 100644 index 000000000..4100108bc --- /dev/null +++ b/pages/search.tsx @@ -0,0 +1,470 @@ +import cn from 'classnames' +import type { GetStaticPropsContext, InferGetStaticPropsType } from 'next' +import Link from 'next/link' +import { useState } from 'react' +import { useRouter } from 'next/router' + +import { Layout } from '@components/common' +import { ProductCard } from '@components/product' +import { Container, Grid, Skeleton } from '@components/ui' + +import { getConfig } from '@framework/api' +import useSearch from '@framework/product/use-search' +import getAllPages from '@framework/common/get-all-pages' +import getSiteInfo from '@framework/common/get-site-info' + +import rangeMap from '@lib/range-map' + +// TODO(bc) Remove this. This should come from the API +import getSlug from '@lib/get-slug' + +// TODO (bc) : Remove or standarize this. +const SORT = Object.entries({ + 'latest-desc': 'Latest arrivals', + 'trending-desc': 'Trending', + 'price-asc': 'Price: Low to high', + 'price-desc': 'Price: High to low', +}) + +import { + filterQuery, + getCategoryPath, + getDesignerPath, + useSearchMeta, +} from '@lib/search' +import { Product } from '@commerce/types' + +export async function getStaticProps({ + preview, + locale, +}: GetStaticPropsContext) { + const config = getConfig({ locale }) + const { pages } = await getAllPages({ config, preview }) + const { categories, brands } = await getSiteInfo({ config, preview }) + return { + props: { + pages, + categories, + brands, + }, + } +} + +export default function Search({ + categories, + brands, +}: InferGetStaticPropsType<typeof getStaticProps>) { + const [activeFilter, setActiveFilter] = useState('') + const [toggleFilter, setToggleFilter] = useState(false) + + const router = useRouter() + const { asPath } = router + const { q, sort } = router.query + // `q` can be included but because categories and designers can't be searched + // in the same way of products, it's better to ignore the search input if one + // of those is selected + const query = filterQuery({ sort }) + + const { pathname, category, brand } = useSearchMeta(asPath) + const activeCategory = categories.find( + (cat) => getSlug(cat.path) === category + ) + const activeBrand = brands.find( + (b) => getSlug(b.node.path) === `brands/${brand}` + )?.node + + const { data } = useSearch({ + search: typeof q === 'string' ? q : '', + categoryId: activeCategory?.entityId, + brandId: activeBrand?.entityId, + sort: typeof sort === 'string' ? sort : '', + }) + + const handleClick = (event: any, filter: string) => { + if (filter !== activeFilter) { + setToggleFilter(true) + } else { + setToggleFilter(!toggleFilter) + } + setActiveFilter(filter) + } + + return ( + <Container> + <div className="grid grid-cols-1 lg:grid-cols-12 gap-4 mt-3 mb-20"> + <div className="col-span-8 lg:col-span-2 order-1 lg:order-none"> + {/* Categories */} + <div className="relative inline-block w-full"> + <div className="lg:hidden"> + <span className="rounded-md shadow-sm"> + <button + type="button" + onClick={(e) => handleClick(e, 'categories')} + className="flex justify-between w-full rounded-sm border border-gray-300 px-4 py-3 bg-white text-sm leading-5 font-medium text-gray-700 hover:text-gray-500 focus:outline-none focus:border-blue-300 focus:shadow-outline-normal active:bg-gray-50 active:text-gray-800 transition ease-in-out duration-150" + id="options-menu" + aria-haspopup="true" + aria-expanded="true" + > + {activeCategory?.name + ? `Category: ${activeCategory?.name}` + : 'All Categories'} + <svg + className="-mr-1 ml-2 h-5 w-5" + xmlns="http://www.w3.org/2000/svg" + viewBox="0 0 20 20" + fill="currentColor" + > + <path + fillRule="evenodd" + d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" + clipRule="evenodd" + /> + </svg> + </button> + </span> + </div> + <div + className={`origin-top-left absolute lg:relative left-0 mt-2 w-full rounded-md shadow-lg lg:shadow-none z-10 mb-10 lg:block ${ + activeFilter !== 'categories' || toggleFilter !== true + ? 'hidden' + : '' + }`} + > + <div className="rounded-sm bg-white shadow-xs lg:bg-none lg:shadow-none"> + <div + role="menu" + aria-orientation="vertical" + aria-labelledby="options-menu" + > + <ul> + <li + className={cn( + 'block text-sm leading-5 text-gray-700 lg:text-base lg:no-underline lg:font-bold lg:tracking-wide hover:bg-gray-100 lg:hover:bg-transparent hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900', + { + underline: !activeCategory?.name, + } + )} + > + <Link + href={{ pathname: getCategoryPath('', brand), query }} + > + <a + onClick={(e) => handleClick(e, 'categories')} + className={ + 'block lg:inline-block px-4 py-2 lg:p-0 lg:my-2 lg:mx-4' + } + > + All Categories + </a> + </Link> + </li> + {categories.map((cat) => ( + <li + key={cat.path} + className={cn( + 'block text-sm leading-5 text-gray-700 hover:bg-gray-100 lg:hover:bg-transparent hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900', + { + underline: + activeCategory?.entityId === cat.entityId, + } + )} + > + <Link + href={{ + pathname: getCategoryPath(cat.path, brand), + query, + }} + > + <a + onClick={(e) => handleClick(e, 'categories')} + className={ + 'block lg:inline-block px-4 py-2 lg:p-0 lg:my-2 lg:mx-4' + } + > + {cat.name} + </a> + </Link> + </li> + ))} + </ul> + </div> + </div> + </div> + </div> + + {/* Designs */} + <div className="relative inline-block w-full"> + <div className="lg:hidden mt-3"> + <span className="rounded-md shadow-sm"> + <button + type="button" + onClick={(e) => handleClick(e, 'brands')} + className="flex justify-between w-full rounded-sm border border-gray-300 px-4 py-3 bg-white text-sm leading-5 font-medium text-gray-900 hover:text-gray-500 focus:outline-none focus:border-blue-300 focus:shadow-outline-normal active:bg-gray-50 active:text-gray-800 transition ease-in-out duration-150" + id="options-menu" + aria-haspopup="true" + aria-expanded="true" + > + {activeBrand?.name + ? `Design: ${activeBrand?.name}` + : 'All Designs'} + <svg + className="-mr-1 ml-2 h-5 w-5" + xmlns="http://www.w3.org/2000/svg" + viewBox="0 0 20 20" + fill="currentColor" + > + <path + fillRule="evenodd" + d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" + clipRule="evenodd" + /> + </svg> + </button> + </span> + </div> + <div + className={`origin-top-left absolute lg:relative left-0 mt-2 w-full rounded-md shadow-lg lg:shadow-none z-10 mb-10 lg:block ${ + activeFilter !== 'brands' || toggleFilter !== true + ? 'hidden' + : '' + }`} + > + <div className="rounded-sm bg-white shadow-xs lg:bg-none lg:shadow-none"> + <div + role="menu" + aria-orientation="vertical" + aria-labelledby="options-menu" + > + <ul> + <li + className={cn( + 'block text-sm leading-5 text-gray-700 lg:text-base lg:no-underline lg:font-bold lg:tracking-wide hover:bg-gray-100 lg:hover:bg-transparent hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900', + { + underline: !activeBrand?.name, + } + )} + > + <Link + href={{ + pathname: getDesignerPath('', category), + query, + }} + > + <a + onClick={(e) => handleClick(e, 'brands')} + className={ + 'block lg:inline-block px-4 py-2 lg:p-0 lg:my-2 lg:mx-4' + } + > + All Designers + </a> + </Link> + </li> + {brands.flatMap(({ node }) => ( + <li + key={node.path} + className={cn( + 'block text-sm leading-5 text-gray-700 hover:bg-gray-100 lg:hover:bg-transparent hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900', + { + // @ts-ignore Shopify - Fix this types + underline: activeBrand?.entityId === node.entityId, + } + )} + > + <Link + href={{ + pathname: getDesignerPath(node.path, category), + query, + }} + > + <a + onClick={(e) => handleClick(e, 'brands')} + className={ + 'block lg:inline-block px-4 py-2 lg:p-0 lg:my-2 lg:mx-4' + } + > + {node.name} + </a> + </Link> + </li> + ))} + </ul> + </div> + </div> + </div> + </div> + </div> + {/* Products */} + <div className="col-span-8 order-3 lg:order-none"> + {(q || activeCategory || activeBrand) && ( + <div className="mb-12 transition ease-in duration-75"> + {data ? ( + <> + <span + className={cn('animated', { + fadeIn: data.found, + hidden: !data.found, + })} + > + Showing {data.products.length} results{' '} + {q && ( + <> + for "<strong>{q}</strong>" + </> + )} + </span> + <span + className={cn('animated', { + fadeIn: !data.found, + hidden: data.found, + })} + > + {q ? ( + <> + There are no products that match "<strong>{q}</strong>" + </> + ) : ( + <> + There are no products that match the selected category & + designer + </> + )} + </span> + </> + ) : q ? ( + <> + Searching for: "<strong>{q}</strong>" + </> + ) : ( + <>Searching...</> + )} + </div> + )} + + {data ? ( + <Grid layout="normal"> + {data.products.map((product: Product) => ( + <ProductCard + variant="simple" + key={product.path} + className="animated fadeIn" + product={product} + imgProps={{ + width: 480, + height: 480, + }} + /> + ))} + </Grid> + ) : ( + <Grid layout="normal"> + {rangeMap(12, (i) => ( + <Skeleton + key={i} + className="w-full animated fadeIn" + height={325} + /> + ))} + </Grid> + )} + </div> + + {/* Sort */} + <div className="col-span-8 lg:col-span-2 order-2 lg:order-none"> + <div className="relative inline-block w-full"> + <div className="lg:hidden"> + <span className="rounded-md shadow-sm"> + <button + type="button" + onClick={(e) => handleClick(e, 'sort')} + className="flex justify-between w-full rounded-sm border border-gray-300 px-4 py-3 bg-white text-sm leading-5 font-medium text-gray-700 hover:text-gray-500 focus:outline-none focus:border-blue-300 focus:shadow-outline-normal active:bg-gray-50 active:text-gray-800 transition ease-in-out duration-150" + id="options-menu" + aria-haspopup="true" + aria-expanded="true" + > + {sort ? `Sort: ${sort}` : 'Relevance'} + <svg + className="-mr-1 ml-2 h-5 w-5" + xmlns="http://www.w3.org/2000/svg" + viewBox="0 0 20 20" + fill="currentColor" + > + <path + fillRule="evenodd" + d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" + clipRule="evenodd" + /> + </svg> + </button> + </span> + </div> + <div + className={`origin-top-left absolute lg:relative left-0 mt-2 w-full rounded-md shadow-lg lg:shadow-none z-10 mb-10 lg:block ${ + activeFilter !== 'sort' || toggleFilter !== true ? 'hidden' : '' + }`} + > + <div className="rounded-sm bg-white shadow-xs lg:bg-none lg:shadow-none"> + <div + role="menu" + aria-orientation="vertical" + aria-labelledby="options-menu" + > + <ul> + <li + className={cn( + 'block text-sm leading-5 text-gray-700 lg:text-base lg:no-underline lg:font-bold lg:tracking-wide hover:bg-gray-100 lg:hover:bg-transparent hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900', + { + underline: !sort, + } + )} + > + <Link href={{ pathname, query: filterQuery({ q }) }}> + <a + onClick={(e) => handleClick(e, 'sort')} + className={ + 'block lg:inline-block px-4 py-2 lg:p-0 lg:my-2 lg:mx-4' + } + > + Relevance + </a> + </Link> + </li> + {SORT.map(([key, text]) => ( + <li + key={key} + className={cn( + 'block text-sm leading-5 text-gray-700 hover:bg-gray-100 lg:hover:bg-transparent hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900', + { + underline: sort === key, + } + )} + > + <Link + href={{ + pathname, + query: filterQuery({ q, sort: key }), + }} + > + <a + onClick={(e) => handleClick(e, 'sort')} + className={ + 'block lg:inline-block px-4 py-2 lg:p-0 lg:my-2 lg:mx-4' + } + > + {text} + </a> + </Link> + </li> + ))} + </ul> + </div> + </div> + </div> + </div> + </div> + </div> + </Container> + ) +} + +Search.Layout = Layout diff --git a/pages/wishlist.tsx b/pages/wishlist.tsx new file mode 100644 index 000000000..0dddaf23d --- /dev/null +++ b/pages/wishlist.tsx @@ -0,0 +1,68 @@ +import type { GetStaticPropsContext } from 'next' +import { Heart } from '@components/icons' +import { Layout } from '@components/common' +import { Text, Container } from '@components/ui' +import { defaultPageProps } from '@lib/defaults' +import { getConfig } from '@framework/api' +import { useCustomer } from '@framework/customer' +import { WishlistCard } from '@components/wishlist' +import useWishlist from '@framework/wishlist/use-wishlist' +import getAllPages from '@framework/common/get-all-pages' + +export async function getStaticProps({ + preview, + locale, +}: GetStaticPropsContext) { + // Disabling page if Feature is not available + if (!process.env.COMMERCE_WISHLIST_ENABLED) { + return { + notFound: true, + } + } + + const config = getConfig({ locale }) + const { pages } = await getAllPages({ config, preview }) + return { + props: { + pages, + ...defaultPageProps, + }, + } +} + +export default function Wishlist() { + const { data: customer } = useCustomer() + // @ts-ignore Shopify - Fix this types + const { data, isLoading, isEmpty } = useWishlist({ includeProducts: true }) + + return ( + <Container> + <div className="mt-3 mb-20"> + <Text variant="pageHeading">My Wishlist</Text> + <div className="group flex flex-col"> + {isLoading || isEmpty ? ( + <div className="flex-1 px-12 py-24 flex flex-col justify-center items-center "> + <span className="border border-dashed border-secondary flex items-center justify-center w-16 h-16 bg-primary p-12 rounded-lg text-primary"> + <Heart className="absolute" /> + </span> + <h2 className="pt-6 text-2xl font-bold tracking-wide text-center"> + Your wishlist is empty + </h2> + <p className="text-accents-6 px-10 text-center pt-2"> + Biscuit oat cake wafer icing ice cream tiramisu pudding cupcake. + </p> + </div> + ) : ( + data && + // @ts-ignore Shopify - Fix this types + data.items?.map((item) => ( + <WishlistCard key={item.id} product={item.product! as any} /> + )) + )} + </div> + </div> + </Container> + ) +} + +Wishlist.Layout = Layout diff --git a/postcss.config.js b/postcss.config.js index 165dd0927..9e0f0b2ca 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,6 +1,7 @@ module.exports = { plugins: [ 'tailwindcss', + 'postcss-nesting', 'postcss-flexbugs-fixes', [ 'postcss-preset-env', @@ -15,4 +16,4 @@ module.exports = { }, ], ], -}; +} diff --git a/public/bg-products.svg b/public/bg-products.svg new file mode 100644 index 000000000..2118c3277 --- /dev/null +++ b/public/bg-products.svg @@ -0,0 +1,7 @@ +<svg width="48" height="46" viewBox="0 0 48 46" fill="none" xmlns="http://www.w3.org/2000/svg"> + <line opacity="0.1" x1="9.41421" y1="8" x2="21" y2="19.5858" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> + <line opacity="0.1" x1="1" y1="-1" x2="17.3848" y2="-1" transform="matrix(-0.707107 0.707107 0.707107 0.707107 40 8)" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> + <line opacity="0.1" x1="1" y1="-1" x2="17.3848" y2="-1" transform="matrix(0.707107 -0.707107 -0.707107 -0.707107 8 38)" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> + <line opacity="0.1" x1="38.5858" y1="38" x2="27" y2="26.4142" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> +</svg> + diff --git a/public/card.png b/public/card.png new file mode 100644 index 0000000000000000000000000000000000000000..40fcf42d109045944da9f2ac1583fac6c379ff75 GIT binary patch literal 6286 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 literal 0 HcmV?d00001 diff --git a/public/cursor-left.png b/public/cursor-left.png new file mode 100644 index 0000000000000000000000000000000000000000..3c292b044ab6a8109b22c42412b561459e421823 GIT binary patch literal 1162 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&SqAuoxB}__WC1QK(|n+2p^_lK zU<QSN{0Z~--#@?J!65#<Ktq3l0J~8N0|WCrPZ!6KinzPc&x<}Q2#9nj1?JxSpSVAN zgHg8nMy{tHQvNULD}Vp3MC4!y%dvFDsn;}}^|M4bZxrU7A>8f1|B&{<$nZ}IEq?3~ zOJ2I>FY#agKsEn--r{=CZFA-(>e$3=Y;#{&!?Y#mb!(tPeZI-#M?e4juvh8(SZE0A zmEKwqt6a5VzOL9^Kc?S{!fj##-tG%oU%FKwY2(7MJfWl&2JzQh4w`Y^n$lM9{H65Y z-BWk2Ux??~UhCn=HTV1<B_G{YC+@HRbieG7{;8Bb%c2$kWU+i)@ua}<OVgIE2ktHw zIH&G=+wIE_m$KIS#<(O_pTir=IJ8CPJe(d}e4?0(>Bnx3h(4p;P5b+qww{;Y{6AQI zO*`}9IkjASSz7MI-|=Jo_1J3Vd-i{}jQ{R%o3%@PV_We1is<*bMh2CCW?Cut`#key ze-YAf+@yl(<`vmzXWukD{61H)uD_&}kwxuKP6wavB5R&k0u5SBE9R&0?d$PuJSO4M z__dmgN63Ncn=LCB=Yn-i9Gj*vozY(0B6mvU$aJBSEld?&C++_)P>*8yAJQhI>cRfe zh0E|r>WjnQboVlINb~i4a7bxVU3%o?&xt?ov^r@vYS+~q4*&h!G}dF;ldP(V&El<p zmNGfaY5h?2FXAfC^tIe9R&@=wyEdMU@A!F<Ga}D9i{pRVKUq_c<NX5fc8Wa~_^12L z^m*e9`QXBty#~%dwttE?uw4B3c=3wQB|R5EJ3IX1ud3s57bs|rKW@Im%s_;*AXEI^ zd+r%Y?A(W3S--k+Fjnwri(dK8SjB2~-lHq3Fz0%g;o8OF2R^T6oXDP<#M<HX#4*y( zS>(x$jXDd$C!EfoJzGfoz>+I=`!)!26}^a<eM$Sovv9q$N!?3lu8y2@?9@@s|1D2{ zE_u1VV}n_%_>%+YCOE1uU=fl(mU~%I(vzo%A&F@(^Nad<b(?SPebaZ$@b=dktT$XD z+7eRMSBaEzt~y_t={lcj=TwCRkJSx{qLymFpjPlc__4dl_4lv3zjvoc+uwS;SZd>b z&JL5hM~c%<PMA?}+jGl{>It07uO5jj+w(S#;g>Q0=7p|03*#B(X6gKr&**9HFIl&o z&-PT_AFCd_Yu3LKif<aesoKE$M_J@Xx1r(PZx#RF6vq7PN`5Ie>qfmdYp7_juyjGV z$CSHW9)>2I_jiBFwp*w7XO>Ubl!Xy*Z7l^~eNjJ|^)52=@`FvYx1?UY9xfPd&Uq?U z@Lfn#{nUc0$qSZRO78i<yS~=R>DqzAj&Bm!|8DSJuX}Jw-QHx`og4WT8x0?)t*l|H z*%Dm*;j;Mr>bQMzeK)omEEKlx`IfH~-;ylMxn}0kRbqQt*G?5N)_?quec7%mL#?xC RoPgy5gQu&X%Q~loCIB^~HR}KX literal 0 HcmV?d00001 diff --git a/public/cursor-right.png b/public/cursor-right.png new file mode 100644 index 0000000000000000000000000000000000000000..e3b46de42e37e81303922b15a0b1e2a8a52e5ac1 GIT binary patch literal 1165 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&SqAuoxB}__WC1QK(|n+2;gTS~ zU<QSNf(i5Y-~WGpy@Nr*dx83f1(yzR8Za<0fADm145?teI=j7Wi2;vmYQa%g=KufK z-=0&>H~CmX^2EK-lMlRDsW8jccSYv4V^+`qKWvKqA|u?nU=!cbdasRDK_)_dw|+7= zb((Z!bk%nzsqLEcMZ^D~S#h6N;aRV)%d6hjF{fYIdM^6?!Rwu2lkeq=v(M1C`s6s% zXZGQ1dhuy;*W&La7hm@bFvwS5cKzgy+`uc$_Opa%nZ;KYxPOW5mwx5j)V=mycE$bK z_II~!e|>@f)9v;ZZL!{>=dZA?|H?7zrOK}Rf1i8UoqM^hV88s8ONZ25*jwI8rHLF` zxnQSDc%y$v`Zm5BQ8A50CvHsr@M#v)jr%W(wp|x7c*7qg(5JNfz&{OE?%LDLw`2JC zTyAGylPtyZ|F!<ieJ-L`PI3f1e45St<D*58W5<3Q#<M0<e$F=P_;J(XLF%7P%stu% zn2jx%M0;5q<Los9YU(Y175j_3w7E=5cquEX>(uZgQr2lI$G62Bd-mKBWMVlmL4w<f zL5WGB#fhWAmEqkACJrwZkD6^e9Q$)Pt}PcjqjKuWUj5(tGA9qEhPO$31qkgm<}y@? zZEO7)|B>gw+iIf*nFqhLE8eRMu{FAjCuOOmXSH1Xw|t)7l)d#|zAWmADdETnV>rBR zHA|RAMt0l7w*?8i92-~NwYXaUL^R~OsOyylTbNYp-FQ!FIk3<1e0)S_{eoZn9w<x* zZAiW`;i#o!oTKjkhHm3XRtr8^%a{q?+6@f<*_A3;EoA44Pq?mMuw2xH^TfaCPxbl> zlv!DI-|k^p#%-{nK8S(Ox$^hl+6Cw9_6l)i9R2j|Vwd@pb!%#4ChIQwSQBy0u4?%* z$?vX@zO8=0LwCo)I$isi*<QDgyJjBRx^hqLj=t*P!rvZs|JUBURhd0)cb?zvw~yz2 z_;<Uw=<nGb&+m!soWSPa_F+#~%T4xq@2h>bbGPl&WfnMWo|16O{As7lNq>L$>(z4C zrI}84PgB%cm2Mlhi{)*9WoD~@&L+kJ_Vq&T><YpY)-!c8oM?OSz;)-;+S>g!^Td6X zEhAQK^ipA*w{E+B(#~qh^Zqd>T3$>s*~4(hKlV(Um|#T;qnt`)fBc0Va@#ZWGdP}! zzPE5VDDk_m|1}F&+l}yY{hW7EZFd{Few?WmQMtZh&%aYo|2}<FR2i2iUBIw<zXtCN z(M!3BpZWJ4`8(<M@tUILzhx&LSupw4+{u^kEWa;()j0iW()AfZN0)@X|9k36b5zaI zXU2z&&nVZ|K28!%f7E^Mb<y1$>M9P0kFf7MY;}fTvMTl9!te!V-))lj`Wdc#wI#^# z{IO|&*|Ha%p1Ey0`~2g)@%abkAC#m>u?ofR`(X28jYo?}`raE2AM4Y5=Pft8y`S-r Xh=<+w)a^{bqJhEF)z4*}Q$iB}1*$=) literal 0 HcmV?d00001 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c4826c94780efdd7e92092dc77fd4388fd8cd7f5 GIT binary patch literal 535 zcmV+y0_gpTP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH0jx<xK~#7F#aDrG zgD?zK?mB=+&<16LG6EaG2F(UZCI}lqH)toIouJ(SHgGqf62Uo_0G1sHfA^O=V*6jR zbch|up@<3bg%}aBf5!MFHpCy|C-I|ywg`}z6E(5*VA1al21j@H6dmIk0)WJN0dd0` zJhBljEN+{KT;jNrxF{29WpUet8Z+Qsa9NhMh!|qxrZCa>5EicMx~-}zG!tkWD18q& z91g8P9LFIBawD!nqPLNzX@~*cYeVL{xh%`8IA246xMAj<eoprS(Hj<Q;M->tM{H0O z#XaI}uPuMcaNF4!wqQV8vbJooQpy>9U|Y%-+HJ=|!$|LFOZOE>+KwX+=nO3?LP^^V zP44%5iGi*N%eh5S6#Y9mNs=4k<MG(ht`V(uS2qp=1sllb7P$(~PW=#U%3&a718S-c zByHz{qb=1FT&CAI;wy~cbUJmvlnH2>X7c|j&=rpEgUi)lCuam%)h<aKI?5j?p2G+> zAIShV9!d>19n06sgedYM_@0(1%p7L!Tml6Dp;h<7=sJ7{a+uHanD`9SpXXo1cMyJ_ Z{{e%1|CY$w7P0^U002ovPDHLkV1nrA+7|!- literal 0 HcmV?d00001 diff --git a/public/flag-en-us.svg b/public/flag-en-us.svg new file mode 100644 index 000000000..5e77dee30 --- /dev/null +++ b/public/flag-en-us.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><circle cx="256" cy="256" r="256" fill="#f0f0f0"/><g fill="#d80027"><path d="M244.87 256H512c0-23.106-3.08-45.49-8.819-66.783H244.87V256zM244.87 122.435h229.556a257.35 257.35 0 00-59.07-66.783H244.87v66.783zM256 512c60.249 0 115.626-20.824 159.356-55.652H96.644C140.374 491.176 195.751 512 256 512zM37.574 389.565h436.852a254.474 254.474 0 0028.755-66.783H8.819a254.474 254.474 0 0028.755 66.783z"/></g><path d="M118.584 39.978h23.329l-21.7 15.765 8.289 25.509-21.699-15.765-21.699 15.765 7.16-22.037a257.407 257.407 0 00-49.652 55.337h7.475l-13.813 10.035a255.58 255.58 0 00-6.194 10.938l6.596 20.301-12.306-8.941a253.567 253.567 0 00-8.372 19.873l7.267 22.368h26.822l-21.7 15.765 8.289 25.509-21.699-15.765-12.998 9.444A258.468 258.468 0 000 256h256V0c-50.572 0-97.715 14.67-137.416 39.978zm9.918 190.422l-21.699-15.765L85.104 230.4l8.289-25.509-21.7-15.765h26.822l8.288-25.509 8.288 25.509h26.822l-21.7 15.765 8.289 25.509zm-8.289-100.083l8.289 25.509-21.699-15.765-21.699 15.765 8.289-25.509-21.7-15.765h26.822l8.288-25.509 8.288 25.509h26.822l-21.7 15.765zM220.328 230.4l-21.699-15.765L176.93 230.4l8.289-25.509-21.7-15.765h26.822l8.288-25.509 8.288 25.509h26.822l-21.7 15.765 8.289 25.509zm-8.289-100.083l8.289 25.509-21.699-15.765-21.699 15.765 8.289-25.509-21.7-15.765h26.822l8.288-25.509 8.288 25.509h26.822l-21.7 15.765zm0-74.574l8.289 25.509-21.699-15.765-21.699 15.765 8.289-25.509-21.7-15.765h26.822l8.288-25.509 8.288 25.509h26.822l-21.7 15.765z" fill="#0052b4"/></svg> \ No newline at end of file diff --git a/public/flag-es-ar.svg b/public/flag-es-ar.svg new file mode 100644 index 000000000..4d6ffc474 --- /dev/null +++ b/public/flag-es-ar.svg @@ -0,0 +1,20 @@ +<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M0.75 12C0.75 14.2069 1.38787 16.263 2.4855 18H21.5145C22.6121 16.263 23.25 14.2069 23.25 12C23.25 9.79312 22.6121 7.737 21.5145 6H2.4855C1.38787 7.737 0.75 9.79312 0.75 12Z" fill="#F9F9F9"/> +<path d="M21.5144 6C19.5212 2.84625 16.0064 0.75 11.9999 0.75C7.99335 0.75 4.47848 2.84625 2.48535 6H21.5144Z" fill="#B4D7EE"/> +<path d="M2.48535 18C4.47848 21.1537 7.99335 23.25 11.9999 23.25C16.0064 23.25 19.5212 21.1537 21.5144 18H2.48535Z" fill="#B4D7EE"/> +<path d="M17.1536 11.9359L14.0921 11.8204C14.091 11.8088 14.0906 11.7971 14.0895 11.7855C14.5901 11.6936 14.9467 11.4109 15.4661 11.4578C16.1025 11.5148 16.4625 11.1653 16.7096 11.0843C16.9571 11.0033 17.1052 11.172 17.1405 11.0996C17.1757 11.0269 16.98 10.8671 16.6282 10.9193C16.2765 10.971 16.1719 11.2384 15.3949 11.1754C14.7349 11.1221 14.5039 11.3873 14.016 11.4124C14.0115 11.3966 14.007 11.3809 14.0021 11.3651L16.7857 10.0879C16.7857 10.0879 16.875 10.0508 16.8502 9.99113C16.8262 9.93151 16.7362 9.96863 16.7362 9.96863L13.8641 11.0336C13.8589 11.0235 13.854 11.0126 13.8484 11.0025C14.2759 10.7265 14.4967 10.3286 14.9944 10.173C15.6045 9.98213 15.8032 9.52163 16.0012 9.35213C16.1985 9.18226 16.4002 9.28163 16.4051 9.20101C16.4096 9.12038 16.1677 9.04801 15.8629 9.23063C15.5576 9.41326 15.5629 9.70013 14.8211 9.93938C14.1911 10.1426 14.079 10.476 13.6384 10.686C13.6282 10.6733 13.6177 10.6609 13.6069 10.6481L15.69 8.40226C15.69 8.40226 15.759 8.33363 15.7136 8.28788C15.6679 8.24176 15.5989 8.31076 15.5989 8.31076L13.353 10.3939C13.3444 10.3864 13.3354 10.3789 13.3267 10.3718C13.6159 9.95288 13.668 9.50026 14.0685 9.16613C14.559 8.75663 14.5661 8.25526 14.6842 8.02276C14.8016 7.79063 15.0255 7.80488 14.9992 7.72876C14.973 7.65263 14.7217 7.67813 14.5099 7.96351C14.2976 8.24888 14.4124 8.51176 13.8184 9.01726C13.3144 9.44626 13.3395 9.79688 13.0125 10.1599C12.9979 10.152 12.9829 10.1445 12.9682 10.1366L14.0332 7.26451C14.0332 7.26451 14.0707 7.17488 14.0104 7.15013C13.95 7.12501 13.9129 7.21463 13.9129 7.21463L12.6352 9.99788C12.6247 9.99451 12.6131 9.99113 12.6019 9.98776C12.7091 9.49013 12.5839 9.05213 12.8261 8.59051C13.1224 8.02426 12.9375 7.55813 12.9574 7.29826C12.9772 7.03838 13.1895 6.96638 13.1362 6.90601C13.0819 6.84563 12.8602 6.96526 12.7736 7.31026C12.687 7.65526 12.8936 7.85401 12.5381 8.54813C12.2362 9.13726 12.3926 9.45226 12.2295 9.91238C12.2134 9.91088 12.1972 9.90938 12.1807 9.90788L12.0656 6.84638C12.0656 6.84638 12.0656 6.74963 12.0011 6.74963C11.9366 6.74963 11.9366 6.84638 11.9366 6.84638L11.8211 9.90788C11.8099 9.90863 11.7979 9.90938 11.7866 9.91051C11.6947 9.40988 11.4116 9.05326 11.4585 8.53388C11.5155 7.89751 11.166 7.53751 11.085 7.29001C11.004 7.04251 11.1727 6.89438 11.1 6.85913C11.0272 6.82388 10.8679 7.01963 10.9204 7.37138C10.9721 7.72313 11.2391 7.82776 11.1765 8.60513C11.1232 9.26476 11.388 9.49576 11.4135 9.98363C11.3977 9.98813 11.382 9.99263 11.3666 9.99751L10.089 7.21426C10.089 7.21426 10.0519 7.12463 9.99225 7.14938C9.93262 7.17376 9.96975 7.26376 9.96975 7.26376L11.0344 10.1355C11.0242 10.1411 11.0137 10.1456 11.0036 10.1513C10.7272 9.72376 10.3294 9.50288 10.1741 9.00526C9.98325 8.39513 9.52275 8.19638 9.35287 7.99876C9.18337 7.80113 9.28275 7.60013 9.20212 7.59488C9.1215 7.59038 9.04912 7.83188 9.23175 8.13713C9.41437 8.44238 9.70125 8.43676 9.94087 9.17888C10.1441 9.80851 10.4775 9.92101 10.6879 10.362C10.6751 10.3721 10.6624 10.3826 10.6496 10.3931L8.40375 8.31001C8.40375 8.31001 8.33512 8.24138 8.28937 8.28676C8.24362 8.33251 8.31225 8.40113 8.31225 8.40113L10.3954 10.647C10.3879 10.656 10.3804 10.6646 10.3729 10.6736C9.954 10.3841 9.50137 10.332 9.16725 9.93188C8.75737 9.44138 8.256 9.43388 8.0235 9.31613C7.79137 9.19876 7.806 8.97488 7.7295 9.00113C7.653 9.02776 7.67887 9.27863 7.96425 9.49088C8.24962 9.70276 8.5125 9.58801 9.018 10.182C9.447 10.6864 9.798 10.6613 10.1602 10.9883C10.1524 11.0029 10.1449 11.0179 10.137 11.0325L7.26525 9.96751C7.26525 9.96751 7.17563 9.93038 7.15088 9.99038C7.12538 10.0504 7.215 10.0875 7.215 10.0875L9.99825 11.3648C9.9945 11.376 9.9915 11.3873 9.98812 11.3981C9.49012 11.2909 9.0525 11.4161 8.59088 11.1743C8.02463 10.8776 7.5585 11.0629 7.299 11.0434C7.03912 11.0235 6.96712 10.8109 6.90637 10.8645C6.84637 10.9185 6.966 11.1401 7.31062 11.2268C7.65562 11.3134 7.85437 11.1068 8.5485 11.4619C9.13725 11.7638 9.45262 11.6074 9.91275 11.7705C9.91087 11.7866 9.90975 11.8031 9.90825 11.8193L6.84675 11.9348C6.84675 11.9348 6.75 11.9348 6.75 11.9993C6.75 12.0641 6.84675 12.0638 6.84675 12.0638L9.90825 12.1793C9.90937 12.1909 9.90975 12.2025 9.91087 12.2138C9.41025 12.3053 9.05362 12.5888 8.53425 12.5419C7.89787 12.4849 7.53787 12.834 7.29037 12.9154C7.04287 12.996 6.89475 12.8276 6.8595 12.9C6.82425 12.9728 7.02 13.1321 7.37175 13.08C7.7235 13.0279 7.82812 12.7613 8.6055 12.8239C9.26512 12.8771 9.49612 12.612 9.984 12.5869C9.9885 12.6023 9.99262 12.6184 9.99787 12.6338L7.21463 13.911C7.21463 13.911 7.125 13.9485 7.14975 14.0081C7.1745 14.0678 7.26413 14.0306 7.26413 14.0306L10.1362 12.9656C10.1415 12.9758 10.1464 12.987 10.152 12.9964C9.7245 13.2731 9.50362 13.671 9.00562 13.8263C8.3955 14.0175 8.19712 14.478 7.99912 14.6471C7.8015 14.817 7.60012 14.7176 7.59525 14.7983C7.59037 14.8789 7.83225 14.9513 8.1375 14.7686C8.44275 14.5864 8.43712 14.2991 9.17925 14.0595C9.80925 13.8563 9.92137 13.5229 10.3624 13.3133C10.3725 13.3256 10.383 13.338 10.3935 13.3508L8.31037 15.597C8.31037 15.597 8.24175 15.6656 8.28712 15.7114C8.33287 15.7568 8.4015 15.6885 8.4015 15.6885L10.6474 13.605C10.6564 13.6129 10.665 13.62 10.674 13.6275C10.3849 14.0464 10.3327 14.499 9.93225 14.8331C9.44175 15.2426 9.43462 15.7444 9.3165 15.9769C9.19912 16.209 8.97487 16.1944 9.0015 16.2709C9.02812 16.347 9.279 16.3215 9.49125 16.0358C9.7035 15.75 9.58837 15.4879 10.1824 14.9824C10.6867 14.553 10.6616 14.2024 10.9886 13.8394C11.0032 13.8476 11.0182 13.8551 11.0329 13.8626L9.96825 16.7351C9.96825 16.7351 9.93075 16.8244 9.99075 16.8495C10.0507 16.875 10.0879 16.7854 10.0879 16.7854L11.3655 14.0021C11.3764 14.0055 11.3876 14.0089 11.3989 14.0123C11.2916 14.5095 11.4169 14.9475 11.1746 15.4095C10.8784 15.9761 11.0632 16.4419 11.0434 16.7014C11.0239 16.9609 10.8112 17.0336 10.8649 17.0936C10.9189 17.154 11.1405 17.0344 11.2271 16.6894C11.3137 16.3444 11.1071 16.146 11.4626 15.4515C11.7641 14.8628 11.6077 14.5478 11.7712 14.0869C11.7874 14.0891 11.8039 14.0899 11.82 14.0918L11.9351 17.1529C11.9351 17.1529 11.9351 17.25 11.9996 17.25C12.0645 17.25 12.0641 17.1529 12.0641 17.1529L12.1796 14.0918C12.1912 14.0906 12.2029 14.0899 12.2141 14.0891C12.3056 14.5898 12.5887 14.946 12.5419 15.4658C12.4849 16.1021 12.8344 16.4621 12.9154 16.7096C12.9967 16.9571 12.828 17.1053 12.9007 17.1401C12.9731 17.1754 13.1325 16.9796 13.0804 16.6275C13.0286 16.2758 12.7612 16.1711 12.8242 15.3941C12.8775 14.7349 12.6127 14.5035 12.5869 14.0156C12.6026 14.0111 12.6184 14.007 12.6341 14.0018L13.9114 16.785C13.9114 16.785 13.9489 16.8746 14.0085 16.8503C14.0681 16.8255 14.0314 16.7359 14.0314 16.7359L12.9664 13.8641C12.9765 13.8581 12.987 13.854 12.9971 13.848C13.2731 14.2755 13.671 14.4964 13.827 14.9944C14.0175 15.6045 14.478 15.8029 14.6479 16.0009C14.8174 16.1985 14.7184 16.3995 14.7986 16.4044C14.8789 16.4093 14.9516 16.1674 14.7694 15.8625C14.5864 15.5573 14.2995 15.5629 14.0599 14.8208C13.8566 14.1908 13.5232 14.0786 13.3132 13.6376C13.326 13.6275 13.3387 13.617 13.3515 13.6065L15.597 15.69C15.597 15.69 15.666 15.7586 15.7114 15.7129C15.7571 15.6675 15.6885 15.5985 15.6885 15.5985L13.6054 13.353C13.6129 13.344 13.6204 13.335 13.6279 13.326C14.0467 13.6155 14.499 13.6676 14.8335 14.0681C15.2434 14.559 15.7447 14.5661 15.9772 14.6839C16.2094 14.8013 16.1947 15.0255 16.2712 14.9993C16.3477 14.9723 16.3222 14.7218 16.0365 14.5091C15.7507 14.2976 15.4879 14.412 14.9824 13.8184C14.5537 13.3136 14.2027 13.3391 13.8397 13.0121C13.8476 12.9975 13.8559 12.9829 13.8634 12.9675L16.7351 14.0329C16.7351 14.0329 16.8247 14.07 16.8495 14.0104C16.8754 13.9493 16.7861 13.9125 16.7861 13.9125L14.0025 12.6349C14.0062 12.624 14.0092 12.6128 14.0122 12.6019C14.5102 12.7088 14.9479 12.5835 15.4099 12.8258C15.9761 13.122 16.4426 12.9368 16.7017 12.9566C16.9616 12.9765 17.0336 13.1891 17.0944 13.1355C17.1544 13.0819 17.0347 12.8603 16.6901 12.7729C16.3451 12.6866 16.146 12.8929 15.4522 12.5378C14.8631 12.2363 14.5477 12.3926 14.0876 12.2291C14.0895 12.213 14.0906 12.1965 14.0921 12.1804L17.1536 12.0649C17.1536 12.0649 17.2504 12.0649 17.2504 12.0004C17.2504 11.9355 17.1536 11.9359 17.1536 11.9359Z" fill="#F6B40E"/> +<path d="M13.116 11.7262C13.011 11.6134 12.8598 11.5515 12.717 11.5515C12.5733 11.5515 12.4361 11.6137 12.3555 11.7431C12.5167 11.8882 12.8737 11.9036 13.116 11.7262ZM13.0027 11.7097C12.9412 11.7769 12.8662 11.8166 12.7878 11.8327C12.8291 11.8069 12.8572 11.7615 12.8572 11.7094C12.8572 11.6602 12.8328 11.6171 12.7957 11.5909C12.9007 11.6081 12.9881 11.6587 13.0027 11.7097ZM12.6187 11.598C12.5868 11.6246 12.5658 11.6644 12.5658 11.7094C12.5658 11.7645 12.5973 11.8125 12.6427 11.8369C12.5617 11.826 12.4841 11.793 12.4207 11.7427C12.4713 11.6629 12.543 11.6182 12.6187 11.598Z" fill="#85340A"/> +<path d="M12.7436 11.4514C12.5336 11.4514 12.4856 11.4997 12.3881 11.5804C12.2914 11.661 12.243 11.6449 12.2269 11.661C12.2111 11.6771 12.2269 11.7255 12.2591 11.7094C12.2914 11.6932 12.3562 11.661 12.453 11.58C12.5501 11.4994 12.6469 11.4994 12.7436 11.4994C13.0342 11.4994 13.1959 11.7416 13.2281 11.7255C13.2604 11.7094 13.0669 11.4514 12.7436 11.4514Z" fill="#85340A"/> +<path d="M13.3252 11.548L13.3242 11.547V11.548" fill="#85340A"/> +<path d="M12.1285 11.3861C12.106 11.4461 12.0892 11.5076 12.0779 11.5702C12.0355 11.8102 12.0809 12.0622 12.2095 12.3071C12.2257 12.291 12.2579 12.2749 12.274 12.2749C12.13 12.0712 12.0727 11.8725 12.1053 11.6887C12.1218 11.5942 12.1623 11.5035 12.2257 11.4191C12.484 11.1769 12.9517 11.2249 13.3233 11.5474C12.9678 11.0632 12.4837 11.0955 12.1285 11.3861Z" fill="#85340A"/> +<path d="M12.4842 11.871C12.3544 11.8065 12.3225 11.7743 12.2903 11.7743C12.258 11.7743 12.258 11.8065 12.4193 11.9033C12.5805 12 12.8554 12.0161 13.1303 11.8065C12.807 11.9359 12.6132 11.9359 12.4842 11.871Z" fill="#85340A"/> +<path d="M12.3078 12.48C12.2564 12.48 12.214 12.4391 12.211 12.3877C12.1953 12.4192 12.133 12.513 12.0104 12.5179C11.8874 12.513 11.8251 12.4192 11.8098 12.3877C11.8068 12.4391 11.764 12.48 11.7126 12.48C11.6586 12.48 11.6159 12.4365 11.6159 12.3832C11.6159 12.342 11.641 12.3045 11.6796 12.2906C11.6103 12.3034 11.5615 12.3645 11.5615 12.4342C11.5615 12.5149 11.6279 12.579 11.7081 12.579C11.7554 12.579 11.7993 12.5565 11.8263 12.5175C11.8821 12.5595 11.9594 12.564 12.001 12.5647C12.0074 12.5647 12.0156 12.5647 12.0201 12.5647C12.0614 12.564 12.139 12.5595 12.1949 12.5175C12.2223 12.5565 12.2658 12.579 12.3126 12.579C12.3929 12.579 12.4596 12.5149 12.4596 12.4342C12.4596 12.3645 12.4101 12.3034 12.3415 12.2906C12.3801 12.3045 12.4053 12.342 12.4053 12.3832C12.4045 12.4365 12.3614 12.48 12.3078 12.48Z" fill="#85340A"/> +<path d="M11.9985 12.8175H12.0008C12.0653 12.8175 12.162 12.7391 12.2749 12.8036C12.3878 12.8681 12.4538 12.9319 12.5352 12.9645C12.3893 12.8674 12.3233 12.7211 12.1617 12.7211C12.1294 12.7211 12.0653 12.7388 12.0008 12.771H11.9985C11.934 12.7388 11.8699 12.7211 11.8377 12.7211C11.676 12.7211 11.6119 12.8678 11.4668 12.9645C11.5474 12.9319 11.6112 12.8681 11.7244 12.8036C11.8377 12.7391 11.934 12.8175 11.9985 12.8175Z" fill="#85340A"/> +<path d="M12.001 12.9304H11.9988C11.9384 12.9304 11.89 12.9068 11.7839 12.9116C11.7213 12.9143 11.6388 12.927 11.521 12.9619C11.5045 12.9619 11.4869 12.9619 11.4678 12.9638C11.8071 12.996 11.644 13.1903 11.9991 13.1903H12.0014C12.3565 13.1903 12.196 12.9956 12.5354 12.9638C12.5133 12.9619 12.493 12.9604 12.4746 12.9604C12.1611 12.8681 12.0959 12.9304 12.001 12.9304ZM12.0014 13.1415H11.9991C11.7265 13.1415 11.8105 12.9585 11.5293 12.9615C11.5278 12.9615 11.5255 12.9623 11.524 12.9623C11.8064 12.9019 11.8709 12.9968 11.9988 12.9968H12.001C12.1281 12.9968 12.1926 12.903 12.4701 12.9608C12.1934 12.9593 12.2729 13.1415 12.0014 13.1415Z" fill="#85340A"/> +<path d="M12.0006 13.1962C11.8401 13.1962 11.71 13.3271 11.71 13.4872C11.7418 13.3526 11.8626 13.2574 12.0006 13.2574C12.1393 13.2574 12.2593 13.3526 12.2912 13.4872C12.2916 13.3267 12.1615 13.1962 12.0006 13.1962Z" fill="#85340A"/> +<path d="M10.6953 11.548L10.6963 11.547L10.6953 11.548Z" fill="#85340A"/> +<path d="M11.7939 11.4187C11.8569 11.5035 11.8978 11.5939 11.9143 11.6884C11.9465 11.8725 11.8892 12.0712 11.7452 12.2745C11.7613 12.2745 11.7939 12.2906 11.81 12.3067C11.9383 12.0619 11.9837 11.8099 11.9417 11.5699C11.9308 11.5072 11.9135 11.4457 11.891 11.3857C11.5359 11.0951 11.0514 11.0629 10.6963 11.5466C11.0672 11.2249 11.5355 11.1765 11.7939 11.4187Z" fill="#85340A"/> +<path d="M11.5671 11.5804C11.6638 11.661 11.7287 11.6933 11.7609 11.7098C11.7928 11.7259 11.8093 11.6775 11.7928 11.6614C11.7767 11.6453 11.7287 11.6614 11.6312 11.5808C11.5344 11.5001 11.4861 11.4518 11.2761 11.4518C10.9532 11.4518 10.7593 11.7101 10.7916 11.7263C10.8238 11.7424 10.9854 11.5001 11.2761 11.5001C11.3732 11.4998 11.4696 11.4998 11.5671 11.5804Z" fill="#85340A"/> +<path d="M10.9056 11.7412C10.9919 11.8189 11.1336 11.8586 11.2844 11.853C11.2851 11.853 11.2859 11.8534 11.2863 11.8534C11.2878 11.8534 11.2893 11.853 11.2908 11.853C11.4201 11.8466 11.5555 11.8061 11.6658 11.7247C11.5608 11.6119 11.4096 11.55 11.2664 11.55C11.1235 11.5496 10.9859 11.6119 10.9053 11.7412H10.9056ZM10.9716 11.7412C11.0286 11.6497 11.1141 11.6047 11.2023 11.5894C11.1648 11.6156 11.1404 11.6587 11.1404 11.7079C11.1404 11.7656 11.1745 11.8151 11.2236 11.8387C11.1321 11.8324 11.0425 11.7979 10.9716 11.7412ZM11.5525 11.7082C11.5011 11.7645 11.44 11.8016 11.3755 11.8215C11.4093 11.7949 11.431 11.754 11.431 11.7079C11.431 11.6621 11.4096 11.622 11.3766 11.5954C11.4678 11.6167 11.5398 11.6625 11.5525 11.7082Z" fill="#85340A"/> +<path d="M11.7267 11.7743C11.6945 11.7743 11.6622 11.8065 11.5328 11.871C11.4035 11.9355 11.21 11.9355 10.8867 11.8065C11.1612 12.0165 11.4357 12.0004 11.5973 11.9033C11.7593 11.8065 11.7593 11.7743 11.7267 11.7743Z" fill="#85340A"/> +</svg> diff --git a/public/flag-es-co.svg b/public/flag-es-co.svg new file mode 100644 index 000000000..618820393 --- /dev/null +++ b/public/flag-es-co.svg @@ -0,0 +1,10 @@ +<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> +<mask id="mask0" mask-type="alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="24" height="24"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M21.5144 6C19.5212 2.84625 16.0064 0.75 11.9999 0.75C7.99335 0.75 4.47848 2.84625 2.48535 6H2.4855C1.38787 7.737 0.75 9.79313 0.75 12C0.75 14.2069 1.38787 16.263 2.4855 18H2.48535C4.47848 21.1537 7.99335 23.25 11.9999 23.25C16.0064 23.25 19.5212 21.1537 21.5144 18H21.5145C22.6121 16.263 23.25 14.2069 23.25 12C23.25 9.79313 22.6121 7.737 21.5145 6H21.5144Z" fill="#B4D7EE"/> +</mask> +<g mask="url(#mask0)"> +<rect x="-2" y="-1" width="27" height="14" fill="#FCD116"/> +<rect x="-2" y="13" width="27" height="6" fill="#003893"/> +<rect x="-2" y="19" width="27" height="6" fill="#CE1126"/> +</g> +</svg> diff --git a/public/flag-es.svg b/public/flag-es.svg new file mode 100644 index 000000000..5e8e8f08f --- /dev/null +++ b/public/flag-es.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M0 256c0 31.314 5.633 61.31 15.923 89.043L256 367.304l240.077-22.261C506.367 317.31 512 287.314 512 256s-5.633-61.31-15.923-89.043L256 144.696 15.923 166.957C5.633 194.69 0 224.686 0 256z" fill="#ffda44"/><g fill="#d80027"><path d="M496.077 166.957C459.906 69.473 366.071 0 256 0S52.094 69.473 15.923 166.957h480.154zM15.923 345.043C52.094 442.527 145.929 512 256 512s203.906-69.473 240.077-166.957H15.923z"/></g></svg> \ No newline at end of file diff --git a/public/icon-144x144.png b/public/icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..aeeaabd3fd8feda5ed7235cbb2af2d4236d921c0 GIT binary patch literal 4150 zcmV-65XtX}P)<h;3K|Lk000e1NJLTq0058x0058(1^@s6=SJeV00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH56ekJK~#7F?VVpw z9OWLze=Mbi1k9pBDF#?uZDSkbRuVNw6SmbR&AAcJ8-RLwZrYx^b8dh)VBr-&@6Neu zz3b7oyXUSK8dej{u~Aqwwzf6wHf;)p!utD8=D~#y?94p#=XqwHPx3g!ENh2-zWe+4 z{FxR?8HGY2+t${W<I{Y-Ue9qGYH4Z7^3OT@NVx9wUVgn|zrJ<kYfHF}^JmYVl}n{k zjZ#DlB^X;Qqnn$XdG6%5_)?xbIlHp5LXRFjqSe(^tF5oE6Rz=V*86bHiT3t(>)6rJ zv310?&dyHae}}rdx@h0NeGpKY1@%p9YilW!$&{~MyH=ruk|+T|F#GrKFKldV6u9F) zW?|%(mzSwpty-cGq6rfgkR_z<?ruw1FTVI9u0c>`7S!i!Yip$>St;!WWLudr?x0b& zAO(oz{{8!wXdXX)Oez2&K~TNDz1ER|Wt!vmKi#d9mI8uk_}g4yw{#w&fne_5y=z$* z;f7SEr>Dni5ENS{OH5yU@x^7*5Um7s_Uzdl3uKH>FR+El{_@K&1Q(@)Xm;b!p+nT) z-w#(;;aIK2)^tiItE7d1KKkgR0v{$|ZGQgwXF}6iG)^EGKYaMG<>L5!j;-tE>({TB zNO6=FkPr@MNS1KmrjjNcCt#HzCeHFo{Nt3$LQ+ydjlx-2Sg?eXMjD00vC=seU7Jz@ zLX5+y_a#olM}PR?htvvZCqhVYZK}mc$_R+94q}`O?5eU!jB$bhB0^&(*{w~H0>myL zxGN4AXE~e7efQmWp%?meM+Doiyz)wgOBtu)wnniD2(=vc>z37la2`B(KnC|T#7D7O zqgVuF*K@9L0Wkml_um_L<r5XGQ7c8vhaY};o&)87|M=sNx!bpI6Bp0O;17K9V7dA8 z%<}l#`0KB~{*<%UTa;8d-nsPt`|sEJn^Wf>O$)H$GsS0%&zK@45*H?17N_NTr02$E zg#%^+96fpzLnCEA|0D{R7P^2S9<J*YfBNaC9EyU5@IhR3<j9do;-XLmbmq(%%=#;G zmX$R{!Dty67@%Xvj@7tCa_Y-3zbun(aIieasd}}uvs0^BB1sLO{m95j6@5WEfg46Z zXT+n1h|m|>h)9UXWLoMpk)bIsA|syki72o_A_8Vk&#%qT&(o79PspGaD4k%Qcwb*% zfm8keaz^|c1we)Z0I52%t*^fNN|}l5hUY=weEs#;S@ae9i~>MfK%&mW!xC8|9`!*V zp{#;F3qnNF0z!ouMMBKsG3Wtma_BSk9mNU8U5+0=u1z3m+V*zh#0lxKGv7fpM%7nW zS0}&y_FFTet|<tr4<0=D9#^a%`W?mhHIxD0$>N#6b?a8v%plYo%qe>J-FIsp9UUkA zjGOt2fe?VPVvTqb0QwMpiFgRJM9Cwb1%%1(zyA7bDuU*GK2K=?D||6K6jO{TOyIiG zQfbcRa`nZ<#d<cI)#|?eHWp8vEl}NFljj;w7RYv8saQENIXOuzBD!$l0;K^|s<F5M zD`Y4P;JVV1vcviaI8(8H*6IFb+VJo&tk5I{30xQdPg65U%Hw(UMy_1BqSgJ&H1sj% z5V@^VyK-Uc>+6$gab4r%<Ie@pqobo($3|%Yeat~Mva(<%=ZnCZH2Ws`Z3vv5C>D!a z{T(vROF-S!0<jWj(=r);Vq(GyoSlFL8XFs<G=P8_t7n)Ak^u@#i}ev{`(7ZRPD@&k zX0J0V&>l3iKoe=PJ|b=33l>jm(t2R`{RH_TZPv#vX-n&yS)pAm5Pw$VX|X=Dv$L*$ z7gp%frASu~$BI2<HR0(^Y0A7fZLj+QS&B}7r{5+rvfb)Jjur@YAIud=1IWChe4lP0 zBeQpm8+Ur$Q9zkYW+V;nYp=Au8A$8XQe3p%*m<Yv9?uEr%$YOe*lsTARc8nXRcF6c zDitb~N|XldB|+H(2M&zveC;^_v3no8bLS2v9XDxvv-hV7SfP!LjlF9a2$a$g9C}IH zok-KL2JHx@ce=4{76^|?!h=haj+eCEiF4=9QQ8pO>9LT;8?SE@5ZqVNcS}XwBNP12 z&COZyPa3g9n~xn|glWQ@AJWXUdTq_dyY>R_O;Z(`T)43<3xwxyCB61@{``5Vz<Fk7 zCbiZFz>VRVY%HV^ajnsXjV9TB$<A+vaHglHDeWLeW@CIx{JbR~Jd`%c7RaRS!BDH! zP-xyB2PHjymrdK#G$-0kYm9>|3&dkz`6OE(+0pZh7cY|GPw<#gJWd_w!i8B+J5C}< z+c7ELFKJHOcLT;|b92*Ld0+`B$?=cOs5yi)HKoL3xs(Fqq|gk`g$2qd(E^#YJsfPU zSQe<o4u+~p8(D^Mc+ASTfFPV#UwxGf&e+xb?hF@&5@~%*+8!<|D=P@3a~bw!xuiWk z2f~qA!-c^4^5x59*d2RA)qIA_9J!=fAX)1Xbl{xCnTxPM&<=v=M9n@#+AeE-f()Ed zLO?8*G!a2FETAE*|0;HOcPn50blX%LZ5Q{Gv`J_^Jv~@2b~TWl>Qw>OM>cQ{()u*s z4=j*OK~ptsuQh~8^ovQ@_s7lJ_GZ>6$os(>`knWaq%HHH8E7Xl7D%<U-KmI~$Sw1d zFbh$3w0(AVHnRIk(heWcP9iLjYH9mk_mjA_^}1UiziZnC)6>&|-j7>rn1uOPmUeU( zkZNf=(sef^A+6V5K(f|{3y!hgkM34TYXPa2wxfByAKlY>D~RU7)C!*1q8qYveS)5* z>gRrRPV1o=Xh+LJqKav|Uu&pqTEA6D<iDZT*49Qkp<3FGAqv0N5NW-Rn^kpmbYL*G zf+r7N!N3@4qI~YGx(q?5?V`!VV?ein8Uyech(`?cP$vr{Q-lk1b*b!*9lBW|VS!MI z)+UHnZM3}+%qf?dSFYQZd3F%Jq)iqE;m9u0345BVY-Wdjix3m(Kxb#Cm4(3qmAksS zNOfe>_9!-mDwoUFQXs$Rl-48cv4UtU>rp*`Q!Q=Zt05&vYVH?Z()w-t1aUN7Rk;>4 zH#b+8A?i(`IM%Amz==ZSpRt#Qji#U(5+EH@HI<i5+tHa(-?P(fM6cxY`N;3vZ4)Ux zv}4T&;`{vuX_<=1rtMf|5jEIDM>ghCdCm|E$kGhX_u)U8Os0&Bsyz!{wY1&q=Hw8P z->gcc^(rnow==Nf)&&&<X%$D?-Olw1iZK3$AetRO=Nd(24XScFugpzy&8IFy&@qJU z+#|ol5yS1(pb?IL=4mH9CN@1dIH<%;s+hLR2E~3+Ev+9I7^t&WW`%AVC)JlY6C)K+ zZM0oB7L!4>(fZ!rUc^6FpL;>XLCEnbMup=ZWC+^i%f@0sp-NhhS%^-LeX>wtoxE(| z9JIMdQBMU_n1pYyhc7m2X4|^3&CSiv4;?y0aS=q?j?_6QR2rL7VYD704r_UC*I$U! zjj5Qn%MPIg&BDS$<o(jv9Mkumz(jGN6#31mmbT;nryA@b>TD4s?;EuK{{H9Omm{2_ zjSdeFM|yK6ZFkS|@^UO`Jv71E7^7y`kA12}>BdwWZI7#H=$6ku`z%uN@Hi>Nvq)}X z0Zkr0d^nPuQ!Q;rQ`Pzi;L4($qH_HB@omM!rXWy?DwtL+aF&h5qT=Swn~@3VgAYE~ zHF)0Vbdg7ZD{O^I95@xi9HB>=EHh6zjFIZ4r6p}1Z-6RwkYx)eSOaw6z=63NH*QqC zybo@y0Oe6cDmP8d1`R+9<Oif}NZ+EkQPb3GZc_JVJCsdvFinPZV)wnAKQ~q=)z;@G zHNnjuiBm_99>tS-$&emkeV#pg_Gz=<Ybv1Y*RPjaTU)OV4i1tb9Y8$DypWAI`(0PN zv~Fx{TpSn}sHwVg!w?+kV+e@*+*R!3N<dIzTU*-<S0u@hZ0v{ZO}Vi?p22uX93%Cn zMHe`G8uKET7D&+2(sB+~$OP2Mqrr8Z^76h`FTcF7uuwU2<VbgCXXktO?%g9pazLit z-Q7LKV{BKwyw8(>z|hdpt*)-Fvz+4fJ$(3(4En<f62>JfJl^#QdBpRxGB~)Zv3Ne= zV9R7>2>^Y_UZv*MbqPFMAW*4PYW$BrJ$Ufo**kacU@|@#^aHW%JMX+h`}gnvC%dj| z6g61Qdg8<hZL$p0wl{mCSU9_mx&`Z`qnf>FT5t`0=D5b)Bht?cv*V#koa@O9-aydI zeYS|cBT1wMgo-5sFm`1%9X9JsJLsch$BtFG&rSzXZ4Ts#g}4z`^QpJre%pvhVbC|j z!^2hXtJ6UZRrt!noZ!stH_puN_4M?NK6vl|u8j=pfOP%j$&*+p@%Lh}7+A&?n1I0I z;$r!=*IrxV^xlX_As`+s4CHkEQ%=|CC_n-g5NH%pwOXaMwKX!t2iz7cPZ;6>feQ!- z5%u-;6_%Hm+l`3gLBu?8TVaR?v`~l?3WYr1eDU_}+ga6ifK56mt8iv40_HM>L?{+W zfWUfiaPU7bzx?uOOG`@@F3k`=n3ln#>x-PK|Aoc#e+rRM1q3i|#v}Njzx2{eh4%LL zK8VPSorMF&w%&N-4dO5DJd5YAq0B0b6O6lHr6YEGAk9kusyBS5_-y$zj&zIr&@E6S z99&=H;QC>IfB$>+dcEDuCkh4(O}zQ$n^n%V{&nNVjYt>vhZ;oh26lRAZEY>yy?Zyu zqN0_R6*71SE(=qPdwYB5IavN%94;#s0ST}V(dz2z#KOV?VP28JJ=m`q;^8miG?w6C zq94UTtO5eY8hHa%We6vm%`S3g`zaQFQjEkdAOWlqA1rHxX4nqg6;=mxtMT~^3ulrP zKp6o6+Zs(iefo6FxV1mQCQn#3!Jo|)c31yUDLq$8KmrJfzh$!=9~IIpBnSsZL9U;b z_{XWZ-IWtc3P@n@j5U!aA;DEaIB-`g3rC=|fCLZ{*Nw*E+IVo5k{E0^#5g!Fk>bJ; zXdxhhh>`eoq*kltICIn5DnT@O)F?#5N2K91T+f-)X$V3q0X1^^^y%?TCNst#c;Wv2 z`}F(ozY~tC1JPib1xCwJ%Yn7wzhh=?ZLJhnEk_1z1tfq~;tnW4O!yIlwU`Zw<D*B9 zNChAmSQ<R-2ImkByX32!QC-$iG>vF4phobR26k};KE?Erx7a%6g^<KC>}j?f_|gk6 zykH$68nm{ywhA7l#V?mwG+J7k-AI&xc4Eg&d7MH}e9W_evO-8Wa)!4Rkc%U(IRQ}s z7KBw1hC9MFG*}k<8pKg%3-b*gr@p?vel<yg*-4@Wv=cm#jyp5Uot$Su;SoV-LpaCl z;)v@`@8{Pm_UkonIIr=wC0u8rVAfwH$zpNh4^HiWi;rGY{Qv*}07*qoM6N<$f^m-O A7ytkO literal 0 HcmV?d00001 diff --git a/public/icon-192x192.png b/public/icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..055ecf31eaaa1d305a16525117e6781f2f7d8a9c GIT binary patch literal 6030 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 IM6N<$f_ogddjJ3c literal 0 HcmV?d00001 diff --git a/public/icon-512x512.png b/public/icon-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..754628cb727cddf70313ca21335dfa1fa5a79f14 GIT binary patch literal 10832 zcmYK^c|4Ts_s<Mtk0MN#sK%1)+3LznBq^dIT*_#Y7CS{*<`t=~wN$o3xkaUHMaeSd z8YEk?FJldvtYe><_xHH>`}zF-@G;MFp7%WGIr}+xZI4@Q5|R-D0Bo{6a_A%gSojkQ z1o+@TR`8EC_)pOHh*JOn!V(*Q7?AcD4<|7JCoN3D+a|e5IN<d-XnhcX!USQq8xDZo zW0r>w+67~N_iF{aI6P9EO=2PHGPgC3rEZc<-IT67W$slhfBx3u&Oh?_YYzSq<C#5e ze!|vg*XwS*ld1Z})oH7@em^r(k1L;9dFknNf<v`m9H^*bEXyBz^dQua(0O2{FJPKO zKy*^x`Az96JD5DG{1EyF%5HD2*_7#Q5irIvO!ngh5M5R|=~r5LwJ&D!`dTgE4(yVi z@AYDjJWTK^^A)Q%-jbq%W0cNO0`Hn}x%Q!t9RWW9gK*N{`H3q?t!Qadi9c&9v=#_E zc1c8bwkioN@M5|o1OdwfF0Umu)Frf6*3IlpLX^w?CUYzQ0XGyeNMmEe5-KCLMoDqt z*WI1sAaViYc?b($k721-3yFf!6YcKbhRte#BMA!>8gf=#24~*SHP5-_XUwHK2%SBY zy!GP#s67PmLsNQr(*0ZJ{O->7C`B_<(t9}f^Or;=F7vvn@Afr;+*n>j=G*e@%&q$- z4UNx^@#*evF(b7Sz=Mfjr?@`D$vMNH_oq#W-<&bMieN2)s=4Oc$3dci%_>VP1b1QX z>HZep*vGtxPJ_9LG}~n*2XlMxl@WCUPizV=Qdl^#SFboxMB7vx&}q+_9lya3aODn* zY%>xBW(Hm(Lu1Y%Yq5<^fp=-wX}}WT(=G+>3Q73#%w}8Kgc=VcN(0Mx2us_nI(I6@ zscR=$kpSe{^h{!>ulM9Ae_R>wKwbfhU6{d^w@p(vJSpZ5k}H~n2;6j3lil6o;iKT) z5p@=mrPyYWQ95^8pzvC#tmZ51;mbXA^VlhKhdWPe%maJfL8O7!LRGw9MV*iiD_C9} zbK?a+V$#L9U45}9ST0`v1;04B<~DSD<l=DkC`qCKCkT2AW~;UJc5ERZ69)!x$?dY~ zPFgep<W+wW8)=C;gy>rWM>_od<4~viMBqWG`=FrilB~^_FJhDqxQrtJ7sEL3p&+4c z53&XCg3co#CB0<s>W3`;qXt(-8d?-cQ*Bw-oQ9iKxG@DQW|J>kpQx>P$tGo8t`fTZ z$cBxosIzU;`-U5?d|bc`n%gQlgR5!LDj=&Zii@aOf?v9Ky@xXSXthl}E6OZ>yJ{)Y zfucTY2c3wcX^oZ8vKyAYgzZSUtk5>wX?}yYcYalI4hIXZFb}3K2cZPeVR&i8Jvdl3 zO#{(&56UkzAv-KwiZJvFRoH5dwS8nM+uXZyMm7^in=VRAv7`~o2!qzPyn>{C^WQTb zPj-&-Gb1mP+z4RA@b2_Wv~=jDLYG!Ma`OnF|2`-?4u?kS?FbeQcNfnRqbtG(gY9?@ zH|+x>dpBk8qZR12_Ujr6A2!30UHspoVy*52!0cYWWlr+UALhOUJ3x06Ka<U{1R~CD z^nTwQ+TcDx-xdFIEt}Dz6&{NA-D&-)6WSL`K=httm#f6$!f7j`S32^ukMa2*8yqM5 zdSXOQnf&&sr;3A-jwp?YgGD%PW2gC`2r=8gEW5<<1ZPlvPYFf4=_9uD{9kn$;&q)L zt9T>H!eqSi(*}iHGl>#jzRyy$Icu|IqHTiZhqs}dJuz~fY(AnAHA`7kR0asr{9NSc zcyinISU9=3?MQWc6ek>coz^1l>nn~_>oUZAi<Jo&{^x?TzT2Z#!x3}kR{cW^VNp{t znp<c;y{(1GUtm>vn7iDttj|B4%1cJ)g<KoM!Bl$mPg+GAPXTeYI(?nf2FSAGUZLIe z^sFFpgp(3=oQjy}J>BQ4MF5=is0&2IM1P0i#FO1f_?SdhjY5`d(!^P3d;5^Tu`QXG z0^Lz(49(=c7U?whEbfm}n2Fj@I%8N29xjvafio7kc0t59==#%U1uSA#Uwt$D@<{&Y z4g&a8&lAqw1&rRgx>jB#w>%<%-i8{~5BRFLHI&{*G>(80${asFdUDL!azilEi&uC= z8d&ph2xJ~{q|uR$iN17W^|W|_vLJ0uoeQcBDnj=NI!5x64@glFzm&6;4|($xF^-MH zV%nPj9;rkC4Nhzf{XZ~-m#h;*q<yf~VjRVKD`Gx4ZJ(KnA|i9?(UeFZ0%qlT`S~y1 zTrgHgiA*=B6dMSTpRJvLJDH3j-JMq(a+-~wLWp%W=uV*8zA$liN>CE{Xc-s-IbYRD z;*3((-LIAaqV@igskm(z)^|_Y0n`%MCONb!VSJvQe7_7rWg(t2?pm~kT*pQVV$)-^ z30&5{`&OKtoNN0=kd!gM{0U@TL;Y7v%G$73tiXI$W)22Cxnvh?YwKl=Bu%7oy>TEk zu@ULsx}v6b;*`W7q0EmMLj;{;J&D#4Nx6rtC6UgjBMQjat8HR=&#{T}Xc9oi{EcTV z?XsekN%AQ0gmz;%f3s$oFj+=(1w;PBoUz@}AFD0s!R9HbVDfyBxHYiN)*qWSDTbVp z?A_{kS&U@h%ia&jhUoja=4Z5#o5!rc_L4axkfm_l#n;a|;<*>b>Wd{6u<}17VUHaJ z{;kb5P)=H^l*?YwcCKNL_Fz}c0x48bAhw#7dH_R>$3D0ZMk}kT!$DW+IZ;71H(|2) z5(i`ScxMy8>JE(dj2P{y``*DP_`*UT%;-LJ84E=BgkXy1je8a_bQerYbO0A)^tN?C zTDyanEZ(%rKe&>HpS(DjqjNl=dRPofS<i~W;ft{cKu+s#4i9ZJ`;;uSxTW}eg%DZO zNrh{=sa69OUTMn6K&-c(ucsi*NmdNo)zjVW6gpQU?YBJL4{qqkyxpCc@uXzK5QM$6 zL4C$wv`yx6dvD<_jfHOL-<_sq7P5hWPTj>!E<*)KOG{_3`ADB5%u%{tOt(A5PVtlO ze6FboSspmMJkgqcg0n3OZ|U-nK<rcgLA}HK&tc5w*A}OiHz5H&1Lb#nOMR+Bgjv7B zWyf{MW<-9n_+c*DBPS=P%8}jn#<}#_8!T_jr%>Okmi?kl=Um(scJN7euXLJls?Lno zDo{h0^(kw61$FKRi}M(a3XujrvK5gh#-S^-^c?hK9@hA}?nLKq{A=}mYf4shAJ6Rm zz>{B&`wul&pjSsfg5qv<<gC6|Upz+UGH!6HV5PcgJ2AX`sWY6j*ok3zi}!Q%^W4No zdPcUKOZ02&VyKC2H^#STp15=GAH`-q{IC?wscZfAlYYIW(!UBxUFl9D%#^{WUYN(x zH44{CE;4;2DG>#RZFons!4@@;Up+u%5~R5?F)?q%kq0(t&~%@lvmz`1E=HeM^d)xo zsw3OY<29XoT1QGCWbePT&#_QVGe<3fbMN{8j+5>t2dvNkKC$UJcGgIpTTpEMKY)9+ zJnIctFNu%HjBh@dsPp7FW2w<GYja4<CAsd+B|!5W%|hvmqvzhG(xV303uak`q=|m@ zcw?zxrUufsarYAWb!R2?2_5UE^}=s-ai$9jmfMWNwW29_b2#gB_Pw7<{Ah~gf7^S) z)+#i(yKAxfykE}BEq3%$P6K03b^My#x^s=ABD1EIj!m$~7;TCnGV_`XtL*JCWG#R7 zg0#cwmVq{?nN02GbAg2kg+xk(shrY$3C)UE^p}HQuvqU0Y1;9kIj!Y!vB}X<Lgo7O zr<K+5OrD8G4=?tCvQ}E;K9&?Trt`#t$gnuhn{(=$my{La#nM_8%CLiw&mY)usO%91 zF)oXkY>yB*lQyFKH^b%2g?#ITXatC3)3u7<J`NjK68#frbRI`*BQjN`xeE&mMkRUJ z^5D5IL!_4c$kP~6drV4H4z;U$M=kgC2^>;k<S034D+z4Sg6z;=T+R$t!R%i9otY}s zgu7H)g=<NVw8x10i9;nNiz;J0y%b70zrT7#6iD;$lb_w}3^oXTJYN4leu;^EEE;@A zh&Gi7XdOjU+_8q_NGovCgu|!|bCv{a@0ZnRm3u&r+uZFZav@BghgP;3#@EG3`9(s$ zG9m9~gb;|@=N&%ly$^e_PlK!j?U9Nu58R+0WQ(L7|54_K;oY|h-damen7StP5^%0B ztm<1=NLpW>5gX3hsals8_o<M7{U~_Rssw0{qK*ECnH9LuS{w#BnXlme)A;{rJnY8& zY@!CBPDT-pxVcGc)5a^0w=NtRG>ONC_s}7i)?X+KS*C~hFL`8!EopM+ldE`J(gzaw z2P|;32?ftfRut-Myl~Xn#c*v~2GmsWYH#8${ma=cuZ{5&hOOD~#)nbzF{J~X=9gGf z{)N_&Bjij$8bJ^J+(GYKDZK+3_l(c3h%j%Au_$>D1#&H9H`d!y(V<E;@X>H?ZC<0` zsdy%LJQin~f8z=t^EEbc+ua(4lEg;;=bGHzKEmI?jn-a`h%hAp^`E0ATj?s7G1^`1 zF>?ch46t-JwOByo@B}S*_+1)xS;;gBlOg55Xss^mwSY2*#ErF~k^Jt`&AOlGSYjbM zaq^3;yc46uF4MD%=?>gSYSLU!F3-}=bU;jyXa0$)`&nfPWFg`2OQWoI2UlEyVYi4; zoIL9u0J3VFl)mEPVk06^jGTY1OgT82SFu>EA1!$Ly_WmkkP#|D8?dI_-oid3zQJ`* zWscMLF7fjhx21wl1dzdXGwYUgoquXX=MD~*m`IR&cO#Y`R`?B04tr5M-2+B~7-7=1 zgJXI$x&@DqGbV+v;NEz1rbYeyB=lb_{A8TF3^2Cb+nau9FD;KHyYl&Nb@t-%EXHXI zj#0ag)R%Ie%dIB?+6k}nO$F9CvJ9;!mV@E<m67dH-hk6@*Ir7FsVXEImBp1}46K3j zQ!Kdh+Ks8zfYMs6Db;2XaPkEvuf~f?i|`60F<uDLI`~CNUX`4sUe(k>BK~n)hLIg0 zi}^Es_CGmXKh3C8pk<Bb&GqzxbOLDW8v2gOwcJ$7skpJIh8(Qdzww*L!oU(7=W(p> zQt&-=Wf|jnAF!{0V`E=3$I$!R)*}x(e{%5YPXfh%&*~!2i}cR=k5e_-P}|-$^f9Om z;x&5whgV)-wsR>~dlUKPpLDJ|S39`vYURa#UfPO69+@eIzw^GsQxZ%>6cWj#4jFzI zl?}>0`2SJY#KnWTjn%is;y4(yV*lS~RWRCIe&G+l#qhZguPndPp{eg;<7si1@#~+$ z)~|tV)^%Co+H0rnAualHAHjp(JvxmcfP&{LHW`QNV>zEE`p+!Y+Y2Hb>W72zoc>P^ z*Qm_?PeDBR_s_4a6m19VXaQ}iGe2gU-8>MjRmIjtTAjQ23-Yi9OAl|_N>He@JL)bC z$x5INn4E(*NWB&EumP%l7*#6hEb+&FQ<u`?(L4tHQR<k}7u%T7HE0Fzy9Z=9QB{vl zqtx&=6)7)F-qm~H$KR~ND&r~0A2m+FTC^fw@WHOSE3=oI<=B>PvNEacD)Ro-Pzf=P zYMV!`oQ%x$p0BaZ4qel_&YWpXH>7j3JWBxi)W_LmE(>LL@3lc~OJvvAywk8LhYhg; z?T~-B4j-4ze;YpdVnc-qlyWfUsb^7|HI#B>Sh}{`^8!=s*Idj%rA_DR&RlB)?n5qX zrbr?8tJbS^!$n|(N&NNkx0vcTt>e7qXEDB5#r8d6Of6Y7mUHl`zgMOUhqee^B-=t6 zI@h1U=u)to%+}zhs{z|Lp6orGN!M|r-BfleV@eR=BfWBGimCQ}hlU~RB%O<V39}ok zGQrInWSL%XV=Rm}XP>`5oLNE5?XgG#4tu~7`m!TQ#pc<0?{%Kx9s(_=(*)BF>1#I{ zrho_m`+!~r+tg*aRRXajxo<ZKg^mo`mSe*+`29S$shxK)2Kj6B3kqGM4dx$At7pqg zf>-uy!@=R<-b}F%(_vz?b{$eOII)RBB|RTVz&7mxrC)|^%wsw2zdJOvg6yU^H;6XC z3fRIOR~u%ilNAaDUq*lVOq&M@Wo<UM_%vG;##vkJz5hO@H@8ydc08Mlu8btigiFy` z42?qxbLj>H4nP?rslDV-YP_(c3jK()T{GCMJ~yq7ygmSI_5M5e5jtM9C2;=}KD&$e ztG-EqPH?LHyL7E58@dpV;b^`C^(YZ1F11qoy6WQ{zu&F`g(u$G-0(T(VH4svil&=y zHxAZ*MU2^e;2(3@5|CS6$_STLg0Ou>9B!TnUifd_B(}MPV$EKN2Aew`j_%ZFMbq>Z z+{-DdP6CB~P$lI=RTy`ya%F|LO42`VJdy41VMx#_dR0xw8}6tS5=~OuTkkr*l~#CO z-84_WL8j{H&?I$rncDWt#vmqsvRU;XQNR0=pkHfieV1#0$xCi7*7jb|l`0Bi?&rqL zpYD3Tmi=m{+TBx<;4iziE=I9Ob1X-r@YrIlqvHD(-Xnfcf&&K7bE_52^Qb0TUPw~Y zUe(J|)DH|8mw1(f)@W*Ko^yEaDuc7cA<usJ_GUud)?RVp^{}p?-?{!B^rb~z{GHGt zDrfEL116WV?iU`uy-&Rg4O2#fW(MNAJ*8~3it|9|7Fz@|tU5PlOd^EQu3!&@macQ} z%U&?UTW&r#WwdYKb?5yQY78aQ!i4cD$j1)VigMhmsfRfk^{+;UXeYO4hAoDVTHmB& zci#&D_yh1Ed#^Hmo=~d_NkV${u4ijMe3ddSPgtt|=0$y2+uhyW8`jW^UGVU-LS3UA zx8!?av@g@SzdELyXBH=^nx(*h4>)?Cg5*~_f!Ga(qqjVog06@pLrmzqk-(kSS8mMa zbH!acH;A#glZnnwm|$6LT@@9Tx%sgM)$ZTDrB}IHiAt+%t^#Gf*3IgHsTj!Kpfj{= zlsVVolnMoi>n&cS_2s`d1JY%=wvVeLb!4|EMtlElZ}$FoR=$B;tw;5(JNBc=*B5>^ ze$q$_6{bAL(sG$2<;y#CAV*b-ah#HSvAZLLK=z61F2<8Tf`;2)JA7{3c%A)E=(c#_ z^WW?MKJI@6?x;(YLjM+`rMv{%Li)xW*>z{{+zN$PAod|VA@Ml_nh|I3Itvr(`tMRY zcAJtQh#W7eD%%vsgia6Tp)(*x?}^x^4e2ZU<zMf3TXr5;x$9m4rPNFHUnl2$luRi` z*OAV}SGS?|GT3eR4vT?EcV@o#zInqJHN=-#ZDlnea=(yB?^%B;L_1RcRfr^^t?j-3 zx;I4yl2cdQC%m2OF9SCnsa!#!e;IcY+PI*v#g57d<;<als`VKv`biC#b*5m+zDF4r z8Wp8(4oX(xqo2)R0g*GxfQS=`Dy%Ad=${*3NIFd03aU?3-@V+eNI&N!zk95HAN7&V z@#EO&qY{ddC%(s^*8WVJ5ym;nK9+}sO@^@`K34$}ElS*#o!`(zm1>w?{XXi%XZGm} z{wJL0-B1(t2`8n$ic84;)iR1Fd!OtVHWH^$W3NMJl^qZ^U#|j*m$p|D#5Y0d^N&yu zI}ho{!%7MOMz5fQGoMGLP#eZ1%bGI|#N6K|d>$DXJp(<=X&xl<>n(J6_}K(6?K(PD zkAv)#Y>uiEN{PCPrCu0cJtrBhRUD&>u~sBB3!N(SNk}loMwR3lc31Q!HPIKWUatSa zhMWU}v<pQ$A;&%L#co6T)=+lao~nq*-C=ra%kQ93cs-QIONkI6B~`J1%^U9HGZHjH z<kt7B*11xsy$xtkx8aHTEoI#^vu!rS8dr3!6WO)uEX!yt1x-Dw>v#jcUB^(R8IH%z z>;-DbYVo~I5lRV-V^SxS_peID4>o)C72{|Jx2;ni=3$}VTXDniFWr1_{=n%FwGek^ z!qs+NsfqDhyXx<y=Pbb2FYusq9UUIgVMsMlF8evn0Thk=bf;xJFj-0#rp5<Zf;D#- z?F@U%LYj&`W2rppTP|H$wvhx&!)L^3p(3;66KlXkcmmp%61ek5vNbxRJ7x1WRC}s8 z3CVznNYk-T9adRX6~-#7hySU=^-Y)SW2n>pf3lYwpd0<`_Ua$d%-Qq?<6EFp!P;=G zm5V2XLW<z5H7OyM(<)7gXi2{SjTsEM`Dcx@`03m(ei-N$2kk;u<F|vQXRMIs{-q!} zeLKui^iy@K22+ny7*}e_6o-+$&#{iv28S0psu~$YDz_vsVfz7@_T@vdY6G9jaEbGJ zG=F~YeF79JGYLl2J?mR&tjYH_;R*$jkX@RZn>Dx=ryCr}^|w9z^oTB;#zi5-8PlCs zNEB6)uFKPV=z=>EJ}}{A&}y84{=9+966}HkCaQF7#5HWu{sCmZ1M3sttEMCoOP8|} z0_oaIwL0)!;zqgX`rRt%B9tBPN+~49e|A*N)974!IKp+>iC@D<;%)Kk615^QRLzr= z_G?_!Kmt4Hk%<1b^^ufV+?PKG7#Qv4$xW`Khe#cdVknbwR4LSLuav-*OK+*r%OP#& zW$BV}6sm~%CQ1aP{&<r-F~M_+BM$-$?Liu%k6)*#UjCq=og_<%V3MzKcrw*jOf9g* z(C3V<b5!h`$lisFo1B@giRZoW68c(B+*Nh%$f;__!A@7Ie8JPW8|y{A=X0|~hU?sz zHX{3a)M&lmw+U~RrAL1F{7eJHA?oLu2|FN4RkN*vNB~+e7_%U}pz@lTZm@CVBHlA= zChIMYwb)~fzp|x;Z2<dxJu$GAt~Uq?c+`h0CqaqGyCl^wFsKz;HmdMlpw8l`!iH(Q zOmB&<c2vA_qi{l^K@GHh7-Eut!Eg0(3kO9K3Q4C|YA~b#xDwC%6B;BuQC68DecJKE zBduegqilcTJoIw4ps%p``PW;nBMg5r1rzlf>mJ{VcC;P9sB8O7RJ9iIDpm-*a##x+ z-FU?U7_mvExHYJe>M04HUXwDFYM2z9Jq$W#*lc6RJl4-<@edk_xJOHK8dtDZsVBL3 zI~Xd^xpau8;fnFKE^G_GZQ=LjjpV`4tkk(WHPU47RnPO2T<V|pm?Im!Z&%Z$(CzX_ zQjrb?AUVT4D8JeCwHm1ByL2m-<MxyKI2PxBX{@K>IJTfDmgE%6IdNmbqrS-h)I7tr z!@zkFH|2>TEMx8dhHB`+5r;h-kE}p%;k*HLsmCa_eZM5a8qX5akL5VAlN-c~YN&m& zxYIsw^h5fEXqK{Ck<YfRS9iJYgOk6H=jnVd^~Ncp=GM0F`V7^t&!Ioleai7~$;^B? zI`(z@KWQWDQ>VdwKiW+Q)kaNamD`Qy#c6e}e!02_)EkjMLyVdER&a0e(w#PCNyJ!c zWpT_|=;T_2*2mfL0b-2%LJn^hEa2&{{dr4neI>MCYk+_`LdOW(t<^agm{!~vJ2d4U z%Xz4gG{_Dis}}@!bErOW(|KV<%N@d}U~o`F-FKV&p!s1_dvImFw9lUy-#^F)AyulI zfjlL`zOJI_0^I)&o4A<mWD5<)gYc1E3Zsr$(X?lc=c@fU)_cJ2sUy+HEZ#;J5<@Z? zwynQTDx{rzLXYlcrJn}howRTKN3DPfn<sXdzZQ2IytBqBrt;x+DAdP~AOF*ke0=%s z!$R8dw{vj~)VIAau!%0Bdgq=uhcK$BM91mXg}Ag^yRA-Bi&T(vk87k#tU=Sw6S_;c z3!$Zz@)((?_FNNI?B>I#ep@MKUV&Cxl(S=-usU76L>0~Pf`l}n)jcqocW3&%_XNc& zNf2s8z2x079IYShItfWYuNsqEtG15C#h=aKRJGT&X-b0I*tjFmX;M!{6V$mbIYQc( zJqpK$Gq1e_e_sl$03wc)yIeE44gnKl4WpyqRzJ!zEL63)-8cRS@8ne+>jxzmzC6|o ztvKrIu`WhM$Q4)d!|snC?>lN8=z;opC2JrbJwB6R2<|cGs!8Qj=c-fGeIHyX%!X+i z6)&Tco=7a`UM#0D9tL|=Hm^W-VQVARa55X4nDh4A&CfbZx6P=I4kp^h*M~Do@1@kl z$54O4#lFo(+H@{djRx>CUoLqDFEFgva>3ulU2a<=xKQPNj^vl38eCBKo%Mh7drYws z=3OQ)$%;j0Z-imZYt8ZQQhS$bHDht2Jx;Q&hsD;cz>6U(<e>JF#c_-CI8frI?%Q(B zo0~p$MOd-Xbnjs6w)I_As1)@YTqwBE+BTfImIwZBGx%ER89sP4d@U%X`v$Z;(8@#x z${f%`8yB50M?PK}%^5p#v}*D<Ox;MKk{hO}6eoII;(#Xi<%|&NMqhMh8qeM(i+Pp} z1L8t=V*Ownb_U@T4{Q=`>QZ>_fEbC|BcE54Z<Hj!?c4h`%;iXvHs~trp3M&RpDhYY zmXd=LP0z-2(0BQ~WSPTQG5Urc=~AIYSS0gjmj9K(F=N&;bzgiwYn{^;MBR7njG}9K zu-lyLj`a7HE5pJz7n$~z9Y%5!suv1x*ARchOw@~~u>SwaC@$j@I=++&{_ac3-~|OQ zmCKUQrD2Cc*HkhrJRsI%ezA<&4Cbees)`!z4FDbO|7_3Xw!!Qev2@PWbgv@tJeO~S zUSdchf5Q`}uJnA6J#dyCkQDZqH~5TbyooR%%Xcp_{>hMkhE24?0P=ff(OFie=n2e` zR{#|B9L(UhJyipik^o3u87A4FleYgI6(i4_B+3{43pALVW;EDF-G3gZ_!0|fTJkKo zRQBIeq_QZRmAMoqK4|?|Q~)T9zNBgm)8hX--xt}7O79C4qq!_$LnVQ2X{{fj_7(V6 z;W<J8StizUlklL|SnV7kKzg&ic8mNcY@(*AnIgEFYTmg@)iXP?k&?s!+Zc6@q2Hle zJWu)COCt*gTqTed>d`9C4zM%J1q4b2_>pyYm)u%F62%bHv~MRKk&$E9G0dY+Vp1B^ zXz*Lc)^dK#nX;#L;Af=>P;DE*Cq7jI#SH+t|F{Oopl@Y*q)2Ipf=sibN#Lj-%zaEn zYx4!4G2kuJ*o>SEZKGco`L=lv2#~>I@Sl|Veyjwwx7+}4zi$?xb@eAi$iOmyi^OpO zUUE4sBQtbt%?7YXHiofj_`18)7?JD3itc7v@CoTZ{X~N2Y|Qe(w~xAbq|hj4i*b3p z5==1{V*tKVneXgcrmVljp#4Y5*=2)pd7$l*&=b66m-Zte+G7YG{Y(Auk5YpYnA<49 z0(^$@;gb+xZ7c1nb&3!m2XC*vBZcaf@G3s31<iJRS$}%y6r^)IbV{I}=)=~%K`a4n zPEV)kJKBeb3Jr4*h#Y)tZXMg=NC!UOqdsAQQAYXCW%a|C^PGXh*l8NvKcuJAawWV| zze59gJ^!l45Cd-CyVBH;|ES}G`L<7KGh(*3Y{1=n_-z!gB1fOa0}7}fFqNF`01LE_ zTS;K)<)xA1TZ?|XoWv$759N}<T5?RdCf9oFvj-Z;J`Mm(vn}gfhlh^<0S;J`PJtdA z>F4kM!}xXN6EQ&3OvA61qdS!z^Y|w93Hh2p@wxa6xsIA2wFW08U|tmT;(zZ$r&J61 z2VcF2%QQWu2-3GLZp<9O9O>SgvTnGB0ge_19FC@t!)1xVt7%w_qlLsR1I`%-e=(Z< z!V8)*7`$M;wT~5aMg!J3^T2r}nq>rVvG22_zW&j|<J*pUjiB%Sw7_5_HRi2Hp3HkC zFlit7FyRs)b<Ux;bFJb8Nolu6Zenu(9zm7gF9Mfj4ot;m9Ueb17vc9_1<-jgzhIvO z%i;IEx%aUc&2z?^p%?^?gxfQuPle#f-r{GJ$l~BZ-d*oGpJ)E!h}h#Tz_uiGxVZ+k zho##KGVrFP>;BD*Vd~4J?a0)H)-$L8$!Y$5|1j13%{Wj`A}YS!%%@uGaAN2n@%0hl z{iycfevQp!_WXk?R3Q8ywxCO$fB}?8G3dzPVR2;a!VW=z-xY%ji6ia*{+5VAWe8v@ z^%en;Mbx=h?t?rZ*pz|nC|>a)VGB~7j$lD_-Eh?oLE6uM0mNfaDOlA07eGLr>wF)0 z{tG}UTA6_W=}txl_(A-9u&WCDHynR5HdwiBFpUGZ6Q$RUdZ`v~d8V5!104hzLSSjg zT6Q`6b!E}6PRz23&zADu!xDh?1~w^NlVX|TvZzTDYM3ODC1xE=`}IVKgr?0#3bjbL zw;#9%m=<mHCk9PCh*#s6;VQ!yU}=2Zfct|!?!`U^3hu(Pk#k`Fb7lnW4&d&U!}Av0 zH69!f`h4~h*7&ip%3!ayvOvL+_|-8C(c|-gB@n$LuFMO(zaKIjLDh@|1ZhLoFpKJI z51V>c3_pKP!5Wpni0f_D{{VhWe`=YeZcPIT76FR3pZaE+FA$$_Ey%)yD=%90`Hy3> zM4MO&u**T)%G4Fu@~?Avp7N9Nu)P61&~hDNE{jENN8IWwk<4d*?3*nHs%DSaXhmGD zTNPCswqLXnJOzRK#V@B&#cnMAg>qR#RHZO7_w_!t@{#`M!7eQRt$Na!*Ub{xMRa0b z0pkotv<029G^2@m1wlAyIb^6bYYjw_@1u8eL2R?0oE)#nu{L`05IOTiE04B`wJg;e zD%IoI!4E|alU48MO38Mx9p%9$gVp5e+Y|R;Y~|~?x}W9K>ScYIB@5sEgL`q@W#D_U zcp_sBm5F`COJ>{gAZDov%bbLU<!w5!xdo2H(#)5CpqU4^5P<uMO<>J{F@-MA{&3wY zNJ@pvCZjIY?Y|b(RO17{*JMH3g0D9ys8s&8DBWy{j5U1g-+hy|zv!RLe96@`9pS$& z2xo0Cp754_rvduTOPxt#T(`vulFsM}VmtL)e=m$DRVi2fbp-r+(2MQvOFE#Klqf)o z^DjhQhkjOGhFv}e!fjaF?CU{QsocL(u~5?bH6q)<QCRB!K@@)FA%uK<5%;Mzj;n`x zKq%!*pQWoS+5t!AySV)7RgCt9kIkrRnV{mz9bUx#xY<rXNfM?`FAz69;izW`Cffh3 z6+*Wv^N}ZhKH*%yMm1RB$Q8g$aC*uihb_UI)v(%xjFoQK=jCN(x)Yd@hdi#pMkyWG z&LkIkEAxpZn5ZU{E%4|Ge+hS5iTJ$VYvih|&#lcBHB$!Lqm^CAyvKV#-1)cb>fHx{ zoB-^uhe0BbYd)L}yk&IFSWK800^6|6Qs2#eh@)<TJs1+}>v9ix5sFcqw?C}bsF$fZ zZU5jtG)~@V3L})gqWPExNL;PIWzsxO6iZ(4C5VG)MQJqTsTyhZLaPSk@Q|MITmlej zB(Q{RAFU3AYqImPe5P1hVt<U-LkvF2h2_zz!7fHH_klKFi2y#vNp)_oIP6`!Abv(% zaT{6nf?KOc6amC`69_zVwd(3?8?A3At)3mjh6k*6IPM7hYHlLC@-sU`D(tWgmh|#P ztGv<qG{j54RlaHO%s}bHsjY%QziwSXcT3&jFPCVIKW$b&4vv3e@NTujlH#CSz>~W5 zF|U3D4mA({ngd1ia&iT>ts!yq1E0#lX3grGHn4$jw$MsIS1^TsJBnmBWYl<Ujd5Eg zbOm;$<y{k3xPOx>YJc<TjjKv$qbNacy9I%#hs+sW-#<(UI5phudp2{{q2*nMLzCML zc483jd2#KJq3g{K10H{LO0OwsG7K<GD=b(y%oqK(htKs;vYeG^`=E7b*Xw2+_p0N> zkRk#2x-7h?4o$!Nc^q~#mTFSON36wv#)JfHBi7u;g>!Y>LyW`)L2NYve$pW+l2!9C zKQ*0d-8cKu{-^M=edDIg^`V~ew3Xmiem*A3WA!_*w|uDd2W$WZmgdI~y)`A@{683N BhExCm literal 0 HcmV?d00001 diff --git a/public/icon.png b/public/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df8c7d16cc6e36a20c5f16a8c19075070f21e0 GIT binary patch literal 1058 zcmV+-1l{|IP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH1Gh;;K~#7FwO7qb z<4_d7Z51r2L_|eJ4T>UyPQlH9LMtkC=`3f}zQNQdX!{18C$M>gaWyW4*3~SX0T&~P zMnx1|wElp_zs&cAwj?nzH%>ip(dORV?>oOaCnO{#kw_@*?d@wXFE8;>C=|mZ6-%ja zSFv=%Fn&iOk@CaC!)Cc$uFBjS@;i`BCe_Es$ISEdbL#f?R=K>q6qQOv)M_>H^z>w& zX=`f}U0q$Gv$Iq5^z?}S{(b>6MG($!ZEflAB0!CCaTXw%lamv{)d2L9j*bp7G&Cdz z2M0wo8ZB&ZZ?6X;K&_#1>G=3qJv=;=26iJdK0Ypnhlh2zX35PO5$A)|)zuix_j7-L z-vo!x#e0Rsudc2HT&VQ+_O4A#Ozhy!3r_;noZx$Vd+OQQnP`>V+}w!!`+Ehkk(`>E z+B`TosJ<dVpCh_|QS(-UH{|Z_u4#$U(NRs;^%|dt8wVJ009F}nvXV}xg{rF3=TA>h z1>=fXwhfwoVPU~Q&=~kBwE%1!9UU2^Qc3z9E`S@bwn5CM1z?)o`T4n-+p>~MrA+N{ znYm<zfk`W~wwMp-`<0cIz}i~{WCB|u9*<Xu9cFoDsszzKm&-N(M=%LZ(?k%V6%dqW zX%8dM6D+N=LUYsnZe)T8OFF+R0_NXE{gyT#1Fs<)8ykU4Z(aCy7{n%l3VkB;64K7* zd&Yuu-}y|u5eLL30jU=hMe)@>Xj+=svIMf(Y!jS7PED=*%<~`wd|e=ucGTQTFo+9w z84zzBE*6Wvmpe&jGMP8;WZ)B<mGBR{7%z#%Vz#tfU$^%btcFZQeiv918UmLH#Es{@ z?4H=d@%x{ipP%<+>KAxc(>n#kJnx;Gn=_V|ms4gbW?6KL1DUk*6SuTPn`Q=}+4iw} z1rrV5=x^+RoRZJy&A+gO&BV@qFQE&a@3B_|w_>w%1{0O3BU_OEXHomb#YJkb+E~E~ z1++^aPGDwchQ2Q}aGM<wy5QW%$cPSCh>sH7PxI@<dPRW#z{b+#<fKj?wOV*5EKKkv z>(pfHiV-Z;v9Yn8fq{V}4l38z*P<0d&8MfQ3H}A(f3172g9!r!gG32!n#$-$OD*0b z9N9RS(6x2Vb?2Fg+lzHeXx-i2QS|bkd69J%lmTXioSmIzHT(|nuK>SrJL@}~)~%7l z%#dR1#_kD2s=2JgDbmXvO#Ax!IH*?fjt1a@o7RB{ScoX$aCi+w5?G&v$9Rr2JLq_S c$d2d#0GmL(q2Sp)bN~PV07*qoM6N<$g4{9hg8%>k literal 0 HcmV?d00001 diff --git a/public/jacket.png b/public/jacket.png new file mode 100644 index 0000000000000000000000000000000000000000..4821536472743662266583e2ed172a4fa2c4a59d GIT binary patch literal 772153 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�ui*;+ZavA9!k6K0 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�?_>FEAtrl<@Pr%ncJh^um;{PgVa~+B|NLdPZh; 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%0DJLJsmqNPx!+=KvRI@99 zMu&f1@dE7@85T2P!Jrda*B5l&>cL<lJCdYKq37|@9cmi$FI{@xQJX91>!rXZpS0G) z18K#3SNx%Sy3aR!1XIV-^Pjhig>0sOi=MkxyF!Mcb7U4pyJB1|j`_J)yr)hmMYB8R zBgb`n&yo;{p&f?3<XF*=0ITW={Q9B4nei=#J7C2W{&p4C-q#c}#b=mFBhg92D#8Br zd3rH4WFFmaPyLW_S4lS=@1B2(cI_pT$G5JhM%L{zi`MVLW{vohWvxQ)H_)cA3(o&} zwPUz>{Wp+=DP8dOsu%2(vfmqep9vs~M1`q^IkwL}_^CsYfMOD8j}ewon2!@k3IT79 zI}|p0Km{^>NJfa@jdB5fK{~O_vrG^Hh^0AQlR@p_61(eSK#3phS13fdb;6df`J7dS z5+L2&v{42bXLYBY6&V<ue6Nty5oH3i&J0eBuz5uFIpUq0Oqvt-;_?R-(d@v0t$fDj zk?o)Cd(Gcpi-g|7+bF#6PgJrQxhf|ihJpgFJ(0!A2NO>RYkl-uVAU@}i2eZhBm3-` zr<^3|ml3F^YHeEmEHDS4q?iT;wq(g8(FZ7TU3S_uZ!nQfa;q?jnX7{A-cysihbLt< zXeyH)p&!vNo$6@5o(&QiN=qJg87F*`_m*-v3kDZ_JF-uxF4FQA4&LKB891l&olp&- zh*IrDG?WrMu$K&&D?cdNRE`|Ar}@QF7$p$@M{J5q5{AJoa$zcoWfY(GdULD)0w};= z!?3fih%e2FOwe^bC$lVtgAYkuz`q{{aFloqoLCeiHYg0X(dSBxXi6_{_PwK!0^`HA zhG^LzrW6f^Zqv;Ni192DoMzXrM`-F%1Y=NsEpu!B1xh5Ehu0D}BGZ>&m>nUXH5Y2A z05e+|6ST;C=6dNn_(F=uJ24l^n!$gGgcg$Ajm>b>bswerZ4k)SE%=1;jj1QQa=U!_ z#iby+%EmI1r63%3F>27AYJuF8-g$|i9#w4(w!JDSP-b)P0B&T9GXPVdb=!R2O4QZv z0rga@eWPrI_jE%~%j1=rU%BKmSa<2e;4AsEsbW;{Z-WrqY^Rba-&u`<8Ws_);FLec z?+q-d$b>vQEIC{rhJs1hikI!+Y~QEP_P4g{^%$;Ze<2e^x~^4sjs>b_>u`SxLaz7X zGh7ZQcphO!kVk#@?q%^~RmYoF_^u_<Skycw>7SLcLtXsFW-NWW5c<2$$%y2inWvUP zg0cFc*S`9mTG&^wHQ=d%<19$YS}L9xVeqLU_4cJ9R@6bFxl2imtZL$^ZaK0tX)6h* zlYO{&(f=XMS<wc6|FiB(By6nvy+t&lUK+((e-8|K8k*VDkcEj+7%*T!&~S%LCur(c z^uf{5g(1dY{35UL7`(@tj6C_YuXUe#GW;E$0}?c=4vlm^%wK?g9@$~?EjF)G{UWI- zduU>agB3lh1wyiN&s2NYpvjX~_Y?{Vx<GN{F_~F(Jmvt^X?YlGE{gPS5dn%K8_1jU z@n)6bOvM!Ge-#uk&xrkEc}Et=X`z3&J9Y(9FxG&qI|0<G?BKdiF2ikZ88aZc#5wmh z4c5#a!kX-;99Vd@@`q+t@izxLsR`t?6AS;Iut<zMx*zE?RRv6ik>Xt|bnA^cKwQR+ zol*Y07x9)V5gY{<Z~8)1nlKmd-zy$FTLL(D;OeL1{1Wb>O%qbQ>rR>~bGi@azRBhL z<M=_}=TS75QWo338WKqn*_AJaqnLhgx2u@cZ#*36<dy!FP%B~7Kvf^EmYCgi-O9;T z_5vdxFlr${4e;s6#MnF1*&`+<k_-^+@Z-DaZ0_7N-(u|Yj#P0c8e9*a0Ke;O(`e_0 zU;<3LYdNT1p8A?xck0=Nv>jGxCT+^+Q)B&ex?<K}lNVWzR8tD4mnK;zzn-w!L^i=y z*(7(~#P4@fM3e4%kBj{T@U?nhoRG5*&a$(w3(3TecP4tC@fS^8wjCI4RF!+kbD8T* zR)6@Pvlwg&n9++hWQ+$b7Pd@BJtFy?xzt7~w6i!W(CK6~UC_RXuAvf*Dll(C1J~Op z-X4sSu@yg^XDUj6?wgnQC+!O!pRf5UcfA;gE}LLTRAmiSQRcW*lDA7PWu&qDerhEF z8CKd=nTUiq<B77(6cUEJy~?R6*|DA=uJm(GXA=Y${u!b`Rc@g4ZB-_iFV+Y(f_ZAx z;g+mbY>7K2Q3HON#${;_Y_2avbctc#1bW9HXSV~;N0YrX@ADtdgDsv;Wd9q|*iORB zZ;ART=U^)|a&c8E$+fokK_+>=ccveF(f8iI<5>NnQ_MHYR?@}N4v9i3R3sunWS>uP zGt~Wtektxg0{!Q);bp}XO+g{;I=?tYI>bl5vgjW&L^edWOrSwfMcdX6Fk(f8kAPm! z6P$QB*wT~WY51rFO5Lj8P)Z=5_X?GmTmpO>?M>rTq3S|lS^ZIlcg=EX)czc#)mS9- z(woypAG6Hm)Y%l!mf6V>*|NXqyhf%ogg3Ya!L3v0$}#%rmPN3oa|+kohvU$hDJ8!= zeuc=R;~~`)%7yu?wk~|>&#SNsO+o6x%&+?!n*nyL@TSdl|I68>^j8)8cw`(;M=_lZ zt<H!<>T%g#Bhla={@e}P4yw&xtKJBj;%~5p1d3#oQ>M8_&`*YEe%RwIF0TFkzR&uc z6Dij<eU#;mx~FDGJ{0*}eZoj@7E6i<mzp@yMY@RFPU~>nW?wUccTL-iVSl-<cWu&a z|GRd?z_B)^bFdZZoz;szB`-#B3}>vnvjeTxG6xRWA{*I%zHVSyf9Z~!LEyyX;_n;w z@O^&z-l(%^J(J&`xn{a3dJ&$2i9}3>Nun0|I{g&R@4ArU0}C}#)$_+bzi7f=DKix3 zq+fzNOVO6;rYcPl1%~6>jqw&4C+7RzDf-`Q$7Yk(<V)h&$^hXe=;k~EuQm5yLNF`y z-!<Cj1g$gZe6uy%HUD;w>}HwULz12fs0H-tler=1I!+W}-4cvW{<RbL68p7?YI^&x ze=r6wG~@<QZ22*q?P+b#Y~=mn^B9;7Km>Jaqkh!pHvWr-S8SLfEzP`RH{}ICZEs(b z4*F)e@-q97Gtrk&&B7A<l5~E2-gpYKxr{YW*j2sNE?%Ms7`Z6KV1Nc+){)kC*4v}G z?#9gu>T#eh3FLeZ608>3RVbxbSSd}`fwsE`g|+&jhIkzPx4^VR>Ua-8CF|*D%EiGN zekXH)kA1+Lk17)TA?9MCE8v2uI%%0D?*vCoyXGg$ANa7BkgUu`!8K@+&5{2iOnkzj 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%0Ahl-oT2>?7ny&J2FU5a&P2il!@XX%Ia^1=g2{@ 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ȵWkmSqHV(<q>1q#qMZUCM18rEHu6jz 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 literal 0 HcmV?d00001 diff --git a/public/product-img-placeholder.svg b/public/product-img-placeholder.svg new file mode 100644 index 000000000..fbb43bb62 --- /dev/null +++ b/public/product-img-placeholder.svg @@ -0,0 +1,7 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800"> + <defs/> + <g fill="none" fill-rule="nonzero"> + <path fill="#EAEAEA" d="M0 0h800v800H0z"/> + <path fill="#FFF" d="M366.333 365.833c0 5.695-1.993 10.535-5.979 14.521-3.986 3.986-8.826 5.98-14.52 5.98-5.695 0-10.535-1.994-14.522-5.98-3.986-3.986-5.979-8.826-5.979-14.52 0-5.695 1.993-10.535 5.98-14.522 3.986-3.986 8.826-5.979 14.52-5.979 5.695 0 10.535 1.993 14.521 5.98 3.986 3.986 5.98 8.826 5.98 14.52zm109.334 41v47.834H325.333v-20.5L359.5 400l17.083 17.083 54.667-54.666 44.417 44.416zm10.25-75.166H315.083c-.925 0-1.726.338-2.402 1.014-.676.676-1.014 1.477-1.014 2.402v129.834c0 .925.338 1.726 1.014 2.402.676.676 1.477 1.014 2.402 1.014h170.834c.925 0 1.726-.338 2.402-1.014.676-.676 1.014-1.477 1.014-2.402V335.083c0-.925-.338-1.726-1.014-2.402-.676-.676-1.477-1.014-2.402-1.014zM503 335.083v129.834c0 4.698-1.673 8.72-5.018 12.065-3.346 3.345-7.367 5.018-12.065 5.018H315.083c-4.698 0-8.72-1.673-12.065-5.018-3.345-3.346-5.018-7.367-5.018-12.065V335.083c0-4.698 1.673-8.72 5.018-12.065 3.346-3.345 7.367-5.018 12.065-5.018h170.834c4.698 0 8.72 1.673 12.065 5.018 3.345 3.346 5.018 7.367 5.018 12.065z"/> + </g> +</svg> diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 000000000..bb792da42 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,22 @@ +{ + "name": "Next.js Commerce", + "short_name": "Next.js Commerce", + "description": "Next.js Commerce -> https://www.nextjs.org/commerce", + "display": "standalone", + "start_url": "/", + "theme_color": "#fff", + "background_color": "#000000", + "orientation": "portrait", + "icons": [ + { + "src": "/icon-192x192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "/icon-512x512.png", + "type": "image/png", + "sizes": "512x512" + } + ] +} \ No newline at end of file diff --git a/public/slider-arrows.png b/public/slider-arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..0740919c974cb8e6c1f9cd87f29a9e4995d6c9a1 GIT binary patch literal 1739 zcmV;+1~mDJP)<h;3K|Lk000e1NJLTq004*p002M;1^@s6!2v&u00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH24G1<K~#7F?Ok0` zB1sTV5PeW0Rv#qvY48Ngo<Kao><z{}f$j;GIl<xyMsMJpKs<rW3DgK9{15R#9|UB+ z533l47>91?`spsdh>C8sq^mx&va+(XvT|Y=mzS62xw*OO>+5SJm&<)XDdWe>DCLo= zXDF>+ugB{*lqUYBxxT)BCK-nB{N%&{Zf|d^-EQ~qd_MmXAD7YT20GTj{Ub^fziW+l zj6~s5#@~>f3a)=D()jBJt_Q2Ds}0Ej(!@_<0&;qKx?C(4cW}Fl&Nfkw(dffcsnnDy zaC380!DSQQw@WfWOs(B+AE!;Tq?Mnk1w?lo4cx}Z2BiN0jcbSjkPH%`M&5p>)7kS~ zP#p482R{c+`MJNp-+{V(xVpNklL)Z{s@v=9>wOS%dUtpCNjyas_?bw9D8uRt?=d3& zaV4cg?I@!iTfS(Mp!wmbpk!iH?20E~TQFk0Xj9PqKwbXN2Puo%D=4*kiZ=cyju13I z7!_Yoj%?1Qaq;l*u*^2HtzsEL^Mfxuq0u8Lfiloe#1c}<&ygenN?V#buc1gVu1SLC zhx1iplI8$xJM987grNDMHBO_(=Q(v8IOm$O-h<|c7B81-K3d~(p{@5M`w~1qzOCb@ z1^bfZR1h>jsJNZxdG$T8Pf7e!gXSkos&f>oZx7Sh3?cH9AO27%6!<#2k;Nb#)u)5S z#l?xWNYMOf3CiN=(9l-<Bw8d?eg+zZVQ;t`W;w)fWo4y>%kd;yBzS%}x2ou*OamIA zN=+a!5i~#iAytb60_8!hMy($*Km92tpU-didc8df1dIn|&~ViHA@kE0kX$ae2@)C- z2-@xTp^Dp#grND+u2yjXNGgMQop>apu1GxK$4LN`<_Ch3XC(ADu?*Gmy1Z=?vJUP= zQ7e<*!WBOXj2W)E5E9K#0r%W|Gu7UVxKJIgp?t=(YvKT$XSwkxLRIVhXyCbZw37pf zLc-6V#S%0>1@6$ogZIS}d=L%=uKCO3D%s{|6y%7)A@+r&&rco?Eu%b&1$ZPJ^78W1 z#6SPTxOz7Ec@K&!3Wl}mM)SidX1UYpoQYxhBpd|hSB{V<_Ky{Q#=*8G8Sn#ZwI_x_ z;pn}gCLSS5-)-;{2joz3X<U=A?*%c8A<aRF+{EWNu@qlvs7Z#wr7SLyopwW@pgfx9 zCokrq=kL_UZW_iU+h1GiYMxU|Q;apW7zZhxVysQq{l43Zkn&APbadFbdOk&v*%S`V z4{eYZELP*H%HewcJ(T5#s{S3U@G}k$R)J-dRsjz?!^7!OH0~|*Nl2K=37*39arJES z^B!Ed2sA$hJp3Ft)<%d&LK4Y^ZkwN9Jl~c7sLu~qF(j!f7BS)(bn-TrE_6&CQ8sv6 z=SRb#a18h<bh}-?wKKMV^*sz}5+~ra0T1cex3sSKQJ{<9Ul+chpZEzS-csY@;-V5K z#v^2Yw4>}RBxVwCUMjJ$uux^ZLySKOmY=?WK#d+UtWLtg4inEttvusL-a^dcM0%$c zai<rJQ280Wi(%9@$|uP<=I7_RYN|<0gv!rAKrrtxyset%gec=c_c2uGNBA|4B_=}U zXCNSI+ucF2SoG?JT9RNMb83P~wolIZkwKcoOm0w4BGb@}A4xtNk1t@KK)}>C#Ec(F zE*p<8&<W=xA%w)wFC)sBfF8!mPF9k%p+CDYytX7E%=nRkDou5oN4DKm!nqkg(pRPR zv?q#%>a2+&%=i&|DXo)+trXcae%`+9C`}~jlNZDin9M(`{6yOJP%4$S;6Tawe%ytc zQ;*nIwplCz&-!b|kMz}P&DT7kItrWT!-*rz_z}O3|I+a37_hAIGx4E@@Y^3T;@gu$ z`<xygIEooR3d~#1(L$rgrds7(%5zTmUc_gQW)}FFYHuzKoqc-XxHW(g(8@YC7Q4xS z9WKq5mX=QN+{dS<r;W9>HE%a}YkqM1m{xugJDOdovnoUNc|<tw>riXQNgO@S7zM^+ z;3M;e?L9v~*EcpcqU?(E25IFdF##C{6VEcYC~h}N2G6R;Jwxc3wWh^{ETi+GB9KeO z3a)>k4!?thwlEqPG<<04NORjr6F)`-WEjd|qgt(SGY(Ta$y?fj@<`P)l$J8=&QZ6? hJt<kvjZXN^&v)=q!+0QJ$O-@e002ovPDHLkV1h*+Llyu4 literal 0 HcmV?d00001 diff --git a/public/vercel.svg b/public/vercel.svg new file mode 100644 index 000000000..c0a8ee464 --- /dev/null +++ b/public/vercel.svg @@ -0,0 +1,9 @@ +<svg width="89" height="20" viewBox="0 0 89 20" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path d="M11.5625 0L23.125 20H0L11.5625 0Z" fill="currentColor"/> + <path d="M49.875 10.625C49.875 7.40625 47.5 5.15625 44.0937 5.15625C40.6875 5.15625 38.3125 7.40625 38.3125 10.625C38.3125 13.7812 40.875 16.0937 44.4062 16.0937C46.3438 16.0937 48.0938 15.375 49.2188 14.0625L47.0938 12.8437C46.4375 13.5 45.4688 13.9062 44.4062 13.9062C42.8438 13.9062 41.5 13.0625 41.0312 11.7812L40.9375 11.5625H49.7812C49.8438 11.25 49.875 10.9375 49.875 10.625ZM40.9062 9.6875L40.9688 9.5C41.375 8.15625 42.5625 7.34375 44.0625 7.34375C45.5938 7.34375 46.75 8.15625 47.1562 9.5L47.2188 9.6875H40.9062Z" fill="currentColor"/> + <path d="M83.5313 10.625C83.5313 7.40625 81.1563 5.15625 77.75 5.15625C74.3438 5.15625 71.9688 7.40625 71.9688 10.625C71.9688 13.7812 74.5313 16.0937 78.0625 16.0937C80 16.0937 81.75 15.375 82.875 14.0625L80.75 12.8437C80.0938 13.5 79.125 13.9062 78.0625 13.9062C76.5 13.9062 75.1563 13.0625 74.6875 11.7812L74.5938 11.5625H83.4375C83.5 11.25 83.5313 10.9375 83.5313 10.625ZM74.5625 9.6875L74.625 9.5C75.0313 8.15625 76.2188 7.34375 77.7188 7.34375C79.25 7.34375 80.4063 8.15625 80.8125 9.5L80.875 9.6875H74.5625Z" fill="currentColor"/> + <path d="M68.5313 8.84374L70.6563 7.62499C69.6563 6.06249 67.875 5.18749 65.7188 5.18749C62.3125 5.18749 59.9375 7.43749 59.9375 10.6562C59.9375 13.875 62.3125 16.125 65.7188 16.125C67.875 16.125 69.6563 15.25 70.6563 13.6875L68.5313 12.4687C67.9688 13.4062 66.9688 13.9375 65.7188 13.9375C63.75 13.9375 62.4375 12.625 62.4375 10.6562C62.4375 8.68749 63.75 7.37499 65.7188 7.37499C66.9375 7.37499 67.9688 7.90624 68.5313 8.84374Z" fill="currentColor"/> + <path d="M88.2188 1.75H85.7188V15.8125H88.2188V1.75Z" fill="currentColor"/> + <path d="M40.1563 1.75H37.2813L31.7813 11.25L26.2813 1.75H23.375L31.7813 16.25L40.1563 1.75Z" fill="currentColor"/> + <path d="M57.8438 8.0625C58.125 8.0625 58.4062 8.09375 58.6875 8.15625V5.5C56.5625 5.5625 54.5625 6.75 54.5625 8.21875V5.5H52.0625V15.8125H54.5625V11.3437C54.5625 9.40625 55.9062 8.0625 57.8438 8.0625Z" fill="currentColor"/> +</svg> diff --git a/tailwind.config.js b/tailwind.config.js index 29f406734..1ee8cad1d 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,26 +1,66 @@ module.exports = { future: { - removeDeprecatedGapUtilities: true, + purgeLayersByDefault: true, + applyComplexClasses: true, }, - purge: [ - "./components/**/*.{js,ts,jsx,tsx}", - "./pages/**/*.{js,ts,jsx,tsx}", - "./ui/**/*.{js,ts,jsx,tsx}", - ], - theme: { - extend: { - colors: { - "accent-1": "#FAFAFA", - "accent-4": "#888", - violet: "#7928CA", - pink: "#FF0080", - cyan: "#50E3C2", + purge: { + content: [ + './pages/**/*.{js,ts,jsx,tsx}', + './components/**/*.{js,ts,jsx,tsx}', + ], + options: { + safelist: { + standard: ['outline-none'], }, }, }, - variants: {}, - plugins: [require("@tailwindcss/ui")], - experimental: { - applyComplexClasses: true, + theme: { + extend: { + maxWidth: { + '8xl': '1920px', + }, + colors: { + primary: 'var(--primary)', + 'primary-2': 'var(--primary-2)', + secondary: 'var(--secondary)', + 'secondary-2': 'var(--secondary-2)', + hover: 'var(--hover)', + 'hover-1': 'var(--hover-1)', + 'hover-2': 'var(--hover-2)', + 'accents-0': 'var(--accents-0)', + 'accents-1': 'var(--accents-1)', + 'accents-2': 'var(--accents-2)', + 'accents-3': 'var(--accents-3)', + 'accents-4': 'var(--accents-4)', + 'accents-5': 'var(--accents-5)', + 'accents-6': 'var(--accents-6)', + 'accents-7': 'var(--accents-7)', + 'accents-8': 'var(--accents-8)', + 'accents-9': 'var(--accents-9)', + violet: 'var(--violet)', + 'violet-light': 'var(--violet-light)', + pink: 'var(--pink)', + cyan: 'var(--cyan)', + blue: 'var(--blue)', + green: 'var(--green)', + red: 'var(--red)', + }, + textColor: { + base: 'var(--text-base)', + primary: 'var(--text-primary)', + secondary: 'var(--text-secondary)', + }, + boxShadow: { + 'outline-normal': '0 0 0 2px var(--accents-2)', + magical: + 'rgba(0, 0, 0, 0.02) 0px 30px 30px, rgba(0, 0, 0, 0.03) 0px 0px 8px, rgba(0, 0, 0, 0.05) 0px 1px 0px', + }, + lineHeight: { + 'extra-loose': '2.2', + }, + scale: { + 120: '1.2', + }, + }, }, -}; +} diff --git a/tsconfig.json b/tsconfig.json index d8d1fa01c..e20f37099 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "baseUrl": ".", - "target": "es5", + "target": "esnext", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, @@ -15,10 +15,17 @@ "isolatedModules": true, "jsx": "preserve", "paths": { + "@lib/*": ["lib/*"], + "@utils/*": ["utils/*"], + "@config/*": ["config/*"], + "@assets/*": ["assets/*"], "@components/*": ["components/*"], - "@assets/*": ["assets/*"] + "@commerce": ["framework/commerce"], + "@commerce/*": ["framework/commerce/*"], + "@framework": ["framework/shopify"], + "@framework/*": ["framework/shopify/*"] } }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "include": ["next-env.d.ts", "**/*.d.ts", "**/*.ts", "**/*.tsx", "**/*.js"], "exclude": ["node_modules"] } diff --git a/yarn.lock b/yarn.lock index 7208b6dd4..e53deb987 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,57 +2,6 @@ # yarn lockfile v1 -"@ampproject/toolbox-core@^2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-core/-/toolbox-core-2.6.0.tgz#9824d5f133d82106a9bf0774920843c69fa5c869" - integrity sha512-sDMnHj8WaX3tqJS5VsIHkeW98nq5WQ0C9RoFc1PPS3rmYIlS0vhAfHbrjJw6wtuxBTQFxccje+Ew+2OJ2D15kA== - dependencies: - cross-fetch "3.0.5" - lru-cache "6.0.0" - -"@ampproject/toolbox-optimizer@2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-optimizer/-/toolbox-optimizer-2.6.0.tgz#e1bde0697d0fb25ab888bc0d0422998abaf6bad1" - integrity sha512-saToXVopb15a6zKK6kW4B1N/sYZZddkECcqmfTotRxJ2DaLE+wFB6jgWLbaPkgHwvLPQyA2IjV9BHJ/KUFuGzg== - dependencies: - "@ampproject/toolbox-core" "^2.6.0" - "@ampproject/toolbox-runtime-version" "^2.6.0" - "@ampproject/toolbox-script-csp" "^2.5.4" - "@ampproject/toolbox-validator-rules" "^2.5.4" - abort-controller "3.0.0" - cross-fetch "3.0.5" - cssnano-simple "1.0.5" - dom-serializer "1.0.1" - domhandler "3.0.0" - domutils "2.1.0" - htmlparser2 "4.1.0" - https-proxy-agent "5.0.0" - lru-cache "6.0.0" - node-fetch "2.6.0" - normalize-html-whitespace "1.0.0" - postcss "7.0.32" - postcss-safe-parser "4.0.2" - terser "4.8.0" - -"@ampproject/toolbox-runtime-version@^2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-runtime-version/-/toolbox-runtime-version-2.6.0.tgz#c2a310840a6c60a7f5046d2ccaf45646a761bd4f" - integrity sha512-wT+Ehsoq2PRXqpgjebygHD01BpSlaAE4HfDEVxgPVT8oAsLzE4ywZgzI2VQZfaCdb8qLyO5+WXrLSoJXxDBo2Q== - dependencies: - "@ampproject/toolbox-core" "^2.6.0" - -"@ampproject/toolbox-script-csp@^2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-script-csp/-/toolbox-script-csp-2.5.4.tgz#d8b7b91a678ae8f263cb36d9b74e441b7d633aad" - integrity sha512-+knTYetI5nWllRZ9wFcj7mYxelkiiFVRAAW/hl0ad8EnKHMH82tRlk40CapEnUHhp6Er5sCYkumQ8dngs3Q4zQ== - -"@ampproject/toolbox-validator-rules@^2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-validator-rules/-/toolbox-validator-rules-2.5.4.tgz#7dee3a3edceefea459d060571db8cc6e7bbf0dd6" - integrity sha512-bS7uF+h0s5aiklc/iRaujiSsiladOsZBLrJ6QImJDXvubCAQtvE7om7ShlGSXixkMAO0OVMDWyuwLlEy8V1Ing== - dependencies: - cross-fetch "3.0.5" - "@ardatan/aggregate-error@0.0.6": version "0.0.6" resolved "https://registry.yarnpkg.com/@ardatan/aggregate-error/-/aggregate-error-0.0.6.tgz#fe6924771ea40fc98dc7a7045c2e872dc8527609" @@ -60,485 +9,226 @@ dependencies: tslib "~2.0.1" -"@babel/code-frame@7.10.4", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.5.5": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== dependencies: "@babel/highlight" "^7.10.4" -"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" - integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== dependencies: - browserslist "^4.12.0" - invariant "^2.2.4" - semver "^5.5.0" - -"@babel/core@7.7.7": - version "7.7.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.7.tgz#ee155d2e12300bcc0cff6a8ad46f2af5063803e9" - integrity sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.7" - "@babel/helpers" "^7.7.4" - "@babel/parser" "^7.7.7" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - convert-source-map "^1.7.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" + "@babel/highlight" "^7.12.13" "@babel/core@^7.0.0": - version "7.11.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651" - integrity sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg== + version "7.12.16" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.16.tgz#8c6ba456b23b680a6493ddcfcd9d3c3ad51cab7c" + integrity sha512-t/hHIB504wWceOeaOoONOhu+gX+hpjfeN6YRBT209X/4sibZQfSF1I0HFRRlBe97UZZosGx5XwUg1ZgNbelmNw== dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.6" - "@babel/helper-module-transforms" "^7.11.0" - "@babel/helpers" "^7.10.4" - "@babel/parser" "^7.11.5" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.11.5" - "@babel/types" "^7.11.5" + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.12.15" + "@babel/helper-module-transforms" "^7.12.13" + "@babel/helpers" "^7.12.13" + "@babel/parser" "^7.12.16" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.12.13" + "@babel/types" "^7.12.13" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" json5 "^2.1.2" lodash "^4.17.19" - resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.11.5", "@babel/generator@^7.11.6", "@babel/generator@^7.5.0", "@babel/generator@^7.7.7": - version "7.11.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" - integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA== +"@babel/generator@^7.12.13", "@babel/generator@^7.12.15", "@babel/generator@^7.5.0": + version "7.12.15" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.15.tgz#4617b5d0b25cc572474cc1aafee1edeaf9b5368f" + integrity sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ== dependencies: - "@babel/types" "^7.11.5" + "@babel/types" "^7.12.13" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" - integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== +"@babel/helper-annotate-as-pure@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" + integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.13" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" - integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== +"@babel/helper-create-class-features-plugin@^7.12.13": + version "7.12.16" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.16.tgz#955d5099fd093e5afb05542190f8022105082c61" + integrity sha512-KbSEj8l9zYkMVHpQqM3wJNxS1d9h3U9vm/uE5tpjMbaj3lTp+0noe3KPsV5dSD9jxKnf9jO9Ip9FX5PKNZCKow== dependencies: - "@babel/helper-explode-assignable-expression" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-member-expression-to-functions" "^7.12.16" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" -"@babel/helper-builder-react-jsx-experimental@^7.10.4", "@babel/helper-builder-react-jsx-experimental@^7.11.5": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.11.5.tgz#4ea43dd63857b0a35cd1f1b161dc29b43414e79f" - integrity sha512-Vc4aPJnRZKWfzeCBsqTBnzulVNjABVdahSPhtdMD3Vs80ykx4a87jTHtF/VR+alSrDmNvat7l13yrRHauGcHVw== +"@babel/helper-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" + integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-module-imports" "^7.10.4" - "@babel/types" "^7.11.5" + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.12.13" -"@babel/helper-builder-react-jsx@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz#8095cddbff858e6fa9c326daee54a2f2732c1d5d" - integrity sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg== +"@babel/helper-get-function-arity@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" + integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.13" -"@babel/helper-compilation-targets@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" - integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== +"@babel/helper-member-expression-to-functions@^7.12.13", "@babel/helper-member-expression-to-functions@^7.12.16": + version "7.12.16" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.16.tgz#41e0916b99f8d5f43da4f05d85f4930fa3d62b22" + integrity sha512-zYoZC1uvebBFmj1wFAlXwt35JLEgecefATtKp20xalwEK8vHAixLBXTGxNrVGEmTT+gzOThUgr8UEdgtalc1BQ== dependencies: - "@babel/compat-data" "^7.10.4" - browserslist "^4.12.0" - invariant "^2.2.4" - levenary "^1.1.1" - semver "^5.5.0" + "@babel/types" "^7.12.13" -"@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.10.5": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" - integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== +"@babel/helper-module-imports@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" + integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-member-expression-to-functions" "^7.10.5" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/types" "^7.12.13" -"@babel/helper-create-regexp-features-plugin@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" - integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== +"@babel/helper-module-transforms@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.13.tgz#01afb052dcad2044289b7b20beb3fa8bd0265bea" + integrity sha512-acKF7EjqOR67ASIlDTupwkKM1eUisNAjaSduo5Cz+793ikfnpe7p4Q7B7EWU2PCoSTPWsQkR7hRUWEIZPiVLGA== dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-regex" "^7.10.4" - regexpu-core "^4.7.0" - -"@babel/helper-define-map@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" - integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/types" "^7.10.5" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-simple-access" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.12.11" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.12.13" + "@babel/types" "^7.12.13" lodash "^4.17.19" -"@babel/helper-explode-assignable-expression@^7.10.4": - version "7.11.4" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz#2d8e3470252cc17aba917ede7803d4a7a276a41b" - integrity sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ== +"@babel/helper-optimise-call-expression@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" + integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.13" -"@babel/helper-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" - integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== +"@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.8.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.12.13.tgz#174254d0f2424d8aefb4dd48057511247b0a9eeb" + integrity sha512-C+10MXCXJLiR6IeG9+Wiejt9jmtFpxUc3MQqCmPY8hfCjyUGl9kT+B2okzEZrtykiwrc4dbCPdDoz0A/HQbDaA== + +"@babel/helper-replace-supers@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz#00ec4fb6862546bd3d0aff9aac56074277173121" + integrity sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg== dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.12.13" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/traverse" "^7.12.13" + "@babel/types" "^7.12.13" -"@babel/helper-get-function-arity@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" - integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== +"@babel/helper-simple-access@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" + integrity sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.13" -"@babel/helper-hoist-variables@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" - integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.1" -"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" - integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== +"@babel/helper-split-export-declaration@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" + integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== dependencies: - "@babel/types" "^7.11.0" + "@babel/types" "^7.12.13" -"@babel/helper-module-imports@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" - integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== +"@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/helpers@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.13.tgz#3c75e993632e4dadc0274eae219c73eb7645ba47" + integrity sha512-oohVzLRZ3GQEk4Cjhfs9YkJA4TdIDTObdBEZGrd6F/T0GPSnuV6l22eMcxlvcvzVIPH3VTtxbseudM1zIE+rPQ== dependencies: - "@babel/types" "^7.10.4" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.12.13" + "@babel/types" "^7.12.13" -"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" - integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== +"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c" + integrity sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww== dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/template" "^7.10.4" - "@babel/types" "^7.11.0" - lodash "^4.17.19" - -"@babel/helper-optimise-call-expression@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" - integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" - integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== - -"@babel/helper-regex@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" - integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== - dependencies: - lodash "^4.17.19" - -"@babel/helper-remap-async-to-generator@^7.10.4": - version "7.11.4" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz#4474ea9f7438f18575e30b0cac784045b402a12d" - integrity sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-wrap-function" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-replace-supers@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" - integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.10.4" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-simple-access@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" - integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== - dependencies: - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-skip-transparent-expression-wrappers@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" - integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q== - dependencies: - "@babel/types" "^7.11.0" - -"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" - integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== - dependencies: - "@babel/types" "^7.11.0" - -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== - -"@babel/helper-wrap-function@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" - integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helpers@^7.10.4", "@babel/helpers@^7.7.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" - integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== - dependencies: - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" + "@babel/helper-validator-identifier" "^7.12.11" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@7.11.5", "@babel/parser@^7.0.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.5", "@babel/parser@^7.7.7": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" - integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== +"@babel/parser@7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.13.tgz#3ee7be4131fe657ba9143d5c5b3a9f253fdb75e9" + integrity sha512-z7n7ybOUzaRc3wwqLpAX8UFIXsrVXUJhtNGBwAnLz6d1KUapqyq7ad2La8gZ6CXhHmGAIL32cop8Tst4/PNWLw== -"@babel/plugin-proposal-async-generator-functions@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" - integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.10.4" - "@babel/plugin-syntax-async-generators" "^7.8.0" +"@babel/parser@^7.0.0", "@babel/parser@^7.12.13", "@babel/parser@^7.12.16": + version "7.12.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.16.tgz#cc31257419d2c3189d394081635703f549fc1ed4" + integrity sha512-c/+u9cqV6F0+4Hpq01jnJO+GLp2DdT63ppz9Xa+6cHaajM9VFzK/iDXiKK65YtpeVwu+ctfS6iqlMqRgQRzeCw== -"@babel/plugin-proposal-class-properties@7.10.4", "@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" - integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== +"@babel/plugin-proposal-class-properties@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.13.tgz#3d2ce350367058033c93c098e348161d6dc0d8c8" + integrity sha512-8SCJ0Ddrpwv4T7Gwb33EmW1V9PY5lggTO+A8WjyIwxrSHDUyBw4MtF96ifn1n8H806YlxbVCoKXbbmzD6RD+cA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-create-class-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-proposal-dynamic-import@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" - integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== +"@babel/plugin-proposal-object-rest-spread@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.13.tgz#f93f3116381ff94bc676fdcb29d71045cd1ec011" + integrity sha512-WvA1okB/0OS/N3Ldb3sziSrXg6sRphsBgqiccfcQq7woEn5wQLNX82Oc4PlaFcdwcWHuQXAtb8ftbS8Fbsg/sg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - -"@babel/plugin-proposal-export-namespace-from@7.10.4", "@babel/plugin-proposal-export-namespace-from@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" - integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" - integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.0" - -"@babel/plugin-proposal-logical-assignment-operators@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" - integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" - integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - -"@babel/plugin-proposal-numeric-separator@7.10.4", "@babel/plugin-proposal-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" - integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@7.11.0", "@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" - integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.12.13" -"@babel/plugin-proposal-optional-catch-binding@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" - integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== +"@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.10.4" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-proposal-optional-chaining@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" - integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA== +"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz#5df9962503c0a9c918381c929d51d4d6949e7e86" + integrity sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-proposal-private-methods@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" - integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" + integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" - integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-async-generators@^7.8.0": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.0.0", "@babel/plugin-syntax-class-properties@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" - integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-dynamic-import@7.8.3", "@babel/plugin-syntax-dynamic-import@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.4.tgz#53351dd7ae01995e567d04ce42af1a6e0ba846a6" - integrity sha512-yxQsX1dJixF4qEEdzVbst3SZQ58Nrooz8NV9Z9GL4byTE25BvJgl5lf0RECUf0fh28rZBb/RYTWn/eeKwCMrZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@7.10.4", "@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz#39abaae3cbf710c4373d8429484e6ba21340166c" - integrity sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0": version "7.8.3" @@ -547,505 +237,207 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== +"@babel/plugin-transform-arrow-functions@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.13.tgz#eda5670b282952100c229f8a3bd49e0f6a72e9fe" + integrity sha512-tBtuN6qtCTd+iHzVZVOMNp+L04iIJBpqkdY42tWbmjIT5wvR2kx7gxMBsyhQtFzHwBbyGi9h8J8r9HgnOpQHxg== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-optional-chaining@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== +"@babel/plugin-transform-block-scoped-functions@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" + integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-top-level-await@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" - integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== +"@babel/plugin-transform-block-scoping@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61" + integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-typescript@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz#2f55e770d3501e83af217d782cb7517d7bb34d25" - integrity sha512-oSAEz1YkBCAKr5Yiq8/BNtvSAPwkp/IyUnwZogd8p+F0RuYQQrLeRUzIQhueQTTBy/F+a40uS7OFKxnkRvmvFQ== +"@babel/plugin-transform-classes@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.13.tgz#9728edc1838b5d62fc93ad830bd523b1fcb0e1f6" + integrity sha512-cqZlMlhCC1rVnxE5ZGMtIb896ijL90xppMiuWXcwcOAuFczynpd3KYemb91XFFPi3wJSe/OcrX9lXoowatkkxA== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" - integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-async-to-generator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" - integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.10.4" - -"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" - integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.10.4": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" - integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" - integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-define-map" "^7.10.4" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" - integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== +"@babel/plugin-transform-computed-properties@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.13.tgz#6a210647a3d67f21f699cfd2a01333803b27339d" + integrity sha512-dDfuROUPGK1mTtLKyDPUavmj2b6kFu82SmgpztBFEO974KMjJT+Ytj3/oWsTUMBmgPcp9J5Pc1SlcAYRpJ2hRA== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" - integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== +"@babel/plugin-transform-destructuring@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.13.tgz#fc56c5176940c5b41735c677124d1d20cecc9aeb" + integrity sha512-Dn83KykIFzjhA3FDPA1z4N+yfF3btDGhjnJwxIj0T43tP0flCujnU8fKgEkf0C1biIpSv9NZegPBQ1J6jYkwvQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" - integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-duplicate-keys@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" - integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-exponentiation-operator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" - integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-transform-flow-strip-types@^7.0.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.4.tgz#c497957f09e86e3df7296271e9eb642876bf7788" - integrity sha512-XTadyuqNst88UWBTdLjM+wEY7BFnY2sYtPyAidfC7M/QaZnSuIZpMvLxqGT7phAcnGyWh/XQFLKcGf04CnvxSQ== + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.13.tgz#b439c43116dc60fb45b7efd2e1db91897b7c8f4b" + integrity sha512-39/t9HtN+Jlc7EEY6oCSCf3kRrKIl2JULOGPnHZiaRjoYZEFaDXDZI32uE2NosQRh8o6N9B+8iGvDK7ToJhJaw== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-flow" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-flow" "^7.12.13" -"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" - integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== +"@babel/plugin-transform-for-of@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.13.tgz#561ff6d74d9e1c8879cb12dbaf4a14cd29d15cf6" + integrity sha512-xCbdgSzXYmHGyVX3+BsQjcd4hv4vA/FDy7Kc8eOpzKmBBPEOTurt0w5fCRQaGl+GSBORKgJdstQ1rHl4jbNseQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" - integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== +"@babel/plugin-transform-function-name@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" + integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" - integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== +"@babel/plugin-transform-literals@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" + integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" - integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== +"@babel/plugin-transform-member-expression-literals@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" + integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-modules-amd@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" - integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== +"@babel/plugin-transform-modules-commonjs@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.13.tgz#5043b870a784a8421fa1fd9136a24f294da13e50" + integrity sha512-OGQoeVXVi1259HjuoDnsQMlMkT9UkZT9TpXAsqWplS/M0N1g3TJAn/ByOCeQu7mfjc5WpSsRU+jV1Hd89ts0kQ== dependencies: - "@babel/helper-module-transforms" "^7.10.5" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-module-transforms" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-simple-access" "^7.12.13" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@7.10.4", "@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" - integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== +"@babel/plugin-transform-object-super@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" + integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== dependencies: - "@babel/helper-module-transforms" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-replace-supers" "^7.12.13" -"@babel/plugin-transform-modules-systemjs@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" - integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.13.tgz#461e76dfb63c2dfd327b8a008a9e802818ce9853" + integrity sha512-e7QqwZalNiBRHCpJg/P8s/VJeSRYgmtWySs1JwvfwPqhBbiWfOcHDKdeAi6oAyIimoKWBlwc8oTgbZHdhCoVZA== dependencies: - "@babel/helper-hoist-variables" "^7.10.4" - "@babel/helper-module-transforms" "^7.10.5" - "@babel/helper-plugin-utils" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-modules-umd@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" - integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== +"@babel/plugin-transform-property-literals@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" + integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== dependencies: - "@babel/helper-module-transforms" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" - integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== +"@babel/plugin-transform-react-display-name@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz#c28effd771b276f4647411c9733dbb2d2da954bd" + integrity sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-new-target@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" - integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== +"@babel/plugin-transform-react-jsx@^7.0.0": + version "7.12.16" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.16.tgz#07c341e02a3e4066b00413534f30c42519923230" + integrity sha512-dNu0vAbIk8OkqJfGtYF6ADk6jagoyAl+Ks5aoltbAlfoKv8d6yooi3j+kObeSQaCj9PgN6KMZPB90wWyek5TmQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-jsx" "^7.12.13" + "@babel/types" "^7.12.13" -"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" - integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== +"@babel/plugin-transform-shorthand-properties@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" + integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" - integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== +"@babel/plugin-transform-spread@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.13.tgz#ca0d5645abbd560719c354451b849f14df4a7949" + integrity sha512-dUCrqPIowjqk5pXsx1zPftSq4sT0aCeZVAxhdgs3AMgyaDmoUT0G+5h3Dzja27t76aUEIJWlFgPJqJ/d4dbTtg== dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" -"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" - integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== +"@babel/plugin-transform-template-literals@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.13.tgz#655037b07ebbddaf3b7752f55d15c2fd6f5aa865" + integrity sha512-arIKlWYUgmNsF28EyfmiQHJLJFlAJNYkuQO10jL46ggjBpeb2re1P9K9YGxNJB45BqTbaslVysXDYm/g3sN/Qg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz#b5795f4e3e3140419c3611b7a2a3832b9aef328d" - integrity sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-react-jsx-development@^7.10.4": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.11.5.tgz#e1439e6a57ee3d43e9f54ace363fb29cefe5d7b6" - integrity sha512-cImAmIlKJ84sDmpQzm4/0q/2xrXlDezQoixy3qoz1NJeZL/8PRon6xZtluvr4H4FzwlDGI5tCcFupMnXGtr+qw== - dependencies: - "@babel/helper-builder-react-jsx-experimental" "^7.11.5" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-jsx" "^7.10.4" - -"@babel/plugin-transform-react-jsx-self@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz#cd301a5fed8988c182ed0b9d55e9bd6db0bd9369" - integrity sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-jsx" "^7.10.4" - -"@babel/plugin-transform-react-jsx-source@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.5.tgz#34f1779117520a779c054f2cdd9680435b9222b4" - integrity sha512-wTeqHVkN1lfPLubRiZH3o73f4rfon42HpgxUSs86Nc+8QIcm/B9s8NNVXu/gwGcOyd7yDib9ikxoDLxJP0UiDA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-jsx" "^7.10.4" - -"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz#673c9f913948764a4421683b2bef2936968fddf2" - integrity sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A== - dependencies: - "@babel/helper-builder-react-jsx" "^7.10.4" - "@babel/helper-builder-react-jsx-experimental" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-jsx" "^7.10.4" - -"@babel/plugin-transform-react-pure-annotations@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz#3eefbb73db94afbc075f097523e445354a1c6501" - integrity sha512-+njZkqcOuS8RaPakrnR9KvxjoG1ASJWpoIv/doyWngId88JoFlPlISenGXjrVacZUIALGUr6eodRs1vmPnF23A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-regenerator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" - integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" - integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-runtime@7.11.5": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.5.tgz#f108bc8e0cf33c37da031c097d1df470b3a293fc" - integrity sha512-9aIoee+EhjySZ6vY5hnLjigHzunBlscx9ANKutkeWTJTx6m5Rbq6Ic01tLvO54lSusR+BxV7u4UDdCmXv5aagg== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - resolve "^1.8.1" - semver "^5.5.1" - -"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" - integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" - integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" - -"@babel/plugin-transform-sticky-regex@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" - integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-regex" "^7.10.4" - -"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" - integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-typeof-symbol@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" - integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-typescript@^7.10.4": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.11.0.tgz#2b4879676af37342ebb278216dd090ac67f13abb" - integrity sha512-edJsNzTtvb3MaXQwj8403B7mZoGu9ElDJQZOKjGUnvilquxBA3IQoEIOvkX/1O8xfAsnHS/oQhe2w/IXrr+w0w== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.5" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-typescript" "^7.10.4" - -"@babel/plugin-transform-unicode-escapes@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" - integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-unicode-regex@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" - integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/preset-env@7.11.5": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.5.tgz#18cb4b9379e3e92ffea92c07471a99a2914e4272" - integrity sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA== - dependencies: - "@babel/compat-data" "^7.11.0" - "@babel/helper-compilation-targets" "^7.10.4" - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-proposal-async-generator-functions" "^7.10.4" - "@babel/plugin-proposal-class-properties" "^7.10.4" - "@babel/plugin-proposal-dynamic-import" "^7.10.4" - "@babel/plugin-proposal-export-namespace-from" "^7.10.4" - "@babel/plugin-proposal-json-strings" "^7.10.4" - "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" - "@babel/plugin-proposal-numeric-separator" "^7.10.4" - "@babel/plugin-proposal-object-rest-spread" "^7.11.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" - "@babel/plugin-proposal-optional-chaining" "^7.11.0" - "@babel/plugin-proposal-private-methods" "^7.10.4" - "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-class-properties" "^7.10.4" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.0" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.10.4" - "@babel/plugin-transform-arrow-functions" "^7.10.4" - "@babel/plugin-transform-async-to-generator" "^7.10.4" - "@babel/plugin-transform-block-scoped-functions" "^7.10.4" - "@babel/plugin-transform-block-scoping" "^7.10.4" - "@babel/plugin-transform-classes" "^7.10.4" - "@babel/plugin-transform-computed-properties" "^7.10.4" - "@babel/plugin-transform-destructuring" "^7.10.4" - "@babel/plugin-transform-dotall-regex" "^7.10.4" - "@babel/plugin-transform-duplicate-keys" "^7.10.4" - "@babel/plugin-transform-exponentiation-operator" "^7.10.4" - "@babel/plugin-transform-for-of" "^7.10.4" - "@babel/plugin-transform-function-name" "^7.10.4" - "@babel/plugin-transform-literals" "^7.10.4" - "@babel/plugin-transform-member-expression-literals" "^7.10.4" - "@babel/plugin-transform-modules-amd" "^7.10.4" - "@babel/plugin-transform-modules-commonjs" "^7.10.4" - "@babel/plugin-transform-modules-systemjs" "^7.10.4" - "@babel/plugin-transform-modules-umd" "^7.10.4" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" - "@babel/plugin-transform-new-target" "^7.10.4" - "@babel/plugin-transform-object-super" "^7.10.4" - "@babel/plugin-transform-parameters" "^7.10.4" - "@babel/plugin-transform-property-literals" "^7.10.4" - "@babel/plugin-transform-regenerator" "^7.10.4" - "@babel/plugin-transform-reserved-words" "^7.10.4" - "@babel/plugin-transform-shorthand-properties" "^7.10.4" - "@babel/plugin-transform-spread" "^7.11.0" - "@babel/plugin-transform-sticky-regex" "^7.10.4" - "@babel/plugin-transform-template-literals" "^7.10.4" - "@babel/plugin-transform-typeof-symbol" "^7.10.4" - "@babel/plugin-transform-unicode-escapes" "^7.10.4" - "@babel/plugin-transform-unicode-regex" "^7.10.4" - "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.11.5" - browserslist "^4.12.0" - core-js-compat "^3.6.2" - invariant "^2.2.2" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/preset-modules@0.1.4", "@babel/preset-modules@^0.1.3": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-react@7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.10.4.tgz#92e8a66d816f9911d11d4cc935be67adfc82dbcf" - integrity sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-transform-react-display-name" "^7.10.4" - "@babel/plugin-transform-react-jsx" "^7.10.4" - "@babel/plugin-transform-react-jsx-development" "^7.10.4" - "@babel/plugin-transform-react-jsx-self" "^7.10.4" - "@babel/plugin-transform-react-jsx-source" "^7.10.4" - "@babel/plugin-transform-react-pure-annotations" "^7.10.4" - -"@babel/preset-typescript@7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.10.4.tgz#7d5d052e52a682480d6e2cc5aa31be61c8c25e36" - integrity sha512-SdYnvGPv+bLlwkF2VkJnaX/ni1sMNetcGI1+nThF1gyv6Ph8Qucc4ZZAjM5yZcE/AKRXIOTZz7eSRDWOEjPyRQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-transform-typescript" "^7.10.4" - -"@babel/runtime@7.11.2", "@babel/runtime@^7.0.0", "@babel/runtime@^7.8.4": - version "7.11.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" - integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== +"@babel/runtime@7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.4", "@babel/template@^7.7.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" - integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== +"@babel/runtime@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.13.tgz#0a21452352b02542db0ffb928ac2d3ca7cb6d66d" + integrity sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw== dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/parser" "^7.10.4" - "@babel/types" "^7.10.4" + regenerator-runtime "^0.13.4" -"@babel/traverse@7.11.5", "@babel/traverse@^7.0.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5", "@babel/traverse@^7.7.4": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" - integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== +"@babel/template@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.5" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.11.5" - "@babel/types" "^7.11.5" + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/traverse@7.12.13", "@babel/traverse@^7.0.0", "@babel/traverse@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.13.tgz#689f0e4b4c08587ad26622832632735fb8c4e0c0" + integrity sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.12.13" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.19" -"@babel/types@7.11.5", "@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.4.4", "@babel/types@^7.7.4": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" - integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== +"@babel/types@7.12.13", "@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.13.tgz#8be1aa8f2c876da11a9cf650c0ecf656913ad611" + integrity sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ== dependencies: - "@babel/helper-validator-identifier" "^7.10.4" + "@babel/helper-validator-identifier" "^7.12.11" lodash "^4.17.19" to-fast-properties "^2.0.0" @@ -1063,21 +455,30 @@ resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== -"@fullhuman/postcss-purgecss@^2.1.2": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@fullhuman/postcss-purgecss/-/postcss-purgecss-2.3.0.tgz#50a954757ec78696615d3e118e3fee2d9291882e" - integrity sha512-qnKm5dIOyPGJ70kPZ5jiz0I9foVOic0j+cOzNDoo8KoCf6HjicIZ99UfO2OmE7vCYSKAAepEwJtNzpiiZAh9xw== +"@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: - postcss "7.0.32" - purgecss "^2.3.0" + lodash.get "^4" + make-error "^1" + ts-node "^9" + tslib "^2" -"@graphql-codegen/cli@^1.17.10": - version "1.17.10" - resolved "https://registry.yarnpkg.com/@graphql-codegen/cli/-/cli-1.17.10.tgz#efebf9b887fdb94dd26dbf3eb1950e832efcda0e" - integrity sha512-nQYbabB3aS3XArETJc/NrpUtlj/Dzh2KeDgvVRsc3zxopcudZTKj1dcTCOA/QZPSpbzALbZZ/1loBVVrMIe+Iw== +"@fullhuman/postcss-purgecss@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@fullhuman/postcss-purgecss/-/postcss-purgecss-3.1.3.tgz#47af7b87c9bfb3de4bc94a38f875b928fffdf339" + integrity sha512-kwOXw8fZ0Lt1QmeOOrd+o4Ibvp4UTEBFQbzvWldjlKv5n+G9sXfIPn1hh63IQIL8K8vbvv1oYMJiIUbuy9bGaA== dependencies: - "@graphql-codegen/core" "1.17.8" - "@graphql-codegen/plugin-helpers" "^1.17.9" + purgecss "^3.1.3" + +"@graphql-codegen/cli@^1.20.0": + version "1.20.1" + resolved "https://registry.yarnpkg.com/@graphql-codegen/cli/-/cli-1.20.1.tgz#3b42eddb4ddbfc6ad37d0a838267165f77342e14" + integrity sha512-jT5aMxIniER/gg0/sfx+BPmvI2ZAncQ6ZT/xkiFvXcYMiL9tDiAcVYJTmXcRdMTEIZnlzw3rhE4VPYiw1KqruQ== + dependencies: + "@graphql-codegen/core" "1.17.9" + "@graphql-codegen/plugin-helpers" "^1.18.2" "@graphql-tools/apollo-engine-loader" "^6" "@graphql-tools/code-file-loader" "^6" "@graphql-tools/git-loader" "^6" @@ -1087,19 +488,19 @@ "@graphql-tools/load" "^6" "@graphql-tools/prisma-loader" "^6" "@graphql-tools/url-loader" "^6" - "@graphql-tools/utils" "^6" + "@graphql-tools/utils" "^7.0.0" ansi-escapes "^4.3.1" - camel-case "^4.1.1" + camel-case "^4.1.2" chalk "^4.1.0" - chokidar "^3.4.2" + chokidar "^3.4.3" common-tags "^1.8.0" constant-case "^3.0.3" cosmiconfig "^7.0.0" debounce "^1.2.0" - dependency-graph "^0.9.0" + dependency-graph "^0.10.0" detect-indent "^6.0.0" glob "^7.1.6" - graphql-config "^3.0.2" + graphql-config "^3.2.0" indent-string "^4.0.0" inquirer "^7.3.3" is-glob "^4.0.1" @@ -1112,29 +513,29 @@ minimatch "^3.0.4" mkdirp "^1.0.4" pascal-case "^3.1.1" - request "^2.88.2" string-env-interpolation "^1.0.1" ts-log "^2.2.3" - tslib "~2.0.1" - upper-case "^2.0.1" + tslib "~2.1.0" + upper-case "^2.0.2" valid-url "^1.0.9" wrap-ansi "^7.0.0" - yargs "^16.0.3" + yaml "^1.10.0" + yargs "^16.1.1" -"@graphql-codegen/core@1.17.8": - version "1.17.8" - resolved "https://registry.yarnpkg.com/@graphql-codegen/core/-/core-1.17.8.tgz#d70281bcf9f4b7b560ab5b16f7fc7a2853c49a8a" - integrity sha512-HUntoeLhLZf6wroD1HYLsniz51N3zW7cjgwojGKgbUsI6Oa8pGsh+kKaN9xtvlb/hIpsRJ00q9LbPVIM/kXQtQ== - dependencies: - "@graphql-codegen/plugin-helpers" "^1.17.8" - "@graphql-tools/merge" "^6.0.18" - "@graphql-tools/utils" "^6.0.18" - tslib "~2.0.0" - -"@graphql-codegen/plugin-helpers@^1.17.8", "@graphql-codegen/plugin-helpers@^1.17.9": +"@graphql-codegen/core@1.17.9": version "1.17.9" - resolved "https://registry.yarnpkg.com/@graphql-codegen/plugin-helpers/-/plugin-helpers-1.17.9.tgz#429f7f75b9f09f5229e42546027613f62ef0d4b1" - integrity sha512-kyj+qsnLGd1JLqXuLpvI6Q/VW7frhoHHNxYJWerpwsSV9m4cttmFj8d9JTfYPZbg6cLIRR7+10lVugzMKozjzA== + resolved "https://registry.yarnpkg.com/@graphql-codegen/core/-/core-1.17.9.tgz#c03e71018ff04d26f5139a2d90a32b31d3bb2b43" + integrity sha512-7nwy+bMWqb0iYJ2DKxA9UiE16meeJ2Ch2XWS/N/ZnA0snTR+GZ20USI8z6YqP1Fuist7LvGO1MbitO2qBT8raA== + dependencies: + "@graphql-codegen/plugin-helpers" "^1.18.2" + "@graphql-tools/merge" "^6" + "@graphql-tools/utils" "^6" + tslib "~2.0.1" + +"@graphql-codegen/plugin-helpers@^1.18.2": + version "1.18.2" + resolved "https://registry.yarnpkg.com/@graphql-codegen/plugin-helpers/-/plugin-helpers-1.18.2.tgz#57011076cb8b8f5d04d37d226a5eda300c01be94" + integrity sha512-SvX+Ryq2naLcoD6jJNxtzc/moWTgHJ+X0KRfvhGWTa+xtFTS02i+PWOR89YYPcD8+LF6GmyFBjx2FmLCx4JwMg== dependencies: "@graphql-tools/utils" "^6" camel-case "4.1.1" @@ -1148,149 +549,155 @@ tslib "~2.0.1" upper-case "2.0.1" -"@graphql-codegen/schema-ast@^1.17.8": - version "1.17.8" - resolved "https://registry.yarnpkg.com/@graphql-codegen/schema-ast/-/schema-ast-1.17.8.tgz#05bbeaecb127261eb595324c2f61ad5232b81613" - integrity sha512-tEY5KJdtdJq9kO7Dh9X0ScsFye+dR2wxOOvj4i62sELNntbiHQjo8WBkOCwLj/RUmrwoaaVxeys8Oa5yqwQ5QA== +"@graphql-codegen/schema-ast@^1.18.1": + version "1.18.1" + resolved "https://registry.yarnpkg.com/@graphql-codegen/schema-ast/-/schema-ast-1.18.1.tgz#4081741b940944f883eec26f031840283f877210" + integrity sha512-uBVPqDZVvV1i1mBTp+DQldBO5AO4PAetZrAJJhQk5gaYxvKlf7YZWRT2WFwRdH1GEdU35tRxUX8XKSkxaKct/w== dependencies: - "@graphql-codegen/plugin-helpers" "^1.17.8" - "@graphql-tools/utils" "^6.0.18" - tslib "~2.0.0" - -"@graphql-codegen/typescript-operations@^1.17.8": - version "1.17.8" - resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript-operations/-/typescript-operations-1.17.8.tgz#17c811c7a719df56fec0878f00b2b7449fb45165" - integrity sha512-nU1ZldRB4vGcg4FQhOp3GOOyjfIwO+cI110zZhxQw8SV7pbNDJnCckbvkdEOkW+1/jVJcUul8jQVvuym5olipw== - dependencies: - "@graphql-codegen/plugin-helpers" "^1.17.8" - "@graphql-codegen/typescript" "^1.17.8" - "@graphql-codegen/visitor-plugin-common" "^1.17.13" - auto-bind "~4.0.0" - tslib "~2.0.0" - -"@graphql-codegen/typescript@^1.17.10", "@graphql-codegen/typescript@^1.17.8": - version "1.17.10" - resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript/-/typescript-1.17.10.tgz#cee6c6fa4e9200fa841e023682ff023faf7b9ba2" - integrity sha512-hujabT4J6ZFBGrt3hbEFhXExggDCXbuUpUfAl7ICrweQ8HFOpzBFzKSeezFHPufcfYZNE2sUWa8SJeVyI6pCRw== - dependencies: - "@graphql-codegen/plugin-helpers" "^1.17.9" - "@graphql-codegen/visitor-plugin-common" "^1.17.15" - auto-bind "~4.0.0" + "@graphql-codegen/plugin-helpers" "^1.18.2" + "@graphql-tools/utils" "^6" tslib "~2.0.1" -"@graphql-codegen/visitor-plugin-common@^1.17.13", "@graphql-codegen/visitor-plugin-common@^1.17.15": - version "1.17.15" - resolved "https://registry.yarnpkg.com/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-1.17.15.tgz#e9cb90f9f4177ced5a84289ff1f9d3d3ea5409d1" - integrity sha512-vWwuZulw5nYY9X6Vtc9ftw2BcFZoEGM/Qi3i4kEXh0o6Zgyk6XSq8bQM0joxBAD7tIfET2hXjTdq2oWcxurnsA== +"@graphql-codegen/typescript-operations@^1.17.13": + version "1.17.14" + resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript-operations/-/typescript-operations-1.17.14.tgz#69b4bee4d66f2ea7e288f1be889e08946ef3452a" + integrity sha512-jf1KnkA0i5hQNwc7bdMg5G6305DMSeTGDJSDoFryA2Tt9czWxY78m10/6GueUWo3zP6FIEhW1QRSve8ewTKEMg== dependencies: - "@graphql-codegen/plugin-helpers" "^1.17.9" - "@graphql-tools/relay-operation-optimizer" "^6" - array.prototype.flatmap "^1.2.3" + "@graphql-codegen/plugin-helpers" "^1.18.2" + "@graphql-codegen/typescript" "^1.20.1" + "@graphql-codegen/visitor-plugin-common" "^1.18.1" auto-bind "~4.0.0" - dependency-graph "^0.9.0" + tslib "~2.1.0" + +"@graphql-codegen/typescript@^1.19.0", "@graphql-codegen/typescript@^1.20.1": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript/-/typescript-1.21.0.tgz#301b1851cd278bedd1f49e1b3d654f4dc0af2943" + integrity sha512-23YttnZ+87dA/3lbCvPKdsrpEOx142dCT9xSh6XkSeyCvn+vUtETN2MhamCYB87G7Nu2EcLDFKDZjgXH73f4fg== + dependencies: + "@graphql-codegen/plugin-helpers" "^1.18.2" + "@graphql-codegen/visitor-plugin-common" "^1.18.3" + auto-bind "~4.0.0" + tslib "~2.1.0" + +"@graphql-codegen/visitor-plugin-common@^1.18.1", "@graphql-codegen/visitor-plugin-common@^1.18.3": + version "1.18.3" + resolved "https://registry.yarnpkg.com/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-1.18.3.tgz#9d2c4449c3bdaffe3e782e2321fe0cb998b8a91d" + integrity sha512-6xJzt8hszCTKt3rTlcCURpuiAFuaiaZgStlVeRE1OrKEDiY1T3vwF3/7TonhfnEjqBWtZdMmXvNx3ArXkRUV4w== + dependencies: + "@graphql-codegen/plugin-helpers" "^1.18.2" + "@graphql-tools/optimize" "^1.0.1" + "@graphql-tools/relay-operation-optimizer" "^6" + array.prototype.flatmap "^1.2.4" + auto-bind "~4.0.0" + dependency-graph "^0.10.0" graphql-tag "^2.11.0" parse-filepath "^1.0.2" pascal-case "^3.1.1" - tslib "~2.0.1" + tslib "~2.1.0" "@graphql-tools/apollo-engine-loader@^6": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-6.2.3.tgz#769fb39e3ea63e036421705c711651cea0f21c44" - integrity sha512-KxBKk3nPAcTBjv+n8BM6t8L/xhlkvfgkonjRdbYN/PrjzshVS8T7ddI/7CwG6RARZHqKBQqp4uEmlmvC4oLPMg== + version "6.2.5" + resolved "https://registry.yarnpkg.com/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-6.2.5.tgz#b9e65744f522bb9f6ca50651e5622820c4f059a8" + integrity sha512-CE4uef6PyxtSG+7OnLklIr2BZZDgjO89ZXK47EKdY7jQy/BQD/9o+8SxPsgiBc+2NsDJH2I6P/nqoaJMOEat6g== dependencies: - "@graphql-tools/utils" "6.2.3" + "@graphql-tools/utils" "^7.0.0" cross-fetch "3.0.6" tslib "~2.0.1" -"@graphql-tools/code-file-loader@^6": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-6.2.3.tgz#65b0376224cc98a0c09ffcd925baf011c3d9f76f" - integrity sha512-Cvk9edruHSXhf0oFgdlVnGSUHg+X8OMwLiJwbMUc3cNT6w6JVef8yjn1mmEw9qHYakFwHSLMyJoghfXzP31Jww== +"@graphql-tools/batch-execute@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-7.0.0.tgz#e79d11bd5b39f29172f6ec2eafa71103c6a6c85b" + integrity sha512-+ywPfK6N2Ddna6oOa5Qb1Mv7EA8LOwRNOAPP9dL37FEhksJM9pYqPSceUcqMqg7S9b0+Cgr78s408rgvurV3/Q== dependencies: - "@graphql-tools/graphql-tag-pluck" "6.2.3" - "@graphql-tools/utils" "6.2.3" - fs-extra "9.0.1" - tslib "~2.0.1" - -"@graphql-tools/delegate@6.2.3": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-6.2.3.tgz#7776bfe8acf6f9a9aa0f6481a34ca8ab9fa87d1f" - integrity sha512-j4P7RaI5J9AvGcfBDITO6bZDeSvjMgDby2smn3L2dmXpPfMYh00KRRSZjzdMwSkLxi+0octh9buUAeCdvVMkKQ== - dependencies: - "@ardatan/aggregate-error" "0.0.6" - "@graphql-tools/schema" "6.2.3" - "@graphql-tools/utils" "6.2.3" + "@graphql-tools/utils" "^7.0.0" dataloader "2.0.0" is-promise "4.0.0" tslib "~2.0.1" -"@graphql-tools/git-loader@^6": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/git-loader/-/git-loader-6.2.3.tgz#a2a217064201adf109139e7a0784ac23926894bf" - integrity sha512-kWUsQ6rhFTSC6NhfNUxLJsMwtop4Es8e0xLz8IKqboDl+a3gRqv4bdGUVKXndNj98G7bt6DZRqH7LTS0dPmZwQ== +"@graphql-tools/code-file-loader@^6": + version "6.2.6" + resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-6.2.6.tgz#f89ffb1a5ca48c67dcf2cff97e1a5d06eabc81c2" + integrity sha512-oDuMiXy1Rj1KszY7no+PFNzw2H25PVJKg9K/deK+IHL1631Q+VLK6/czBIw4TMEsbYhlKErgWDI+XBzK73VZSQ== dependencies: - "@graphql-tools/graphql-tag-pluck" "6.2.3" - "@graphql-tools/utils" "6.2.3" + "@graphql-tools/graphql-tag-pluck" "^6.2.6" + "@graphql-tools/utils" "^7.0.0" tslib "~2.0.1" -"@graphql-tools/github-loader@^6": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/github-loader/-/github-loader-6.2.3.tgz#b7d944616278d182d1187bbcace3b6b967a0ca7a" - integrity sha512-YDMcT59Jt2PO9Ork397BOjMCMvjNVFm4LVic7Llnl+3t5MnsBHsJ8fWEOx/p10/LXIBW5xjtKonz6QeY9QfB7w== +"@graphql-tools/delegate@^7.0.1", "@graphql-tools/delegate@^7.0.7": + version "7.0.10" + resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-7.0.10.tgz#f87ac85a2dbd03b5b3aabf347f4479fabe8ceac3" + integrity sha512-6Di9ia5ohoDvrHuhj2cak1nJGhIefJmUsd3WKZcJ2nu2yZAFawWMxGvQImqv3N7iyaWKiVhrrK8Roi/JrYhdKg== dependencies: - "@graphql-tools/graphql-tag-pluck" "6.2.3" - "@graphql-tools/utils" "6.2.3" + "@ardatan/aggregate-error" "0.0.6" + "@graphql-tools/batch-execute" "^7.0.0" + "@graphql-tools/schema" "^7.0.0" + "@graphql-tools/utils" "^7.1.6" + dataloader "2.0.0" + is-promise "4.0.0" + tslib "~2.1.0" + +"@graphql-tools/git-loader@^6": + version "6.2.6" + resolved "https://registry.yarnpkg.com/@graphql-tools/git-loader/-/git-loader-6.2.6.tgz#c2226f4b8f51f1c05c9ab2649ba32d49c68cd077" + integrity sha512-ooQTt2CaG47vEYPP3CPD+nbA0F+FYQXfzrB1Y1ABN9K3d3O2RK3g8qwslzZaI8VJQthvKwt0A95ZeE4XxteYfw== + dependencies: + "@graphql-tools/graphql-tag-pluck" "^6.2.6" + "@graphql-tools/utils" "^7.0.0" + tslib "~2.1.0" + +"@graphql-tools/github-loader@^6": + version "6.2.5" + resolved "https://registry.yarnpkg.com/@graphql-tools/github-loader/-/github-loader-6.2.5.tgz#460dff6f5bbaa26957a5ea3be4f452b89cc6a44b" + integrity sha512-DLuQmYeNNdPo8oWus8EePxWCfCAyUXPZ/p1PWqjrX/NGPyH2ZObdqtDAfRHztljt0F/qkBHbGHCEk2TKbRZTRw== + dependencies: + "@graphql-tools/graphql-tag-pluck" "^6.2.6" + "@graphql-tools/utils" "^7.0.0" cross-fetch "3.0.6" tslib "~2.0.1" "@graphql-tools/graphql-file-loader@^6", "@graphql-tools/graphql-file-loader@^6.0.0": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-6.2.3.tgz#be82b56a7585c24b0d8fef7570707d6e7df7c0ee" - integrity sha512-9K+foDqfcJXf2jNNOWWZnV+PdxJkKmzAY58qlbFEFfUeRC6ZmOA9B3vTkcFadVdSwIsaWHhaxqHrNAD+OfkAyQ== + version "6.2.7" + resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-6.2.7.tgz#d3720f2c4f4bb90eb2a03a7869a780c61945e143" + integrity sha512-5k2SNz0W87tDcymhEMZMkd6/vs6QawDyjQXWtqkuLTBF3vxjxPD1I4dwHoxgWPIjjANhXybvulD7E+St/7s9TQ== dependencies: - "@graphql-tools/import" "6.2.3" - "@graphql-tools/utils" "6.2.3" - fs-extra "9.0.1" - tslib "~2.0.1" + "@graphql-tools/import" "^6.2.6" + "@graphql-tools/utils" "^7.0.0" + tslib "~2.1.0" -"@graphql-tools/graphql-tag-pluck@6.2.3": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-6.2.3.tgz#e60cb0159d6081f7743c7379ebeb5384552f93e6" - integrity sha512-GnZnFSGV71g4Za/fMlwLXKIIPbP7jBoeeSUbk2LPL3d58v9+n8GtbQewTKLKWFSFtF9qAfpHos+Ok2WC1+o1FA== +"@graphql-tools/graphql-tag-pluck@^6.2.6": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-6.4.2.tgz#dec07d184ae133b4d582f4febcdd8430de167191" + integrity sha512-IXfFjJEIHDkjFP4LPwNpwr3bLJ9Ak1+E5vQqm5zuj24DH2Sfdx4m9wI2opiFLShcQuFpTlHIplU5PVY0Ipo8nw== dependencies: - "@babel/parser" "7.11.5" - "@babel/traverse" "7.11.5" - "@babel/types" "7.11.5" - "@graphql-tools/utils" "6.2.3" - tslib "~2.0.1" - optionalDependencies: - vue-template-compiler "^2.6.12" + "@babel/parser" "7.12.13" + "@babel/traverse" "7.12.13" + "@babel/types" "7.12.13" + "@graphql-tools/utils" "^7.0.0" + tslib "~2.1.0" -"@graphql-tools/import@6.2.3": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-6.2.3.tgz#c50677b4404bd3a8aa92c31dcd9919ec921bb86e" - integrity sha512-2ftXR84aPy2ueAEEGw/yFvYGPbvJYs2m18FEODhAq5z4P285ZlCMluxTUR9yNjumzgQP5Eer4fl64ztsdJvCyg== +"@graphql-tools/import@^6.2.6": + version "6.2.6" + resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-6.2.6.tgz#c5f899f0b87e9fe0523b889be8a59cb30aa164ad" + integrity sha512-/0H/bDjNK1MnKonk8fMbB7wIYU6QLCwbQOHtSHbFJ4j2qki5CqfAxpF+fGX6KovDtkdigcgRMvSKKi14oiuHPA== dependencies: - fs-extra "9.0.1" resolve-from "5.0.0" - tslib "~2.0.1" + tslib "~2.1.0" "@graphql-tools/json-file-loader@^6", "@graphql-tools/json-file-loader@^6.0.0": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-6.2.3.tgz#5992ef57bfa29b3bfea07915cc50c59b6e656ab8" - integrity sha512-7v445KZLVB3owbibu2HsFmVSsdDOn0NzYSqIXaaIZ7saqoVtG8etSt699kLw5gJM3j0Kjm7XDz9tK60Apes/xg== + version "6.2.6" + resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-6.2.6.tgz#830482cfd3721a0799cbf2fe5b09959d9332739a" + integrity sha512-CnfwBSY5926zyb6fkDBHnlTblHnHI4hoBALFYXnrg0Ev4yWU8B04DZl/pBRUc459VNgO2x8/mxGIZj2hPJG1EA== dependencies: - "@graphql-tools/utils" "6.2.3" - fs-extra "9.0.1" + "@graphql-tools/utils" "^7.0.0" tslib "~2.0.1" "@graphql-tools/load@^6", "@graphql-tools/load@^6.0.0": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-6.2.3.tgz#7a40d9767049941c704bff7300c46ae5ea647bac" - integrity sha512-3wmzrwf7tVY8rDRT2jxfQKlKgSB6P8OordFoOxpk1qNP2vmkUN9tWKxaI1ANkdm+et1D3ovUHeSoW6jKscnUAA== + version "6.2.5" + resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-6.2.5.tgz#7dd0d34c8ce2cfb24f61c6beba2817d9afdd7f2b" + integrity sha512-TpDgp+id0hhD1iMhdFSgWgWumdI/IpFWwouJeaEhEEAEBkdvH4W9gbBiJBSbPQwMPRNWx8/AZtry0cYKLW4lHg== dependencies: - "@graphql-tools/merge" "6.2.3" - "@graphql-tools/utils" "6.2.3" + "@graphql-tools/merge" "^6.2.5" + "@graphql-tools/utils" "^7.0.0" globby "11.0.1" import-from "3.0.0" is-glob "4.0.1" @@ -1299,36 +706,42 @@ unixify "1.0.0" valid-url "1.0.9" -"@graphql-tools/merge@6.2.3", "@graphql-tools/merge@^6.0.0", "@graphql-tools/merge@^6.0.18": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-6.2.3.tgz#df6d84d9182bd289985da4cc3a45515a7c2135df" - integrity sha512-qSSxdM2AKjnAHuChcnxIfzsGej78B56EE6ZD3tXMtKJOMQMhk4T4yXnKRHEw8fw7ZtNk/KqCmb6LJHy8Ws8frg== +"@graphql-tools/merge@^6", "@graphql-tools/merge@^6.0.0", "@graphql-tools/merge@^6.2.5": + version "6.2.7" + resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-6.2.7.tgz#c389bfa405d8d7562a05f794ede4254875e67f75" + integrity sha512-9acgDkkYeAHpuqhOa3E63NZPCX/iWo819Q320sCCMkydF1xgx0qCRYz/V03xPdpQETKRqBG2i2N2csneeEYYig== + dependencies: + "@graphql-tools/schema" "^7.0.0" + "@graphql-tools/utils" "^7.0.0" + tslib "~2.1.0" + +"@graphql-tools/optimize@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/optimize/-/optimize-1.0.1.tgz#9933fffc5a3c63f95102b1cb6076fb16ac7bb22d" + integrity sha512-cRlUNsbErYoBtzzS6zXahXeTBZGPVlPHXCpnEZ0XiK/KY/sQL96cyzak0fM/Gk6qEI9/l32MYEICjasiBQrl5w== dependencies: - "@graphql-tools/schema" "6.2.3" - "@graphql-tools/utils" "6.2.3" tslib "~2.0.1" "@graphql-tools/prisma-loader@^6": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/prisma-loader/-/prisma-loader-6.2.3.tgz#ee820c46ea94836c97adbc4ea4a34ac2740e0ca6" - integrity sha512-wjHg5SCJHsqI97/ct4G/B88VnPeTlaYYAAIgSvkpLWshuA3eZUuW28TlWlyRyjgUeGDaeNiO/UQSLE3pOAZUFw== + version "6.2.7" + resolved "https://registry.yarnpkg.com/@graphql-tools/prisma-loader/-/prisma-loader-6.2.7.tgz#0a9aa8f40c79a926f2d4f157dc282478bccafaca" + integrity sha512-o0QHl767uaLZVjb9NlupZjCzjfC5Zo79G6QLnK0Rbi0Ldk5Lf05HDZIfMhiyd9tsw73d0GQY7yIPvQJFE2S5Tw== dependencies: - "@graphql-tools/url-loader" "6.2.3" - "@graphql-tools/utils" "6.2.3" + "@graphql-tools/url-loader" "^6.3.1" + "@graphql-tools/utils" "^7.0.0" "@types/http-proxy-agent" "^2.0.2" "@types/js-yaml" "^3.12.5" "@types/json-stable-stringify" "^1.0.32" "@types/jsonwebtoken" "^8.5.0" - ajv "^6.12.5" + ajv "^6.12.6" bluebird "^3.7.2" chalk "^4.1.0" - debug "^4.1.1" + debug "^4.2.0" dotenv "^8.2.0" - fs-extra "9.0.1" - graphql-request "^3.1.0" + graphql-request "^3.3.0" http-proxy-agent "^4.0.1" https-proxy-agent "^5.0.0" - isomorphic-fetch "^2.2.1" + isomorphic-fetch "^3.0.0" js-yaml "^3.14.0" json-stable-stringify "^1.0.1" jsonwebtoken "^8.5.1" @@ -1339,110 +752,202 @@ yaml-ast-parser "^0.0.43" "@graphql-tools/relay-operation-optimizer@^6": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.2.3.tgz#8f2bda200ae1eab53991f952f1e900c2bcc9b610" - integrity sha512-l7pVF1lC1fGNCXTSlPc1esGV5fEqru7HjWrcg5oF/DGIaWi8Drw6GLmexLBfkbmxatKlFkBjrVJ/q3RxSaj+eQ== + version "6.3.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.3.0.tgz#f8c7f6c8aa4a9cf50ab151fbc5db4f4282a79532" + integrity sha512-Or3UgRvkY9Fq1AAx7q38oPqFmTepLz7kp6wDHKyR0ceG7AvHv5En22R12mAeISInbhff4Rpwgf6cE8zHRu6bCw== dependencies: - "@graphql-tools/utils" "6.2.3" - relay-compiler "10.0.1" + "@graphql-tools/utils" "^7.1.0" + relay-compiler "10.1.0" tslib "~2.0.1" -"@graphql-tools/schema@6.2.3": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-6.2.3.tgz#7ffc8e5f49d9a81f446fb8db87a6f5d07b1fba8e" - integrity sha512-CV5vDfQhXidssLK5hjT55FfwRAvBoGW53lVBl0rbXrbsSX7H9iVHdUf4UaDIlMc6WcnnzOrRiue/khHz3rzDEg== +"@graphql-tools/schema@^7.0.0", "@graphql-tools/schema@^7.1.2": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-7.1.3.tgz#d816400da51fbac1f0086e35540ab63b5e30e858" + integrity sha512-ZY76hmcJlF1iyg3Im0sQ3ASRkiShjgv102vLTVcH22lEGJeCaCyyS/GF1eUHom418S60bS8Th6+autRUxfBiBg== dependencies: - "@graphql-tools/utils" "6.2.3" - tslib "~2.0.1" + "@graphql-tools/utils" "^7.1.2" + tslib "~2.1.0" -"@graphql-tools/url-loader@6.2.3", "@graphql-tools/url-loader@^6", "@graphql-tools/url-loader@^6.0.0": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-6.2.3.tgz#3ecffd85c6efd89d9c260d9c4737aa87d0e5c7e9" - integrity sha512-cV/VR/lT1bHxwhrZlyG+sevl4zU0zZQHS7+TelTfAdKGrSswEozK98pPjkFP57+6ghitH6XoHUE91hFxtaODsA== +"@graphql-tools/url-loader@^6", "@graphql-tools/url-loader@^6.0.0", "@graphql-tools/url-loader@^6.3.1": + version "6.8.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-6.8.0.tgz#932a71db7ef8c807f9a601ba538fecb763524acc" + integrity sha512-x4f93UnH7kNr9iHFpJHL6kYWogRFlxMEnXybHS9xNCFd08+ftMO22bUb8esnFsyNrtMMlkLtshDSyNb3LbIMQg== dependencies: - "@graphql-tools/delegate" "6.2.3" - "@graphql-tools/utils" "6.2.3" - "@graphql-tools/wrap" "6.2.3" + "@graphql-tools/delegate" "^7.0.1" + "@graphql-tools/utils" "^7.1.5" + "@graphql-tools/wrap" "^7.0.4" "@types/websocket" "1.0.1" cross-fetch "3.0.6" - subscriptions-transport-ws "0.9.18" - tslib "~2.0.1" + eventsource "1.0.7" + extract-files "9.0.0" + graphql-upload "^11.0.0" + graphql-ws "4.1.0" + is-promise "4.0.0" + isomorphic-form-data "2.0.0" + isomorphic-ws "4.0.1" + sse-z "0.3.0" + sync-fetch "0.3.0" + tslib "~2.1.0" valid-url "1.0.9" - websocket "1.0.32" + ws "7.4.2" -"@graphql-tools/utils@6.2.3", "@graphql-tools/utils@^6", "@graphql-tools/utils@^6.0.0", "@graphql-tools/utils@^6.0.18": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-6.2.3.tgz#235636b47a62f12f3dddbdd30b2986fc03f3a5fa" - integrity sha512-eOhZy4y23r6AddokBqvFpQybtHvhTyZCc3VFWn8eIqF92vre90UKHbCX6Cf6VBo6i7l0ZwChPPbUzEiHOk+HJQ== +"@graphql-tools/utils@^6", "@graphql-tools/utils@^6.0.0": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-6.2.4.tgz#38a2314d2e5e229ad4f78cca44e1199e18d55856" + integrity sha512-ybgZ9EIJE3JMOtTrTd2VcIpTXtDrn2q6eiYkeYMKRVh3K41+LZa6YnR2zKERTXqTWqhobROwLt4BZbw2O3Aeeg== dependencies: "@ardatan/aggregate-error" "0.0.6" camel-case "4.1.1" tslib "~2.0.1" -"@graphql-tools/wrap@6.2.3": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-6.2.3.tgz#7e27ce75fefe4da4601e2ff4ba22ccf13a130e32" - integrity sha512-bxMXobcuKy8r7jKefQx5VH3FSyXVHKfDWfJ65Kq4oAC2+d7DUlpr3HZ6BWoMhfgUf6s6PPM26Us00TGsUQlAGg== +"@graphql-tools/utils@^7.0.0", "@graphql-tools/utils@^7.1.0", "@graphql-tools/utils@^7.1.2", "@graphql-tools/utils@^7.1.5", "@graphql-tools/utils@^7.1.6", "@graphql-tools/utils@^7.2.1": + version "7.2.5" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-7.2.5.tgz#d7f3fca326bbac34de664773d75634bf588ba2db" + integrity sha512-S9RUkPimq+5eEDohDjiq/JCPUsiZblKRG8ve+diUwF1f8+r6FV2xGXrOt0qhQJiMxIO+BOK3DU9c+U3tX9Jo0w== dependencies: - "@graphql-tools/delegate" "6.2.3" - "@graphql-tools/schema" "6.2.3" - "@graphql-tools/utils" "6.2.3" + "@ardatan/aggregate-error" "0.0.6" + camel-case "4.1.2" + tslib "~2.1.0" + +"@graphql-tools/wrap@^7.0.4": + version "7.0.5" + resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-7.0.5.tgz#8659a119abef11754f712b0c202e41a484951e0b" + integrity sha512-KCWBXsDfvG46GNUawRltJL4j9BMGoOG7oo3WEyCQP+SByWXiTe5cBF45SLDVQgdjljGNZhZ4Lq/7avIkF7/zDQ== + dependencies: + "@graphql-tools/delegate" "^7.0.7" + "@graphql-tools/schema" "^7.1.2" + "@graphql-tools/utils" "^7.2.1" is-promise "4.0.0" tslib "~2.0.1" -"@next/polyfill-module@9.5.4-canary.20": - version "9.5.4-canary.20" - resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-9.5.4-canary.20.tgz#1de6f1a5924c6dc1998d8a3e0dbd685f413203bc" - integrity sha512-9C/RQIiXA62TheJLatVRR6UVOBZVIMZ5J7DJIn2WRxgT2srRI0Ku6C+tgPJekjHp9XjbWRzc0JCKG1mYwkmdtA== - -"@next/react-dev-overlay@9.5.4-canary.20": - version "9.5.4-canary.20" - resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-9.5.4-canary.20.tgz#dd3dcd3898b8684e3768a1018822041e0e304fb7" - integrity sha512-Q8/iSvIJuLQnF3KQ4lV15wAm2j3ZFgT6Hn6y4+rj6p0DU9bB/Cp4XqDbVh3VIo+yyGNsw0cT/vmcimFe1MSqFg== +"@hapi/accept@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.1.tgz#068553e867f0f63225a506ed74e899441af53e10" + integrity sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q== dependencies: - "@babel/code-frame" "7.10.4" - ally.js "1.4.1" + "@hapi/boom" "9.x.x" + "@hapi/hoek" "9.x.x" + +"@hapi/boom@9.x.x": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.1.tgz#89e6f0e01637c2a4228da0d113e8157c93677b04" + integrity sha512-VNR8eDbBrOxBgbkddRYIe7+8DZ+vSbV6qlmaN2x7eWjsUjy2VmQgChkOKcVZIeupEZYj+I0dqNg430OhwzagjA== + dependencies: + "@hapi/hoek" "9.x.x" + +"@hapi/hoek@9.x.x": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.1.tgz#9daf5745156fd84b8e9889a2dc721f0c58e894aa" + integrity sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw== + +"@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== + +"@manifoldco/swagger-to-ts@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@manifoldco/swagger-to-ts/-/swagger-to-ts-2.1.0.tgz#b52a429e5b4ab3627571d3e9ae7399cf5cd4c454" + integrity sha512-IH0FAHhwWHR3Gs3rnVHNEscZujGn+K6/2Zu5cWfZre3Vz2tx1SvvJKEbSM89MztfDDRjOpb+6pQD/vqdEoTBVg== + dependencies: + chalk "^4.0.0" + js-yaml "^3.13.1" + meow "^7.0.0" + prettier "^2.0.5" + +"@next/bundle-analyzer@^10.0.1": + version "10.0.6" + resolved "https://registry.yarnpkg.com/@next/bundle-analyzer/-/bundle-analyzer-10.0.6.tgz#e39b45f7d08a5e913c870d5bc0b666bf5a230f37" + integrity sha512-zwl08fz784t0tpJFTUpoYTcPUQ3SqIEb2M+3Lyv2rMXeQ8AsRru7bSvTdW1P15ENWDDF2AovJptAoohjfutViQ== + dependencies: + webpack-bundle-analyzer "4.3.0" + +"@next/env@10.2.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/@next/env/-/env-10.2.0.tgz#154dbce2efa3ad067ebd20b7d0aa9aed775e7c97" + integrity sha512-tsWBsn1Rb6hXRaHc/pWMCpZ4Ipkf3OCbZ54ef5ukgIyEvzzGdGFXQshPP2AF7yb+8yMpunWs7vOMZW3e8oPF6A== + +"@next/polyfill-module@10.2.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-10.2.0.tgz#61f41110c4b465cc26d113e2054e205df61c3594" + integrity sha512-Nl3GexIUXsmuggkUqrRFyE/2k7UI44JaVzSywtXEyHzxpZm2a5bdMaWuC89pgLiFDDOqmbqyLAbtwm5lNxa7Eg== + +"@next/react-dev-overlay@10.2.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-10.2.0.tgz#4220121abac7e3404cbaf467784aeecca8be46cf" + integrity sha512-PRIAoWog41hLN4iJ8dChKp4ysOX0Q8yiNQ/cwzyqEd3EjugkDV5OiKl3mumGKaApJaIra1MX6j1wgQRuLhuWMA== + dependencies: + "@babel/code-frame" "7.12.11" anser "1.4.9" chalk "4.0.0" classnames "2.2.6" - data-uri-to-buffer "3.0.0" + css.escape "1.5.1" + data-uri-to-buffer "3.0.1" + platform "1.3.6" shell-quote "1.7.2" source-map "0.8.0-beta.0" stacktrace-parser "0.1.10" strip-ansi "6.0.0" -"@next/react-refresh-utils@9.5.4-canary.20": - version "9.5.4-canary.20" - resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-9.5.4-canary.20.tgz#2eac9bbf1cb19303b6e9690ec49c6355ab055e2f" - integrity sha512-5B9/GLFqnv6/lx/7kySB8EiqB/R/mXWmH53pcbHKVNdXvoD4oi2fT7PWHXA05JQdr0P1cYIPA1ytrrnIf8F1EQ== +"@next/react-refresh-utils@10.2.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-10.2.0.tgz#55953b697769c6647f371bc6bcd865a24e1a22e9" + integrity sha512-3I31K9B4hEQRl7yQ44Umyz+szHtuMJrNdwsgJGhoEnUCXSBRHp5wv5Zv8eDa2NewSbe53b2C0oOpivrzmdBakw== -"@nodelib/fs.scandir@2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" - integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== dependencies: - "@nodelib/fs.stat" "2.0.3" + "@nodelib/fs.stat" "2.0.4" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" - integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== "@nodelib/fs.walk@^1.2.3": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" - integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== dependencies: - "@nodelib/fs.scandir" "2.1.3" + "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" -"@npmcli/move-file@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.0.1.tgz#de103070dac0f48ce49cf6693c23af59c0f70464" - integrity sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw== +"@opentelemetry/api@0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-0.14.0.tgz#4e17d8d2f1da72b19374efa7b6526aa001267cae" + integrity sha512-L7RMuZr5LzMmZiQSQDy9O1jo0q+DaLy6XpYJfIGfYSfoJA5qzYwUP3sP1uMIQ549DvxAgM3ng85EaPTM/hUHwQ== dependencies: - mkdirp "^1.0.4" + "@opentelemetry/context-base" "^0.14.0" + +"@opentelemetry/context-base@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.14.0.tgz#c67fc20a4d891447ca1a855d7d70fa79a3533001" + integrity sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw== + +"@polka/url@^1.0.0-next.9": + version "1.0.0-next.11" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.11.tgz#aeb16f50649a91af79dbe36574b66d0f9e4d9f71" + integrity sha512-3NsZsJIA/22P3QUyrEDNA2D133H4j224twJrdipXN38dpnIOzAbUDtOwkcJ5pXmn75w7LSQDjA4tO9dm1XlqlA== + +"@reach/portal@^0.11.2": + version "0.11.2" + resolved "https://registry.yarnpkg.com/@reach/portal/-/portal-0.11.2.tgz#19a671be9ff010a345892b81e710cb6e4d9f9762" + integrity sha512-/53A/rY5oX2Y7D5TpvsP+V5cSd+4MPY6f21mAmVn4DCVwpkCFOlJ059ZL7ixS85M0Jz48YQnnvBJUqwkxqUG/g== + dependencies: + "@reach/utils" "0.11.2" + tslib "^2.0.0" + +"@reach/utils@0.11.2": + version "0.11.2" + resolved "https://registry.yarnpkg.com/@reach/utils/-/utils-0.11.2.tgz#be1f03650db56fd67a16d3fc70e5262cdb139cec" + integrity sha512-fBTolYj+rKTROXmf0zHO0rCWSvw7J0ALmYj5QxW4DmITMOH5uyRuWDWOfqohIGFbOtF/sum50WTB3tvx76d+Aw== + dependencies: + "@types/warning" "^3.0.0" + tslib "^2.0.0" + warning "^4.0.3" "@samverschueren/stream-to-observable@^0.3.0": version "0.3.1" @@ -1463,65 +968,30 @@ dependencies: defer-to-connect "^1.0.1" -"@tailwindcss/custom-forms@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@tailwindcss/custom-forms/-/custom-forms-0.2.1.tgz#40e5ed1fff6d29d8ed1c508a0b2aaf8da96962e0" - integrity sha512-XdP5XY6kxo3x5o50mWUyoYWxOPV16baagLoZ5uM41gh6IhXzhz/vJYzqrTb/lN58maGIKlpkxgVsQUNSsbAS3Q== - dependencies: - lodash "^4.17.11" - mini-svg-data-uri "^1.0.3" - traverse "^0.6.6" - -"@tailwindcss/typography@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.2.0.tgz#b597c83502e3c3c6641a8aaabda223cd494ab349" - integrity sha512-aPgMH+CjQiScLZculoDNOQUrrK2ktkbl3D6uCLYp1jgYRlNDrMONu9nMu8LfwAeetYNpVNeIGx7WzHSu0kvECg== - -"@tailwindcss/ui@^0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@tailwindcss/ui/-/ui-0.6.2.tgz#4144aba86543bf79fefe0ea14a78a12fb315810e" - integrity sha512-i0sWpAgnF4VitNqaf4JVDuiaQ3MmREwn7gmNYR6lvX29avYLLNOHf0DgzhVEfwfB+CJ6WjZvPoJuDYExZgWlwQ== - dependencies: - "@tailwindcss/custom-forms" "^0.2.1" - "@tailwindcss/typography" "^0.2.0" - hex-rgb "^4.1.0" - postcss-selector-parser "^6.0.2" - "@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== +"@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/body-scroll-lock@^2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@types/body-scroll-lock/-/body-scroll-lock-2.6.1.tgz#0dbd2b6ad2f4cfcece7102d6cf8630ce95508ee0" + integrity sha512-PPFm/2A6LfKmSpvMg58gHtSqwwMChbcKKGhSCRIhY4MyFzhY8moAN6HrTCpOeZQUqkFdTFfMqr7njeqGLKt72Q== + "@types/classnames@^2.2.10": - version "2.2.10" - resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.10.tgz#cc658ca319b6355399efc1f5b9e818f1a24bf999" - integrity sha512-1UzDldn9GfYYEsWWnn/P4wkTlkZDH7lDb0wBMGbtIQc9zXEQq7FlKBdZUn6OBqD8sKZZ2RQO2mAjGpXiDGoRmQ== + version "2.2.11" + resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.11.tgz#2521cc86f69d15c5b90664e4829d84566052c1cf" + integrity sha512-2koNhpWm3DgWRp5tpkiJ8JGc1xTn2q0l+jUNUE7oMKXUf5NpI9AIdC4kbjGNFBdHtcxBD18LAksoudAVhFKCjw== -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - -"@types/eslint-scope@^3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" - integrity sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.2.tgz#c88426b896efeb0b2732a92431ce8aa7ec0dee61" - integrity sha512-psWuwNXuKR2e6vMU5d2qH0Kqzrb2Zxwk+uBCF2LsyEph+Nex3lFIPMJXwxfGesdtJM2qtjKoCYsyh76K3x9wLg== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^0.0.45": - version "0.0.45" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" - integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== +"@types/cookie@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.0.tgz#14f854c0f93d326e39da6e3b6f34f7d37513d108" + integrity sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg== "@types/http-proxy-agent@^2.0.2": version "2.0.2" @@ -1530,15 +1000,15 @@ dependencies: "@types/node" "*" -"@types/js-yaml@^3.12.5": - version "3.12.5" - resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.5.tgz#136d5e6a57a931e1cce6f9d8126aa98a9c92a6bb" - integrity sha512-JCcp6J0GV66Y4ZMDAQCXot4xprYB+Zfd3meK9+INSJeVZwJmHAW30BBEEkPzXswMXuiyReUGOP3GxrADc9wPww== +"@types/js-cookie@^2.2.6": + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.6.tgz#f1a1cb35aff47bc5cfb05cb0c441ca91e914c26f" + integrity sha512-+oY0FDTO2GYKEV0YPvSshGq9t7YozVkgvXLty7zogQNuCxBhT9/3INX9Q7H1aRZ4SUDRXAKlJuA4EA5nTt7SNw== -"@types/json-schema@*", "@types/json-schema@^7.0.5": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" - integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== +"@types/js-yaml@^3.12.5": + version "3.12.6" + resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.6.tgz#7f10c926aa41e189a2755c4c7fcf8e4573bd7ac1" + integrity sha512-cK4XqrLvP17X6c0C8n4iTbT59EixqyXL3Fk8/Rsk4dF3oX4dg70gYUXrXVUUHpnsGMPNlTQMqf+TVmNPX6FmSQ== "@types/json-stable-stringify@^1.0.32": version "1.0.32" @@ -1552,15 +1022,63 @@ dependencies: "@types/node" "*" -"@types/node@*": - version "14.11.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.1.tgz#56af902ad157e763f9ba63d671c39cda3193c835" - integrity sha512-oTQgnd0hblfLsJ6BvJzzSL+Inogp3lq9fGgqRkMB/ziKMgEUaFl801OncOzUmalfzt14N0oPHMK47ipl+wbTIw== +"@types/lodash.debounce@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/lodash.debounce/-/lodash.debounce-4.0.6.tgz#c5a2326cd3efc46566c47e4c0aa248dc0ee57d60" + integrity sha512-4WTmnnhCfDvvuLMaF3KV4Qfki93KebocUF45msxhYyjMttZDQYzHkO639ohhk8+oco2cluAFL3t5+Jn4mleylQ== + dependencies: + "@types/lodash" "*" -"@types/node@^14.11.2": - version "14.11.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256" - integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA== +"@types/lodash.random@^3.2.6": + version "3.2.6" + resolved "https://registry.yarnpkg.com/@types/lodash.random/-/lodash.random-3.2.6.tgz#64b08abad168dca39c778ed40cce75b2f9e168eb" + integrity sha512-RRr0pKm+3USvG/HTkuRKA8v2EqXu19VXC09j4VL2UQec8Yx8Fn6wYTPGjYdmX4UFd23ykS7SLFkiULS/rv8kTA== + dependencies: + "@types/lodash" "*" + +"@types/lodash.throttle@^4.1.6": + version "4.1.6" + resolved "https://registry.yarnpkg.com/@types/lodash.throttle/-/lodash.throttle-4.1.6.tgz#f5ba2c22244ee42ff6c2c49e614401a870c1009c" + integrity sha512-/UIH96i/sIRYGC60NoY72jGkCJtFN5KVPhEMMMTjol65effe1gPn0tycJqV5tlSwMTzX8FqzB5yAj0rfGHTPNg== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.14.168" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" + integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== + +"@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/minimist@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" + integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== + +"@types/node-fetch@2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.3.2.tgz#e01893b176c6fa1367743726380d65bce5d6576b" + integrity sha512-yW0EOebSsQme9yKu09XbdDfle4/SmWZMK4dfteWcSLCYNQQcF+YOv0kIrvm+9pO11/ghA4E6A+RNQqvYj4Nr3A== + dependencies: + "@types/node" "*" + +"@types/node@*", "@types/node@^14.14.16": + version "14.14.27" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.27.tgz#c7127f8da0498993e13b1a42faf1303d3110d2f2" + integrity sha512-Ecfmo4YDQPwuqTCl1yBxLV5ihKfRlkBmzUEDcfIRvDxOTGQEeikr317Ln7Gcv0tjA8dVgKI3rniqW2G1OyKDng== + +"@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/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== "@types/parse-json@^4.0.0": version "4.0.0" @@ -1572,14 +1090,24 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== -"@types/react@^16.9.49": - version "16.9.49" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.49.tgz#09db021cf8089aba0cdb12a49f8021a69cce4872" - integrity sha512-DtLFjSj0OYAdVLBbyjhuV9CdGVHCkHn2R+xr3XkBvK2rS1Y1tkc14XSGjYgm5Fjjr90AxH9tiSzc1pCFMGO06g== +"@types/react@^17.0.0": + version "17.0.2" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.2.tgz#3de24c4efef902dd9795a49c75f760cbe4f7a5a8" + integrity sha512-Xt40xQsrkdvjn1EyWe1Bc0dJLcil/9x2vAuW7ya+PuQip4UYUaXyhzWmAbwRsdMgwOFHpfp7/FFZebDU6Y8VHA== dependencies: "@types/prop-types" "*" csstype "^3.0.2" +"@types/shopify-buy@^2.10.5": + version "2.10.5" + resolved "https://registry.yarnpkg.com/@types/shopify-buy/-/shopify-buy-2.10.5.tgz#c7184b792989a968af879224e8990cde4db45519" + integrity sha512-12Le/iXPynrONntux/OaXf9+yx0zbMBKhwywdej9mfR8YhXB82pPZYzU3o6j8cjK1uCQ/wWkqLTftpaXpeMKig== + +"@types/warning@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52" + integrity sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI= + "@types/websocket@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.1.tgz#039272c196c2c0e4868a0d8a1a27bbb86e9e9138" @@ -1587,167 +1115,56 @@ dependencies: "@types/node" "*" -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== +"@typescript-eslint/typescript-estree@^2.29.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" + integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg== dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" + debug "^4.1.1" + eslint-visitor-keys "^1.1.0" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== - -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== - -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== - -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== +"@vercel/fetch-cached-dns@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@vercel/fetch-cached-dns/-/fetch-cached-dns-2.0.1.tgz#b929ba5b4b6f7108abf49adaf03309159047c134" + integrity sha512-4a2IoekfGUgV/dinAB7Tx5oqA+Pg9I/6x/t8n/yduHmdclP5EdWTN4gPrwOKVECKVn2pV1VxAT8q4toSzwa2Eg== dependencies: - "@webassemblyjs/wast-printer" "1.9.0" + "@types/node-fetch" "2.3.2" + "@zeit/dns-cached-resolve" "2.1.0" -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== +"@vercel/fetch-retry@^5.0.2": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@vercel/fetch-retry/-/fetch-retry-5.0.3.tgz#cce5d23f6e64f6f525c24e2ac7c78f65d6c5b1f4" + integrity sha512-DIIoBY92r+sQ6iHSf5WjKiYvkdsDIMPWKYATlE0KcUAj2RV6SZK9UWpUzBRKsofXqedOqpVjrI0IE6AWL7JRtg== dependencies: - "@webassemblyjs/ast" "1.9.0" + async-retry "^1.3.1" + debug "^3.1.0" -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== +"@vercel/fetch@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@vercel/fetch/-/fetch-6.1.0.tgz#4959cd264d25e811b46491818a9d9ca5d752a2a9" + integrity sha512-xR0GQggKhPvwEWrqcrobsQFjyR/bDDbX24BkSaRyLzW+8SydKhkBc/mBCUV8h4SBZSlJMJnqhrxjFCZ1uJcqNg== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" + "@types/async-retry" "1.2.1" + "@vercel/fetch-cached-dns" "^2.0.1" + "@vercel/fetch-retry" "^5.0.2" + agentkeepalive "3.4.1" + debug "3.1.0" -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== +"@zeit/dns-cached-resolve@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@zeit/dns-cached-resolve/-/dns-cached-resolve-2.1.0.tgz#78583010df1683fdb7b05949b75593c9a8641bc1" + integrity sha512-KD2zyRZEBNs9PJ3/ob7zx0CvR4wM0oV4G5s5gFfPwmM74GpFbUN2pAAivP2AXnUrJ14Nkh8NumNKOzOyc4LbFQ== dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== - -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -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" + "@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" acorn-node@^1.6.1: version "1.8.2" @@ -1763,29 +1180,35 @@ acorn-walk@^7.0.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^7.0.0, acorn@^7.4.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" - integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== +acorn-walk@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.0.2.tgz#d4632bfc63fd93d0f15fd05ea0e984ffd3f5a8c3" + integrity sha512-+bpA9MJsHdZ4bgfDcpk0ozQyhhVct7rzOmO0s1IIr0AGGgKBljss8n2zp11rRP2wid5VGeh04CgeKzgat5/25A== -adjust-sourcemap-loader@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz#6471143af75ec02334b219f54bc7970c52fb29a4" - integrity sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA== - dependencies: - assert "1.4.1" - camelcase "5.0.0" - loader-utils "1.2.3" - object-path "0.11.4" - regex-parser "2.2.10" +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: + version "8.0.5" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.0.5.tgz#a3bfb872a74a6a7f661bc81b9849d9cac12601b7" + integrity sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg== agent-base@6: - version "6.0.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.1.tgz#808007e4e5867decb0ab6ab2f928fbdb5a596db4" - integrity sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg== + 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@3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.4.1.tgz#aa95aebc3a749bca5ed53e3880a09f5235b48f0c" + integrity sha512-MPIwsZU9PP9kOrZpyu2042kYA8Fdt/AedQYkYXucHgF9QoD9dXVp0ypuGnHXSR0hTstBxdt85Xkh4JolYfK5wg== + dependencies: + 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" @@ -1794,40 +1217,32 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: - version "6.12.5" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" - integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag== +ajv@^6.12.6: + 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" -ally.js@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/ally.js/-/ally.js-1.4.1.tgz#9fb7e6ba58efac4ee9131cb29aa9ee3b540bcf1e" - integrity sha1-n7fmuljvrE7pExyymqnuO1QLzx4= - dependencies: - css.escape "^1.5.0" - platform "1.3.3" - anser@1.4.9: version "1.4.9" resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760" integrity sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA== +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-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.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== @@ -1862,11 +1277,10 @@ ansi-styles@^3.2.1: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: - "@types/color-name" "^1.1.1" color-convert "^2.0.1" any-observable@^0.3.0: @@ -1874,14 +1288,6 @@ any-observable@^0.3.0: resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" @@ -1890,6 +1296,16 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +app-module-path@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" + integrity sha1-ZBqlXft9am8KgUHEucCqULbCTdU= + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1897,45 +1313,31 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -arity-n@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" - integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U= - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -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 sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-filter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" + integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= 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.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -array.prototype.flatmap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz#1c13f84a178566042dd63de4414440db9222e443" - integrity sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg== +array.prototype.flatmap@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" + integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" + es-abstract "^1.18.0-next.1" function-bind "^1.1.1" +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -1951,44 +1353,52 @@ asn1.js@^5.2.0: minimalistic-assert "^1.0.0" safer-buffer "^2.1.0" -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== +assert@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" + integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== dependencies: - safer-buffer "~2.1.0" + es6-object-assign "^1.1.0" + is-nan "^1.2.1" + object-is "^1.0.1" + util "^0.12.0" -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assert@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== dependencies: + object-assign "^4.1.1" util "0.10.3" -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +ast-module-types@^2.3.2, ast-module-types@^2.4.0, ast-module-types@^2.6.0, ast-module-types@^2.7.0, ast-module-types@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/ast-module-types/-/ast-module-types-2.7.1.tgz#3f7989ef8dfa1fdb82dfe0ab02bdfc7c77a57dd3" + integrity sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw== ast-types@0.13.2: version "0.13.2" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.2.tgz#df39b677a911a83f3a049644fb74fdded23cea48" integrity sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA== -async-each@^1.0.1: - 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== +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-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +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.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.1.tgz#139f31f8ddce50c0870b0ba558a6079684aaed55" + integrity sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA== + dependencies: + retry "0.12.0" asynckit@^0.4.0: version "0.4.0" @@ -2000,17 +1410,24 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -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@^9.4.5, autoprefixer@^9.6.1: +autoprefixer@^10.2.4: + version "10.2.4" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.2.4.tgz#c0e7cf24fcc6a1ae5d6250c623f0cb8beef2f7e1" + integrity sha512-DCCdUQiMD+P/as8m3XkeTUkUKuuRqLGcwD0nll7wevhqoJfMRpJlkFd1+MQh1pvupjiQuip42lc/VFvfUTMSKw== + dependencies: + browserslist "^4.16.1" + caniuse-lite "^1.0.30001181" + colorette "^1.2.1" + fraction.js "^4.0.13" + normalize-range "^0.1.2" + postcss-value-parser "^4.1.0" + +autoprefixer@^9.6.1: version "9.8.6" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== @@ -2023,15 +1440,12 @@ autoprefixer@^9.4.5, autoprefixer@^9.6.1: postcss "^7.0.32" postcss-value-parser "^4.1.0" -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" - integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== +available-typed-arrays@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" + integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ== + dependencies: + array-filter "^1.0.0" babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" @@ -2050,19 +1464,6 @@ babel-plugin-syntax-trailing-function-commas@^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-plugin-transform-define@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-define/-/babel-plugin-transform-define-2.0.0.tgz#79c3536635f899aabaf830b194b25519465675a4" - integrity sha512-0dv5RNRUlUKxGYIIErl01lpvi8b7W2R04Qcl1mCj70ahwZcgiklfXnFlh4FGnRh6aayCfSZKdhiMryVzcq5Dmg== - dependencies: - lodash "^4.17.11" - traverse "0.6.6" - -babel-plugin-transform-react-remove-prop-types@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" - integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== - babel-preset-fbjs@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541" @@ -2096,78 +1497,60 @@ babel-preset-fbjs@^3.3.0: "@babel/plugin-transform-template-literals" "^7.0.0" babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" -backo2@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= - balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - -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" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" +base64-js@^1.0.2, 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== big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -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.1.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" - integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + 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== +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: - file-uri-to-path "1.0.0" + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: version "4.11.9" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== -bn.js@^5.1.1: +bn.js@^5.0.0, bn.js@^5.1.1: version "5.1.3" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== +body-scroll-lock@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz#c1392d9217ed2c3e237fee1e910f6cdd80b7aaec" + integrity sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg== + +bowser@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2176,22 +1559,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1, braces@^2.3.2: - 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.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -2199,7 +1566,7 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" -brorand@^1.0.1: +brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= @@ -2236,11 +1603,11 @@ browserify-des@^1.0.0: safe-buffer "^5.1.2" browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== dependencies: - bn.js "^4.1.0" + bn.js "^5.0.0" randombytes "^2.0.1" browserify-sign@^4.0.0: @@ -2258,25 +1625,34 @@ browserify-sign@^4.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" -browserslist@4.13.0: - version "4.13.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.13.0.tgz#42556cba011e1b0a2775b611cba6a8eca18e940d" - integrity sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ== +browserify-zlib@0.2.0, browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: - caniuse-lite "^1.0.30001093" - electron-to-chromium "^1.3.488" - escalade "^3.0.1" - node-releases "^1.1.58" + pako "~1.0.5" -browserslist@^4.12.0, browserslist@^4.6.4, browserslist@^4.8.5: - version "4.14.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.3.tgz#381f9e7f13794b2eb17e1761b4f118e8ae665a53" - integrity sha512-GcZPC5+YqyPO4SFnz48/B0YaCwS47Q9iPChRGi6t7HhflKBcINzFrJvRfC+jp30sRMKxF+d4EHGs27Z0XP1NaQ== +browserslist@4.16.1: + version "4.16.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766" + integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA== dependencies: - caniuse-lite "^1.0.30001131" - electron-to-chromium "^1.3.570" - escalade "^3.1.0" - node-releases "^1.1.61" + caniuse-lite "^1.0.30001173" + colorette "^1.2.1" + electron-to-chromium "^1.3.634" + escalade "^3.1.1" + node-releases "^1.1.69" + +browserslist@^4.12.0, browserslist@^4.16.1, browserslist@^4.6.4: + version "4.16.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" + integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== + dependencies: + caniuse-lite "^1.0.30001181" + colorette "^1.2.1" + electron-to-chromium "^1.3.649" + escalade "^3.1.1" + node-releases "^1.1.70" bser@2.1.1: version "2.1.1" @@ -2290,7 +1666,7 @@ buffer-equal-constant-time@1.0.1: resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= -buffer-from@^1.0.0, buffer-from@^1.1.1: +buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== @@ -2308,56 +1684,40 @@ buffer@5.6.0: base64-js "^1.0.2" ieee754 "^1.1.4" -bufferutil@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.1.tgz#3a177e8e5819a1243fe16b63a199951a7ad8d4a7" - integrity sha512-xowrxvpxojqkagPcWRQVXZl0YXhRhAtBEIq3VoER1NH5Mw1n1o0ojdspp+GS2J//2gCVyrzQDApQ4unGF+QOoA== +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== dependencies: - node-gyp-build "~3.7.0" + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" -bytes@^3.0.0: +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" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +busboy@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" + integrity sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw== + dependencies: + dicer "0.3.0" + +bytes@3.1.0, bytes@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@15.0.5, cacache@^15.0.5: - version "15.0.5" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" - integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== - dependencies: - "@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.0" - 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" @@ -2371,12 +1731,20 @@ cacheable-request@^6.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.1, camel-case@^4.1.1: +camel-case@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547" integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q== @@ -2384,35 +1752,51 @@ camel-case@4.1.1, camel-case@^4.1.1: pascal-case "^3.1.1" tslib "^1.10.0" +camel-case@4.1.2, 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.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" -camelcase@5.3.1, camelcase@^5.0.0: +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" - integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== +caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001181: + version "1.0.30001185" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz#3482a407d261da04393e2f0d61eefbc53be43b95" + integrity sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg== -caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001093, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001113, caniuse-lite@^1.0.30001131: - version "1.0.30001133" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001133.tgz#ec564c5495311299eb05245e252d589a84acd95e" - integrity sha512-s3XAUFaC/ntDb1O3lcw9K8MPeOW7KO3z9+GzAoBxfz1B0VdacXPMKgFUtG4KIsgmnbexmi013s9miVu4h+qMHw== +caniuse-lite@^1.0.30001173, caniuse-lite@^1.0.30001179, caniuse-lite@^1.0.30001202: + version "1.0.30001228" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa" + integrity sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A== -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +chalk@2.4.2, chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" chalk@4.0.0: version "4.0.0" @@ -2433,16 +1817,7 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -"chalk@^3.0.0 || ^4.0.0", chalk@^4.0.0, chalk@^4.1.0: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== @@ -2455,29 +1830,10 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.4.2: - version "3.4.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" - integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== +chokidar@3.5.1, chokidar@^3.4.3: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -2485,21 +1841,14 @@ chokidar@^3.4.2: is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.4.0" + readdirp "~3.5.0" optionalDependencies: - fsevents "~2.1.2" + fsevents "~2.3.1" -chownr@^2.0.0: +ci-info@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" @@ -2509,16 +1858,6 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -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" - classnames@2.2.6, classnames@^2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" @@ -2543,6 +1882,11 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-spinners@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" + integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== + cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -2551,6 +1895,14 @@ cli-truncate@^0.2.1: 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-width@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" @@ -2565,10 +1917,10 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" -cliui@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.1.tgz#a4cb67aad45cd83d8d05128fc9f4d8fbb887e6b3" - integrity sha512-rcvHOWyGyid6I1WjT/3NatKj2kDt9OdSHSXpyLXaMWFbKpGACNW8pRhhdPUq9MWUOdwn8Rz9AVETjF4105rZZQ== +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" @@ -2581,19 +1933,16 @@ clone-response@^1.0.2: 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= + 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, color-convert@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -2618,44 +1967,59 @@ color-name@^1.0.0, color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" - integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== +color-string@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6" + integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw== dependencies: color-name "^1.0.0" simple-swizzle "^0.2.2" -color@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" - integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== +color@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" + integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== dependencies: color-convert "^1.9.1" - color-string "^1.5.2" + color-string "^1.5.4" colorette@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: +colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + +combined-stream@^1.0.6, 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@^2.20.0: +commander@^2.13.0, commander@^2.16.0, commander@^2.20.3, commander@^2.8.1: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^5.0.0: +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== +commander@^6.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== + common-tags@1.8.0, common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" @@ -2666,24 +2030,22 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -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== - -compose-function@3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f" - integrity sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8= - dependencies: - arity-n "^1.0.4" +compare-versions@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" + integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== 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.3, constant-case@^3.0.3: +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constant-case@3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.3.tgz#ac910a99caf3926ac5112f352e3af599d8c5fc0a" integrity sha512-FXtsSnnrFYpzDmvwDGQW+l8XK3GV1coLyBN0eBz16ZUzGaZcT2ANVCJmLeuw2GQgxKHQIe9e0w2dzkSfaRlUmA== @@ -2692,6 +2054,20 @@ constant-case@3.0.3, constant-case@^3.0.3: tslib "^1.10.0" upper-case "^2.0.1" +constant-case@^3.0.3: + 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" + +constants-browserify@1.0.0, constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + convert-source-map@1.7.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -2699,34 +2075,23 @@ convert-source-map@1.7.0, convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" -convert-source-map@^0.3.3: - version "0.3.5" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" - integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= +cookie@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== -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-compat@^3.6.2: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" - integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== - dependencies: - browserslist "^4.8.5" - semver "7.0.0" - -core-js@^2.4.1: - version "2.6.11" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" - integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== - -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +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@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" @@ -2780,21 +2145,28 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-fetch@3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.5.tgz#2739d2981892e7ab488a7ad03b92df2816e03f4c" - integrity sha512-FFLcLtraisj5eteosnX1gf01qYDCOc4fDy0+euOt8Kn9YBY2NtXL/pCoYPavw24NIQkQqm5ZOLsGD5Zzj0gyew== - dependencies: - node-fetch "2.6.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.0.6, cross-fetch@^3.0.5: +cross-fetch@3.0.6, cross-fetch@^3.0.4, cross-fetch@^3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.6.tgz#3a4040bc8941e653e0e9cf17f29ebcd177d3365c" integrity sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ== dependencies: node-fetch "2.6.1" -crypto-browserify@3.12.0: +cross-spawn@^7.0.0: + 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" + +crypto-browserify@3.12.0, crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== @@ -2826,24 +2198,6 @@ css-has-pseudo@^0.10.0: postcss "^7.0.6" postcss-selector-parser "^5.0.0-rc.4" -css-loader@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e" - integrity sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg== - dependencies: - camelcase "^6.0.0" - cssesc "^3.0.0" - icss-utils "^4.1.1" - loader-utils "^2.0.0" - postcss "^7.0.32" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.3" - postcss-modules-scope "^2.2.0" - postcss-modules-values "^3.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^2.7.1" - semver "^7.3.2" - css-prefers-color-scheme@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" @@ -2856,21 +2210,11 @@ css-unit-converter@^1.1.1: resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21" integrity sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA== -css.escape@^1.5.0: +css.escape@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= -css@^2.0.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" - integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== - dependencies: - inherits "^2.0.3" - source-map "^0.6.1" - source-map-resolve "^0.5.2" - urix "^0.1.0" - cssdb@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" @@ -2886,63 +2230,29 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-simple@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-1.1.4.tgz#7b287a31df786348565d02342df71af8f758ac82" - integrity sha512-EYKDo65W+AxMViUijv/hvhbEnxUjmu3V7omcH1MatPOwjRLrAgVArUOE8wTUyc1ePFEtvV8oCT4/QSRJDorm/A== +cssnano-preset-simple@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-2.0.0.tgz#b55e72cb970713f425560a0e141b0335249e2f96" + integrity sha512-HkufSLkaBJbKBFx/7aj5HmCK9Ni/JedRQm0mT2qBzMG/dEuJOLnMt2lK6K1rwOOyV4j9aSY+knbW9WoS7BYpzg== dependencies: - postcss "^7.0.32" + caniuse-lite "^1.0.30001202" -cssnano-preset-simple@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-1.2.0.tgz#afcf13eb076e8ebd91c4f311cd449781c14c7371" - integrity sha512-zojGlY+KasFeQT/SnD/WqYXHcKddz2XHRDtIwxrWpGqGHp5IyLWsWFS3UW7pOf3AWvfkpYSRdxOSlYuJPz8j8g== +cssnano-simple@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-2.0.0.tgz#930d9dcd8ba105c5a62ce719cb00854da58b5c05" + integrity sha512-0G3TXaFxlh/szPEG/o3VcmCwl0N3E60XNb9YZZijew5eIs6fLjJuOPxQd9yEBaX2p/YfJtt49i4vYi38iH6/6w== dependencies: - caniuse-lite "^1.0.30001093" - postcss "^7.0.32" - -cssnano-simple@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-1.0.5.tgz#66ee528f3a4e60754e2625ea9f51ac315f5f0a92" - integrity sha512-NJjx2Er1C3pa75v1GwMKm0w6xAp1GsW2Ql1As4CWPNFxTgYFN5e8wblYeHfna13sANAhyIdSIPqKJjBO4CU5Eg== - dependencies: - cssnano-preset-simple "1.1.4" - postcss "^7.0.32" - -cssnano-simple@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-1.2.0.tgz#b8cc5f52c2a52e6513b4636d0da165ec9d48d327" - integrity sha512-pton9cZ70/wOCWMAbEGHO1ACsW1KggTB6Ikj7k71uOEsz6SfByH++86+WAmXjRSc9q/g9gxkpFP9bDX9vRotdA== - dependencies: - cssnano-preset-simple "1.2.0" - postcss "^7.0.32" + cssnano-preset-simple "^2.0.0" csstype@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.3.tgz#2b410bbeba38ba9633353aff34b05d9755d065f8" - integrity sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag== + version "3.0.6" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.6.tgz#865d0b5833d7d8d40f4e5b8a6d76aea3de4725ef" + integrity sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw== -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-uri-to-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.0.tgz#8a3088a5efd3f53c3682343313c6895d498eb8d7" - integrity sha512-MJ6mFTZ+nPQO+39ua/ltwNePXrfdF3Ww0wP1Od7EePySXN1cP9XNqRQOG3FxTfipp8jx898LUCgBCEP11Qw/ZQ== - dependencies: - buffer-from "^1.1.1" +data-uri-to-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" + integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== dataloader@2.0.0: version "2.0.0" @@ -2954,39 +2264,58 @@ date-fns@^1.27.2: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== -de-indent@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= - debounce@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg== -debug@4, debug@^4.1.0, debug@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" - integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== - dependencies: - ms "2.1.2" - -debug@^2.2.0, debug@^2.3.3: +debug@2: 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" -decamelize@^1.2.0: +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@^3.1.0: + 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-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, 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= +decomment@^0.9.2: + version "0.9.3" + resolved "https://registry.yarnpkg.com/decomment/-/decomment-0.9.3.tgz#b913f32e5fe1113848f516caa5c7afefa9544d38" + integrity sha512-5skH5BfUL3n09RDmMVaHS1QGCiZRnl2nArUwmsE9JRY93Ueh3tihYl5wIrDdAuXnoFhxVis/DmRWREO2c6DG3w== + dependencies: + esprima "4.0.1" decompress-response@^3.3.0: version "3.3.0" @@ -2995,11 +2324,33 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + 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.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +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" @@ -3012,28 +2363,6 @@ define-properties@^1.1.3: dependencies: object-keys "^1.0.12" -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" @@ -3044,10 +2373,31 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -dependency-graph@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.9.0.tgz#11aed7e203bc8b00f48356d92db27b265c445318" - integrity sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w== +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.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.10.0.tgz#dfebe384f1f36faf7782be203a7a71102a6335a6" + integrity sha512-c9amUgpgxSi1bE5/sbLwcs5diLD0ygCQYmhfM5H1s5VH1mCsYkcmAL3CcNdv4kdSw6JuMoHeDGzLgj/gAXdWVg== + +dependency-tree@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/dependency-tree/-/dependency-tree-7.2.2.tgz#2366c96c0a905adfc19e9ed8dcdbfcb93476dfb5" + integrity sha512-WWZJpNuMWqEM97CGykmyKLjjUWGVGkRRMSIEBWk5izmugxmivnItg4MMHkDzuvmB/7vglhudEoc5wyMp5ODD+Q== + dependencies: + commander "^2.20.3" + debug "^4.2.1" + filing-cabinet "^2.6.0" + precinct "^6.3.1" + typescript "^3.9.7" + +dequal@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d" + integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug== des.js@^1.0.0: version "1.0.1" @@ -3062,6 +2412,83 @@ detect-indent@^6.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== +detective-amd@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/detective-amd/-/detective-amd-3.0.1.tgz#aca8eddb1f405821953faf4a893d9b9e0430b09e" + integrity sha512-vJgluSKkPyo+/McW9hzwmZwY1VPA3BS0VS1agdpPAWAhr65HwC1ox4Ig82rVfGYDYCa4GcKQON5JWBk++2Kf1Q== + dependencies: + ast-module-types "^2.7.0" + escodegen "^1.8.0" + get-amd-module-type "^3.0.0" + node-source-walk "^4.0.0" + +detective-cjs@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/detective-cjs/-/detective-cjs-3.1.1.tgz#18da3e39a002d2098a1123d45ce1de1b0d9045a0" + integrity sha512-JQtNTBgFY6h8uT6pgph5QpV3IyxDv+z3qPk/FZRDT9TlFfm5dnRtpH39WtQEr1khqsUxVqXzKjZHpdoQvQbllg== + dependencies: + ast-module-types "^2.4.0" + node-source-walk "^4.0.0" + +detective-es6@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/detective-es6/-/detective-es6-2.2.0.tgz#8f2baba3f8cd90a5cfd748f5ac436f0158ed2585" + integrity sha512-fSpNY0SLER7/sVgQZ1NxJPwmc9uCTzNgdkQDhAaj8NPYwr7Qji9QBcmbNvtMCnuuOGMuKn3O7jv0An+/WRWJZQ== + dependencies: + node-source-walk "^4.0.0" + +detective-less@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/detective-less/-/detective-less-1.0.2.tgz#a68af9ca5f69d74b7d0aa190218b211d83b4f7e3" + integrity sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA== + dependencies: + debug "^4.0.0" + gonzales-pe "^4.2.3" + node-source-walk "^4.0.0" + +detective-postcss@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/detective-postcss/-/detective-postcss-3.0.1.tgz#511921951f66135e17d0ece2e7604c6e4966c9c6" + integrity sha512-tfTS2GdpUal5NY0aCqI4dpEy8Xfr88AehYKB0iBIZvo8y2g3UsrcDnrp9PR2FbzoW7xD5Rip3NJW7eCSvtqdUw== + dependencies: + debug "^4.1.1" + is-url "^1.2.4" + postcss "^7.0.2" + postcss-values-parser "^1.5.0" + +detective-sass@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/detective-sass/-/detective-sass-3.0.1.tgz#496b819efd1f5c4dd3f0e19b43a8634bdd6927c4" + integrity sha512-oSbrBozRjJ+QFF4WJFbjPQKeakoaY1GiR380NPqwdbWYd5wfl5cLWv0l6LsJVqrgWfFN1bjFqSeo32Nxza8Lbw== + dependencies: + debug "^4.1.1" + gonzales-pe "^4.2.3" + node-source-walk "^4.0.0" + +detective-scss@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/detective-scss/-/detective-scss-2.0.1.tgz#06f8c21ae6dedad1fccc26d544892d968083eaf8" + integrity sha512-VveyXW4WQE04s05KlJ8K0bG34jtHQVgTc9InspqoQxvnelj/rdgSAy7i2DXAazyQNFKlWSWbS+Ro2DWKFOKTPQ== + dependencies: + debug "^4.1.1" + gonzales-pe "^4.2.3" + node-source-walk "^4.0.0" + +detective-stylus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detective-stylus/-/detective-stylus-1.0.0.tgz#50aee7db8babb990381f010c63fabba5b58e54cd" + integrity sha1-UK7n24uruZA4HwEMY/q7pbWOVM0= + +detective-typescript@^5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/detective-typescript/-/detective-typescript-5.8.0.tgz#c46776571e26bad6c9ada020cb3cb4e5625d1311" + integrity sha512-SrsUCfCaDTF64QVMHMidRal+kmkbIc5zP8cxxZPsomWx9vuEUjBlSJNhf7/ypE5cLdJJDI4qzKDmyzqQ+iz/xg== + dependencies: + "@typescript-eslint/typescript-estree" "^2.29.0" + ast-module-types "^2.6.0" + node-source-walk "^4.2.0" + typescript "^3.8.3" + detective@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" @@ -3071,6 +2498,23 @@ detective@^5.2.0: defined "^1.0.0" minimist "^1.1.1" +dicer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" + integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== + dependencies: + streamsearch "0.1.2" + +didyoumean@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.1.tgz#e92edfdada6537d484d73c0172fd1eba0c4976ff" + integrity sha1-6S7f2tplN9SE1zwBcv0eugxJdv8= + +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== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -3087,69 +2531,31 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dom-serializer@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.0.1.tgz#79695eb49af3cd8abc8d93a73da382deb1ca0795" - integrity sha512-1Aj1Qy3YLbdslkI75QEOfdp9TkQ3o8LRISAzxOibjBs/xWwr1WxZFOQphFkZuepHFGo+kB8e5FVJSS0faAJ4Rw== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - entities "^2.0.0" +domain-browser@4.19.0: + version "4.19.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.19.0.tgz#1093e17c0a17dbd521182fe90d49ac1370054af1" + integrity sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ== -dom-serializer@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.1.0.tgz#5f7c828f1bfc44887dc2a315ab5c45691d544b58" - integrity sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - entities "^2.0.0" - -domelementtype@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971" - integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA== - -domhandler@3.0.0, domhandler@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.0.0.tgz#51cd13efca31da95bbb0c5bee3a48300e333b3e9" - integrity sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw== - dependencies: - domelementtype "^2.0.1" - -domutils@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.1.0.tgz#7ade3201af43703fde154952e3a868eb4b635f16" - integrity sha512-CD9M0Dm1iaHfQ1R/TI+z3/JWp/pgub0j4jIQKH89ARR4ATAV2nbaOQS5XxU9maJP5jHaPdDDQSEHuE2UmpUTKg== - dependencies: - dom-serializer "^0.2.1" - domelementtype "^2.0.1" - domhandler "^3.0.0" - -domutils@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.3.0.tgz#6469c63a3da2de0c3016f3a59e6a969e10705bce" - integrity sha512-xWC75PM3QF6MjE5e58OzwTX0B/rPQnlqH0YyXB/c056RtVJA+eu60da2I/bdnEHzEYC00g8QaZUlAbqOZVbOsw== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.0.1" - domhandler "^3.0.0" +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== dot-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa" - integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA== + 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.3" - tslib "^1.10.0" + no-case "^3.0.4" + tslib "^2.0.3" + +dot-object@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/dot-object/-/dot-object-2.1.4.tgz#c6c54e9fca510b4d0ea4d65acf33726963843b5f" + integrity sha512-7FXnyyCLFawNYJ+NhkqyP9Wd2yzuo+7n9pGiYpkmXCTYa8Ci2U0eUNDVg5OuO5Pm6aFXI2SWN8/N/w7SJWu1WA== + dependencies: + commander "^4.0.0" + glob "^7.1.5" dotenv@^8.2.0: version "8.2.0" @@ -3161,13 +2567,10 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= -ecc-jsbn@~0.1.1: +duplexer@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== ecdsa-sig-formatter@1.0.11: version "1.0.11" @@ -3176,10 +2579,15 @@ ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer "^5.0.1" -electron-to-chromium@^1.3.488, electron-to-chromium@^1.3.570: - version "1.3.570" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.570.tgz#3f5141cc39b4e3892a276b4889980dabf1d29c7f" - integrity sha512-Y6OCoVQgFQBP5py6A/06+yWxUZHDlNr/gNDGatjH8AZqXl8X0tE4LfjLJsXGz/JmWJz8a6K7bR1k+QzZ+k//fg== +electron-to-chromium@^1.3.634: + version "1.3.738" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.738.tgz#aec24b091c82acbfabbdcce08076a703941d17ca" + integrity sha512-vCMf4gDOpEylPSLPLSwAEsz+R3ShP02Y3cAKMZvTqule3XcPp7tgc/0ESI7IS6ZeyBlGClE50N53fIOkcIVnpw== + +electron-to-chromium@^1.3.649: + version "1.3.663" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.663.tgz#dd54adfd8d7f0e01b80d236c6e232efbaa0c686c" + integrity sha512-xkVkzHj6k3oRRGlmdgUCCLSLhtFYHDCTH7SeK+LJdJjnsLcrdbpr8EYmfMQhez3V/KPO5UScSpzQ0feYX6Qoyw== elegant-spinner@^1.0.1: version "1.0.1" @@ -3187,17 +2595,22 @@ elegant-spinner@^1.0.1: integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= elliptic@^6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" - integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" + bn.js "^4.11.9" + brorand "^1.1.0" hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +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" @@ -3214,7 +2627,7 @@ emojis-list@^3.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== -encoding@^0.1.11: +encoding@0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== @@ -3228,18 +2641,28 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.0.0.tgz#4737e6ebd4f2fd13fe23f4cec9d02146afc2c527" - integrity sha512-6F037vvK16tgLlRgUx6ZEZISMysNvnnk09SILFrx3bNa1UsSLpIXFzWOmtiDxf1ISPAG6/wHBI61PEkeuTLVNA== +enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== dependencies: - graceful-fs "^4.2.4" - tapable "^2.0.0" + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" -entities@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" - integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== +enquirer@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +errno@^0.1.3: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" error-ex@^1.3.1: version "1.3.2" @@ -3248,40 +2671,47 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: - version "1.17.6" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" - integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== +es-abstract@^1.18.0-next.1: + version "1.18.0-next.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2" + integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw== dependencies: + call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" + get-intrinsic "^1.0.2" has "^1.0.3" has-symbols "^1.0.1" - is-callable "^1.2.0" - is-regex "^1.1.0" - object-inspect "^1.7.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-abstract@^1.18.0-next.0: - version "1.18.0-next.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.0.tgz#b302834927e624d8e5837ed48224291f2c66e6fc" - integrity sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.0" - is-negative-zero "^2.0.0" + is-callable "^1.2.2" + is-negative-zero "^2.0.1" is-regex "^1.1.1" - object-inspect "^1.8.0" + object-inspect "^1.9.0" object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.3" + string.prototype.trimstart "^1.0.3" + +es-abstract@^1.18.0-next.2: + version "1.18.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" + integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.2" + is-string "^1.0.5" + object-inspect "^1.9.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -3292,92 +2722,70 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.53" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" - integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.3" - next-tick "~1.0.0" +es6-object-assign@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" + integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw= -es6-iterator@2.0.3, es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -escalade@^3.0.1, escalade@^3.0.2, escalade@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e" - integrity sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig== +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= -eslint-scope@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== +escodegen@^1.8.0: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" -esprima@^4.0.0: +eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +esprima@4.0.1, esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -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@^4.1.1: +estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - 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== +etag@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -eventemitter3@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== - -events@^3.2.0: +events@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== +eventsource@1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" @@ -3386,45 +2794,20 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -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= +execa@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== 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" - -ext@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" - integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== - dependencies: - type "^2.0.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" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" external-editor@^3.0.3: version "3.1.0" @@ -3435,49 +2818,20 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" -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@^9.0.0: +extract-files@9.0.0, 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== -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= - fast-deep-equal@^3.1.1: 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.1.1: - version "3.2.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" - integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + version "3.2.5" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -3491,10 +2845,15 @@ fast-json-stable-stringify@^2.0.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.8.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" - integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== + version "1.10.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.1.tgz#8b8f2ac8bf3632d67afcd65dac248d5fdc45385e" + integrity sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA== dependencies: reusify "^1.0.4" @@ -3510,14 +2869,13 @@ fbjs-css-vars@^1.0.0: resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== -fbjs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a" - integrity sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA== +fbjs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.0.tgz#0907067fb3f57a78f45d95f1eacffcacd623c165" + integrity sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg== dependencies: - core-js "^2.4.1" + cross-fetch "^3.0.4" fbjs-css-vars "^1.0.0" - isomorphic-fetch "^2.1.1" loose-envify "^1.0.0" object-assign "^4.1.0" promise "^7.1.1" @@ -3539,27 +2897,36 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -figures@^3.0.0: +figures@^3.0.0, figures@^3.2.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-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== +file-exists-dazinatorfork@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/file-exists-dazinatorfork/-/file-exists-dazinatorfork-1.0.2.tgz#cd8d0d85f63e39dc81eceb0b687c44a2cca95c47" + integrity sha512-r70c72ln2YHzQINNfxDp02hAhbGkt1HffZ+Du8oetWDLjDtFja/Lm10lUaSh9e+wD+7VDvPee0b0C9SAy8pWZg== -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= +filing-cabinet@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/filing-cabinet/-/filing-cabinet-2.6.0.tgz#3d4d5093a98b6fae84cf282e8bded1b8ad5f9c0c" + integrity sha512-7kSlTScEkxoYKXCix7tAQ52ZeIHcx7ZWWArEZgXY+eTMe6yDYFdDhHdkXm9rSmvrrpzdZeR1wiufS1rUt4OzMA== dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" + app-module-path "^2.2.0" + commander "^2.13.0" + debug "^4.1.1" + decomment "^0.9.2" + enhanced-resolve "^4.1.0" + is-relative-path "^1.0.2" + module-definition "^3.0.0" + module-lookup-amd "^6.1.0" + resolve "^1.11.1" + resolve-dependency-path "^2.0.0" + sass-lookup "^3.0.0" + stylus-lookup "^3.0.1" + typescript "^3.0.3" fill-range@^7.0.1: version "7.0.1" @@ -3568,7 +2935,7 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -find-cache-dir@3.3.1, find-cache-dir@^3.3.1: +find-cache-dir@3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== @@ -3585,20 +2952,46 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-versions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965" + integrity sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ== + dependencies: + semver-regex "^3.1.2" + +find@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/find/-/find-0.3.0.tgz#4082e8fc8d8320f1a382b5e4f521b9bc50775cb8" + integrity sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw== + dependencies: + traverse-chain "~0.1.0" + flatten@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +form-data@^2.3.2: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" form-data@^3.0.0: version "3.0.0" @@ -3609,65 +3002,35 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" +fraction.js@^4.0.13: + version "4.0.13" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.0.13.tgz#3c1c315fa16b35c85fffa95725a36fa729c69dfe" + integrity sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA== -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-capacitor@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/fs-capacitor/-/fs-capacitor-6.2.0.tgz#fa79ac6576629163cb84561995602d8999afb7f5" + integrity sha512-nKcE1UduoSKX27NSZlg879LdQc94OtbOsEmKMN2MBNudXREvijRKx2GEBsTMTfws+BrbkJoEuynbGSVRSpauvw== -fs-extra@9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: at-least-node "^1.0.0" graceful-fs "^4.2.0" jsonfile "^6.0.1" - universalify "^1.0.0" - -fs-extra@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -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" + universalify "^2.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.2.7: - 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.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== +fsevents@~2.3.1: + 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" @@ -3675,15 +3038,44 @@ function-bind@^1.1.1: integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + 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-amd-module-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-amd-module-type/-/get-amd-module-type-3.0.0.tgz#bb334662fa04427018c937774570de495845c288" + integrity sha512-99Q7COuACPfVt18zH9N4VAMyb81S6TUgJm2NgV6ERtkh9VIkAaByZkW530wl3lLN5KTtSrK9jVLxYsoP5hQKsw== + dependencies: + ast-module-types "^2.3.2" + node-source-walk "^4.0.0" 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.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-orientation@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-orientation/-/get-orientation-1.1.2.tgz#20507928951814f8a91ded0a0e67b29dfab98947" + integrity sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ== + dependencies: + stream-parser "^0.3.1" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -3691,33 +3083,13 @@ get-stream@^4.1.0: dependencies: pump "^3.0.0" -get-stream@^5.1.0: +get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" -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= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - glob-parent@^5.1.0, glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" @@ -3730,7 +3102,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.5, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -3759,6 +3131,13 @@ globby@11.0.1: merge2 "^1.3.0" slash "^3.0.0" +gonzales-pe@^4.2.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" + integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ== + dependencies: + minimist "^1.2.5" + got@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -3776,16 +3155,17 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== -graphql-config@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-3.0.3.tgz#58907c65ed7d6e04132321450b60e57863ea9a5f" - integrity sha512-MBY0wEjvcgJtZUyoqpPvOE1e5qPI0hJaa1gKTqjonSFiCsNHX2lykNjpOPcodmAgH1V06ELxhGnm9kcVzqvi/g== +graphql-config@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-3.2.0.tgz#3ec3a7e319792086b80e54db4b37372ad4a79a32" + integrity sha512-ygEKDeQNZKpm4137560n2oY3bGM0D5zyRsQVaJntKkufWdgPg6sb9/4J1zJW2y/yC1ortAbhNho09qmeJeLa9g== dependencies: + "@endemolshinegroup/cosmiconfig-typescript-loader" "3.0.2" "@graphql-tools/graphql-file-loader" "^6.0.0" "@graphql-tools/json-file-loader" "^6.0.0" "@graphql-tools/load" "^6.0.0" @@ -3793,16 +3173,17 @@ graphql-config@^3.0.2: "@graphql-tools/url-loader" "^6.0.0" "@graphql-tools/utils" "^6.0.0" cosmiconfig "6.0.0" + cosmiconfig-toml-loader "1.0.0" minimatch "3.0.4" string-env-interpolation "1.0.1" tslib "^2.0.0" -graphql-request@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-3.1.0.tgz#c487488a1aa7b9a0f02335026b4ec897d645f9d4" - integrity sha512-Flg2Bd4Ek9BDJ5qacZC/iYuiS3LroHxQTmlUnfqjo/6jKwowY25FVtoLTnssMCBrYspRYEYEIfF1GN8J3/o5JQ== +graphql-request@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-3.4.0.tgz#3a400cd5511eb3c064b1873afb059196bbea9c2b" + integrity sha512-acrTzidSlwAj8wBNO7Q/UQHS8T+z5qRGquCQRv9J1InwR01BBWV9ObnoE+JS5nCCEj8wSGS0yrDXVDoRiKZuOg== dependencies: - cross-fetch "^3.0.5" + cross-fetch "^3.0.6" extract-files "^9.0.0" form-data "^3.0.0" @@ -3811,23 +3192,45 @@ graphql-tag@^2.11.0: resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.11.0.tgz#1deb53a01c46a7eb401d6cb59dec86fa1cccbffd" integrity sha512-VmsD5pJqWJnQZMUeRwrDhfgoyqcfwEkvtpANqcoUG8/tOLkwNgU9mzub/Mc78OJMhHjx7gfAMTxzdG43VGg3bA== -graphql@^15.3.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.3.0.tgz#3ad2b0caab0d110e3be4a5a9b2aa281e362b5278" - integrity sha512-GTCJtzJmkFLWRfFJuoo9RWWa/FfamUHgiFosxi/X1Ani4AVWbeyBenZTNX6dM+7WSbbFfTo/25eh0LLkwHMw2w== - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== +graphql-upload@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/graphql-upload/-/graphql-upload-11.0.0.tgz#24b245ff18f353bab6715e8a055db9fd73035e10" + integrity sha512-zsrDtu5gCbQFDWsNa5bMB4nf1LpKX9KDgh+f8oL1288ijV4RxeckhVozAjqjXAfRpxOHD1xOESsh6zq8SjdgjA== dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" + busboy "^0.3.1" + fs-capacitor "^6.1.0" + http-errors "^1.7.3" + isobject "^4.0.0" + object-path "^0.11.4" + +graphql-ws@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-4.1.0.tgz#cebe281474b5501d7be66210fb5711633b27fd78" + integrity sha512-DxJP1y2YzCqVLy7DrQN0iuR2l48vMOBWukX2d/J9aN2o5x9un5psIIq/2UFRh91UGARmfvPH86y1p4qbC1dITg== + +graphql@^15.4.0: + version "15.5.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.5.0.tgz#39d19494dbe69d1ea719915b578bf920344a69d5" + integrity sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA== + +graphviz@0.0.9: + version "0.0.9" + resolved "https://registry.yarnpkg.com/graphviz/-/graphviz-0.0.9.tgz#0bbf1df588c6a92259282da35323622528c4bbc4" + integrity sha512-SmoY2pOtcikmMCqCSy2NO1YsRfu9OO0wpTlOYW++giGjfX1a6gax/m1Fo8IdUd0/3H15cTOfR1SMKwohj4LKsg== + dependencies: + temp "~0.4.0" + +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" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== has-ansi@^2.0.0: version "2.0.0" @@ -3836,6 +3239,11 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -3851,36 +3259,10 @@ has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== -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-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== has@^1.0.3: version "1.0.3" @@ -3906,22 +3288,12 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -he@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" - integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= - -he@^1.1.0: +he@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -hex-rgb@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/hex-rgb/-/hex-rgb-4.2.0.tgz#fb377f2e5658fc924f1efa189685922e56ecaf0f" - integrity sha512-I7DkKeQ2kR2uyqgbxPgNgClH/rfs1ioKZhZW8VTIAirsxCR5EyhYeywgZbhMScgUbKCkgo6bb6JwA0CLTn9beA== - -hmac-drbg@^1.0.0: +hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= @@ -3930,26 +3302,43 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + html-tags@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== -htmlparser2@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" - integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - domutils "^2.0.0" - entities "^2.0.0" - http-cache-semantics@^4.0.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-errors@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@^1.7.3: + version "1.8.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507" + integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + 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" @@ -3959,16 +3348,12 @@ http-proxy-agent@^4.0.1: agent-base "6" debug "4" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" +https-browserify@1.0.0, https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -https-proxy-agent@5.0.0, https-proxy-agent@^5.0.0: +https-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== @@ -3976,7 +3361,35 @@ https-proxy-agent@5.0.0, https-proxy-agent@^5.0.0: agent-base "6" debug "4" -iconv-lite@^0.4.24: +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +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@^4.3.8: + version "4.3.8" + resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.8.tgz#31144060be963fd6850e5cc8f019a1dfe194296d" + integrity sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow== + dependencies: + chalk "^4.0.0" + ci-info "^2.0.0" + compare-versions "^3.6.0" + cosmiconfig "^7.0.0" + find-versions "^4.0.0" + opencollective-postinstall "^2.0.2" + pkg-dir "^5.0.0" + please-upgrade-node "^3.2.0" + slash "^3.0.0" + which-pm-runs "^1.0.0" + +iconv-lite@0.4.24, 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== @@ -3990,32 +3403,30 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -icss-utils@^4.0.0, icss-utils@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" - integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== - dependencies: - postcss "^7.0.14" - -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== +ieee754@^1.1.13, ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.1.4: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +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-fresh@^3.1.0, import-fresh@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + 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" @@ -4027,11 +3438,6 @@ import-from@3.0.0: 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" @@ -4047,11 +3453,6 @@ indexes-of@^1.0.1: resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= -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" @@ -4060,7 +3461,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4070,10 +3471,15 @@ inherits@2.0.1: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== inquirer@^7.3.3: version "7.3.3" @@ -4094,13 +3500,6 @@ inquirer@^7.3.3: strip-ansi "^6.0.0" through "^2.3.6" -invariant@^2.2.2, 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" - is-absolute@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" @@ -4109,19 +3508,12 @@ is-absolute@^1.0.0: 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= +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== 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" + call-bind "^1.0.0" is-arrayish@^0.2.1: version "0.2.1" @@ -4133,12 +3525,10 @@ is-arrayish@^0.3.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== -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-bigint@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" + integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== is-binary-path@~2.1.0: version "2.1.0" @@ -4147,66 +3537,31 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.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.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.1.tgz#4d1e21a4f437509d25ce55f8184350771421c96d" - integrity sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg== - -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= +is-boolean-object@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" + integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== dependencies: - kind-of "^3.0.2" + call-bind "^1.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== +is-callable@^1.1.4, is-callable@^1.2.2, is-callable@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + +is-core-module@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== dependencies: - kind-of "^6.0.0" + has "^1.0.3" is-date-object@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== -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-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@^2.1.0, is-extglob@^2.1.1: +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= @@ -4228,37 +3583,51 @@ is-fullwidth-code-point@^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-glob@4.0.1, is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: +is-generator-function@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.9.tgz#e5f82c2323673e7fcad3d12858c83c4039f6399c" + integrity sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A== + +is-glob@4.0.1, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.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-negative-zero@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" - integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= - -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= +is-nan@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== dependencies: - kind-of "^3.0.2" + call-bind "^1.0.0" + define-properties "^1.1.3" + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" + integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== 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-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + is-observable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" @@ -4266,12 +3635,10 @@ is-observable@^1.1.0: 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-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= is-promise@4.0.0: version "4.0.0" @@ -4283,13 +3650,32 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== -is-regex@^1.1.0, is-regex@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" - integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== +is-regex@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" + integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== dependencies: + call-bind "^1.0.2" has-symbols "^1.0.1" +is-regex@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" + integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.2" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + +is-relative-path@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-relative-path/-/is-relative-path-1.0.2.tgz#091b46a0d67c1ed0fe85f1f8cfdde006bb251d46" + integrity sha1-CRtGoNZ8HtD+hfH4z93gBrslHUY= + is-relative@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" @@ -4297,11 +3683,21 @@ is-relative@^1.0.0: dependencies: is-unc-path "^1.0.0" -is-stream@^1.0.1, is-stream@^1.1.0: +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.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-string@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" + integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== + is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" @@ -4309,10 +3705,23 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.1" -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +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-typed-array@^1.1.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.5.tgz#f32e6e096455e329eb7b423862456aa213f0eb4e" + integrity sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.2" + es-abstract "^1.18.0-next.2" + foreach "^2.0.5" + has-symbols "^1.0.1" is-unc-path@^1.0.0: version "1.0.0" @@ -4321,101 +3730,88 @@ is-unc-path@^1.0.0: dependencies: unc-path-regex "^0.1.2" -is-windows@^1.0.1, is-windows@^1.0.2: +is-url@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== + +is-windows@^1.0.1: 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: +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= -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= +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@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" + integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== + +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: - isarray "1.0.0" + node-fetch "^2.6.1" + whatwg-fetch "^3.4.1" -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@^2.1.1, isomorphic-fetch@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= +isomorphic-form-data@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isomorphic-form-data/-/isomorphic-form-data-2.0.0.tgz#9f6adf1c4c61ae3aefd8f110ab60fb9b143d6cec" + integrity sha512-TYgVnXWeESVmQSg4GLVbalmQ+B4NPi/H4eWxqALKj63KsUrcu301YDjBqaOw3h+cbak7Na4Xyps3BiptHtxTfg== dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" + form-data "^2.3.2" -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= +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== -iterall@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" - integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== - -jest-worker@24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" - integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== - dependencies: - merge-stream "^2.0.0" - supports-color "^6.1.0" - -jest-worker@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f" - integrity sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw== +jest-worker@27.0.0-next.5: + version "27.0.0-next.5" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.0-next.5.tgz#5985ee29b12a4e191f4aae4bb73b97971d86ec28" + integrity sha512-mk0umAQ5lT+CaOJ+Qp01N6kz48sJG2kr2n1rX0koqKf6FIygQV0qLOdN9SCYID4IVeSigDOcPeGLozdMLYfb5g== dependencies: "@types/node" "*" merge-stream "^2.0.0" - supports-color "^7.0.0" + supports-color "^8.0.0" + +js-cookie@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" + integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== "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@^3.14.0: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== +js-yaml@^3.13.1, js-yaml@^3.14.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= -json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" @@ -4426,11 +3822,6 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - json-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" @@ -4438,11 +3829,6 @@ json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - 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" @@ -4458,26 +3844,19 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.0, json5@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== dependencies: minimist "^1.2.5" -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: - universalify "^1.0.0" + universalify "^2.0.0" optionalDependencies: graceful-fs "^4.1.6" @@ -4502,16 +3881,6 @@ jsonwebtoken@^8.5.1: ms "^2.1.1" semver "^5.6.0" -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - jwa@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" @@ -4529,6 +3898,11 @@ jws@^3.2.2: jwa "^1.4.1" safe-buffer "^5.0.1" +keen-slider@^5.2.4: + version "5.4.0" + resolved "https://registry.yarnpkg.com/keen-slider/-/keen-slider-5.4.0.tgz#e5a949e2bb237d7d6b068458dcda59ae9c415254" + integrity sha512-gN+lYpaj4vgJr0fIKtJVy/xG2CnjHiY4lixllp32x6LW8QlT1gD4qmzclFBwMn1/LPvnM2UhOFSgAOmBIhPtAQ== + keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -4536,35 +3910,11 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" -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: +kind-of@^6.0.3: 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== -klona@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" - integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== - latest-version@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" @@ -4572,23 +3922,40 @@ latest-version@5.1.0: dependencies: package-json "^6.3.0" -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levenary@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" - integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: - leven "^3.1.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= +lint-staged@^10.5.3: + version "10.5.4" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.4.tgz#cd153b5f0987d2371fc1d2847a409a2fe705b665" + integrity sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg== + dependencies: + chalk "^4.1.0" + cli-truncate "^2.1.0" + commander "^6.2.0" + cosmiconfig "^7.0.0" + debug "^4.2.0" + dedent "^0.7.0" + enquirer "^2.3.6" + execa "^4.1.0" + listr2 "^3.2.2" + log-symbols "^4.0.0" + micromatch "^4.0.2" + normalize-path "^3.0.0" + please-upgrade-node "^3.2.0" + string-argv "0.3.1" + stringify-object "^3.3.0" + 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" @@ -4618,6 +3985,21 @@ listr-verbose-renderer@^0.5.0: date-fns "^1.27.2" figures "^2.0.0" +listr2@^3.2.2: + version "3.3.1" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.3.1.tgz#87b57cc0b8541fa794b814c8bcb76f1211cfbf5c" + integrity sha512-8Zoxe7s/8nNr4bJ8bdAduHD8uJce+exmMmUWTXlq0WuUdffnH3muisHPHPFtW2vvOfohIsq7FGCaguUxN/h3Iw== + dependencies: + chalk "^4.1.0" + cli-truncate "^2.1.0" + figures "^3.2.0" + indent-string "^4.0.0" + log-update "^4.0.0" + p-map "^4.0.0" + rxjs "^6.6.3" + 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" @@ -4633,11 +4015,6 @@ listr@^0.14.3: p-map "^2.0.0" rxjs "^6.3.3" -loader-runner@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.0.0.tgz#02abcfd9fe6ff7a5aeb3547464746c4dc6ba333d" - integrity sha512-Rqf48ufrr48gFjnaqss04QesoXB7VenbpFFIV/0yOKGnpbejrVlOPqTsoX42FG5goXM5Ixekcs4DqDzHOX2z7Q== - loader-utils@1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" @@ -4647,14 +4024,14 @@ loader-utils@1.2.3: emojis-list "^2.0.0" json5 "^1.0.1" -loader-utils@2.0.0, loader-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" - integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== +loader-utils@^1.0.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" - json5 "^2.1.2" + json5 "^1.0.1" locate-path@^5.0.0: version "5.0.0" @@ -4663,11 +4040,28 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= +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.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" @@ -4703,6 +4097,11 @@ lodash.once@^4.0.0: 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.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -4723,12 +4122,17 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= + lodash.toarray@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= -lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.19, lodash@^4.17.20, lodash@~4.17.20: +lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@~4.17.20: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -4756,6 +4160,16 @@ log-update@^2.3.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" + 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" @@ -4763,13 +4177,20 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lower-case@2.0.1, lower-case@^2.0.1: +lower-case@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== dependencies: tslib "^1.10.0" +lower-case@^2.0.1, 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" @@ -4780,13 +4201,56 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== -lru-cache@6.0.0, lru-cache@^6.0.0: +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" +madge@^3.8.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/madge/-/madge-3.12.0.tgz#727c1ebb268150d52e6d0c3ccd382b4c7bd0bf19" + integrity sha512-9kA2W5RIbvH25CWc8tzPNn1X47AOcHEEwZJxWAMxhEOKEziVR1iMCbGCFUea5tWXs/A+xgJF59o/oSbNkOXpeg== + dependencies: + chalk "^4.1.0" + commander "^5.1.0" + commondir "^1.0.1" + debug "^4.0.1" + dependency-tree "^7.2.2" + detective-amd "^3.0.0" + detective-cjs "^3.1.1" + detective-es6 "^2.1.0" + detective-less "^1.0.2" + detective-postcss "^3.0.1" + detective-sass "^3.0.1" + detective-scss "^2.0.1" + detective-stylus "^1.0.0" + detective-typescript "^5.8.0" + graphviz "0.0.9" + ora "^5.1.0" + pluralize "^8.0.0" + precinct "^6.3.1" + pretty-ms "^7.0.0" + rc "^1.2.7" + typescript "^3.9.5" + walkdir "^0.4.1" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + make-dir@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -4794,17 +4258,25 @@ make-dir@^3.0.2: dependencies: semver "^6.0.0" -map-cache@^0.2.0, map-cache@^0.2.2: +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== + +map-cache@^0.2.0: 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" +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" + integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g== md5.js@^1.3.4: version "1.3.5" @@ -4815,6 +4287,31 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-7.1.1.tgz#7c01595e3d337fcb0ec4e8eed1666ea95903d306" + integrity sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^2.5.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.13.1" + yargs-parser "^18.1.3" + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -4825,26 +4322,7 @@ merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^3.1.10, micromatch@^3.1.4: - 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.2: +micromatch@^4.0.0, micromatch@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== @@ -4860,17 +4338,22 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== +mime-db@1.45.0: + version "1.45.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" + integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== +mime-types@^2.1.12: + version "2.1.28" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" + integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== dependencies: - mime-db "1.44.0" + mime-db "1.45.0" + +mime@^2.3.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.0.tgz#2b4af934401779806ee98026bb42e8c1ae1876b1" + integrity sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag== mimic-fn@^1.0.0: version "1.2.0" @@ -4887,17 +4370,17 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== -mini-svg-data-uri@^1.0.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/mini-svg-data-uri/-/mini-svg-data-uri-1.2.3.tgz#e16baa92ad55ddaa1c2c135759129f41910bc39f" - integrity sha512-zd6KCAyXgmq6FV1mR10oKXYtvmA9vRoB6xPSTUJTbFApCtkefDnYueVR1gkof3KcdLZo1Y8mjF2DFmQMIxsHNQ== +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: +minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= @@ -4909,103 +4392,79 @@ minimatch@3.0.4, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -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-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: - 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@^3.0.0, minipass@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== - dependencies: - yallist "^4.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" - -mkdirp@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c" - integrity sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg== - dependencies: - minimist "^1.2.5" - -mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +modern-normalize@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/modern-normalize/-/modern-normalize-1.0.0.tgz#539d84a1e141338b01b346f3e27396d0ed17601e" + integrity sha512-1lM+BMLGuDfsdwf3rsgBSrxJwAZHFIrQ8YR61xIqdHo0uNKI9M52wNpHSrliZATJp51On6JD0AfRxd4YGSU0lw== + +module-definition@^3.0.0, module-definition@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/module-definition/-/module-definition-3.3.1.tgz#fedef71667713e36988b93d0626a4fe7b35aebfc" + integrity sha512-kLidGPwQ2yq484nSD+D3JoJp4Etc0Ox9P0L34Pu/cU4X4HcG7k7p62XI5BBuvURWMRX3RPyuhOcBHbKus+UH4A== + dependencies: + ast-module-types "^2.7.1" + node-source-walk "^4.0.0" + +module-lookup-amd@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/module-lookup-amd/-/module-lookup-amd-6.2.0.tgz#70600008b3f26630fde9ef9ae6165ac69de6ecbb" + integrity sha512-uxHCj5Pw9psZiC1znjU2qPsubt6haCSsN9m7xmIdoTciEgfxUkE1vhtDvjHPuOXEZrVJhjKgkmkP+w73rRuelQ== + dependencies: + commander "^2.8.1" + debug "^4.1.0" + file-exists-dazinatorfork "^1.0.2" + find "^0.3.0" + requirejs "^2.3.5" + requirejs-config-file "^3.1.1" + 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, ms@^2.1.1: +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.14.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" - integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== +nanoid@^3.1.20: + version "3.1.20" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" + integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== -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" +nanoid@^3.1.22: + version "3.1.23" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" + integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== native-url@0.3.4: version "0.3.4" @@ -5014,92 +4473,87 @@ native-url@0.3.4: dependencies: querystring "^0.2.0" -neo-async@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== +next-seo@^4.11.0: + version "4.19.0" + resolved "https://registry.yarnpkg.com/next-seo/-/next-seo-4.19.0.tgz#b3be79a544e420dbbf1e4fcff98dad9790f15e36" + integrity sha512-+jgXd1UW0XKLiBMrumjPDANeV82mTHTxGZJwU6T1mlNougKpXINlDgIHkN30sM2eDXh+xXOURj99WN2Tm9K6rg== -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +next-themes@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.0.4.tgz#fb06a9d03887201dd8fdd75fc1c84f406988f61e" + integrity sha512-j0bJJ6INanFsniCL31j1ZhjNaoqIFOaTeiUakbGpGxDz4+318Zp2ZfaorSjpUhzDWbXBKA3ZDE0DSUVWJ/8EsA== -next-tick@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= - -next@^9.5.4-canary.20: - version "9.5.4-canary.20" - resolved "https://registry.yarnpkg.com/next/-/next-9.5.4-canary.20.tgz#041ae6c400b8ab7b7aabba3d66bdcda428f241c3" - integrity sha512-rQvdk3NDYyrB1KvQv2SzAoZlcpOJV2GA93l7BVbByp0l006d3dkFDML7XKEqqtYcvtDlzdKS/V9hde0psKFkAg== +next-unused@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/next-unused/-/next-unused-0.0.3.tgz#e7560b30c64b91a4143450eee1cdb535eb85e51b" + integrity sha512-LrjyGL6gq3v7eOL2KNkmciDZCpJjt9QjEftQEr4oZ8o5zwoEvLqfn7mgv+9Qv+i39fDrEYlF436zfwpBHp7ahg== dependencies: - "@ampproject/toolbox-optimizer" "2.6.0" - "@babel/code-frame" "7.10.4" - "@babel/core" "7.7.7" - "@babel/plugin-proposal-class-properties" "7.10.4" - "@babel/plugin-proposal-export-namespace-from" "7.10.4" - "@babel/plugin-proposal-numeric-separator" "7.10.4" - "@babel/plugin-proposal-object-rest-spread" "7.11.0" - "@babel/plugin-syntax-bigint" "7.8.3" - "@babel/plugin-syntax-dynamic-import" "7.8.3" - "@babel/plugin-syntax-jsx" "7.10.4" - "@babel/plugin-transform-modules-commonjs" "7.10.4" - "@babel/plugin-transform-runtime" "7.11.5" - "@babel/preset-env" "7.11.5" - "@babel/preset-modules" "0.1.4" - "@babel/preset-react" "7.10.4" - "@babel/preset-typescript" "7.10.4" - "@babel/runtime" "7.11.2" - "@babel/types" "7.11.5" - "@next/polyfill-module" "9.5.4-canary.20" - "@next/react-dev-overlay" "9.5.4-canary.20" - "@next/react-refresh-utils" "9.5.4-canary.20" + madge "^3.8.0" + ts-loader "^7.0.0" + +next@10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/next/-/next-10.2.0.tgz#6654cc925d8abcb15474fa062fc6b3ee527dd6dc" + integrity sha512-PKDKCSF7s82xudu3kQhOEaokxggpbLEWouEUtzP6OqV0YqKYHF+Ff+BFLycEem8ixtTM2M6ElN0VRJcskJfxPQ== + dependencies: + "@babel/runtime" "7.12.5" + "@hapi/accept" "5.0.1" + "@next/env" "10.2.0" + "@next/polyfill-module" "10.2.0" + "@next/react-dev-overlay" "10.2.0" + "@next/react-refresh-utils" "10.2.0" + "@opentelemetry/api" "0.14.0" + assert "2.0.0" ast-types "0.13.2" - babel-plugin-transform-define "2.0.0" - babel-plugin-transform-react-remove-prop-types "0.4.24" - browserslist "4.13.0" + browserify-zlib "0.2.0" + browserslist "4.16.1" buffer "5.6.0" - cacache "15.0.5" - caniuse-lite "^1.0.30001113" - chokidar "2.1.8" + caniuse-lite "^1.0.30001179" + chalk "2.4.2" + chokidar "3.5.1" + constants-browserify "1.0.0" crypto-browserify "3.12.0" - css-loader "4.3.0" - cssnano-simple "1.2.0" + cssnano-simple "2.0.0" + domain-browser "4.19.0" + encoding "0.1.13" + etag "1.8.1" find-cache-dir "3.3.1" - jest-worker "24.9.0" - loader-utils "2.0.0" - mkdirp "0.5.3" + get-orientation "1.1.2" + https-browserify "1.0.0" + jest-worker "27.0.0-next.5" native-url "0.3.4" - neo-async "2.6.1" - node-html-parser "^1.2.19" + node-fetch "2.6.1" + node-html-parser "1.4.9" + node-libs-browser "^2.2.1" + os-browserify "0.3.0" + p-limit "3.1.0" path-browserify "1.0.1" pnp-webpack-plugin "1.6.4" - postcss "7.0.32" + postcss "8.2.13" process "0.11.10" prop-types "15.7.2" + querystring-es3 "0.2.1" + raw-body "2.4.1" react-is "16.13.1" react-refresh "0.8.3" - resolve-url-loader "3.1.1" - sass-loader "10.0.2" - schema-utils "2.7.1" stream-browserify "3.0.0" - style-loader "1.2.1" - styled-jsx "3.3.0" - use-subscription "1.4.1" + stream-http "3.1.1" + string_decoder "1.3.0" + styled-jsx "3.3.2" + timers-browserify "2.0.12" + tty-browserify "0.0.1" + use-subscription "1.5.1" + util "0.12.3" vm-browserify "1.1.2" - watchpack "2.0.0-beta.13" - web-vitals "0.2.4" - webpack "4.44.1" - webpack-sources "1.4.3" + watchpack "2.1.1" -no-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" - integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw== +no-case@^3.0.3, 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.1" - tslib "^1.10.0" + lower-case "^2.0.2" + tslib "^2.0.3" node-emoji@^1.8.1: version "1.10.0" @@ -5108,50 +4562,78 @@ node-emoji@^1.8.1: dependencies: lodash.toarray "^4.4.0" -node-fetch@2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== - -node-fetch@2.6.1: +node-fetch@2.6.1, node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== -node-fetch@^1.0.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== +node-html-parser@1.4.9: + version "1.4.9" + resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-1.4.9.tgz#3c8f6cac46479fae5800725edb532e9ae8fd816c" + integrity sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw== dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - -node-gyp-build@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-3.7.0.tgz#daa77a4f547b9aed3e2aac779eaf151afd60ec8d" - integrity sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w== - -node-html-parser@^1.2.19: - version "1.2.20" - resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-1.2.20.tgz#37e9ebc627dbe3ff446eea4ac93e3d254b7c6ee4" - integrity sha512-1fUpYjAducDrrBSE0etRUV1tM+wSFTudmrslMXuk35wL/L29E7e1CLQn4CNzFLnqtYpmDlWhkD6VUloyHA0dwA== - dependencies: - he "1.1.1" + he "1.2.0" node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-releases@^1.1.58, node-releases@^1.1.61: - version "1.1.61" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e" - integrity sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g== +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" -normalize-html-whitespace@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz#5e3c8e192f1b06c3b9eee4b7e7f28854c7601e34" - integrity sha512-9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA== +node-releases@^1.1.69: + version "1.1.72" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" + integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== + +node-releases@^1.1.70: + version "1.1.70" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.70.tgz#66e0ed0273aa65666d7fe78febe7634875426a08" + integrity sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw== + +node-source-walk@^4.0.0, node-source-walk@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/node-source-walk/-/node-source-walk-4.2.0.tgz#c2efe731ea8ba9c03c562aa0a9d984e54f27bc2c" + integrity sha512-hPs/QMe6zS94f5+jG3kk9E7TNm4P2SulrKiLWMzKszBfNZvL/V6wseHlTd7IvfW0NZWqPtK3+9yYNr+3USGteA== + dependencies: + "@babel/parser" "^7.0.0" + +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" normalize-path@^2.1.1: version "2.1.1" @@ -5175,10 +4657,12 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== -normalize.css@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" - integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== +npm-run-path@^4.0.0: + 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" @@ -5195,69 +4679,49 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - 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= +object-hash@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.1.1.tgz#9447d0279b4fcf80cff3259bf66a1dc73afabe09" + integrity sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ== + +object-inspect@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-hash@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.0.3.tgz#d12db044e03cd2ca3d77c0570d87225b02e1e6ea" - integrity sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg== - -object-inspect@^1.7.0, object-inspect@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" - integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + call-bind "^1.0.2" + define-properties "^1.1.3" object-keys@^1.0.12, 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-path@0.11.4: - version "0.11.4" - resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949" - integrity sha1-NwrnUvvzfePqcKhhwju6iRVpGUk= +object-path@^0.11.4: + version "0.11.5" + resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.5.tgz#d4e3cf19601a5140a55a16ad712019a9c50b577a" + integrity sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg== -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: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd" - integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA== +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" - es-abstract "^1.18.0-next.0" has-symbols "^1.0.1" object-keys "^1.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" - 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" @@ -5279,6 +4743,54 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +opencollective-postinstall@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" + integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== + +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.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +ora@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.3.0.tgz#fb832899d3a1372fe71c8b2c534bbfe74961bb6f" + integrity sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g== + dependencies: + bl "^4.0.3" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + log-symbols "^4.0.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@0.3.0, os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -5289,13 +4801,20 @@ p-cancelable@^1.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== -p-limit@3.0.2, p-limit@^3.0.2: +p-limit@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== dependencies: p-try "^2.0.0" +p-limit@3.1.0, p-limit@^3.0.2: + 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@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -5310,6 +4829,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" @@ -5337,6 +4863,11 @@ package-json@^6.3.0: registry-url "^5.0.0" semver "^6.2.0" +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + param-case@3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238" @@ -5373,16 +4904,21 @@ parse-filepath@^1.0.2: path-root "^0.1.1" parse-json@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" - integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== + 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.1, pascal-case@^3.1.1: +parse-ms@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" + integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== + +pascal-case@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f" integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA== @@ -5390,21 +4926,24 @@ pascal-case@3.1.1, pascal-case@^3.1.1: no-case "^3.0.3" tslib "^1.10.0" -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +pascal-case@^3.1.1, 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" + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== path-browserify@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -5415,6 +4954,11 @@ path-is-absolute@^1.0.0: 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: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -5448,27 +4992,46 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== -pkg-dir@^4.1.0, pkg-dir@^4.2.0: +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pkg-dir@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" -platform@1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.3.tgz#646c77011899870b6a0903e75e997e8e51da7461" - integrity sha1-ZGx3ARiZhwtqCQPnXpl+jlHadGE= +pkg-dir@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" + integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== + dependencies: + find-up "^5.0.0" + +platform@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" + integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== + +please-upgrade-node@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== + dependencies: + semver-compare "^1.0.0" + +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== pnp-webpack-plugin@1.6.4: version "1.6.4" @@ -5477,11 +5040,6 @@ pnp-webpack-plugin@1.6.4: dependencies: ts-pnp "^1.1.6" -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@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880" @@ -5601,13 +5159,13 @@ postcss-focus-within@^3.0.0: postcss "^7.0.2" postcss-font-variant@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz#71dd3c6c10a0d846c5eda07803439617bbbabacc" - integrity sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg== + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz#42d4c0ab30894f60f98b17561eb5c0321f502641" + integrity sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA== dependencies: postcss "^7.0.2" -postcss-functions@^3.0.0: +postcss-functions@^3: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-functions/-/postcss-functions-3.0.0.tgz#0e94d01444700a481de20de4d55fb2640564250e" integrity sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4= @@ -5640,13 +5198,13 @@ postcss-initial@^3.0.0: lodash.template "^4.5.0" postcss "^7.0.2" -postcss-js@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-2.0.3.tgz#a96f0f23ff3d08cec7dc5b11bf11c5f8077cdab9" - integrity sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w== +postcss-js@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-3.0.3.tgz#2f0bd370a2e8599d45439f6970403b5873abda33" + integrity sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw== dependencies: camelcase-css "^2.0.1" - postcss "^7.0.18" + postcss "^8.1.6" postcss-lab-function@^2.0.1: version "2.0.1" @@ -5671,55 +5229,14 @@ postcss-media-minmax@^4.0.0: dependencies: postcss "^7.0.2" -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" - integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== +postcss-nested@^5.0.1: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.3.tgz#2f46d77a06fc98d9c22344fd097396f5431386db" + integrity sha512-R2LHPw+u5hFfDgJG748KpGbJyTv7Yr33/2tIMWxquYuHTd9EXu27PYnKi7BxMXLtzKC0a0WVsqHtd7qIluQu/g== dependencies: - postcss "^7.0.5" + postcss-selector-parser "^6.0.4" -postcss-modules-local-by-default@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" - integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== - dependencies: - icss-utils "^4.1.1" - postcss "^7.0.32" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" - integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - -postcss-modules-values@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" - integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== - dependencies: - icss-utils "^4.0.0" - postcss "^7.0.6" - -postcss-nested@^4.1.1: - version "4.2.3" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-4.2.3.tgz#c6f255b0a720549776d220d00c4b70cd244136f6" - integrity sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw== - dependencies: - postcss "^7.0.32" - postcss-selector-parser "^6.0.2" - -postcss-nested@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.0.tgz#0d05bb93578ec42919bdbda7d4eb419d5f58fe07" - integrity sha512-jQVUwMOkDJPHyY1o3bxLErHnxIFsO3yDgdDsL/rjSkUHrWNdtNGhP50O0P+vUjEwPo+ekCRhLXTe8TziARoS0w== - dependencies: - postcss-selector-parser "^6.0.2" - -postcss-nesting@^7.0.0: +postcss-nesting@^7.0.0, postcss-nesting@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== @@ -5806,13 +5323,6 @@ postcss-replace-overflow-wrap@^3.0.0: dependencies: postcss "^7.0.2" -postcss-safe-parser@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96" - integrity sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g== - dependencies: - postcss "^7.0.26" - postcss-selector-matches@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" @@ -5822,9 +5332,9 @@ postcss-selector-matches@^4.0.0: postcss "^7.0.2" postcss-selector-not@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz#c68ff7ba96527499e832724a2674d65603b645c0" - integrity sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ== + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz#263016eef1cf219e0ade9a913780fc1f48204cbf" + integrity sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ== dependencies: balanced-match "^1.0.0" postcss "^7.0.2" @@ -5838,10 +5348,10 @@ postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.3.tgz#766d77728728817cc140fa1ac6da5e77f9fada98" - integrity sha512-0ClFaY4X1ra21LRqbW6y3rUbWcxnSVkDFG57R7Nxus9J9myPFlv+jYDMohzpkBx0RrjjiqjtycpchQ+PLGmZ9w== +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" + integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== dependencies: cssesc "^3.0.0" indexes-of "^1.0.1" @@ -5858,6 +5368,15 @@ postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== +postcss-values-parser@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-1.5.0.tgz#5d9fa63e2bcb0179ce48f3235303765eb89f3047" + integrity sha512-3M3p+2gMp0AH3da530TlX8kiO1nxdTnc3C6vr8dMxRLIlh8UYkz0/wcwptSXjhtx2Fr0TySI7a+BHDQ8NL7LaQ== + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" @@ -5867,23 +5386,14 @@ postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: indexes-of "^1.0.1" uniq "^1.0.1" -postcss@7.0.21: - version "7.0.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17" - integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ== +postcss@8.2.13: + version "8.2.13" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.13.tgz#dbe043e26e3c068e45113b1ed6375d2d37e2129f" + integrity sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ== dependencies: - chalk "^2.4.2" + colorette "^1.2.2" + nanoid "^3.1.22" source-map "^0.6.1" - supports-color "^6.1.0" - -postcss@7.0.32: - version "7.0.32" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" - integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" postcss@^6.0.9: version "6.0.23" @@ -5894,40 +5404,80 @@ postcss@^6.0.9: source-map "^0.6.1" supports-color "^5.4.0" -postcss@^7.0.11, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.18, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.34" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.34.tgz#f2baf57c36010df7de4009940f21532c16d65c20" - integrity sha512-H/7V2VeNScX9KE83GDrDZNiGT1m2H+UTnlinIzhjlLX9hfMUn1mHNnGeX81a1c8JSBdBvqk7c2ZOG6ZPn5itGw== +postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" + integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== dependencies: chalk "^2.4.2" source-map "^0.6.1" supports-color "^6.1.0" +postcss@^8.1.6, postcss@^8.2.1, postcss@^8.2.6: + version "8.2.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.6.tgz#5d69a974543b45f87e464bc4c3e392a97d6be9fe" + integrity sha512-xpB8qYxgPuly166AGlpRjUdEYtmOWx2iCwGmrv4vqZL9YPVviDVPZPRXxnXr6xPZOdxQ9lp3ZBFCRgWJ7LE3Sg== + dependencies: + colorette "^1.2.1" + nanoid "^3.1.20" + source-map "^0.6.1" + +precinct@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/precinct/-/precinct-6.3.1.tgz#8ad735a8afdfc48b56ed39c9ad3bf999b6b928dc" + integrity sha512-JAwyLCgTylWminoD7V0VJwMElWmwrVSR6r9HaPWCoswkB4iFzX7aNtO7VBfAVPy+NhmjKb8IF8UmlWJXzUkOIQ== + dependencies: + commander "^2.20.3" + debug "^4.1.1" + detective-amd "^3.0.0" + detective-cjs "^3.1.1" + detective-es6 "^2.1.0" + detective-less "^1.0.2" + detective-postcss "^3.0.1" + detective-sass "^3.0.1" + detective-scss "^2.0.1" + detective-stylus "^1.0.0" + detective-typescript "^5.8.0" + module-definition "^3.3.0" + node-source-walk "^4.2.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + 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= +prettier@^2.0.5, prettier@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== + pretty-hrtime@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= +pretty-ms@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" + integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== + dependencies: + parse-ms "^2.1.0" + 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== -process@0.11.10: +process@0.11.10, process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -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@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -5935,7 +5485,7 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types@15.7.2, prop-types@^15.6.2: +prop-types@15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -5944,10 +5494,10 @@ prop-types@15.7.2, prop-types@^15.6.2: object-assign "^4.1.1" react-is "^16.8.1" -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= public-encrypt@^4.0.0: version "4.0.3" @@ -5969,32 +5519,57 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0, punycode@^2.1.1: +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +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== -purgecss@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-2.3.0.tgz#5327587abf5795e6541517af8b190a6fb5488bb3" - integrity sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ== +purgecss@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-3.1.3.tgz#26987ec09d12eeadc318e22f6e5a9eb0be094f41" + integrity sha512-hRSLN9mguJ2lzlIQtW4qmPS2kh6oMnA9RxdIYK8sz18QYqd6ePp4GNDl18oWHA1f2v2NEQIh51CO8s/E3YGckQ== dependencies: - commander "^5.0.0" + commander "^6.0.0" glob "^7.0.0" - postcss "7.0.32" + postcss "^8.2.1" postcss-selector-parser "^6.0.2" -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +querystring-es3@0.2.1, querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= -querystring@^0.2.0: +querystring@0.2.0, querystring@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3" + integrity sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg== + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== @@ -6009,7 +5584,17 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" -rc@^1.2.8: +raw-body@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" + integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== + dependencies: + bytes "3.1.0" + http-errors "1.7.3" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -6019,36 +5604,63 @@ rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f" - integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== +react-dom@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.1.tgz#1de2560474ec9f0e334285662ede52dbc5426fc6" + integrity sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" + scheduler "^0.20.1" react-is@16.13.1, react-is@^16.8.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-refresh@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== -react@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" - integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== +react-ticker@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/react-ticker/-/react-ticker-1.2.2.tgz#12cda5ff8266c6fe90ffcd8c58e12ba1596ddf24" + integrity sha512-PXUujoPJvajxwOfosuuujlrBUrjgGp4FB4haWFOI25ujhMppW4SuLkiOdQ9AylrWN3yTHWdk2kbQWe3n9SjFGA== + +react@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127" + integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.2" -readable-stream@^2.0.2: +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.3.3, readable-stream@^2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -6061,7 +5673,7 @@ readable-stream@^2.0.2: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.5.0, readable-stream@^3.6.0: +readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -6070,83 +5682,38 @@ readable-stream@^3.5.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdirp@^2.2.1: - 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.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" - integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== dependencies: picomatch "^2.2.1" -reduce-css-calc@^2.1.6: - version "2.1.7" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.7.tgz#1ace2e02c286d78abcd01fd92bfe8097ab0602c2" - integrity sha512-fDnlZ+AybAS3C7Q9xDq5y8A2z+lT63zLbynew/lur/IR24OQF5x98tfNwf79mzEdfywZ0a2wpM860FhFfMxZlA== +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +reduce-css-calc@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz#7ef8761a28d614980dc0c982f772c93f7a99de03" + integrity sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg== dependencies: css-unit-converter "^1.1.1" postcss-value-parser "^3.3.0" -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" - integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== - regenerator-runtime@^0.13.4: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== - dependencies: - "@babel/runtime" "^7.8.4" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regex-parser@2.2.10: - version "2.2.10" - resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.10.tgz#9e66a8f73d89a107616e63b39d4deddfee912b37" - integrity sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA== - -regexpu-core@^4.7.0: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - registry-auth-token@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.0.tgz#1d37dffda72bbecd0f581e4715540213a65eb7da" - integrity sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w== + 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" @@ -6157,22 +5724,10 @@ registry-url@^5.0.0: dependencies: rc "^1.2.8" -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - -regjsparser@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" - integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== - dependencies: - jsesc "~0.5.0" - -relay-compiler@10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/relay-compiler/-/relay-compiler-10.0.1.tgz#d3029a5121cad52e1e55073210365b827cee5f3b" - integrity sha512-hrTqh81XXxPB4EgvxPmvojICr0wJnRoumxOsMZnS9dmhDHSqcBAT7+C3+rdGm5sSdNH8mbMcZM7YSPDh8ABxQw== +relay-compiler@10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/relay-compiler/-/relay-compiler-10.1.0.tgz#fb4672cdbe9b54869a3a79759edd8c2d91609cbe" + integrity sha512-HPqc3N3tNgEgUH5+lTr5lnLbgnsZMt+MRiyS0uAVNhuPY2It0X1ZJG+9qdA3L9IqKFUNwVn6zTO7RArjMZbARQ== dependencies: "@babel/core" "^7.0.0" "@babel/generator" "^7.5.0" @@ -6183,21 +5738,21 @@ relay-compiler@10.0.1: babel-preset-fbjs "^3.3.0" chalk "^4.0.0" fb-watchman "^2.0.0" - fbjs "^1.0.0" + fbjs "^3.0.0" glob "^7.1.1" immutable "~3.7.6" nullthrows "^1.1.1" - relay-runtime "10.0.1" + relay-runtime "10.1.0" signedsource "^1.0.0" yargs "^15.3.1" -relay-runtime@10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/relay-runtime/-/relay-runtime-10.0.1.tgz#c83bd7e6e37234ece2a62a254e37dd199a4f74f9" - integrity sha512-sPYiuosq+5gQ7zXs2EKg2O8qRSsF8vmMYo6SIHEi4juBLg1HrdTEvqcaNztc2ZFmUc4vYZpTbbS4j/TZCtHuyA== +relay-runtime@10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/relay-runtime/-/relay-runtime-10.1.0.tgz#4753bf36e95e8d862cef33608e3d98b4ed730d16" + integrity sha512-bxznLnQ1ST6APN/cFi7l0FpjbZVchWQjjhj9mAuJBuUqNNCh9uV+UTRhpQF7Q8ycsPp19LHTpVyGhYb0ustuRQ== dependencies: "@babel/runtime" "^7.0.0" - fbjs "^1.0.0" + fbjs "^3.0.0" remedial@^1.0.7: version "1.0.8" @@ -6214,47 +5769,11 @@ remove-trailing-spaces@^1.0.6: 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.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -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= -request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -6265,6 +5784,30 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +requirejs-config-file@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/requirejs-config-file/-/requirejs-config-file-3.1.2.tgz#de8c0b3eebdf243511c994a8a24b006f8b825997" + integrity sha512-sdLWywcDuNz7EIOhenSbRfT4YF84nItDv90coN2htbokjmU2QeyQuSBZILQUKNksepl8UPVU+hgYySFaDxbJPQ== + dependencies: + esprima "^4.0.0" + make-dir "^2.1.0" + stringify-object "^3.2.1" + +requirejs@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.6.tgz#e5093d9601c2829251258c0b9445d4d19fa9e7c9" + integrity sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-dependency-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-dependency-path/-/resolve-dependency-path-2.0.0.tgz#11700e340717b865d216c66cabeb4a2a3c696736" + integrity sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w== + 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" @@ -6275,32 +5818,12 @@ resolve-from@^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-loader@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz#28931895fa1eab9be0647d3b2958c100ae3c0bf0" - integrity sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ== - dependencies: - adjust-sourcemap-loader "2.0.0" - camelcase "5.3.1" - compose-function "3.0.3" - convert-source-map "1.7.0" - es6-iterator "2.0.3" - loader-utils "1.2.3" - postcss "7.0.21" - rework "1.0.1" - rework-visit "1.0.0" - source-map "0.6.1" - -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.14.2, resolve@^1.3.2, resolve@^1.8.1: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== +resolve@^1.10.0, resolve@^1.11.1, resolve@^1.19.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== dependencies: + is-core-module "^2.2.0" path-parse "^1.0.6" responselike@^1.0.2: @@ -6326,36 +5849,16 @@ restore-cursor@^3.1.0: 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: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= 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== -rework-visit@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" - integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo= - -rework@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" - integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc= - dependencies: - convert-source-map "^0.3.3" - css "^2.0.0" - -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" - ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -6370,11 +5873,13 @@ run-async@^2.4.0: integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-parallel@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" - integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + 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, rxjs@^6.6.0: +rxjs@^6.3.3, rxjs@^6.6.0, rxjs@^6.6.3: version "6.6.3" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== @@ -6391,57 +5896,42 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: 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", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass-loader@10.0.2: - version "10.0.2" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.2.tgz#c7b73010848b264792dd45372eea0b87cba4401e" - integrity sha512-wV6NDUVB8/iEYMalV/+139+vl2LaRFlZGEd5/xmdcdzQcgmis+npyco6NsDTVOlNA3y2NV9Gcz+vHyFMIT+ffg== +sass-lookup@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/sass-lookup/-/sass-lookup-3.0.0.tgz#3b395fa40569738ce857bc258e04df2617c48cac" + integrity sha512-TTsus8CfFRn1N44bvdEai1no6PqdmDiQUiqW5DlpmtT+tYnIt1tXtDIph5KA1efC+LmioJXSnCtUVpcK9gaKIg== dependencies: - klona "^2.0.3" - loader-utils "^2.0.0" - neo-async "^2.6.2" - schema-utils "^2.7.1" - semver "^7.3.2" + commander "^2.16.0" -scheduler@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" - integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== +scheduler@^0.20.1: + version "0.20.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.1.tgz#da0b907e24026b01181ecbc75efdc7f27b5a000c" + integrity sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" -schema-utils@2.7.1, schema-utils@^2.6.6, schema-utils@^2.7.0, schema-utils@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - 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@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +semver-regex@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.2.tgz#34b4c0d361eef262e07199dbef316d0f2ab11807" + integrity sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA== + +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -6452,37 +5942,32 @@ semver@^6.0.0, semver@^6.2.0: integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -serialize-javascript@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== dependencies: - randombytes "^2.1.0" + lru-cache "^6.0.0" set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -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: +setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -6491,11 +5976,28 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +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== + shell-quote@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== +shopify-buy@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/shopify-buy/-/shopify-buy-2.11.0.tgz#0f7cb52741395e4ae778c336f32ddf3fe67c2f35" + integrity sha512-bGjS1b/VCPvCjazSstlKwgLtK1WBotWom06/12loja8yfo/cWkLuJsakBbQe1uEIDiOLhKaR0M0CAXZFheYDug== + signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -6513,6 +6015,15 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" +sirv@^1.0.7: + version "1.0.11" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.11.tgz#81c19a29202048507d6ec0d8ba8910fda52eb5a4" + integrity sha512-SR36i3/LSWja7AJNRBz4fF/Xjpn7lQFI30tZ434dIy+bitLYSP+ZEenHg36i23V2SGEz+kqjksg0uOGZ5LPiqg== + dependencies: + "@polka/url" "^1.0.0-next.9" + mime "^2.3.1" + totalist "^1.0.0" + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -6523,53 +6034,25 @@ slice-ansi@0.0.4: resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= -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== +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: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" -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== +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: - kind-of "^3.2.0" + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.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" - -source-list-map@^2.0.0, source-list-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - 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.12: +source-map-support@^0.5.17: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -6577,16 +6060,6 @@ source-map-support@~0.5.12: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - source-map@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" @@ -6599,44 +6072,51 @@ source-map@0.8.0-beta.0: dependencies: whatwg-url "^7.0.0" -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -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== +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: - extend-shallow "^3.0.0" + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.7" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" - integrity sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA== - dependencies: - minipass "^3.1.1" +sse-z@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/sse-z/-/sse-z-0.3.0.tgz#e215db7c303d6c4a4199d80cb63811cc28fa55b9" + integrity sha512-jfcXynl9oAOS9YJ7iqS2JMUEHOlvrRAD+54CENiWnc4xsuVLQVSgmwf7cwOTcBd/uq3XkQKBGojgvEtVXcJ/8w== stacktrace-parser@0.1.10: version "0.1.10" @@ -6645,13 +6125,10 @@ stacktrace-parser@0.1.10: dependencies: type-fest "^0.7.1" -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" +"statuses@>= 1.5.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= stream-browserify@3.0.0: version "3.0.0" @@ -6661,6 +6138,52 @@ stream-browserify@3.0.0: inherits "~2.0.4" readable-stream "^3.5.0" +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-http@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.1.1.tgz#0370a8017cf8d050b9a8554afe608f043eaff564" + integrity sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.4" + readable-stream "^3.6.0" + xtend "^4.0.2" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-parser@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/stream-parser/-/stream-parser-0.3.1.tgz#1618548694420021a1182ff0af1911c129761773" + integrity sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M= + dependencies: + debug "2" + +streamsearch@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= + +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" @@ -6697,23 +6220,39 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string.prototype.trimend@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" - integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== +string.prototype.trimend@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.5" -string.prototype.trimstart@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" - integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.5" -string_decoder@^1.1.1: +string.prototype.trimstart@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@1.3.0, string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -6727,6 +6266,15 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringify-object@^3.2.1, stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + strip-ansi@6.0.0, strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -6748,23 +6296,27 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +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-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + strip-json-comments@~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= -style-loader@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.2.1.tgz#c5cbbfbf1170d076cfdd86e0109c5bba114baa1a" - integrity sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg== - dependencies: - loader-utils "^2.0.0" - schema-utils "^2.6.6" - -styled-jsx@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-3.3.0.tgz#32335c1a3ecfc923ba4f9c056eeb3d4699006b09" - integrity sha512-sh8BI5eGKyJlwL4kNXHjb27/a/GJV8wP4ElRIkRXrGW3sHKOsY9Pa1VZRNxyvf3+lisdPwizD9JDkzVO9uGwZw== +styled-jsx@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-3.3.2.tgz#2474601a26670a6049fb4d3f94bd91695b3ce018" + integrity sha512-daAkGd5mqhbBhLd6jYAjYBa9LpxYCzsgo/f6qzPdFxVB8yoGbhxvzQgkC0pfmCVvW3JuAEBn0UzFLBfkHVZG1g== dependencies: "@babel/types" "7.8.3" babel-plugin-syntax-jsx "6.18.0" @@ -6785,16 +6337,13 @@ stylis@3.5.4: resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe" integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== -subscriptions-transport-ws@0.9.18: - version "0.9.18" - resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.18.tgz#bcf02320c911fbadb054f7f928e51c6041a37b97" - integrity sha512-tztzcBTNoEbuErsVQpTN2xUNN/efAZXyCyL5m3x4t6SKrEiTL2N8SaKWBFWM4u56pL79ULif3zjyeq+oV+nOaA== +stylus-lookup@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/stylus-lookup/-/stylus-lookup-3.0.2.tgz#c9eca3ff799691020f30b382260a67355fefdddd" + integrity sha512-oEQGHSjg/AMaWlKe7gqsnYzan8DLcGIHe0dUaFkucZZ14z4zjENRlQMCHT4FNsiWnJf17YN9OvrCfCoi7VvOyg== dependencies: - backo2 "^1.0.2" - eventemitter3 "^3.1.0" - iterall "^1.2.1" - symbol-observable "^1.0.4" - ws "^5.2.0" + commander "^2.8.1" + debug "^4.1.0" supports-color@^2.0.0: version "2.0.0" @@ -6815,108 +6364,93 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.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" -swr@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/swr/-/swr-0.3.3.tgz#8e820360e3fece26df6f30ca09c478f70bf1f880" - integrity sha512-UxjfbvLdk4CzdchQBKmthUc1rO7KaCXdNL69oW7V/I2BOMv905rsL+kJdpO19OYwOPOpWZPvffTEE7yACwXc8w== +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: - fast-deep-equal "2.0.1" + has-flag "^4.0.0" -symbol-observable@^1.0.4, symbol-observable@^1.1.0: +swr@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/swr/-/swr-0.4.2.tgz#4a9ed5e9948088af145c79d716d294cb99712a29" + integrity sha512-SKGxcAfyijj/lE5ja5zVMDqJNudASH3WZPRUakDVOePTM18FnsXgugndjl9BSRwj+jokFCulMDe7F2pQL+VhEw== + dependencies: + dequal "2.0.2" + +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== -tailwindcss@^1.8.10: - version "1.8.10" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-1.8.10.tgz#945ef151c401c04a1c95e6a6bc747387a8d1b9dc" - integrity sha512-7QkERG/cWCzsuMqHMwjOaLMVixOGLNBiXsrkssxlE1aWfkxVbGqiuMokR2162xRyaH2mBIHKxmlf1qb3DvIPqw== +sync-fetch@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/sync-fetch/-/sync-fetch-0.3.0.tgz#77246da949389310ad978ab26790bb05f88d1335" + integrity sha512-dJp4qg+x4JwSEW1HibAuMi0IIrBI3wuQr2GimmqB7OXR50wmwzfdusG+p39R9w3R6aFtZ2mzvxvWKQ3Bd/vx3g== dependencies: - "@fullhuman/postcss-purgecss" "^2.1.2" - autoprefixer "^9.4.5" - browserslist "^4.12.0" + buffer "^5.7.0" + node-fetch "^2.6.1" + +tabbable@^5.1.5: + version "5.1.5" + resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-5.1.5.tgz#efec48ede268d511c261e3b81facbb4782a35147" + integrity sha512-oVAPrWgLLqrbvQE8XqcU7CVBq6SQbaIbHkhOca3u7/jzuQvyZycrUKPCGr04qpEIUslmUlULbSeN+m3QrKEykA== + +tailwindcss@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-2.0.3.tgz#f8d07797d1f89dc4b171673c26237b58783c2c86" + integrity sha512-s8NEqdLBiVbbdL0a5XwTb8jKmIonOuI4RMENEcKLR61jw6SdKvBss7NWZzwCaD+ZIjlgmesv8tmrjXEp7C0eAQ== + dependencies: + "@fullhuman/postcss-purgecss" "^3.1.3" bytes "^3.0.0" - chalk "^3.0.0 || ^4.0.0" - color "^3.1.2" + chalk "^4.1.0" + color "^3.1.3" detective "^5.2.0" - fs-extra "^8.0.0" + didyoumean "^1.2.1" + fs-extra "^9.1.0" html-tags "^3.1.0" lodash "^4.17.20" + modern-normalize "^1.0.0" node-emoji "^1.8.1" - normalize.css "^8.0.1" - object-hash "^2.0.3" - postcss "^7.0.11" - postcss-functions "^3.0.0" - postcss-js "^2.0.0" - postcss-nested "^4.1.1" - postcss-selector-parser "^6.0.0" + object-hash "^2.1.1" + postcss-functions "^3" + postcss-js "^3.0.3" + postcss-nested "^5.0.1" + postcss-selector-parser "^6.0.4" postcss-value-parser "^4.1.0" pretty-hrtime "^1.0.3" - reduce-css-calc "^2.1.6" - resolve "^1.14.2" + reduce-css-calc "^2.1.8" + resolve "^1.19.0" -tapable@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.0.0.tgz#a49c3d6a8a2bb606e7db372b82904c970d537a08" - integrity sha512-bjzn0C0RWoffnNdTzNi7rNDhs1Zlwk2tRXgk8EiHKAOX1Mag3d6T0Y5zNa7l9CJ+EoUne/0UHdwS8tMbkh9zDg== +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^6.0.2: - version "6.0.5" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" - integrity sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg== - 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" +temp@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.4.0.tgz#671ad63d57be0fe9d7294664b3fc400636678a60" + integrity sha1-ZxrWPVe+D+nXKUZks/xABjZnimA= -terser-webpack-plugin@^4.1.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.2.tgz#d86200c700053bba637913fe4310ba1bdeb5568e" - integrity sha512-3qAQpykRTD5DReLu5/cwpsg7EZFzP3Q0Hp2XUWJUw2mpq2jfgOKTZr8IZKKnNieRVVo1UauROTdhbQJZveGKtQ== - dependencies: - cacache "^15.0.5" - find-cache-dir "^3.3.1" - jest-worker "^26.3.0" - p-limit "^3.0.2" - schema-utils "^2.7.1" - serialize-javascript "^5.0.1" - source-map "^0.6.1" - terser "^5.3.2" - webpack-sources "^1.4.3" - -terser@4.8.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -terser@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.2.tgz#f4bea90eb92945b2a028ceef79181b9bb586e7af" - integrity sha512-H67sydwBz5jCUA32ZRL319ULu+Su1cAoZnnc+lXnenGRYWyLE3Scgkt8mNoAsMx0h5kdo758zdoS0LG9rYZXDQ== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -through@^2.3.6: +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= +timers-browserify@2.0.12, timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -6924,31 +6458,21 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + 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" @@ -6956,23 +6480,15 @@ to-regex-range@^5.0.1: 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" +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" +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@^1.0.1: version "1.0.1" @@ -6981,146 +6497,152 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -traverse@0.6.6, traverse@^0.6.6: - version "0.6.6" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" - integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= +traverse-chain@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1" + integrity sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE= + +trim-newlines@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" + integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== + +ts-loader@^7.0.0: + version "7.0.5" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-7.0.5.tgz#789338fb01cb5dc0a33c54e50558b34a73c9c4c5" + integrity sha512-zXypEIT6k3oTc+OZNx/cqElrsbBtYqDknf48OZos0NQ3RTt045fBIU8RRSu+suObBzYB355aIPGOe/3kj9h7Ig== + dependencies: + chalk "^2.3.0" + enhanced-resolve "^4.0.0" + loader-utils "^1.0.2" + micromatch "^4.0.0" + semver "^6.0.0" ts-log@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.2.3.tgz#4da5640fe25a9fb52642cd32391c886721318efb" integrity sha512-XvB+OdKSJ708Dmf9ore4Uf/q62AYDTzFcAdxc8KNML1mmAWywRFVt/dn1KYJH8Agt5UJNujfM3znU5PxgAzA2w== +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" + ts-pnp@^1.1.6: version "1.2.0" resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== -tslib@^1.10.0, tslib@^1.9.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== +tslib@^1.10.0, 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.0.0, tslib@~2.0.0, tslib@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" - integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== +tslib@^2, tslib@^2.0.0, tslib@^2.0.3, tslib@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= +tslib@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" + integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== + +tsutils@^3.17.1: + version "3.20.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.20.0.tgz#ea03ea45462e146b53d70ce0893de453ff24f698" + integrity sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg== dependencies: - safe-buffer "^5.0.1" + tslib "^1.8.1" -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tty-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" + integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" type-fest@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + type-fest@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" - integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" +typescript@^3.0.3, typescript@^3.8.3, typescript@^3.9.5, typescript@^3.9.7: + version "3.9.9" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674" + integrity sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w== typescript@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.3.tgz#153bbd468ef07725c1df9c77e8b453f8d36abba5" - integrity sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg== + version "4.1.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.5.tgz#123a3b214aaff3be32926f0d8f1f6e704eb89a72" + integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA== ua-parser-js@^0.7.18: - version "0.7.22" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.22.tgz#960df60a5f911ea8f1c818f3747b99c6e177eae3" - integrity sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q== + version "0.7.24" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.24.tgz#8d3ecea46ed4f1f1d63ec25f17d8568105dc027c" + integrity sha512-yo+miGzQx5gakzVK3QFfN0/L9uVhosXBBO7qmnk7c2iw1IhL212wfA3zbnI54B0obGwC/5NWub/iT9sReMx+Fw== + +unbox-primitive@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + 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= -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== - -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" - uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= -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" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== unixify@1.0.0: version "1.0.0" @@ -7129,38 +6651,32 @@ unixify@1.0.0: dependencies: normalize-path "^2.1.1" -unset-value@^1.0.0: +unpipe@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" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -upper-case@2.0.1, upper-case@^2.0.1: +upper-case@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.1.tgz#6214d05e235dc817822464ccbae85822b3d8665f" integrity sha512-laAsbea9SY5osxrv7S99vH9xAaJKrw5Qpdh4ENRLcaxipjKsiaBwiAsxfa8X5mObKNTQPsupSq0J/VIxsSJe3A== dependencies: tslib "^1.10.0" +upper-case@^2.0.1, 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.0" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" - integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== + 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" @@ -7168,25 +6684,29 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" -use-subscription@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.4.1.tgz#edcbcc220f1adb2dd4fa0b2f61b6cc308e620069" - integrity sha512-7+IIwDG/4JICrWHL/Q/ZPK5yozEnvRm6vHImu0LKwQlmWGKeiF7mbAenLlK/cTNXrTtXHU/SFASQHzB6+oSJMQ== +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use-subscription@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1" + integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA== dependencies: object-assign "^4.1.1" -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== - -utf-8-validate@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.2.tgz#63cfbccd85dc1f2b66cf7a1d0eebc08ed056bfb3" - integrity sha512-SwV++i2gTD5qh2XqaPzBnNX88N6HdyhQrNNRykvcS0QKvItV9u3vPEJr+X5Hhfb1JC0r0e1alL0iB09rY8+nmw== - dependencies: - node-gyp-build "~3.7.0" - util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -7199,125 +6719,94 @@ util@0.10.3: dependencies: inherits "2.0.1" -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +util@0.12.3, util@^0.12.0: + version "0.12.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.3.tgz#971bb0292d2cc0c892dab7c6a5d37c2bec707888" + integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + safe-buffer "^5.1.2" + which-typed-array "^1.1.2" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" valid-url@1.0.9, 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= -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" -vm-browserify@1.1.2: +vm-browserify@1.1.2, vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -vue-template-compiler@^2.6.12: - version "2.6.12" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz#947ed7196744c8a5285ebe1233fe960437fcc57e" - integrity sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg== - dependencies: - de-indent "^1.0.2" - he "^1.1.0" +walkdir@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/walkdir/-/walkdir-0.4.1.tgz#dc119f83f4421df52e3061e514228a2db20afa39" + integrity sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ== -watchpack@2.0.0-beta.13: - version "2.0.0-beta.13" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.0.0-beta.13.tgz#9d9b0c094b8402139333e04eb6194643c8384f55" - integrity sha512-ZEFq2mx/k5qgQwgi6NOm+2ImICb8ngAkA/rZ6oyXZ7SgPn3pncf+nfhYTCrs3lmHwOxnPtGLTOuFLfpSMh1VMA== +warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +watchpack@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7" + integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -watchpack@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.0.0.tgz#b12248f32f0fd4799b7be0802ad1f6573a45955c" - integrity sha512-xSdCxxYZWNk3VK13bZRYhsQpfa8Vg63zXG+3pyU8ouqSLRCv4IGXIp9Kr226q6GBkGRlZrST2wwKtjfKz2m7Cg== +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: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -web-vitals@0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-0.2.4.tgz#ec3df43c834a207fd7cdefd732b2987896e08511" - integrity sha512-6BjspCO9VriYy12z356nL6JBS0GYeEcA457YyRzD+dD6XYCQ75NKhcOHUMHentOE7OcVCIXXDvOm0jKFfQG2Gg== + defaults "^1.0.3" webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-sources@1.4.3, webpack-sources@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== +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: - source-list-map "^2.0.0" - source-map "~0.6.1" + 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" -webpack-sources@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.0.0.tgz#602d4bc7ff2e630ceb753a09ef49f260fa4ae7f0" - integrity sha512-CpCkDjEKa5vYVRDFDRABBkBomz+82lz9bpXViN1LBc8L/WDXvSyELKcBvBnTeDEiRfMJCGAFG9+04406PLSsIA== - dependencies: - source-list-map "^2.0.1" - source-map "^0.6.1" - -webpack@4.44.1, webpack@^5.0.0-beta.30: - version "5.0.0-rc.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.0.0-rc.0.tgz#166f6d9cd65912ff021695d82256b2f1e6e858ee" - integrity sha512-tHUFu4vaZxJuyKYf8FKkDZmxnf0txy6twNewxUlviFo+GYjFoGW3szD71cOw0NtJBiyGAQ9zLGVzfb2pXBSKVA== - dependencies: - "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.45" - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^7.4.0" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.0.0" - eslint-scope "^5.1.0" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.4" - json-parse-better-errors "^1.0.2" - loader-runner "^4.0.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - pkg-dir "^4.2.0" - schema-utils "^2.7.0" - tapable "^2.0.0" - terser-webpack-plugin "^4.1.0" - watchpack "^2.0.0" - webpack-sources "^2.0.0" - -websocket@1.0.32: - version "1.0.32" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.32.tgz#1f16ddab3a21a2d929dec1687ab21cfdc6d3dbb1" - integrity sha512-i4yhcllSP4wrpoPMU2N0TQ/q0O94LRG/eUQjEAamRltjQ1oT1PFFKOG4i877OlJgCG8rw6LrrowJp+TYCEWF7Q== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.50" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - -whatwg-fetch@>=0.10.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz#e5f871572d6879663fa5674c8f833f15a8425ab3" - integrity sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ== +whatwg-fetch@^3.4.1: + version "3.5.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.5.0.tgz#605a2cd0a7146e5db141e29d1c62ab84c0c4c868" + integrity sha512-jXkLtsR42xhXg7akoDKvKWE40eJeI+2KZqcp2h3NsOrRnDvtWX36KcKl30dy+hxECivdk2BVUHVNrPtoMBUx6A== whatwg-url@^7.0.0: version "7.1.0" @@ -7328,11 +6817,52 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" +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-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= + +which-typed-array@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff" + integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.0" + es-abstract "^1.18.0-next.1" + foreach "^2.0.5" + function-bind "^1.1.1" + has-symbols "^1.0.1" + is-typed-array "^1.1.3" + +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" @@ -7364,32 +6894,35 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -ws@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== - dependencies: - async-limiter "~1.0.0" +ws@7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.2.tgz#782100048e54eb36fe9843363ab1c68672b261dd" + integrity sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA== -xtend@^4.0.2: +ws@^7.3.1: + version "7.4.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd" + integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA== + +xtend@^4.0.0, 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.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== -y18n@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.1.tgz#1ad2a7eddfa8bce7caa2e1f6b5da96c39d99d571" - integrity sha512-/jJ831jEs4vGDbYPQp4yGKDYPSCCEQ45uZWJHE1AoYBzqdZi8+LDWas0z4HrmJXmKdpFsTiowSHXdxyFhpmdMg== +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= +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" @@ -7406,7 +6939,7 @@ yaml@^1.10.0, yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== -yargs-parser@^18.1.2: +yargs-parser@^18.1.2, yargs-parser@^18.1.3: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== @@ -7414,10 +6947,10 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^20.0.0: - version "20.2.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.0.tgz#944791ca2be2e08ddadd3d87e9de4c6484338605" - integrity sha512-2agPoRFPoIcFzOIp6656gcvsg2ohtscpw2OINr/q46+Sq41xz2OYLqx5HRHabmFU1OARIPAYH5uteICE7mn/5A== +yargs-parser@^20.2.2: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== yargs@^15.3.1: version "15.4.1" @@ -7436,15 +6969,25 @@ yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.0.3: - version "16.0.3" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.0.3.tgz#7a919b9e43c90f80d4a142a89795e85399a7e54c" - integrity sha512-6+nLw8xa9uK1BOEOykaiYAJVh6/CjxWXK/q9b5FpRgNslt8s22F2xMBqVIKgCRjNgGvGPBy8Vog7WN7yh4amtA== +yargs@^16.1.1: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: - cliui "^7.0.0" - escalade "^3.0.2" + cliui "^7.0.2" + escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" string-width "^4.2.0" - y18n "^5.0.1" - yargs-parser "^20.0.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +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==