From 7dc28ab60daa98148dcad8fc382c51de98db9786 Mon Sep 17 00:00:00 2001 From: netpoe Date: Tue, 17 Oct 2023 21:19:23 -0600 Subject: [PATCH 01/57] chore: adds theme color to list items --- app/src/ui/dropzone/_mixins.scss | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/src/ui/dropzone/_mixins.scss b/app/src/ui/dropzone/_mixins.scss index af0f6b82..ea52435d 100644 --- a/app/src/ui/dropzone/_mixins.scss +++ b/app/src/ui/dropzone/_mixins.scss @@ -81,6 +81,13 @@ color: var(--color-primary); } } + + ul, + ol { + li { + @include text(); + } + } } } @mixin options { From 782376f031584221a7a619ec2b1c49fe7c8017d5 Mon Sep 17 00:00:00 2001 From: netpoe Date: Thu, 19 Oct 2023 13:10:40 -0600 Subject: [PATCH 02/57] feat: [fileName].tsx URL path and page --- app/src/app/chat/dropbox-chat/DropboxChat.tsx | 14 +++++++ .../context/form/FormContextController.tsx | 10 +++++ .../message/MessageContextController.tsx | 28 ++++++++++++++ app/src/pages/api/chat/types.ts | 3 ++ app/src/pages/chat/public/[fileName].tsx | 38 +++++++++++++++++++ app/src/providers/chat/constants.ts | 1 + .../nanonets/extract_content_from_pdf_file.ts | 6 ++- 7 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 app/src/pages/chat/public/[fileName].tsx create mode 100644 app/src/providers/chat/constants.ts diff --git a/app/src/app/chat/dropbox-chat/DropboxChat.tsx b/app/src/app/chat/dropbox-chat/DropboxChat.tsx index 3d3e0f9e..9418b66a 100644 --- a/app/src/app/chat/dropbox-chat/DropboxChat.tsx +++ b/app/src/app/chat/dropbox-chat/DropboxChat.tsx @@ -1,6 +1,7 @@ import clsx from "clsx"; import { Field, useForm } from "react-final-form"; import { useEffect } from "react"; +import { useRouter } from "next/router"; import { Card } from "ui/card/Card"; import { Button } from "ui/button/Button"; @@ -19,12 +20,25 @@ export const DropboxChat: React.FC = ({ className, onSubmit }) const formContext = useFormContext(); + const router = useRouter(); + const { messages, actions, clearMessages, saveMessageThread } = useMessageContext(); useEffect(() => { if (!form) return; formContext.setForm(form); + + const fileName = router.query?.fileName; + + if (fileName) { + setTimeout(() => { + formContext.setFieldValue( + FormFieldNames.message, + `Extra el contenido de "${fileName}" y responde: ¿cuántos artículos tiene la Constitución Política de Guatemala?`, + ); + }, 1000); + } }, [form]); useEffect(() => { diff --git a/app/src/context/form/FormContextController.tsx b/app/src/context/form/FormContextController.tsx index dc744c7a..8426bffa 100644 --- a/app/src/context/form/FormContextController.tsx +++ b/app/src/context/form/FormContextController.tsx @@ -4,6 +4,7 @@ import { sample } from "lodash"; import { APIChatHeaderKeyNames, CurrentMessageMetadata, FileAgentRequest, FileAgentResponse } from "api/chat/types"; import { OAuthTokenStoreKey } from "api/oauth/oauth.types"; import axios from "axios"; +import { useRouter } from "next/router"; import { useMessageContext } from "context/message/useMessageContext"; import { ChatFormValues, FormFieldNames } from "app/chat/dropbox-chat/DropboxChat.types"; @@ -11,6 +12,7 @@ import { ChatContextMessage, TextChatCompletionMessage } from "context/message/M import { useRoutes } from "hooks/useRoutes/useRoutes"; import { useAuthorizationContext } from "context/authorization/useAuthorizationContext"; import { useFileContext } from "context/file/useFileContext"; +import { X_PUBLIC_BUCKET_NAME } from "providers/chat/constants"; import { FormContextControllerProps, FormContextType, FormState } from "./FormContext.types"; import { FormContext } from "./FormContext"; @@ -56,6 +58,8 @@ export const FormContextController = ({ children }: FormContextControllerProps) const fileContext = useFileContext(); + const router = useRouter(); + useEffect(() => { setCurrentMessageMetadata({ bucketName: fileContext.getStorageBucketName() }); }, []); @@ -115,6 +119,12 @@ export const FormContextController = ({ children }: FormContextControllerProps) headers[APIChatHeaderKeyNames.x_square_access_token] = authContext.accessTokens[OAuthTokenStoreKey.square_api]!; } + const fileName = router.query?.fileName; + + if (fileName) { + headers[APIChatHeaderKeyNames.x_public_bucket_name] = X_PUBLIC_BUCKET_NAME; + } + const options = { method: "POST", body: JSON.stringify({ diff --git a/app/src/context/message/MessageContextController.tsx b/app/src/context/message/MessageContextController.tsx index bdf060e9..a0f89aca 100644 --- a/app/src/context/message/MessageContextController.tsx +++ b/app/src/context/message/MessageContextController.tsx @@ -1,5 +1,6 @@ import React, { useState } from "react"; import { v4 as uuidv4 } from "uuid"; +import { useRouter } from "next/router"; import { useLocalStorage } from "hooks/useLocalStorage/useLocalStorage"; import { MessageFileType } from "ui/dropzone/message-file-type/MessageFileType"; @@ -24,6 +25,8 @@ export const MessageContextController = ({ children }: MessageContextControllerP isProcessingRequest: false, }); + const router = useRouter(); + const ls = useLocalStorage(); const chatSidebarContext = useChatSidebarContext(); @@ -202,6 +205,31 @@ export const MessageContextController = ({ children }: MessageContextControllerP }; const displayInitialMessage = () => { + const fileName = router.query?.fileName; + + if (fileName) { + switch (fileName) { + case "Constitucion_politica_de_la_republica_de_guatemala.pdf": + appendMessage({ + content: `¡Hola! **Pregúntale a la Constitución Política de Guatemala**. + +Extrajimos el contenido de este archivo PDF: Constitucion_politica_de_la_republica_de_guatemala.pdf para que le preguntes lo que querrás! + +En vez de leerla... 🥱`, + role: "assistant", + readOnly: true, + hasInnerHtml: true, + type: "text", + }); + break; + + default: + break; + } + + return; + } + const lsMessages = ls.get(LocalStorageKeys.messages); if (lsMessages && lsMessages?.length > 0) { diff --git a/app/src/pages/api/chat/types.ts b/app/src/pages/api/chat/types.ts index 19fb5d4d..2469a8f3 100644 --- a/app/src/pages/api/chat/types.ts +++ b/app/src/pages/api/chat/types.ts @@ -4,6 +4,9 @@ import { ChatCompletionChoice } from "providers/chat/chat.types"; export enum APIChatHeaderKeyNames { x_dropbox_access_token = "x-dropbox-access-token", x_square_access_token = "x-square-access-token", + + // [fileName].tsx path + x_public_bucket_name = "x_public_bucket_name", } export type CurrentMessageMetadata = { diff --git a/app/src/pages/chat/public/[fileName].tsx b/app/src/pages/chat/public/[fileName].tsx new file mode 100644 index 00000000..cd192ba2 --- /dev/null +++ b/app/src/pages/chat/public/[fileName].tsx @@ -0,0 +1,38 @@ +import { GetServerSidePropsContext, NextPage } from "next"; +import { i18n, useTranslation } from "next-i18next"; +import { serverSideTranslations } from "next-i18next/serverSideTranslations"; +import Head from "next/head"; + +import { AccountId } from "providers/near/contracts/market/market.types"; +import { ChatLayout } from "layouts/chat-layout/ChatLayout"; +import { DropboxChatContainer } from "app/chat/dropbox-chat/DropboxChatContainer"; + +const Index: NextPage<{ marketId: AccountId }> = () => { + const { t } = useTranslation("head"); + + return ( + + + {t("head.og.title")} + + + + + + + + + ); +}; + +export const getServerSideProps = async ({ locale }: GetServerSidePropsContext) => { + await i18n?.reloadResources(); + + return { + props: { + ...(await serverSideTranslations(locale!, ["common", "head", "chat"])), + }, + }; +}; + +export default Index; diff --git a/app/src/providers/chat/constants.ts b/app/src/providers/chat/constants.ts new file mode 100644 index 00000000..cd3037fa --- /dev/null +++ b/app/src/providers/chat/constants.ts @@ -0,0 +1 @@ +export const X_PUBLIC_BUCKET_NAME = "guest-a62e"; diff --git a/app/src/providers/chat/functions/nanonets/extract_content_from_pdf_file.ts b/app/src/providers/chat/functions/nanonets/extract_content_from_pdf_file.ts index eb16ad76..bd360566 100644 --- a/app/src/providers/chat/functions/nanonets/extract_content_from_pdf_file.ts +++ b/app/src/providers/chat/functions/nanonets/extract_content_from_pdf_file.ts @@ -1,4 +1,4 @@ -import { FileAgentRequest } from "api/chat/types"; +import { APIChatHeaderKeyNames, FileAgentRequest } from "api/chat/types"; import { CreateChatCompletionRequestMessage } from "openai/resources/chat"; import { NextApiRequest } from "next"; @@ -19,7 +19,9 @@ const extract_content_from_pdf_file = async ( try { const body = JSON.parse(request.body.body); - const bucketName = body.currentMessageMetadata?.bucketName; + const bucketName = request.body.headers[APIChatHeaderKeyNames.x_public_bucket_name] + ? (request.body.headers[APIChatHeaderKeyNames.x_public_bucket_name] as string) + : body.currentMessageMetadata?.bucketName; const fileName = args.file_name; From 05c9ad7690106f5b6b5e6574ef5c01120ecd5069 Mon Sep 17 00:00:00 2001 From: netpoe Date: Thu, 19 Oct 2023 13:26:01 -0600 Subject: [PATCH 03/57] fix(DropboxChat): waits for actual form state --- app/src/app/chat/dropbox-chat/DropboxChat.tsx | 19 +++++++++++-------- app/src/context/form/FormContext.types.ts | 1 + .../context/form/FormContextController.tsx | 1 + 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/src/app/chat/dropbox-chat/DropboxChat.tsx b/app/src/app/chat/dropbox-chat/DropboxChat.tsx index 9418b66a..528dd631 100644 --- a/app/src/app/chat/dropbox-chat/DropboxChat.tsx +++ b/app/src/app/chat/dropbox-chat/DropboxChat.tsx @@ -1,5 +1,5 @@ import clsx from "clsx"; -import { Field, useForm } from "react-final-form"; +import { Field, useForm, useFormState } from "react-final-form"; import { useEffect } from "react"; import { useRouter } from "next/router"; @@ -17,6 +17,7 @@ import styles from "./DropboxChat.module.scss"; export const DropboxChat: React.FC = ({ className, onSubmit }) => { const form = useForm(); + const formState = useFormState(); const formContext = useFormContext(); @@ -28,18 +29,20 @@ export const DropboxChat: React.FC = ({ className, onSubmit }) if (!form) return; formContext.setForm(form); + }, [form]); + + useEffect(() => { + if (!formContext.form) return; const fileName = router.query?.fileName; if (fileName) { - setTimeout(() => { - formContext.setFieldValue( - FormFieldNames.message, - `Extra el contenido de "${fileName}" y responde: ¿cuántos artículos tiene la Constitución Política de Guatemala?`, - ); - }, 1000); + formContext.setFieldValue( + FormFieldNames.message, + `Extra el contenido de "${fileName}" y responde: ¿cuántos artículos tiene la Constitución Política de Guatemala?`, + ); } - }, [form]); + }, [formContext.form]); useEffect(() => { const element = document.querySelector(`#messages`); diff --git a/app/src/context/form/FormContext.types.ts b/app/src/context/form/FormContext.types.ts index 2f7573f6..22f19193 100644 --- a/app/src/context/form/FormContext.types.ts +++ b/app/src/context/form/FormContext.types.ts @@ -10,6 +10,7 @@ export type FormContextControllerProps = { }; export type FormContextType = { + form?: FormState; setForm: Dispatch>; setCurrentMessageMetadata: Dispatch>>; setFieldValue: (field: string, text: string) => void; diff --git a/app/src/context/form/FormContextController.tsx b/app/src/context/form/FormContextController.tsx index 8426bffa..f35ab2bc 100644 --- a/app/src/context/form/FormContextController.tsx +++ b/app/src/context/form/FormContextController.tsx @@ -176,6 +176,7 @@ export const FormContextController = ({ children }: FormContextControllerProps) updateTextareaHeight, resetTextareaHeight, submit, + form, }; return {children}; From e9f0249b8c0e88ab5347a9ee6b7940629df71c76 Mon Sep 17 00:00:00 2001 From: netpoe Date: Mon, 19 Feb 2024 11:33:40 -0600 Subject: [PATCH 04/57] fix(Typography): headline6 flat prop --- app/src/app/chat/dropbox-chat/DropboxChat.tsx | 3 +-- app/src/ui/typography/Typography.tsx | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/app/src/app/chat/dropbox-chat/DropboxChat.tsx b/app/src/app/chat/dropbox-chat/DropboxChat.tsx index 528dd631..95cd3c3e 100644 --- a/app/src/app/chat/dropbox-chat/DropboxChat.tsx +++ b/app/src/app/chat/dropbox-chat/DropboxChat.tsx @@ -1,5 +1,5 @@ import clsx from "clsx"; -import { Field, useForm, useFormState } from "react-final-form"; +import { Field, useForm } from "react-final-form"; import { useEffect } from "react"; import { useRouter } from "next/router"; @@ -17,7 +17,6 @@ import styles from "./DropboxChat.module.scss"; export const DropboxChat: React.FC = ({ className, onSubmit }) => { const form = useForm(); - const formState = useFormState(); const formContext = useFormContext(); diff --git a/app/src/ui/typography/Typography.tsx b/app/src/ui/typography/Typography.tsx index de90a200..f24a08e9 100644 --- a/app/src/ui/typography/Typography.tsx +++ b/app/src/ui/typography/Typography.tsx @@ -61,14 +61,14 @@ const Headline4: React.FC = ({ children, className, inline, ... ); -const Headline5: React.FC = ({ children, className, ...props }) => ( -
+const Headline5: React.FC = ({ children, className, flat, ...props }) => ( +
{children}
); -const Headline6: React.FC = ({ children, className, ...props }) => ( -
+const Headline6: React.FC = ({ children, className, flat, ...props }) => ( +
{children}
); From a112f270c75604e93588a82eb29944f6c0d1c421 Mon Sep 17 00:00:00 2001 From: netpoe Date: Mon, 19 Feb 2024 12:11:41 -0600 Subject: [PATCH 05/57] feat: medusajs with demo storefront --- storeagentai-storefront/.eslintrc.js | 3 + storeagentai-storefront/.gitignore | 48 + storeagentai-storefront/.prettierrc | 8 + storeagentai-storefront/.yarnrc.yml | 1 + storeagentai-storefront/LICENSE | 21 + storeagentai-storefront/README.md | 303 + storeagentai-storefront/cypress.json | 8 + .../cypress/fixtures/example.json | 5 + .../cypress/integration/product.spec.js | 38 + .../cypress/plugins/index.js | 27 + .../cypress/support/commands.js | 25 + .../cypress/support/index.js | 20 + storeagentai-storefront/netlify.toml | 2 + storeagentai-storefront/next-env.d.ts | 5 + storeagentai-storefront/next-sitemap.js | 19 + storeagentai-storefront/next.config.js | 34 + storeagentai-storefront/package-lock.json | 15343 ++++++++++++++++ storeagentai-storefront/package.json | 68 + storeagentai-storefront/postcss.config.js | 6 + storeagentai-storefront/public/favicon.ico | Bin 0 -> 25931 bytes .../(checkout)/checkout/page.tsx | 48 + .../app/[countryCode]/(checkout)/layout.tsx | 41 + .../[countryCode]/(checkout)/not-found.tsx | 19 + .../account/@dashboard/addresses/page.tsx | 37 + .../(main)/account/@dashboard/loading.tsx | 9 + .../@dashboard/orders/details/[id]/page.tsx | 32 + .../(main)/account/@dashboard/orders/page.tsx | 33 + .../(main)/account/@dashboard/page.tsx | 21 + .../account/@dashboard/profile/page.tsx | 52 + .../(main)/account/@login/page.tsx | 12 + .../[countryCode]/(main)/account/layout.tsx | 18 + .../[countryCode]/(main)/account/loading.tsx | 9 + .../app/[countryCode]/(main)/cart/loading.tsx | 5 + .../[countryCode]/(main)/cart/not-found.tsx | 21 + .../app/[countryCode]/(main)/cart/page.tsx | 47 + .../(main)/categories/[...category]/page.tsx | 86 + .../(main)/collections/[handle]/page.tsx | 81 + .../src/app/[countryCode]/(main)/layout.tsx | 20 + .../app/[countryCode]/(main)/not-found.tsx | 20 + .../(main)/order/confirmed/[id]/loading.tsx | 5 + .../(main)/order/confirmed/[id]/page.tsx | 39 + .../src/app/[countryCode]/(main)/page.tsx | 79 + .../(main)/products/[handle]/page.tsx | 108 + .../(main)/results/[query]/page.tsx | 42 + .../app/[countryCode]/(main)/search/page.tsx | 5 + .../app/[countryCode]/(main)/store/page.tsx | 31 + storeagentai-storefront/src/app/actions.ts | 40 + storeagentai-storefront/src/app/layout.tsx | 18 + storeagentai-storefront/src/app/not-found.tsx | 30 + .../src/app/opengraph-image.jpg | Bin 0 -> 234193 bytes .../src/app/twitter-image.jpg | Bin 0 -> 234193 bytes storeagentai-storefront/src/lib/config.ts | 13 + storeagentai-storefront/src/lib/constants.tsx | 57 + .../src/lib/context/modal-context.tsx | 34 + storeagentai-storefront/src/lib/data/index.ts | 762 + .../src/lib/hooks/use-in-view.tsx | 29 + .../src/lib/hooks/use-toggle-state.tsx | 46 + .../src/lib/search-client.ts | 25 + .../src/lib/util/compare-addresses.ts | 22 + .../src/lib/util/get-checkout-step.ts | 13 + .../src/lib/util/get-number-of-skeletons.ts | 25 + .../src/lib/util/get-precentage-diff.ts | 6 + .../lib/util/get-prices-by-price-set-id.ts | 41 + .../src/lib/util/get-product-price.ts | 94 + .../src/lib/util/isEmpty.ts | 11 + .../src/lib/util/medusa-error.ts | 20 + .../src/lib/util/only-unique.ts | 2 + .../src/lib/util/prices.ts | 259 + .../src/lib/util/repeat.ts | 5 + .../src/lib/util/sort-products.ts | 42 + .../src/lib/util/transform-product-preview.ts | 54 + storeagentai-storefront/src/middleware.ts | 142 + .../src/modules/account/actions.ts | 273 + .../account/components/account-info/index.tsx | 132 + .../account/components/account-nav/index.tsx | 167 + .../account/components/address-book/index.tsx | 27 + .../components/address-card/add-address.tsx | 142 + .../address-card/edit-address-modal.tsx | 219 + .../account/components/login/index.tsx | 57 + .../account/components/order-card/index.tsx | 73 + .../components/order-overview/index.tsx | 40 + .../account/components/overview/index.tsx | 136 + .../profile-billing-address/index.tsx | 177 + .../components/profile-email/index.tsx | 57 + .../account/components/profile-name/index.tsx | 60 + .../components/profile-password/index.tsx | 70 + .../components/profile-phone/index.tsx | 57 + .../account/components/register/index.tsx | 92 + .../account/templates/account-layout.tsx | 43 + .../account/templates/login-template.tsx | 27 + .../src/modules/cart/actions.ts | 194 + .../components/cart-item-select/index.tsx | 73 + .../components/empty-cart-message/index.tsx | 25 + .../modules/cart/components/item/index.tsx | 123 + .../cart/components/sign-in-prompt/index.tsx | 26 + .../src/modules/cart/templates/index.tsx | 52 + .../src/modules/cart/templates/items.tsx | 50 + .../src/modules/cart/templates/preview.tsx | 50 + .../src/modules/cart/templates/summary.tsx | 31 + .../modules/categories/templates/index.tsx | 78 + .../src/modules/checkout/actions.ts | 208 + .../components/address-select/index.tsx | 110 + .../checkout/components/addresses/index.tsx | 183 + .../components/billing_address/index.tsx | 128 + .../components/country-select/index.tsx | 50 + .../components/discount-code/index.tsx | 149 + .../components/error-message/index.tsx | 13 + .../components/payment-button/index.tsx | 228 + .../components/payment-container/index.tsx | 75 + .../components/payment-test/index.tsx | 12 + .../components/payment-wrapper/index.tsx | 63 + .../payment-wrapper/stripe-wrapper.tsx | 50 + .../checkout/components/payment/index.tsx | 237 + .../checkout/components/review/index.tsx | 57 + .../components/shipping-address/index.tsx | 182 + .../checkout/components/shipping/index.tsx | 186 + .../components/submit-button/index.tsx | 29 + .../templates/checkout-form/index.tsx | 68 + .../templates/checkout-summary/index.tsx | 44 + .../modules/collections/templates/index.tsx | 40 + .../common/components/cart-totals/index.tsx | 78 + .../common/components/checkbox/index.tsx | 40 + .../common/components/delete-button/index.tsx | 43 + .../common/components/divider/index.tsx | 9 + .../components/filter-radio-group/index.tsx | 64 + .../modules/common/components/input/index.tsx | 76 + .../components/interactive-link/index.tsx | 33 + .../components/line-item-options/index.tsx | 14 + .../components/line-item-price/index.tsx | 63 + .../components/line-item-unit-price/index.tsx | 61 + .../localized-client-link/index.tsx | 32 + .../modules/common/components/modal/index.tsx | 115 + .../common/components/native-select/index.tsx | 74 + .../modules/common/components/radio/index.tsx | 26 + .../src/modules/common/icons/back.tsx | 37 + .../src/modules/common/icons/bancontact.tsx | 26 + .../src/modules/common/icons/chevron-down.tsx | 30 + .../src/modules/common/icons/eye-off.tsx | 37 + .../src/modules/common/icons/eye.tsx | 37 + .../modules/common/icons/fast-delivery.tsx | 65 + .../src/modules/common/icons/ideal.tsx | 26 + .../src/modules/common/icons/map-pin.tsx | 37 + .../src/modules/common/icons/medusa.tsx | 27 + .../src/modules/common/icons/nextjs.tsx | 27 + .../src/modules/common/icons/package.tsx | 44 + .../src/modules/common/icons/paypal.tsx | 30 + .../common/icons/placeholder-image.tsx | 44 + .../src/modules/common/icons/refresh.tsx | 51 + .../src/modules/common/icons/spinner.tsx | 37 + .../src/modules/common/icons/trash.tsx | 51 + .../src/modules/common/icons/user.tsx | 37 + .../src/modules/common/icons/x.tsx | 37 + .../components/featured-products/index.tsx | 18 + .../featured-products/product-rail/index.tsx | 43 + .../modules/home/components/hero/index.tsx | 36 + .../layout/components/cart-button/index.tsx | 22 + .../layout/components/cart-dropdown/index.tsx | 197 + .../components/country-select/index.tsx | 124 + .../layout/components/medusa-cta/index.tsx | 21 + .../layout/components/side-menu/index.tsx | 102 + .../modules/layout/templates/footer/index.tsx | 150 + .../src/modules/layout/templates/index.tsx | 18 + .../modules/layout/templates/nav/index.tsx | 66 + .../modules/order/components/help/index.tsx | 25 + .../modules/order/components/item/index.tsx | 42 + .../modules/order/components/items/index.tsx | 36 + .../order/components/onboarding-cta/index.tsx | 28 + .../order/components/order-details/index.tsx | 54 + .../order/components/order-summary/index.tsx | 57 + .../components/payment-details/index.tsx | 58 + .../components/shipping-details/index.tsx | 66 + .../templates/order-completed-template.tsx | 47 + .../templates/order-details-template.tsx | 43 + .../components/image-gallery/index.tsx | 39 + .../components/mobile-actions/index.tsx | 189 + .../components/option-select/index.tsx | 49 + .../components/product-actions/index.tsx | 178 + .../product-onboarding-cta/index.tsx | 28 + .../components/product-preview/index.tsx | 55 + .../components/product-preview/price.tsx | 22 + .../components/product-price/index.tsx | 54 + .../components/product-tabs/accordion.tsx | 105 + .../components/product-tabs/index.tsx | 127 + .../components/related-products/index.tsx | 83 + .../products/components/thumbnail/index.tsx | 67 + .../src/modules/products/templates/index.tsx | 58 + .../product-actions-wrapper/index.tsx | 22 + .../products/templates/product-info/index.tsx | 33 + .../src/modules/search/actions.ts | 30 + .../modules/search/components/hit/index.tsx | 44 + .../modules/search/components/hits/index.tsx | 53 + .../components/search-box-wrapper/index.tsx | 93 + .../search/components/search-box/index.tsx | 90 + .../search/components/show-all/index.tsx | 30 + .../search/templates/search-modal/index.tsx | 80 + .../search-results-template/index.tsx | 63 + .../components/skeleton-button/index.tsx | 5 + .../components/skeleton-cart-item/index.tsx | 35 + .../components/skeleton-cart-totals/index.tsx | 30 + .../components/skeleton-code-form/index.tsx | 13 + .../components/skeleton-line-item/index.tsx | 35 + .../skeleton-order-confirmed-header/index.tsx | 14 + .../skeleton-order-information/index.tsx | 36 + .../components/skeleton-order-items/index.tsx | 43 + .../skeleton-order-summary/index.tsx | 15 + .../skeleton-product-preview/index.tsx | 15 + .../templates/skeleton-cart-page/index.tsx | 65 + .../skeleton-order-confirmed/index.tsx | 21 + .../templates/skeleton-product-grid/index.tsx | 16 + .../skeleton-related-products/index.tsx | 25 + .../store/components/pagination/index.tsx | 112 + .../components/refinement-list/index.tsx | 40 + .../refinement-list/sort-products/index.tsx | 45 + .../src/modules/store/templates/index.tsx | 39 + .../store/templates/paginated-products.tsx | 77 + .../src/styles/globals.css | 112 + storeagentai-storefront/src/types/global.ts | 58 + storeagentai-storefront/src/types/icon.ts | 4 + storeagentai-storefront/src/types/medusa.ts | 11 + storeagentai-storefront/store-config.js | 16 + storeagentai-storefront/store.config.json | 5 + storeagentai-storefront/tailwind.config.js | 161 + storeagentai-storefront/tsconfig.json | 48 + storeagentai-storefront/yarn.lock | 8571 +++++++++ storeagentai/.babelrc.js | 12 + storeagentai/.env.template | 5 + storeagentai/.github/dependabot.yml | 21 + storeagentai/.gitignore | 26 + storeagentai/.vscode/settings.json | 1 + storeagentai/.yarnrc.yml | 1 + storeagentai/README.md | 70 + storeagentai/data/seed-onboarding.json | 119 + storeagentai/data/seed.json | 949 + storeagentai/index.js | 50 + storeagentai/medusa-config.js | 88 + storeagentai/package.json | 98 + .../default/orders/order-detail.tsx | 136 + .../default/orders/orders-list.tsx | 81 + .../default/products/product-detail.tsx | 90 + .../default/products/products-list.tsx | 72 + .../nextjs/orders/order-detail.tsx | 138 + .../nextjs/orders/orders-list.tsx | 71 + .../nextjs/products/product-detail.tsx | 54 + .../nextjs/products/products-list.tsx | 84 + .../src/admin/components/shared/accordion.tsx | 123 + .../src/admin/components/shared/card.tsx | 27 + .../icons/active-circle-dotted-line.tsx | 37 + .../components/shared/icons/get-started.tsx | 24 + storeagentai/src/admin/types/icon-type.ts | 8 + .../src/admin/utils/prepare-region.ts | 42 + .../admin/utils/prepare-shipping-options.ts | 23 + .../src/admin/utils/sample-products.ts | 666 + .../onboarding-flow/onboarding-flow.tsx | 502 + storeagentai/src/api/README.md | 179 + storeagentai/src/api/admin/custom/route.ts | 8 + .../src/api/admin/onboarding/route.ts | 27 + storeagentai/src/api/store/custom/route.ts | 8 + storeagentai/src/jobs/README.md | 32 + storeagentai/src/loaders/README.md | 19 + .../1685715079776-CreateOnboarding.ts | 21 + .../1686062614694-AddOnboardingProduct.ts | 15 + .../1690996567455-CorrectOnboardingFields.ts | 16 + storeagentai/src/migrations/README.md | 29 + storeagentai/src/models/README.md | 46 + storeagentai/src/models/onboarding.ts | 14 + storeagentai/src/repositories/onboarding.ts | 6 + storeagentai/src/services/README.md | 49 + .../services/__tests__/test-service.spec.ts | 5 + storeagentai/src/services/onboarding.ts | 52 + storeagentai/src/subscribers/README.md | 44 + storeagentai/src/types/onboarding.ts | 13 + storeagentai/tsconfig.admin.json | 8 + storeagentai/tsconfig.json | 30 + storeagentai/tsconfig.server.json | 8 + storeagentai/tsconfig.spec.json | 5 + 275 files changed, 41529 insertions(+) create mode 100644 storeagentai-storefront/.eslintrc.js create mode 100644 storeagentai-storefront/.gitignore create mode 100644 storeagentai-storefront/.prettierrc create mode 100644 storeagentai-storefront/.yarnrc.yml create mode 100644 storeagentai-storefront/LICENSE create mode 100644 storeagentai-storefront/README.md create mode 100644 storeagentai-storefront/cypress.json create mode 100644 storeagentai-storefront/cypress/fixtures/example.json create mode 100644 storeagentai-storefront/cypress/integration/product.spec.js create mode 100644 storeagentai-storefront/cypress/plugins/index.js create mode 100644 storeagentai-storefront/cypress/support/commands.js create mode 100644 storeagentai-storefront/cypress/support/index.js create mode 100644 storeagentai-storefront/netlify.toml create mode 100644 storeagentai-storefront/next-env.d.ts create mode 100644 storeagentai-storefront/next-sitemap.js create mode 100644 storeagentai-storefront/next.config.js create mode 100644 storeagentai-storefront/package-lock.json create mode 100644 storeagentai-storefront/package.json create mode 100644 storeagentai-storefront/postcss.config.js create mode 100644 storeagentai-storefront/public/favicon.ico create mode 100644 storeagentai-storefront/src/app/[countryCode]/(checkout)/checkout/page.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(checkout)/layout.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(checkout)/not-found.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/addresses/page.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/loading.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/orders/details/[id]/page.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/orders/page.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/page.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/profile/page.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/account/@login/page.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/account/layout.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/account/loading.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/cart/loading.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/cart/not-found.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/cart/page.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/categories/[...category]/page.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/collections/[handle]/page.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/layout.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/not-found.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/order/confirmed/[id]/loading.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/order/confirmed/[id]/page.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/page.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/products/[handle]/page.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/results/[query]/page.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/search/page.tsx create mode 100644 storeagentai-storefront/src/app/[countryCode]/(main)/store/page.tsx create mode 100644 storeagentai-storefront/src/app/actions.ts create mode 100644 storeagentai-storefront/src/app/layout.tsx create mode 100644 storeagentai-storefront/src/app/not-found.tsx create mode 100644 storeagentai-storefront/src/app/opengraph-image.jpg create mode 100644 storeagentai-storefront/src/app/twitter-image.jpg create mode 100644 storeagentai-storefront/src/lib/config.ts create mode 100644 storeagentai-storefront/src/lib/constants.tsx create mode 100644 storeagentai-storefront/src/lib/context/modal-context.tsx create mode 100644 storeagentai-storefront/src/lib/data/index.ts create mode 100644 storeagentai-storefront/src/lib/hooks/use-in-view.tsx create mode 100644 storeagentai-storefront/src/lib/hooks/use-toggle-state.tsx create mode 100644 storeagentai-storefront/src/lib/search-client.ts create mode 100644 storeagentai-storefront/src/lib/util/compare-addresses.ts create mode 100644 storeagentai-storefront/src/lib/util/get-checkout-step.ts create mode 100644 storeagentai-storefront/src/lib/util/get-number-of-skeletons.ts create mode 100644 storeagentai-storefront/src/lib/util/get-precentage-diff.ts create mode 100644 storeagentai-storefront/src/lib/util/get-prices-by-price-set-id.ts create mode 100644 storeagentai-storefront/src/lib/util/get-product-price.ts create mode 100644 storeagentai-storefront/src/lib/util/isEmpty.ts create mode 100644 storeagentai-storefront/src/lib/util/medusa-error.ts create mode 100644 storeagentai-storefront/src/lib/util/only-unique.ts create mode 100644 storeagentai-storefront/src/lib/util/prices.ts create mode 100644 storeagentai-storefront/src/lib/util/repeat.ts create mode 100644 storeagentai-storefront/src/lib/util/sort-products.ts create mode 100644 storeagentai-storefront/src/lib/util/transform-product-preview.ts create mode 100644 storeagentai-storefront/src/middleware.ts create mode 100644 storeagentai-storefront/src/modules/account/actions.ts create mode 100644 storeagentai-storefront/src/modules/account/components/account-info/index.tsx create mode 100644 storeagentai-storefront/src/modules/account/components/account-nav/index.tsx create mode 100644 storeagentai-storefront/src/modules/account/components/address-book/index.tsx create mode 100644 storeagentai-storefront/src/modules/account/components/address-card/add-address.tsx create mode 100644 storeagentai-storefront/src/modules/account/components/address-card/edit-address-modal.tsx create mode 100644 storeagentai-storefront/src/modules/account/components/login/index.tsx create mode 100644 storeagentai-storefront/src/modules/account/components/order-card/index.tsx create mode 100644 storeagentai-storefront/src/modules/account/components/order-overview/index.tsx create mode 100644 storeagentai-storefront/src/modules/account/components/overview/index.tsx create mode 100644 storeagentai-storefront/src/modules/account/components/profile-billing-address/index.tsx create mode 100644 storeagentai-storefront/src/modules/account/components/profile-email/index.tsx create mode 100644 storeagentai-storefront/src/modules/account/components/profile-name/index.tsx create mode 100644 storeagentai-storefront/src/modules/account/components/profile-password/index.tsx create mode 100644 storeagentai-storefront/src/modules/account/components/profile-phone/index.tsx create mode 100644 storeagentai-storefront/src/modules/account/components/register/index.tsx create mode 100644 storeagentai-storefront/src/modules/account/templates/account-layout.tsx create mode 100644 storeagentai-storefront/src/modules/account/templates/login-template.tsx create mode 100644 storeagentai-storefront/src/modules/cart/actions.ts create mode 100644 storeagentai-storefront/src/modules/cart/components/cart-item-select/index.tsx create mode 100644 storeagentai-storefront/src/modules/cart/components/empty-cart-message/index.tsx create mode 100644 storeagentai-storefront/src/modules/cart/components/item/index.tsx create mode 100644 storeagentai-storefront/src/modules/cart/components/sign-in-prompt/index.tsx create mode 100644 storeagentai-storefront/src/modules/cart/templates/index.tsx create mode 100644 storeagentai-storefront/src/modules/cart/templates/items.tsx create mode 100644 storeagentai-storefront/src/modules/cart/templates/preview.tsx create mode 100644 storeagentai-storefront/src/modules/cart/templates/summary.tsx create mode 100644 storeagentai-storefront/src/modules/categories/templates/index.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/actions.ts create mode 100644 storeagentai-storefront/src/modules/checkout/components/address-select/index.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/components/addresses/index.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/components/billing_address/index.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/components/country-select/index.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/components/discount-code/index.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/components/error-message/index.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/components/payment-button/index.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/components/payment-container/index.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/components/payment-test/index.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/components/payment-wrapper/index.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/components/payment-wrapper/stripe-wrapper.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/components/payment/index.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/components/review/index.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/components/shipping-address/index.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/components/shipping/index.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/components/submit-button/index.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/templates/checkout-form/index.tsx create mode 100644 storeagentai-storefront/src/modules/checkout/templates/checkout-summary/index.tsx create mode 100644 storeagentai-storefront/src/modules/collections/templates/index.tsx create mode 100644 storeagentai-storefront/src/modules/common/components/cart-totals/index.tsx create mode 100644 storeagentai-storefront/src/modules/common/components/checkbox/index.tsx create mode 100644 storeagentai-storefront/src/modules/common/components/delete-button/index.tsx create mode 100644 storeagentai-storefront/src/modules/common/components/divider/index.tsx create mode 100644 storeagentai-storefront/src/modules/common/components/filter-radio-group/index.tsx create mode 100644 storeagentai-storefront/src/modules/common/components/input/index.tsx create mode 100644 storeagentai-storefront/src/modules/common/components/interactive-link/index.tsx create mode 100644 storeagentai-storefront/src/modules/common/components/line-item-options/index.tsx create mode 100644 storeagentai-storefront/src/modules/common/components/line-item-price/index.tsx create mode 100644 storeagentai-storefront/src/modules/common/components/line-item-unit-price/index.tsx create mode 100644 storeagentai-storefront/src/modules/common/components/localized-client-link/index.tsx create mode 100644 storeagentai-storefront/src/modules/common/components/modal/index.tsx create mode 100644 storeagentai-storefront/src/modules/common/components/native-select/index.tsx create mode 100644 storeagentai-storefront/src/modules/common/components/radio/index.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/back.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/bancontact.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/chevron-down.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/eye-off.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/eye.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/fast-delivery.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/ideal.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/map-pin.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/medusa.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/nextjs.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/package.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/paypal.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/placeholder-image.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/refresh.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/spinner.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/trash.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/user.tsx create mode 100644 storeagentai-storefront/src/modules/common/icons/x.tsx create mode 100644 storeagentai-storefront/src/modules/home/components/featured-products/index.tsx create mode 100644 storeagentai-storefront/src/modules/home/components/featured-products/product-rail/index.tsx create mode 100644 storeagentai-storefront/src/modules/home/components/hero/index.tsx create mode 100644 storeagentai-storefront/src/modules/layout/components/cart-button/index.tsx create mode 100644 storeagentai-storefront/src/modules/layout/components/cart-dropdown/index.tsx create mode 100644 storeagentai-storefront/src/modules/layout/components/country-select/index.tsx create mode 100644 storeagentai-storefront/src/modules/layout/components/medusa-cta/index.tsx create mode 100644 storeagentai-storefront/src/modules/layout/components/side-menu/index.tsx create mode 100644 storeagentai-storefront/src/modules/layout/templates/footer/index.tsx create mode 100644 storeagentai-storefront/src/modules/layout/templates/index.tsx create mode 100644 storeagentai-storefront/src/modules/layout/templates/nav/index.tsx create mode 100644 storeagentai-storefront/src/modules/order/components/help/index.tsx create mode 100644 storeagentai-storefront/src/modules/order/components/item/index.tsx create mode 100644 storeagentai-storefront/src/modules/order/components/items/index.tsx create mode 100644 storeagentai-storefront/src/modules/order/components/onboarding-cta/index.tsx create mode 100644 storeagentai-storefront/src/modules/order/components/order-details/index.tsx create mode 100644 storeagentai-storefront/src/modules/order/components/order-summary/index.tsx create mode 100644 storeagentai-storefront/src/modules/order/components/payment-details/index.tsx create mode 100644 storeagentai-storefront/src/modules/order/components/shipping-details/index.tsx create mode 100644 storeagentai-storefront/src/modules/order/templates/order-completed-template.tsx create mode 100644 storeagentai-storefront/src/modules/order/templates/order-details-template.tsx create mode 100644 storeagentai-storefront/src/modules/products/components/image-gallery/index.tsx create mode 100644 storeagentai-storefront/src/modules/products/components/mobile-actions/index.tsx create mode 100644 storeagentai-storefront/src/modules/products/components/option-select/index.tsx create mode 100644 storeagentai-storefront/src/modules/products/components/product-actions/index.tsx create mode 100644 storeagentai-storefront/src/modules/products/components/product-onboarding-cta/index.tsx create mode 100644 storeagentai-storefront/src/modules/products/components/product-preview/index.tsx create mode 100644 storeagentai-storefront/src/modules/products/components/product-preview/price.tsx create mode 100644 storeagentai-storefront/src/modules/products/components/product-price/index.tsx create mode 100644 storeagentai-storefront/src/modules/products/components/product-tabs/accordion.tsx create mode 100644 storeagentai-storefront/src/modules/products/components/product-tabs/index.tsx create mode 100644 storeagentai-storefront/src/modules/products/components/related-products/index.tsx create mode 100644 storeagentai-storefront/src/modules/products/components/thumbnail/index.tsx create mode 100644 storeagentai-storefront/src/modules/products/templates/index.tsx create mode 100644 storeagentai-storefront/src/modules/products/templates/product-actions-wrapper/index.tsx create mode 100644 storeagentai-storefront/src/modules/products/templates/product-info/index.tsx create mode 100644 storeagentai-storefront/src/modules/search/actions.ts create mode 100644 storeagentai-storefront/src/modules/search/components/hit/index.tsx create mode 100644 storeagentai-storefront/src/modules/search/components/hits/index.tsx create mode 100644 storeagentai-storefront/src/modules/search/components/search-box-wrapper/index.tsx create mode 100644 storeagentai-storefront/src/modules/search/components/search-box/index.tsx create mode 100644 storeagentai-storefront/src/modules/search/components/show-all/index.tsx create mode 100644 storeagentai-storefront/src/modules/search/templates/search-modal/index.tsx create mode 100644 storeagentai-storefront/src/modules/search/templates/search-results-template/index.tsx create mode 100644 storeagentai-storefront/src/modules/skeletons/components/skeleton-button/index.tsx create mode 100644 storeagentai-storefront/src/modules/skeletons/components/skeleton-cart-item/index.tsx create mode 100644 storeagentai-storefront/src/modules/skeletons/components/skeleton-cart-totals/index.tsx create mode 100644 storeagentai-storefront/src/modules/skeletons/components/skeleton-code-form/index.tsx create mode 100644 storeagentai-storefront/src/modules/skeletons/components/skeleton-line-item/index.tsx create mode 100644 storeagentai-storefront/src/modules/skeletons/components/skeleton-order-confirmed-header/index.tsx create mode 100644 storeagentai-storefront/src/modules/skeletons/components/skeleton-order-information/index.tsx create mode 100644 storeagentai-storefront/src/modules/skeletons/components/skeleton-order-items/index.tsx create mode 100644 storeagentai-storefront/src/modules/skeletons/components/skeleton-order-summary/index.tsx create mode 100644 storeagentai-storefront/src/modules/skeletons/components/skeleton-product-preview/index.tsx create mode 100644 storeagentai-storefront/src/modules/skeletons/templates/skeleton-cart-page/index.tsx create mode 100644 storeagentai-storefront/src/modules/skeletons/templates/skeleton-order-confirmed/index.tsx create mode 100644 storeagentai-storefront/src/modules/skeletons/templates/skeleton-product-grid/index.tsx create mode 100644 storeagentai-storefront/src/modules/skeletons/templates/skeleton-related-products/index.tsx create mode 100644 storeagentai-storefront/src/modules/store/components/pagination/index.tsx create mode 100644 storeagentai-storefront/src/modules/store/components/refinement-list/index.tsx create mode 100644 storeagentai-storefront/src/modules/store/components/refinement-list/sort-products/index.tsx create mode 100644 storeagentai-storefront/src/modules/store/templates/index.tsx create mode 100644 storeagentai-storefront/src/modules/store/templates/paginated-products.tsx create mode 100644 storeagentai-storefront/src/styles/globals.css create mode 100644 storeagentai-storefront/src/types/global.ts create mode 100644 storeagentai-storefront/src/types/icon.ts create mode 100644 storeagentai-storefront/src/types/medusa.ts create mode 100644 storeagentai-storefront/store-config.js create mode 100644 storeagentai-storefront/store.config.json create mode 100644 storeagentai-storefront/tailwind.config.js create mode 100644 storeagentai-storefront/tsconfig.json create mode 100644 storeagentai-storefront/yarn.lock create mode 100644 storeagentai/.babelrc.js create mode 100644 storeagentai/.env.template create mode 100644 storeagentai/.github/dependabot.yml create mode 100644 storeagentai/.gitignore create mode 100644 storeagentai/.vscode/settings.json create mode 100644 storeagentai/.yarnrc.yml create mode 100644 storeagentai/README.md create mode 100644 storeagentai/data/seed-onboarding.json create mode 100644 storeagentai/data/seed.json create mode 100644 storeagentai/index.js create mode 100644 storeagentai/medusa-config.js create mode 100644 storeagentai/package.json create mode 100644 storeagentai/src/admin/components/onboarding-flow/default/orders/order-detail.tsx create mode 100644 storeagentai/src/admin/components/onboarding-flow/default/orders/orders-list.tsx create mode 100644 storeagentai/src/admin/components/onboarding-flow/default/products/product-detail.tsx create mode 100644 storeagentai/src/admin/components/onboarding-flow/default/products/products-list.tsx create mode 100644 storeagentai/src/admin/components/onboarding-flow/nextjs/orders/order-detail.tsx create mode 100644 storeagentai/src/admin/components/onboarding-flow/nextjs/orders/orders-list.tsx create mode 100644 storeagentai/src/admin/components/onboarding-flow/nextjs/products/product-detail.tsx create mode 100644 storeagentai/src/admin/components/onboarding-flow/nextjs/products/products-list.tsx create mode 100644 storeagentai/src/admin/components/shared/accordion.tsx create mode 100644 storeagentai/src/admin/components/shared/card.tsx create mode 100644 storeagentai/src/admin/components/shared/icons/active-circle-dotted-line.tsx create mode 100644 storeagentai/src/admin/components/shared/icons/get-started.tsx create mode 100644 storeagentai/src/admin/types/icon-type.ts create mode 100644 storeagentai/src/admin/utils/prepare-region.ts create mode 100644 storeagentai/src/admin/utils/prepare-shipping-options.ts create mode 100644 storeagentai/src/admin/utils/sample-products.ts create mode 100644 storeagentai/src/admin/widgets/onboarding-flow/onboarding-flow.tsx create mode 100644 storeagentai/src/api/README.md create mode 100644 storeagentai/src/api/admin/custom/route.ts create mode 100644 storeagentai/src/api/admin/onboarding/route.ts create mode 100644 storeagentai/src/api/store/custom/route.ts create mode 100644 storeagentai/src/jobs/README.md create mode 100644 storeagentai/src/loaders/README.md create mode 100644 storeagentai/src/migrations/1685715079776-CreateOnboarding.ts create mode 100644 storeagentai/src/migrations/1686062614694-AddOnboardingProduct.ts create mode 100644 storeagentai/src/migrations/1690996567455-CorrectOnboardingFields.ts create mode 100644 storeagentai/src/migrations/README.md create mode 100644 storeagentai/src/models/README.md create mode 100644 storeagentai/src/models/onboarding.ts create mode 100644 storeagentai/src/repositories/onboarding.ts create mode 100644 storeagentai/src/services/README.md create mode 100644 storeagentai/src/services/__tests__/test-service.spec.ts create mode 100644 storeagentai/src/services/onboarding.ts create mode 100644 storeagentai/src/subscribers/README.md create mode 100644 storeagentai/src/types/onboarding.ts create mode 100644 storeagentai/tsconfig.admin.json create mode 100644 storeagentai/tsconfig.json create mode 100644 storeagentai/tsconfig.server.json create mode 100644 storeagentai/tsconfig.spec.json diff --git a/storeagentai-storefront/.eslintrc.js b/storeagentai-storefront/.eslintrc.js new file mode 100644 index 00000000..e0509789 --- /dev/null +++ b/storeagentai-storefront/.eslintrc.js @@ -0,0 +1,3 @@ +module.exports = { + extends: ["next/core-web-vitals"] +}; \ No newline at end of file diff --git a/storeagentai-storefront/.gitignore b/storeagentai-storefront/.gitignore new file mode 100644 index 00000000..544f04ce --- /dev/null +++ b/storeagentai-storefront/.gitignore @@ -0,0 +1,48 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# IDEs +.idea +.vscode + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +node_modules + +.yarn +.swc +dump.rdb diff --git a/storeagentai-storefront/.prettierrc b/storeagentai-storefront/.prettierrc new file mode 100644 index 00000000..82fce211 --- /dev/null +++ b/storeagentai-storefront/.prettierrc @@ -0,0 +1,8 @@ +{ + "arrowParens": "always", + "semi": false, + "endOfLine": "auto", + "singleQuote": false, + "tabWidth": 2, + "trailingComma": "es5" +} diff --git a/storeagentai-storefront/.yarnrc.yml b/storeagentai-storefront/.yarnrc.yml new file mode 100644 index 00000000..3186f3f0 --- /dev/null +++ b/storeagentai-storefront/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/storeagentai-storefront/LICENSE b/storeagentai-storefront/LICENSE new file mode 100644 index 00000000..94def62e --- /dev/null +++ b/storeagentai-storefront/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Medusa + +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/storeagentai-storefront/README.md b/storeagentai-storefront/README.md new file mode 100644 index 00000000..a2c8868f --- /dev/null +++ b/storeagentai-storefront/README.md @@ -0,0 +1,303 @@ +

+ + + + + Medusa logo + + +

+ +

+ Medusa Next.js Starter Template +

+ +

+Combine Medusa's modules for your commerce backend with the newest Next.js 14 features for a performant storefront.

+ +

+ + PRs welcome! + + + Discord Chat + + + Follow @medusajs + +

+ +### Prerequisites + +To use the [Next.js Starter Template](https://medusajs.com/nextjs-commerce/), you should have a Medusa server running locally on port 9000. +For a quick setup, run: + +```shell +npx create-medusa-app@latest +``` + +Check out [create-medusa-app docs](https://docs.medusajs.com/create-medusa-app) for more details and troubleshooting. + +# Overview + +The Medusa Next.js Starter is built with: + +- [Next.js](https://nextjs.org/) +- [Tailwind CSS](https://tailwindcss.com/) +- [Typescript](https://www.typescriptlang.org/) +- [Medusa](https://medusajs.com/) + +Features include: + +- Full ecommerce support: + - Product Detail Page + - Product Overview Page + - Search with Algolia / MeiliSearch + - Product Collections + - Cart + - Checkout with PayPal and Stripe + - User Accounts + - Order Details +- Full Next.js 14 support: + - App Router + - Next fetching/caching + - Server Components + - Server Actions + - Streaming + - Static Pre-Rendering + + +# Quickstart + +### Setting up the environment variables + +Navigate into your projects directory and get your environment variables ready: + +```shell +cd nextjs-starter-medusa/ +mv .env.template .env.local +``` + +### Install dependencies + +Use Yarn to install all dependencies. + +```shell +yarn +``` + +### Start developing + +You are now ready to start up your project. + +```shell +yarn dev +``` + +### Open the code and start customizing + +Your site is now running at http://localhost:8000! + +# Payment integrations + +By default this starter supports the following payment integrations + +- [Stripe](https://stripe.com/) +- [Paypal](https://www.paypal.com/) + +To enable the integrations you need to add the following to your `.env.local` file: + +```shell +NEXT_PUBLIC_STRIPE_KEY= +NEXT_PUBLIC_PAYPAL_CLIENT_ID= +``` + +You will also need to setup the integrations in your Medusa server. See the [Medusa documentation](https://docs.medusajs.com) for more information on how to configure [Stripe](https://docs.medusajs.com/add-plugins/stripe) and [PayPal](https://docs.medusajs.com/add-plugins/paypal) in your Medusa project. + +# Search integration + +This starter is configured to support using the `medusa-search-meilisearch` plugin out of the box. To enable search you will need to enable the feature flag in `./store.config.json`, which you do by changing the config to this: + +```javascript +{ + "features": { + // other features... + "search": true + } +} +``` + +Before you can search you will need to install the plugin in your Medusa server, for a written guide on how to do this – [see our documentation](https://docs.medusajs.com/add-plugins/meilisearch). + +The search components in this starter are developed with Algolia's `react-instant-search-hooks-web` library which should make it possible for you to seemlesly change your search provider to Algolia instead of MeiliSearch. + +To do this you will need to add `algoliasearch` to the project, by running + +```shell +yarn add algoliasearch +``` + +After this you will need to switch the current MeiliSearch `SearchClient` out with a Alogolia client. To do this update `@lib/search-client`. + +```ts +import algoliasearch from "algoliasearch/lite" + +const appId = process.env.NEXT_PUBLIC_SEARCH_APP_ID || "test_app_id" // You should add this to your environment variables + +const apiKey = process.env.NEXT_PUBLIC_SEARCH_API_KEY || "test_key" + +export const searchClient = algoliasearch(appId, apiKey) + +export const SEARCH_INDEX_NAME = + process.env.NEXT_PUBLIC_INDEX_NAME || "products" +``` + +Then, in `src/app/(main)/search/actions.ts`, remove the MeiliSearch code (line 10-16) and uncomment the Algolia code. + +```ts +"use server" + +import { searchClient, SEARCH_INDEX_NAME } from "@lib/search-client" + +/** + * Uses MeiliSearch or Algolia to search for a query + * @param {string} query - search query + */ +export async function search(query: string) { + const index = searchClient.initIndex(SEARCH_INDEX_NAME) + const { hits } = await index.search(query) + + return hits +} +``` + +After this you will need to set up Algolia with your Medusa server, and then you should be good to go. For a more thorough walkthrough of using Algolia with Medusa – [see our documentation](https://docs.medusajs.com/add-plugins/algolia), and the [documentation for using `react-instantsearch-hooks-web`](https://www.algolia.com/doc/guides/building-search-ui/getting-started/react-hooks/). + +## App structure + +For the new version, the main folder structure remains unchanged. The contents have changed quite a bit though. + +``` +. +└── src + ├── app + ├── lib + ├── modules + ├── styles + ├── types + └── middleware.ts + +``` + +### `/app` directory + +The app folder contains all Next.js App Router pages and layouts, and takes care of the routing. + +``` +. +└── [countryCode] + ├── (checkout) + └── checkout + └── (main) + ├── account + │ ├── addresses + │ └── orders + │ └── details + │ └── [id] + ├── cart + ├── categories + │ └── [...category] + ├── collections + │ └── [handle] + ├── order + │ └── confirmed + │ └── [id] + ├── products + │ └── [handle] + ├── results + │ └── [query] + ├── search + └── store +``` + +The app router folder structure represents the routes of the Starter. In this case, the structure is as follows: + +- The root directory is represented by the `[countryCode]` folder. This indicates a dynamic route based on the country code. The this will be populated by the countries you set up in your Medusa server. The param is then used to fetch region specific prices, languages, etc. +- Within the root directory, there two Route Groups: `(checkout)` and `(main)`. This is done because the checkout flow uses a different layout. All other parts of the app share the same layout and are in subdirectories of the `(main)` group. Route Groups do not affect the url. +- Each of these subdirectories may have further subdirectories. For instance, the `account` directory has `addresses` and `orders` subdirectories. The `orders` directory further has a `details` subdirectory, which itself has a dynamic `[id]` subdirectory. +- This nested structure allows for specific routing to various pages within the application. For example, a URL like `/account/orders/details/123` would correspond to the `account > orders > details > [id]` path in the router structure, with `123` being the dynamic `[id]`. + +This structure enables efficient routing and organization of different parts of the Starter. + +### `/lib` **directory** + +The lib directory contains all utilities like the Medusa JS client functions, util functions, config and constants. + +The most important file here is `/lib/data/index.ts`. This file defines various functions for interacting with the Medusa API, using the JS client. The functions cover a range of actions related to shopping carts, orders, shipping, authentication, customer management, regions, products, collections, and categories. It also includes utility functions for handling headers and errors, as well as some functions for sorting and transforming product data. + +These functions are used in different Server Actions. + +### `/modules` directory + +This is where all the components, templates and Server Actions are, grouped by section. Some subdirectories have an `actions.ts` file. These files contain all Server Actions relevant to that section of the app. + +### `/styles` directory + +`global.css` imports Tailwind classes and defines a couple of global CSS classes. Tailwind and Medusa UI classes are used for styling throughout the app. + +### `/types` directory + +Contains global TypeScript type defintions. + +### `middleware.ts` + +Next.js Middleware, which is basically an Edge function that runs before (almost) every request. In our case it enforces a `countryCode` in the url. So when a user visits any url on your storefront without a `countryCode` param, it will redirect the user to the url for the most relevant region. + +The region will be decided as follows: + +- When deployed on Vercel and you’re active in the user’s current country, it will use the country code from the `x-vercel-ip-country` header. +- Else, if you have defined a `NEXT_PUBLIC_DEFAULT_REGION` environment variable, it will redirect to that. +- Else, it will redirect the user to the first region it finds on your Medusa server. + +If you want to use the `countryCode` param in your code, there’s two ways to do that: + +1. On the server in any `page.tsx` - the `countryCode` is in the `params` object: + + ```tsx + export default async function Page({ + params: { countryCode }, + }: { + params: { countryCode: string } + }) { + const region = await getRegion(countryCode) + + // rest of code + ``` + +2. From client components, with the `useParam` hook: + + ```tsx + import { useParams } from "next/navigation" + + const Component = () => { + const { countryCode } = useParams() + + // rest of code + ``` + + +The middleware also sets a cookie based on the onboarding status of a user. This is related to the Medusa Admin onboarding flow, and may be safely removed in your production storefront. + +# Resources + +## Learn more about Medusa + +- [Website](https://www.medusajs.com/) +- [GitHub](https://github.com/medusajs) +- [Documentation](https://docs.medusajs.com/) + +## Learn more about Next.js + +- [Website](https://nextjs.org/) +- [GitHub](https://github.com/vercel/next.js) +- [Documentation](https://nextjs.org/docs) diff --git a/storeagentai-storefront/cypress.json b/storeagentai-storefront/cypress.json new file mode 100644 index 00000000..67b9f7d2 --- /dev/null +++ b/storeagentai-storefront/cypress.json @@ -0,0 +1,8 @@ +{ + "baseUrl": "http://localhost:8000", + "env": { + "codeCoverage": { + "url": "/api/__coverage__" + } + } +} diff --git a/storeagentai-storefront/cypress/fixtures/example.json b/storeagentai-storefront/cypress/fixtures/example.json new file mode 100644 index 00000000..02e42543 --- /dev/null +++ b/storeagentai-storefront/cypress/fixtures/example.json @@ -0,0 +1,5 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io", + "body": "Fixtures are a great way to mock data for responses to routes" +} diff --git a/storeagentai-storefront/cypress/integration/product.spec.js b/storeagentai-storefront/cypress/integration/product.spec.js new file mode 100644 index 00000000..6bbccba6 --- /dev/null +++ b/storeagentai-storefront/cypress/integration/product.spec.js @@ -0,0 +1,38 @@ +describe("Product page", () => { + it("fetches product with handle [t-shirt]", () => { + cy.visit("/products/t-shirt") + + cy.get("h1").contains("Medusa T-Shirt") + }) + + it("adds a product to the cart", () => { + cy.visit("/products/t-shirt") + + cy.get("button").click() + + cy.get("[data-cy=cart_quantity]").contains("1") + }) + + it("adds a product twice to the cart", () => { + cy.visit("/products/t-shirt") + + cy.get("button").click() + cy.get("button").click() + + cy.get("[data-cy=cart_quantity]").contains("2") + }) + + it("changes the current image by clicking a thumbnail", () => { + cy.visit("/products/t-shirt") + + cy.get("[data-cy=current_image]") + .should("have.attr", "src") + .and("match", /.+(tee\-black\-front).+/) + + cy.get("[data-cy=product_image_2]").click() + + cy.get("[data-cy=current_image]") + .should("have.attr", "src") + .and("match", /.+(tee\-black\-back).+/) + }) +}) diff --git a/storeagentai-storefront/cypress/plugins/index.js b/storeagentai-storefront/cypress/plugins/index.js new file mode 100644 index 00000000..0c79d79c --- /dev/null +++ b/storeagentai-storefront/cypress/plugins/index.js @@ -0,0 +1,27 @@ +/// +// *********************************************************** +// This example plugins/index.js can be used to load plugins +// +// You can change the location of this file or turn off loading +// the plugins file with the 'pluginsFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/plugins-guide +// *********************************************************** + +// This function is called when a project is opened or re-opened (e.g. due to +// the project's config changing) + +/** + * @type {Cypress.PluginConfig} + */ +// eslint-disable-next-line no-unused-vars +module.exports = (on, config) => { + // require("@cypress/code-coverage/task")(on, config) + + // add other tasks to be registered here + + // IMPORTANT to return the config object + // with the any changed environment variables + return config +} diff --git a/storeagentai-storefront/cypress/support/commands.js b/storeagentai-storefront/cypress/support/commands.js new file mode 100644 index 00000000..119ab03f --- /dev/null +++ b/storeagentai-storefront/cypress/support/commands.js @@ -0,0 +1,25 @@ +// *********************************************** +// This example commands.js shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** +// +// +// -- This is a parent command -- +// Cypress.Commands.add('login', (email, password) => { ... }) +// +// +// -- This is a child command -- +// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) diff --git a/storeagentai-storefront/cypress/support/index.js b/storeagentai-storefront/cypress/support/index.js new file mode 100644 index 00000000..a80764cb --- /dev/null +++ b/storeagentai-storefront/cypress/support/index.js @@ -0,0 +1,20 @@ +// *********************************************************** +// This example support/index.js is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import "./commands" + +// Alternatively you can use CommonJS syntax: +// require('./commands') diff --git a/storeagentai-storefront/netlify.toml b/storeagentai-storefront/netlify.toml new file mode 100644 index 00000000..3ee8acb2 --- /dev/null +++ b/storeagentai-storefront/netlify.toml @@ -0,0 +1,2 @@ +[template.environment] +NEXT_PUBLIC_MEDUSA_BACKEND_URL="URL of your Medusa Server" diff --git a/storeagentai-storefront/next-env.d.ts b/storeagentai-storefront/next-env.d.ts new file mode 100644 index 00000000..4f11a03d --- /dev/null +++ b/storeagentai-storefront/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/storeagentai-storefront/next-sitemap.js b/storeagentai-storefront/next-sitemap.js new file mode 100644 index 00000000..3ede526f --- /dev/null +++ b/storeagentai-storefront/next-sitemap.js @@ -0,0 +1,19 @@ +const excludedPaths = ["/checkout", "/account/*"] + +module.exports = { + siteUrl: process.env.NEXT_PUBLIC_VERCEL_URL, + generateRobotsTxt: true, + exclude: excludedPaths + ["/[sitemap]"], + robotsTxtOptions: { + policies: [ + { + userAgent: "*", + allow: "/", + }, + { + userAgent: "*", + disallow: excludedPaths, + }, + ], + }, +} diff --git a/storeagentai-storefront/next.config.js b/storeagentai-storefront/next.config.js new file mode 100644 index 00000000..3955381a --- /dev/null +++ b/storeagentai-storefront/next.config.js @@ -0,0 +1,34 @@ +const { withStoreConfig } = require("./store-config") +const store = require("./store.config.json") + +/** + * @type {import('next').NextConfig} + */ +const nextConfig = withStoreConfig({ + features: store.features, + reactStrictMode: true, + images: { + remotePatterns: [ + { + protocol: "http", + hostname: "localhost", + }, + { + protocol: "https", + hostname: "medusa-public-images.s3.eu-west-1.amazonaws.com", + }, + { + protocol: "https", + hostname: "medusa-server-testing.s3.amazonaws.com", + }, + { + protocol: "https", + hostname: "medusa-server-testing.s3.us-east-1.amazonaws.com", + }, + ], + }, +}) + +console.log("next.config.js", JSON.stringify(module.exports, null, 2)) + +module.exports = nextConfig diff --git a/storeagentai-storefront/package-lock.json b/storeagentai-storefront/package-lock.json new file mode 100644 index 00000000..6c69a18b --- /dev/null +++ b/storeagentai-storefront/package-lock.json @@ -0,0 +1,15343 @@ +{ + "name": "medusa-next", + "version": "1.0.3", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "medusa-next", + "version": "1.0.3", + "dependencies": { + "@headlessui/react": "^1.6.1", + "@hookform/error-message": "^2.0.0", + "@medusajs/link-modules": "^0.2.3", + "@medusajs/medusa-js": "^6.1.7", + "@medusajs/modules-sdk": "^1.12.3", + "@medusajs/pricing": "^0.1.4", + "@medusajs/product": "^0.3.4", + "@medusajs/ui": "^2.2.0", + "@meilisearch/instant-meilisearch": "^0.7.1", + "@paypal/paypal-js": "^5.0.6", + "@paypal/react-paypal-js": "^7.8.1", + "@stripe/react-stripe-js": "^1.7.2", + "@stripe/stripe-js": "^1.29.0", + "algoliasearch": "^4.20.0", + "lodash": "^4.17.21", + "medusa-react": "^9.0.0", + "next": "^14.0.0", + "react": "^18.2.0", + "react-country-flag": "^3.0.2", + "react-dom": "^18.2.0", + "react-instantsearch-hooks-web": "^6.29.0", + "react-intersection-observer": "^9.3.4", + "tailwindcss-radix": "^2.8.0", + "webpack": "^5" + }, + "devDependencies": { + "@babel/core": "^7.17.5", + "@medusajs/client-types": "^0.2.2", + "@medusajs/medusa": "^1.18.0", + "@medusajs/ui-preset": "^1.0.2", + "@types/lodash": "^4.14.195", + "@types/node": "17.0.21", + "@types/react": "^18.2.42", + "@types/react-dom": "^18.2.18", + "@types/react-instantsearch-dom": "^6.12.3", + "autoprefixer": "^10.4.2", + "babel-loader": "^8.2.3", + "cypress": "^9.5.2", + "eslint": "8.10.0", + "eslint-config-next": "^13.4.5", + "postcss": "^8.4.8", + "prettier": "^2.8.8", + "tailwindcss": "^3.0.23", + "typescript": "^5.3.2" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.20.0.tgz", + "integrity": "sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ==", + "dependencies": { + "@algolia/cache-common": "4.20.0" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.20.0.tgz", + "integrity": "sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ==" + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.20.0.tgz", + "integrity": "sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg==", + "dependencies": { + "@algolia/cache-common": "4.20.0" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.20.0.tgz", + "integrity": "sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q==", + "dependencies": { + "@algolia/client-common": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.20.0.tgz", + "integrity": "sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug==", + "dependencies": { + "@algolia/client-common": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.20.0.tgz", + "integrity": "sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ==", + "dependencies": { + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.20.0.tgz", + "integrity": "sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ==", + "dependencies": { + "@algolia/client-common": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.20.0.tgz", + "integrity": "sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg==", + "dependencies": { + "@algolia/client-common": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" + }, + "node_modules/@algolia/logger-common": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.20.0.tgz", + "integrity": "sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ==" + }, + "node_modules/@algolia/logger-console": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.20.0.tgz", + "integrity": "sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA==", + "dependencies": { + "@algolia/logger-common": "4.20.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.20.0.tgz", + "integrity": "sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw==", + "dependencies": { + "@algolia/requester-common": "4.20.0" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.20.0.tgz", + "integrity": "sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng==" + }, + "node_modules/@algolia/requester-node-http": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.20.0.tgz", + "integrity": "sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng==", + "dependencies": { + "@algolia/requester-common": "4.20.0" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.20.0.tgz", + "integrity": "sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg==", + "dependencies": { + "@algolia/cache-common": "4.20.0", + "@algolia/logger-common": "4.20.0", + "@algolia/requester-common": "4.20.0" + } + }, + "node_modules/@algolia/ui-components-highlight-vdom": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@algolia/ui-components-highlight-vdom/-/ui-components-highlight-vdom-1.2.1.tgz", + "integrity": "sha512-IlYgIaCUEkz9ezNbwugwKv991oOHhveyq6nzL0F1jDzg1p3q5Yj/vO4KpNG910r2dwGCG3nEm5GtChcLnarhFA==", + "dependencies": { + "@algolia/ui-components-shared": "1.2.1", + "@babel/runtime": "^7.0.0" + } + }, + "node_modules/@algolia/ui-components-shared": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@algolia/ui-components-shared/-/ui-components-shared-1.2.1.tgz", + "integrity": "sha512-a7mYHf/GVQfhAx/HRiMveKkFvHspQv/REdG+C/FIOosiSmNZxX7QebDwJkrGSmDWdXO12D0Qv1xn3AytFcEDlQ==" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz", + "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.20.tgz", + "integrity": "sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.22.20", + "@babel/helpers": "^7.22.15", + "@babel/parser": "^7.22.16", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.20", + "@babel/types": "^7.22.19", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", + "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", + "dependencies": { + "@babel/types": "^7.22.15", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz", + "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz", + "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", + "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", + "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", + "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.20.tgz", + "integrity": "sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.16", + "@babel/types": "^7.22.19", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.19", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", + "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.19", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cypress/request": { + "version": "2.88.12", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.12.tgz", + "integrity": "sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==", + "dev": true, + "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", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.10.3", + "safe-buffer": "^5.1.2", + "tough-cookie": "^4.1.3", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/request/node_modules/qs": { + "version": "6.10.5", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.5.tgz", + "integrity": "sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ==", + "deprecated": "when using stringify with arrayFormat comma, `[]` is appended on single-item arrays. Upgrade to v6.11.0 or downgrade to v6.10.4 to fix.", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@cypress/request/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", + "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==", + "dependencies": { + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", + "dependencies": { + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.2.tgz", + "integrity": "sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==", + "dependencies": { + "@floating-ui/dom": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", + "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" + }, + "node_modules/@formatjs/ecma402-abstract": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.17.2.tgz", + "integrity": "sha512-k2mTh0m+IV1HRdU0xXM617tSQTi53tVR2muvYOsBeYcUgEAyxV1FOC7Qj279th3fBVQ+Dj6muvNJZcHSPNdbKg==", + "dependencies": { + "@formatjs/intl-localematcher": "0.4.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/fast-memoize": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz", + "integrity": "sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.0.tgz", + "integrity": "sha512-7uqC4C2RqOaBQtcjqXsSpGRYVn+ckjhNga5T/otFh6MgxRrCJQqvjfbrGLpX1Lcbxdm5WH3Z2WZqt1+Tm/cn/Q==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.17.2", + "@formatjs/icu-skeleton-parser": "1.6.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.6.2.tgz", + "integrity": "sha512-VtB9Slo4ZL6QgtDFJ8Injvscf0xiDd4bIV93SOJTBjUF4xe2nAWOoSjLEtqIG+hlIs1sNrVKAaFo3nuTI4r5ZA==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.17.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.4.2.tgz", + "integrity": "sha512-BGdtJFmaNJy5An/Zan4OId/yR9Ih1OojFjcduX/xOvq798OgWSyDtd6Qd5jqJXwJs1ipe4Fxu9+cshic5Ox2tA==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@graphql-tools/merge": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.1.tgz", + "integrity": "sha512-hIEExWO9fjA6vzsVjJ3s0cCQ+Q/BEeMVJZtMXd7nbaVefVy0YDyYlEkeoYYNV3NVVvu1G9lr6DM1Qd0DGo9Caw==", + "dependencies": { + "@graphql-tools/utils": "^10.0.10", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/schema": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.2.tgz", + "integrity": "sha512-TbPsIZnWyDCLhgPGnDjt4hosiNU2mF/rNtSk5BVaXWnZqvKJ6gzJV4fcHcvhRIwtscDMW2/YTnK6dLVnk8pc4w==", + "dependencies": { + "@graphql-tools/merge": "^9.0.1", + "@graphql-tools/utils": "^10.0.10", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/utils": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.10.tgz", + "integrity": "sha512-NzK2qZP+jUt4Cc+l879wLqk/JGGu8SAEJgqaamYBgIgfmsuwzDWpKw2VpO0DbZdFdtlAStl7a3mbJmOrRqmZnw==", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "cross-inspect": "1.0.0", + "dset": "^3.1.2", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@headlessui/react": { + "version": "1.7.17", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.17.tgz", + "integrity": "sha512-4am+tzvkqDSSgiwrsEpGWqgGo9dz8qU5M3znCkC4PgkpY4HcCZzEDEvozltGGGHIKl9jbXbZPSH5TWn4sWJdow==", + "dependencies": { + "client-only": "^0.0.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16 || ^17 || ^18", + "react-dom": "^16 || ^17 || ^18" + } + }, + "node_modules/@hookform/error-message": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hookform/error-message/-/error-message-2.0.1.tgz", + "integrity": "sha512-U410sAr92xgxT1idlu9WWOVjndxLdgPUHEB8Schr27C9eh7/xUnITWpCMF93s+lGiG++D4JnbSnrb5A21AdSNg==", + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0", + "react-hook-form": "^7.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@internationalized/date": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.5.0.tgz", + "integrity": "sha512-nw0Q+oRkizBWMioseI8+2TeUPEyopJVz5YxoYVzR0W1v+2YytiYah7s/ot35F149q/xAg4F1gT/6eTd+tsUpFQ==", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/message": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.1.tgz", + "integrity": "sha512-ZgHxf5HAPIaR0th+w0RUD62yF6vxitjlprSxmLJ1tam7FOekqRSDELMg4Cr/DdszG5YLsp5BG3FgHgqquQZbqw==", + "dependencies": { + "@swc/helpers": "^0.5.0", + "intl-messageformat": "^10.1.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.3.0.tgz", + "integrity": "sha512-PuxgnKE5NJMOGKUcX1QROo8jq7sW7UWLrL5B6Rfe8BdWgU/be04cVvLyCeALD46vvbAv3d1mUvyHav/Q9a237g==", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/string": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.1.1.tgz", + "integrity": "sha512-fvSr6YRoVPgONiVIUhgCmIAlifMVCeej/snPZVzbzRPxGpHl3o1GRe+d/qh92D8KhgOciruDUH8I5mjdfdjzfA==", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@ioredis/as-callback": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@ioredis/as-callback/-/as-callback-3.0.0.tgz", + "integrity": "sha512-Kqv1rZ3WbgOrS+hgzJ5xG5WQuhvzzSTRYvNeyPMLOAM78MHSnuKI20JeJGbpuAt//LCuP0vsexZcorqW7kWhJg==" + }, + "node_modules/@ioredis/commands": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", + "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "peer": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "peer": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "peer": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "peer": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@medusajs/client-types": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@medusajs/client-types/-/client-types-0.2.5.tgz", + "integrity": "sha512-jB43v+OWNSVo+9jv4EWShDKy+JGEx/LYRdcC0iS8HQx9eXNqSIsP27R8sRetdxschsuE+bd6K2Lj130DFiOICw==", + "dev": true + }, + "node_modules/@medusajs/icons": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@medusajs/icons/-/icons-1.1.0.tgz", + "integrity": "sha512-90+nCmUq9W4KHgg8XuyiZcp41yRleTqT1Y/OZW+Th8FkCvFd8981ugwu7DYZjnaUvXnBCpsGDQ0zYuJ7sU4QIA==", + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x" + } + }, + "node_modules/@medusajs/link-modules": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@medusajs/link-modules/-/link-modules-0.2.3.tgz", + "integrity": "sha512-zebvSoLia0W6NbgMrxwql4Ghudx+8Uc2ESNfX+bf56efJz7Uk+NDXhbKWQXSK/oHtxPXuJM0vbGDtvWOa0MK5A==", + "dependencies": { + "@medusajs/modules-sdk": "^1.12.3", + "@medusajs/types": "^1.11.6", + "@medusajs/utils": "^1.10.5", + "@mikro-orm/core": "5.7.12", + "@mikro-orm/postgresql": "5.7.12", + "awilix": "^8.0.0" + } + }, + "node_modules/@medusajs/medusa": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@medusajs/medusa/-/medusa-1.18.0.tgz", + "integrity": "sha512-6yh5ytCiH+gjtziqFivpFLfAq4R1L4awPFkL++9iDwEBYHRZ4gUDlyiytC4lgvHEqHYcH/LdNU0jrY8BBU2PEg==", + "dependencies": { + "@medusajs/link-modules": "^0.2.3", + "@medusajs/medusa-cli": "^1.3.21", + "@medusajs/modules-sdk": "^1.12.3", + "@medusajs/orchestration": "^0.4.4", + "@medusajs/utils": "^1.11.0", + "@medusajs/workflows": "^0.3.0", + "awilix": "^8.0.0", + "body-parser": "^1.19.0", + "boxen": "^5.0.1", + "bullmq": "^3.5.6", + "chokidar": "^3.4.2", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.0", + "compression": "^1.7.4", + "connect-redis": "^5.0.0", + "cookie-parser": "^1.4.6", + "core-js": "^3.6.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.3", + "dotenv": "^16.0.3", + "express": "^4.18.2", + "express-session": "^1.17.3", + "fs-exists-cached": "^1.0.0", + "glob": "^7.1.6", + "ioredis": "^5.2.5", + "ioredis-mock": "8.4.0", + "iso8601-duration": "^1.3.0", + "jsonwebtoken": "^9.0.0", + "lodash": "^4.17.21", + "medusa-core-utils": "^1.2.0", + "medusa-telemetry": "^0.0.17", + "medusa-test-utils": "^1.1.40", + "morgan": "^1.9.1", + "multer": "^1.4.5-lts.1", + "node-schedule": "^2.1.1", + "papaparse": "5.3.2", + "passport": "^0.6.0", + "passport-custom": "^1.1.1", + "passport-jwt": "^4.0.1", + "passport-local": "^1.0.0", + "pg": "^8.11.2", + "qs": "^6.11.2", + "randomatic": "^3.1.1", + "redis": "^3.0.2", + "reflect-metadata": "^0.1.13", + "regenerator-runtime": "^0.13.11", + "request-ip": "^3.3.0", + "scrypt-kdf": "^2.0.1", + "ulid": "^2.3.0", + "uuid": "^9.0.0", + "winston": "^3.8.2" + }, + "bin": { + "medusa": "cli.js" + }, + "peerDependencies": { + "medusa-interfaces": "^1.3.7", + "typeorm": "^0.3.16" + } + }, + "node_modules/@medusajs/medusa-cli": { + "version": "1.3.21", + "resolved": "https://registry.npmjs.org/@medusajs/medusa-cli/-/medusa-cli-1.3.21.tgz", + "integrity": "sha512-j898S/3ipWFG3HIBZtyUc/KfqnO2JV5h4Mj30M/P+7vXxvLlpavKiU6qdBRxLZBQHHZ2mGuyHRoq3RatHrrw/Q==", + "dependencies": { + "@medusajs/utils": "^1.10.0", + "axios": "^0.21.4", + "chalk": "^4.0.0", + "configstore": "5.0.1", + "core-js": "^3.6.5", + "dotenv": "16.0.3", + "execa": "^5.1.1", + "fs-exists-cached": "^1.0.0", + "fs-extra": "^10.0.0", + "glob": "^7.1.6", + "hosted-git-info": "^4.0.2", + "inquirer": "^8.0.0", + "is-valid-path": "^0.1.1", + "meant": "^1.0.3", + "medusa-core-utils": "^1.2.0", + "medusa-telemetry": "^0.0.17", + "open": "^8.0.6", + "ora": "^5.4.1", + "pg": "^8.11.0", + "pg-god": "^1.0.12", + "prompts": "^2.4.2", + "regenerator-runtime": "^0.13.11", + "resolve-cwd": "^3.0.0", + "semver": "^7.3.8", + "stack-trace": "^0.0.10", + "ulid": "^2.3.0", + "winston": "^3.8.2", + "yargs": "^15.3.1" + }, + "bin": { + "medusa": "cli.js" + } + }, + "node_modules/@medusajs/medusa-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@medusajs/medusa-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@medusajs/medusa-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@medusajs/medusa-cli/node_modules/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==" + }, + "node_modules/@medusajs/medusa-cli/node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/@medusajs/medusa-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@medusajs/medusa-cli/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@medusajs/medusa-cli/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@medusajs/medusa-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@medusajs/medusa-cli/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@medusajs/medusa-js": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@medusajs/medusa-js/-/medusa-js-6.1.7.tgz", + "integrity": "sha512-WJf6pZCTf1aKw64NkwrtsCPcYXZzTO3XaETbHLucWuPDf9kHzzCTcHvsshnW3dDRzKIn4Vn48HygzzkvhoN+HA==", + "dependencies": { + "axios": "^0.24.0", + "cross-env": "^5.2.1", + "qs": "^6.10.3", + "retry-axios": "^2.6.0", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@medusajs/medusa": "^1.17.2" + } + }, + "node_modules/@medusajs/medusa-js/node_modules/axios": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "dependencies": { + "follow-redirects": "^1.14.4" + } + }, + "node_modules/@medusajs/modules-sdk": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/@medusajs/modules-sdk/-/modules-sdk-1.12.3.tgz", + "integrity": "sha512-r95PKgf+ndRXNCFQtunTb1PBwCuP3AjlS3WHktSprSbsvXIBFiLV9v1WFmLp/yC8W/+z/rMMVA3nm5DMLk30Rw==", + "dependencies": { + "@graphql-tools/merge": "^9.0.0", + "@graphql-tools/schema": "^10.0.0", + "@medusajs/orchestration": "^0.4.4", + "@medusajs/types": "^1.11.6", + "@medusajs/utils": "^1.10.5", + "awilix": "^8.0.0", + "knex": "2.4.2", + "pg": "^8.11.2", + "resolve-cwd": "^3.0.0" + } + }, + "node_modules/@medusajs/orchestration": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@medusajs/orchestration/-/orchestration-0.4.4.tgz", + "integrity": "sha512-JRS2g4DX8POn8b5W6vTBE3yvQuDF5VPOMS1e4Owhg9hjJ6p+mIuPju7RheKj6dZ2KtQjPT5sCSHpscVUca/z1w==", + "dependencies": { + "@medusajs/types": "^1.11.6", + "@medusajs/utils": "^1.10.5", + "awilix": "^8.0.0", + "graphql": "^16.6.0" + } + }, + "node_modules/@medusajs/pricing": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@medusajs/pricing/-/pricing-0.1.4.tgz", + "integrity": "sha512-cEiBZ+l10ds8RalOT9Dq3yOEMU95Ke9MnjS/rxXKu4uI38mz9UV6vf23V1Zfe8w8wZaVdt2sv/JEhDa3jssh5A==", + "dependencies": { + "@medusajs/modules-sdk": "^1.12.3", + "@medusajs/types": "^1.11.7", + "@medusajs/utils": "^1.11.0", + "@mikro-orm/core": "5.7.12", + "@mikro-orm/migrations": "5.7.12", + "@mikro-orm/postgresql": "5.7.12", + "awilix": "^8.0.0", + "dotenv": "^16.1.4", + "knex": "2.4.2" + }, + "bin": { + "medusa-pricing-migrations-down": "dist/scripts/bin/run-migration-down.js", + "medusa-pricing-migrations-up": "dist/scripts/bin/run-migration-up.js", + "medusa-pricing-seed": "dist/scripts/bin/run-seed.js" + } + }, + "node_modules/@medusajs/product": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@medusajs/product/-/product-0.3.4.tgz", + "integrity": "sha512-GBmNw1puI1sG7xlkZ55HPzpUN9EB/LkWW8GrOp971KSK9/1ITouFY0GMEPZNHsESwCDBD2aDCh/LJsf7NASoUQ==", + "dependencies": { + "@medusajs/modules-sdk": "^1.12.3", + "@medusajs/types": "^1.11.7", + "@medusajs/utils": "^1.11.0", + "@mikro-orm/core": "5.7.12", + "@mikro-orm/migrations": "5.7.12", + "@mikro-orm/postgresql": "5.7.12", + "awilix": "^8.0.0", + "dotenv": "^16.1.4", + "knex": "2.4.2", + "lodash": "^4.17.21" + }, + "bin": { + "medusa-product-migrations-down": "dist/scripts/bin/run-migration-down.js", + "medusa-product-migrations-up": "dist/scripts/bin/run-migration-up.js", + "medusa-product-seed": "dist/scripts/bin/run-seed.js" + } + }, + "node_modules/@medusajs/types": { + "version": "1.11.7", + "resolved": "https://registry.npmjs.org/@medusajs/types/-/types-1.11.7.tgz", + "integrity": "sha512-KkNJd4pxu5zoiv09nsG2ARtrC17LxsDD941uX35IMfvNeWYRk31kQ59EipYE59SBvGpvatoaBHzTxSAsrebzTQ==" + }, + "node_modules/@medusajs/ui": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@medusajs/ui/-/ui-2.2.0.tgz", + "integrity": "sha512-T2VdLrIQSaa2+DCWaN0sc55WS+TnQv5En2JbLVoAsbABXerYMu81uQeWtVHX5p1ojloSFtCz+cdWxMLK7uJb+Q==", + "dependencies": { + "@medusajs/icons": "*", + "@radix-ui/react-accordion": "^1.1.2", + "@radix-ui/react-alert-dialog": "^1.0.4", + "@radix-ui/react-avatar": "^1.0.3", + "@radix-ui/react-checkbox": "^1.0.4", + "@radix-ui/react-dialog": "^1.0.4", + "@radix-ui/react-dropdown-menu": "^2.0.5", + "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-popover": "^1.0.6", + "@radix-ui/react-portal": "^1.0.3", + "@radix-ui/react-radio-group": "^1.1.3", + "@radix-ui/react-scroll-area": "^1.0.4", + "@radix-ui/react-select": "^2.0.0", + "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-switch": "^1.0.3", + "@radix-ui/react-tabs": "^1.0.4", + "@radix-ui/react-toast": "^1.1.4", + "@radix-ui/react-tooltip": "^1.0.6", + "@react-aria/datepicker": "^3.5.0", + "@react-stately/datepicker": "^3.5.0", + "class-variance-authority": "^0.6.1", + "clsx": "^1.2.1", + "copy-to-clipboard": "^3.3.3", + "date-fns": "^2.30.0", + "prism-react-renderer": "^2.0.6", + "react-currency-input-field": "^3.6.11", + "react-day-picker": "^8.8.0", + "tailwind-merge": "^1.13.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@medusajs/ui-preset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@medusajs/ui-preset/-/ui-preset-1.0.2.tgz", + "integrity": "sha512-Z+VUZ/VbRAkAvXT4NAMO/saSouqa5BCr/SFkw/a/LdNkl3FY70nQZQ1B1fpY2BuaunmmzCON92tcjxGMXhJEHg==", + "dev": true, + "dependencies": { + "@tailwindcss/forms": "^0.5.3", + "tailwindcss-animate": "^1.0.6" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0" + } + }, + "node_modules/@medusajs/utils": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@medusajs/utils/-/utils-1.11.0.tgz", + "integrity": "sha512-ysMu+NNc/xQmocodWE/KEVUZ/bwtAjXJg9/DmPlfER4gR9kN+G22NVxl3v0jfyhSxPyxQ3OKqFhpsFaGeu/Www==", + "dependencies": { + "@medusajs/types": "^1.11.7", + "@mikro-orm/core": "5.7.12", + "@mikro-orm/migrations": "5.7.12", + "@mikro-orm/postgresql": "5.7.12", + "awilix": "^8.0.1", + "knex": "2.4.2", + "ulid": "^2.3.0" + } + }, + "node_modules/@medusajs/workflows": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@medusajs/workflows/-/workflows-0.3.0.tgz", + "integrity": "sha512-ONb2mXaFTnk+Y4iP3p/lYxzrvar8u/mZBtDMszxbiEcov5SQzOYkNNxOu859QgHuhUJztTk3Xhcyfhkr1QztEA==", + "dependencies": { + "@medusajs/modules-sdk": "^1.12.3", + "@medusajs/orchestration": "^0.4.4", + "@medusajs/utils": "^1.11.0", + "awilix": "^8.0.1", + "ulid": "^2.3.0" + } + }, + "node_modules/@meilisearch/instant-meilisearch": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@meilisearch/instant-meilisearch/-/instant-meilisearch-0.7.1.tgz", + "integrity": "sha512-bUGiGO/da915Y9Dmu2n5fTMFvSlJHC6ABOcL7056OiBSCU1Bx1EvVEkzYmTxac3lqIoIpxZU5t0WXiPeikrg4g==", + "dependencies": { + "meilisearch": "0.25.1" + } + }, + "node_modules/@mikro-orm/core": { + "version": "5.7.12", + "resolved": "https://registry.npmjs.org/@mikro-orm/core/-/core-5.7.12.tgz", + "integrity": "sha512-bd9M4zCzdUGjM2uDGVZmo2ENqa/slzSxOk4knS/LUeAVGgLizidRIT9A41lObILCT1giaVV70n1PhxNSrHe8sA==", + "dependencies": { + "acorn-loose": "8.3.0", + "acorn-walk": "8.2.0", + "dotenv": "16.1.4", + "fs-extra": "11.1.1", + "globby": "11.1.0", + "mikro-orm": "~5.7.12", + "reflect-metadata": "0.1.13" + }, + "engines": { + "node": ">= 14.0.0" + }, + "peerDependencies": { + "@mikro-orm/better-sqlite": "^5.0.0", + "@mikro-orm/entity-generator": "^5.0.0", + "@mikro-orm/mariadb": "^5.0.0", + "@mikro-orm/migrations": "^5.0.0", + "@mikro-orm/migrations-mongodb": "^5.0.0", + "@mikro-orm/mongodb": "^5.0.0", + "@mikro-orm/mysql": "^5.0.0", + "@mikro-orm/postgresql": "^5.0.0", + "@mikro-orm/seeder": "^5.0.0", + "@mikro-orm/sqlite": "^5.0.0" + }, + "peerDependenciesMeta": { + "@mikro-orm/better-sqlite": { + "optional": true + }, + "@mikro-orm/entity-generator": { + "optional": true + }, + "@mikro-orm/mariadb": { + "optional": true + }, + "@mikro-orm/migrations": { + "optional": true + }, + "@mikro-orm/migrations-mongodb": { + "optional": true + }, + "@mikro-orm/mongodb": { + "optional": true + }, + "@mikro-orm/mysql": { + "optional": true + }, + "@mikro-orm/postgresql": { + "optional": true + }, + "@mikro-orm/seeder": { + "optional": true + }, + "@mikro-orm/sqlite": { + "optional": true + } + } + }, + "node_modules/@mikro-orm/core/node_modules/dotenv": { + "version": "16.1.4", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.1.4.tgz", + "integrity": "sha512-m55RtE8AsPeJBpOIFKihEmqUcoVncQIwo7x9U8ZwLEZw9ZpXboz2c+rvog+jUaJvVrZ5kBOeYQBX5+8Aa/OZQw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/@mikro-orm/core/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@mikro-orm/knex": { + "version": "5.7.14", + "resolved": "https://registry.npmjs.org/@mikro-orm/knex/-/knex-5.7.14.tgz", + "integrity": "sha512-dLw80JiOfQ6YBtKXI3j0C31lYfbWlytZUpXFM4tEKlMbAMmSbPqDgZpiF3luxBKTg3JpsnGSK0urBOxL1c/m+g==", + "dependencies": { + "fs-extra": "11.1.1", + "knex": "2.5.1", + "sqlstring": "2.3.3" + }, + "engines": { + "node": ">= 14.0.0" + }, + "peerDependencies": { + "@mikro-orm/core": "^5.0.0", + "@mikro-orm/entity-generator": "^5.0.0", + "@mikro-orm/migrations": "^5.0.0", + "better-sqlite3": "*", + "mssql": "*", + "mysql": "*", + "mysql2": "*", + "pg": "*", + "sqlite3": "*" + }, + "peerDependenciesMeta": { + "@mikro-orm/entity-generator": { + "optional": true + }, + "@mikro-orm/migrations": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "mssql": { + "optional": true + }, + "mysql": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "sqlite3": { + "optional": true + } + } + }, + "node_modules/@mikro-orm/knex/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@mikro-orm/knex/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@mikro-orm/knex/node_modules/knex": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/knex/-/knex-2.5.1.tgz", + "integrity": "sha512-z78DgGKUr4SE/6cm7ku+jHvFT0X97aERh/f0MUKAKgFnwCYBEW4TFBqtHWFYiJFid7fMrtpZ/gxJthvz5mEByA==", + "dependencies": { + "colorette": "2.0.19", + "commander": "^10.0.0", + "debug": "4.3.4", + "escalade": "^3.1.1", + "esm": "^3.2.25", + "get-package-type": "^0.1.0", + "getopts": "2.3.0", + "interpret": "^2.2.0", + "lodash": "^4.17.21", + "pg-connection-string": "2.6.1", + "rechoir": "^0.8.0", + "resolve-from": "^5.0.0", + "tarn": "^3.0.2", + "tildify": "2.0.0" + }, + "bin": { + "knex": "bin/cli.js" + }, + "engines": { + "node": ">=12" + }, + "peerDependenciesMeta": { + "better-sqlite3": { + "optional": true + }, + "mysql": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-native": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true + } + } + }, + "node_modules/@mikro-orm/knex/node_modules/pg-connection-string": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.1.tgz", + "integrity": "sha512-w6ZzNu6oMmIzEAYVw+RLK0+nqHPt8K3ZnknKi+g48Ak2pr3dtljJW3o+D/n2zzCG07Zoe9VOX3aiKpj+BN0pjg==" + }, + "node_modules/@mikro-orm/knex/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@mikro-orm/migrations": { + "version": "5.7.12", + "resolved": "https://registry.npmjs.org/@mikro-orm/migrations/-/migrations-5.7.12.tgz", + "integrity": "sha512-hUKUMKw01KpCKEoLMSbqLpztymE8Gk95+/nO7ThO5PTkNzH5eqLt00Zy9KlFgDEi85mOkyGnKbthzZMHPSLxSg==", + "dependencies": { + "@mikro-orm/knex": "~5.7.12", + "fs-extra": "11.1.1", + "knex": "2.4.2", + "umzug": "3.2.1" + }, + "engines": { + "node": ">= 14.0.0" + }, + "peerDependencies": { + "@mikro-orm/core": "^5.0.0" + } + }, + "node_modules/@mikro-orm/migrations/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@mikro-orm/postgresql": { + "version": "5.7.12", + "resolved": "https://registry.npmjs.org/@mikro-orm/postgresql/-/postgresql-5.7.12.tgz", + "integrity": "sha512-JF89Yf3D/nyA45TzXxclajaDrHXFB/ad3edkF0BA5+sFKsj6it18P/wq0HEk/rhqsHLTlxcmyG0/F+AO3HOPow==", + "dependencies": { + "@mikro-orm/knex": "~5.7.12", + "pg": "8.11.0" + }, + "engines": { + "node": ">= 14.0.0" + }, + "peerDependencies": { + "@mikro-orm/core": "^5.0.0", + "@mikro-orm/entity-generator": "^5.0.0", + "@mikro-orm/migrations": "^5.0.0", + "@mikro-orm/seeder": "^5.0.0" + }, + "peerDependenciesMeta": { + "@mikro-orm/entity-generator": { + "optional": true + }, + "@mikro-orm/migrations": { + "optional": true + }, + "@mikro-orm/seeder": { + "optional": true + } + } + }, + "node_modules/@mikro-orm/postgresql/node_modules/pg": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.0.tgz", + "integrity": "sha512-meLUVPn2TWgJyLmy7el3fQQVwft4gU5NGyvV0XbD41iU9Jbg8lCH4zexhIkihDzVHJStlt6r088G6/fWeNjhXA==", + "dependencies": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.6.0", + "pg-pool": "^3.6.0", + "pg-protocol": "^1.6.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.0" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/@mikro-orm/postgresql/node_modules/pg-connection-string": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", + "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz", + "integrity": "sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz", + "integrity": "sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.2.tgz", + "integrity": "sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.2.tgz", + "integrity": "sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz", + "integrity": "sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz", + "integrity": "sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@next/env": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.4.tgz", + "integrity": "sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.19.tgz", + "integrity": "sha512-N/O+zGb6wZQdwu6atMZHbR7T9Np5SUFUjZqCbj0sXm+MwQO35M8TazVB4otm87GkXYs2l6OPwARd3/PUWhZBVQ==", + "dev": true, + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.4.tgz", + "integrity": "sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.4.tgz", + "integrity": "sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.4.tgz", + "integrity": "sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.4.tgz", + "integrity": "sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.4.tgz", + "integrity": "sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.4.tgz", + "integrity": "sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.4.tgz", + "integrity": "sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.4.tgz", + "integrity": "sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.4.tgz", + "integrity": "sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@oclif/command": { + "version": "1.8.36", + "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.8.36.tgz", + "integrity": "sha512-/zACSgaYGtAQRzc7HjzrlIs14FuEYAZrMOEwicRoUnZVyRunG4+t5iSEeQu0Xy2bgbCD0U1SP/EdeNZSTXRwjQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dependencies": { + "@oclif/config": "^1.18.2", + "@oclif/errors": "^1.3.6", + "@oclif/help": "^1.0.1", + "@oclif/parser": "^3.8.17", + "debug": "^4.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@oclif/config": "^1" + } + }, + "node_modules/@oclif/command/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@oclif/command/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@oclif/command/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@oclif/config": { + "version": "1.18.17", + "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.18.17.tgz", + "integrity": "sha512-k77qyeUvjU8qAJ3XK3fr/QVAqsZO8QOBuESnfeM5HHtPNLSyfVcwiMM2zveSW5xRdLSG3MfV8QnLVkuyCL2ENg==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dependencies": { + "@oclif/errors": "^1.3.6", + "@oclif/parser": "^3.8.17", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-wsl": "^2.1.1", + "tslib": "^2.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/errors": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.6.tgz", + "integrity": "sha512-fYaU4aDceETd89KXP+3cLyg9EHZsLD3RxF2IU9yxahhBpspWjkWi3Dy3bTgcwZ3V47BgxQaGapzJWDM33XIVDQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dependencies": { + "clean-stack": "^3.0.0", + "fs-extra": "^8.1", + "indent-string": "^4.0.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/errors/node_modules/clean-stack": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", + "dependencies": { + "escape-string-regexp": "4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@oclif/errors/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@oclif/errors/node_modules/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==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@oclif/errors/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@oclif/errors/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@oclif/help": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@oclif/help/-/help-1.0.15.tgz", + "integrity": "sha512-Yt8UHoetk/XqohYX76DfdrUYLsPKMc5pgkzsZVHDyBSkLiGRzujVaGZdjr32ckVZU9q3a47IjhWxhip7Dz5W/g==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dependencies": { + "@oclif/config": "1.18.16", + "@oclif/errors": "1.3.6", + "chalk": "^4.1.2", + "indent-string": "^4.0.0", + "lodash": "^4.17.21", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/help/node_modules/@oclif/config": { + "version": "1.18.16", + "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.18.16.tgz", + "integrity": "sha512-VskIxVcN22qJzxRUq+raalq6Q3HUde7sokB7/xk5TqRZGEKRVbFeqdQBxDWwQeudiJEgcNiMvIFbMQ43dY37FA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dependencies": { + "@oclif/errors": "^1.3.6", + "@oclif/parser": "^3.8.16", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-wsl": "^2.1.1", + "tslib": "^2.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/help/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@oclif/help/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@oclif/help/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@oclif/help/node_modules/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==" + }, + "node_modules/@oclif/help/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/help/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/help/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/linewrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz", + "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==" + }, + "node_modules/@oclif/parser": { + "version": "3.8.17", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.17.tgz", + "integrity": "sha512-l04iSd0xoh/16TGVpXb81Gg3z7tlQGrEup16BrVLsZBK6SEYpYHRJZnM32BwZrHI97ZSFfuSwVlzoo6HdsaK8A==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dependencies": { + "@oclif/errors": "^1.3.6", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/parser/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@oclif/parser/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@oclif/parser/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@oclif/parser/node_modules/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==" + }, + "node_modules/@oclif/parser/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/parser/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/plugin-help": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.3.1.tgz", + "integrity": "sha512-QuSiseNRJygaqAdABYFWn/H1CwIZCp9zp/PLid6yXvy6VcQV7OenEFF5XuYaCvSARe2Tg9r8Jqls5+fw1A9CbQ==", + "dependencies": { + "@oclif/command": "^1.8.15", + "@oclif/config": "1.18.2", + "@oclif/errors": "1.3.5", + "@oclif/help": "^1.0.1", + "chalk": "^4.1.2", + "indent-string": "^4.0.0", + "lodash": "^4.17.21", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/plugin-help/node_modules/@oclif/config": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.18.2.tgz", + "integrity": "sha512-cE3qfHWv8hGRCP31j7fIS7BfCflm/BNZ2HNqHexH+fDrdF2f1D5S8VmXWLC77ffv3oDvWyvE9AZeR0RfmHCCaA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dependencies": { + "@oclif/errors": "^1.3.3", + "@oclif/parser": "^3.8.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-wsl": "^2.1.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/plugin-help/node_modules/@oclif/errors": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.5.tgz", + "integrity": "sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dependencies": { + "clean-stack": "^3.0.0", + "fs-extra": "^8.1", + "indent-string": "^4.0.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/plugin-help/node_modules/@oclif/errors/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@oclif/plugin-help/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@oclif/plugin-help/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@oclif/plugin-help/node_modules/clean-stack": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", + "dependencies": { + "escape-string-regexp": "4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@oclif/plugin-help/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@oclif/plugin-help/node_modules/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==" + }, + "node_modules/@oclif/plugin-help/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@oclif/plugin-help/node_modules/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==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@oclif/plugin-help/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/plugin-help/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@oclif/plugin-help/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/plugin-help/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@oclif/plugin-help/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/screen": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@oclif/screen/-/screen-1.0.4.tgz", + "integrity": "sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw==", + "deprecated": "Deprecated in favor of @oclif/core", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@paypal/paypal-js": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@paypal/paypal-js/-/paypal-js-5.1.6.tgz", + "integrity": "sha512-1upF06pv0AUtTftRVSra44p8ibqGa3ruKLArvdhpZla25zcrND7R+nDUIMrJ0iteVYZowhujZStFs6NoruExfg==", + "dependencies": { + "promise-polyfill": "^8.3.0" + } + }, + "node_modules/@paypal/react-paypal-js": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@paypal/react-paypal-js/-/react-paypal-js-7.8.3.tgz", + "integrity": "sha512-7sD5JFA0IH9kysyGFv5DTmtPn54vLWZ0DLhdjUvsjqZnoEs11mJJJlTsTA7MkIO3jBAJOWlfoA4wLYzmy68C4g==", + "dependencies": { + "@paypal/paypal-js": "^5.1.6", + "@paypal/sdk-constants": "^1.0.122" + }, + "peerDependencies": { + "react": ">=16.3.0", + "react-dom": ">=16.3.0" + } + }, + "node_modules/@paypal/sdk-constants": { + "version": "1.0.135", + "resolved": "https://registry.npmjs.org/@paypal/sdk-constants/-/sdk-constants-1.0.135.tgz", + "integrity": "sha512-ZIQgsmeLZVl2QZaX8nhf+6BJ7CDT54Fj1QaqKpHXVKJnN1qY5ht9kJq08hse3/bF/s4Ho0zlsFND12KUJYFaqQ==", + "dependencies": { + "hi-base32": "^0.5.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "peer": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@radix-ui/number": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz", + "integrity": "sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", + "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.1.2.tgz", + "integrity": "sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collapsible": "1.0.3", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-alert-dialog": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.0.5.tgz", + "integrity": "sha512-OrVIOcZL0tl6xibeuGt5/+UxoT2N27KCFOPjFyfXMnchxSHZ/OW7cCX2nGlIYJrbHK/fczPcFzAwvNBB6XBNMA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dialog": "1.0.5", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", + "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.0.4.tgz", + "integrity": "sha512-kVK2K7ZD3wwj3qhle0ElXhOjbezIgyl2hVvgwfIdexL3rN6zJmy5AqqIf+D31lxVppdzV8CjAfZ6PklkmInZLw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.0.4.tgz", + "integrity": "sha512-CBuGQa52aAYnADZVt/KBQzXrwx6TqnlwtcIPGtVt5JkkzQwMOLJjPukimhfKEr4GQNd43C+djUh5Ikopj8pSLg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-previous": "1.0.1", + "@radix-ui/react-use-size": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.0.3.tgz", + "integrity": "sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", + "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", + "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz", + "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", + "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", + "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.6.tgz", + "integrity": "sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-menu": "2.0.6", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", + "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", + "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", + "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.0.2.tgz", + "integrity": "sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.6.tgz", + "integrity": "sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.0.7.tgz", + "integrity": "sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz", + "integrity": "sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-rect": "1.0.1", + "@radix-ui/react-use-size": "1.0.1", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", + "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", + "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.1.3.tgz", + "integrity": "sha512-x+yELayyefNeKeTx4fjK6j99Fs6c4qKm3aY38G3swQVTN6xMpsrbigC0uHs2L//g8q4qR7qOcww8430jJmi2ag==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-previous": "1.0.1", + "@radix-ui/react-use-size": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz", + "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.0.5.tgz", + "integrity": "sha512-b6PAgH4GQf9QEn8zbT2XUHpW5z8BzqEc7Kl11TwDrvuTrxlkcjTD5qa/bxgKr+nmuXKu4L/W5UZ4mlP/VG/5Gw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.1", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.0.0.tgz", + "integrity": "sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.1", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-previous": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.0.3.tgz", + "integrity": "sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-previous": "1.0.1", + "@radix-ui/react-use-size": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.4.tgz", + "integrity": "sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.1.5.tgz", + "integrity": "sha512-fRLn227WHIBRSzuRzGJ8W+5YALxofH23y0MlPLddaIpLpCDqdE0NZlS2NRQDRiptfxDeeCjgFIpexB1/zkxDlw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.7.tgz", + "integrity": "sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", + "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", + "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", + "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", + "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz", + "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", + "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", + "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", + "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", + "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@react-aria/datepicker": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.8.1.tgz", + "integrity": "sha512-q2Z5DYDkic3RWzvg3oysrA2VEebuxtEfqj8PSlNFndZh/pNrA+Tvkaatdk/BoxlsZsfeLof+/tBq6yWeqTDguQ==", + "dependencies": { + "@internationalized/date": "^3.5.0", + "@internationalized/number": "^3.3.0", + "@internationalized/string": "^3.1.1", + "@react-aria/focus": "^3.14.3", + "@react-aria/i18n": "^3.8.4", + "@react-aria/interactions": "^3.19.1", + "@react-aria/label": "^3.7.2", + "@react-aria/spinbutton": "^3.5.4", + "@react-aria/utils": "^3.21.1", + "@react-stately/datepicker": "^3.8.0", + "@react-types/button": "^3.9.0", + "@react-types/calendar": "^3.4.1", + "@react-types/datepicker": "^3.6.1", + "@react-types/dialog": "^3.5.6", + "@react-types/shared": "^3.21.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-aria/focus": { + "version": "3.14.3", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.14.3.tgz", + "integrity": "sha512-gvO/frZ7SxyfyHJYC+kRsUXnXct8hGHKlG1TwbkzCCXim9XIPKDgRzfNGuFfj0i8ZpR9xmsjOBUkHZny0uekFA==", + "dependencies": { + "@react-aria/interactions": "^3.19.1", + "@react-aria/utils": "^3.21.1", + "@react-types/shared": "^3.21.0", + "@swc/helpers": "^0.5.0", + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-aria/i18n": { + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.8.4.tgz", + "integrity": "sha512-YlTJn7YJlUxds/T5dNtme551qc118NoDQhK+IgGpzcmPQ3xSnwBAQP4Zwc7wCpAU+xEwnNcsGw+L1wJd49He/A==", + "dependencies": { + "@internationalized/date": "^3.5.0", + "@internationalized/message": "^3.1.1", + "@internationalized/number": "^3.3.0", + "@internationalized/string": "^3.1.1", + "@react-aria/ssr": "^3.8.0", + "@react-aria/utils": "^3.21.1", + "@react-types/shared": "^3.21.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-aria/interactions": { + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.19.1.tgz", + "integrity": "sha512-2QFOvq/rJfMGEezmtYcGcJmfaD16kHKcSTLFrZ8aeBK6hYFddGVZJZk+dXf+G7iNaffa8rMt6uwzVe/malJPBA==", + "dependencies": { + "@react-aria/ssr": "^3.8.0", + "@react-aria/utils": "^3.21.1", + "@react-types/shared": "^3.21.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-aria/label": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.7.2.tgz", + "integrity": "sha512-rS0xQy+4RH1+JLESzLZd9H285McjNNf2kKwBhzU0CW3akjlu7gqaMKEJhX9MlpPDIVOUc2oEObGdU3UMmqa8ew==", + "dependencies": { + "@react-aria/utils": "^3.21.1", + "@react-types/label": "^3.8.1", + "@react-types/shared": "^3.21.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-aria/live-announcer": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.3.1.tgz", + "integrity": "sha512-hsc77U7S16trM86d+peqJCOCQ7/smO1cybgdpOuzXyiwcHQw8RQ4GrXrS37P4Ux/44E9nMZkOwATQRT2aK8+Ew==", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@react-aria/spinbutton": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.5.4.tgz", + "integrity": "sha512-W5dhUOjyBIgd8d4z526fW/HXQ+BdFceeGyvNAXoYBi/1gt3KqN/6CZgskG7OQEufxCOWc9e4A2eWNwvkQVJvWg==", + "dependencies": { + "@react-aria/i18n": "^3.8.4", + "@react-aria/live-announcer": "^3.3.1", + "@react-aria/utils": "^3.21.1", + "@react-types/button": "^3.9.0", + "@react-types/shared": "^3.21.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-aria/ssr": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.8.0.tgz", + "integrity": "sha512-Y54xs483rglN5DxbwfCPHxnkvZ+gZ0LbSYmR72LyWPGft8hN/lrl1VRS1EW2SMjnkEWlj+Km2mwvA3kEHDUA0A==", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-aria/utils": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.21.1.tgz", + "integrity": "sha512-tySfyWHXOhd/b6JSrSOl7krngEXN3N6pi1hCAXObRu3+MZlaZOMDf/j18aoteaIF2Jpv8HMWUJUJtQKGmBJGRA==", + "dependencies": { + "@react-aria/ssr": "^3.8.0", + "@react-stately/utils": "^3.8.0", + "@react-types/shared": "^3.21.0", + "@swc/helpers": "^0.5.0", + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-stately/datepicker": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.8.0.tgz", + "integrity": "sha512-6YDSmkrRafYCWhRHks8Z2tZavM1rqSOy8GY8VYjYMCVTFpRuhPK9TQaFv2BdzZL/vJ6OGThxqoglcEwywZVq2g==", + "dependencies": { + "@internationalized/date": "^3.5.0", + "@internationalized/string": "^3.1.1", + "@react-stately/overlays": "^3.6.3", + "@react-stately/utils": "^3.8.0", + "@react-types/datepicker": "^3.6.1", + "@react-types/shared": "^3.21.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-stately/overlays": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.3.tgz", + "integrity": "sha512-K3eIiYAdAGTepYqNf2pVb+lPqLoVudXwmxPhyOSZXzjgpynD6tR3E9QfWQtkMazBuU73PnNX7zkH4l87r2AmTg==", + "dependencies": { + "@react-stately/utils": "^3.8.0", + "@react-types/overlays": "^3.8.3", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-stately/utils": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.8.0.tgz", + "integrity": "sha512-wCIoFDbt/uwNkWIBF+xV+21k8Z8Sj5qGO3uptTcVmjYcZngOaGGyB4NkiuZhmhG70Pkv+yVrRwoC1+4oav9cCg==", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-types/button": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.9.0.tgz", + "integrity": "sha512-YhbchUDB7yL88ZFA0Zqod6qOMdzCLD5yVRmhWymk0yNLvB7EB1XX4c5sRANalfZSFP0RpCTlkjB05Hzp4+xOYg==", + "dependencies": { + "@react-types/shared": "^3.21.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-types/calendar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.4.1.tgz", + "integrity": "sha512-tiCkHi6IQtYcVoAESG79eUBWDXoo8NImo+Mj8WAWpo1lOA3SV1W2PpeXkoRNqtloilQ0aYcmsaJJUhciQG4ndg==", + "dependencies": { + "@internationalized/date": "^3.5.0", + "@react-types/shared": "^3.21.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-types/datepicker": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.6.1.tgz", + "integrity": "sha512-/M+0e9hL9w98f5k4EoxeH2UfPsUPoS6fvmFsmwUZJcDiw7wP510XngnDLy9GOHj9xgqagZ20S79cxcEuTq7U6g==", + "dependencies": { + "@internationalized/date": "^3.5.0", + "@react-types/calendar": "^3.4.1", + "@react-types/overlays": "^3.8.3", + "@react-types/shared": "^3.21.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-types/dialog": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.6.tgz", + "integrity": "sha512-lwwaAgoi4xe4eEJxBns+cBIRstIPTKWWddMkp51r7Teeh2uKs1Wki7N+Acb9CfT6JQTQDqtVJm6K76rcqNBVwg==", + "dependencies": { + "@react-types/overlays": "^3.8.3", + "@react-types/shared": "^3.21.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-types/label": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@react-types/label/-/label-3.8.1.tgz", + "integrity": "sha512-fA6zMTF2TmfU7H8JBJi0pNd8t5Ak4gO+ZA3cZBysf8r3EmdAsgr3LLqFaGTnZzPH1Fux6c7ARI3qjVpyNiejZQ==", + "dependencies": { + "@react-types/shared": "^3.21.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-types/overlays": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.8.3.tgz", + "integrity": "sha512-TrCG2I2+V+TD0PGi3CqfnyU5jEzcelSGgYJQvVxsl5Vv3ri7naBLIsOjF9x66tPxhINLCPUtOze/WYRAexp8aw==", + "dependencies": { + "@react-types/shared": "^3.21.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-types/shared": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.21.0.tgz", + "integrity": "sha512-wJA2cUF8dP4LkuNUt9Vh2kkfiQb2NLnV2pPXxVnKJZ7d4x2/7VPccN+LYPnH8m0X3+rt50cxWuPKQmjxSsCFOg==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.4.0.tgz", + "integrity": "sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==", + "dev": true + }, + "node_modules/@rushstack/ts-command-line": { + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.16.0.tgz", + "integrity": "sha512-WJKhdR9ThK9Iy7t78O3at7I3X4Ssp5RRZay/IQa8NywqkFy/DQbT3iLouodMMdUwLZD9n8n++xLubVd3dkmpkg==", + "dependencies": { + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "colors": "~1.2.1", + "string-argv": "~0.3.1" + } + }, + "node_modules/@rushstack/ts-command-line/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@rushstack/ts-command-line/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/@sqltools/formatter": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", + "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==", + "peer": true + }, + "node_modules/@stripe/react-stripe-js": { + "version": "1.16.5", + "resolved": "https://registry.npmjs.org/@stripe/react-stripe-js/-/react-stripe-js-1.16.5.tgz", + "integrity": "sha512-lVPW3IfwdacyS22pP+nBB6/GNFRRhT/4jfgAK6T2guQmtzPwJV1DogiGGaBNhiKtSY18+yS8KlHSu+PvZNclvQ==", + "dependencies": { + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "@stripe/stripe-js": "^1.44.1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@stripe/stripe-js": { + "version": "1.54.2", + "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-1.54.2.tgz", + "integrity": "sha512-R1PwtDvUfs99cAjfuQ/WpwJ3c92+DAMy9xGApjqlWQMj0FKQabUAys2swfTRNzuYAYJh7NqK2dzcYVNkKLEKUg==" + }, + "node_modules/@swc/helpers": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.3.tgz", + "integrity": "sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/forms": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.6.tgz", + "integrity": "sha512-Fw+2BJ0tmAwK/w01tEFL5TiaJBX1NLT1/YbWgvm7ws3Qcn11kiXxzNTEQDMs5V3mQemhB56l3u0i9dwdzSQldA==", + "dev": true, + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1" + } + }, + "node_modules/@tanstack/query-core": { + "version": "4.36.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.36.1.tgz", + "integrity": "sha512-DJSilV5+ytBP1FbFcEJovv4rnnm/CokuVvrBEtW/Va9DvuJ3HksbXUJEpI0aV1KtuL4ZoO9AVE6PyNLzF7tLeA==", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "4.36.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.36.1.tgz", + "integrity": "sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw==", + "peer": true, + "dependencies": { + "@tanstack/query-core": "4.36.1", + "use-sync-external-store": "^1.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-native": "*" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/@types/argparse": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==" + }, + "node_modules/@types/dom-speech-recognition": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@types/dom-speech-recognition/-/dom-speech-recognition-0.0.1.tgz", + "integrity": "sha512-udCxb8DvjcDKfk1WTBzDsxFbLgYxmQGKrE/ricoMqHRNjSlSUCcamVTA5lIQqzY10mY5qCY0QDwBfFEwhfoDPw==" + }, + "node_modules/@types/eslint": { + "version": "8.44.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", + "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" + }, + "node_modules/@types/google.maps": { + "version": "3.54.1", + "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.54.1.tgz", + "integrity": "sha512-zh6333O/yPfcvRxpBTjnNFJjiHiujvy+tTAWwvNj3LMy90Y+VLTom8n9gvmgjXhOHgHvYpgO2Xyz31wYEYN27A==" + }, + "node_modules/@types/hogan.js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/hogan.js/-/hogan.js-3.0.2.tgz", + "integrity": "sha512-M6jOVsZEK31II8HV9QaYI5pg/w7fZb+3aqdCn3M3uofBswvrYBzbaQwSudB6z1UqF2IT3B8vt/3oBoa7XqugFw==" + }, + "node_modules/@types/ioredis-mock": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/@types/ioredis-mock/-/ioredis-mock-8.2.5.tgz", + "integrity": "sha512-cZyuwC9LGtg7s5G9/w6rpy3IOZ6F/hFR0pQlWYZESMo1xQUYbDpa6haqB4grTePjsGzcB/YLBFCjqRunK5wieg==", + "peer": true, + "dependencies": { + "@types/node": "*", + "ioredis": ">=5" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.198", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz", + "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==", + "dev": true + }, + "node_modules/@types/node": { + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" + }, + "node_modules/@types/prismjs": { + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.2.tgz", + "integrity": "sha512-/r7Cp7iUIk7gts26mHXD66geUC+2Fo26TZYjQK6Nr4LDfi6lmdRmMqM0oPwfiMhUwoBAOFe8GstKi2pf6hZvwA==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.6", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.6.tgz", + "integrity": "sha512-RK/kBbYOQQHLYj9Z95eh7S6t7gq4Ojt/NT8HTk8bWVhA5DaF+5SMnxHKkP4gPNN3wAZkKP+VjAf0ebtYzf+fxg==", + "devOptional": true + }, + "node_modules/@types/qs": { + "version": "6.9.8", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", + "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==" + }, + "node_modules/@types/react": { + "version": "18.2.42", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.42.tgz", + "integrity": "sha512-c1zEr96MjakLYus/wPnuWDo1/zErfdU9rNsIGmE+NV71nx88FG9Ttgo5dqorXTu/LImX2f63WBP986gJkMPNbA==", + "devOptional": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.18", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.18.tgz", + "integrity": "sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==", + "devOptional": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-instantsearch-core": { + "version": "6.26.4", + "resolved": "https://registry.npmjs.org/@types/react-instantsearch-core/-/react-instantsearch-core-6.26.4.tgz", + "integrity": "sha512-Iy6I0oOojQiVhPzaN9HsKs0ajODXv7nuUDDLGTSWw8XS7l6Dz2PaMwusEIhfSMz//13J5bUas3K5xoreRdptzA==", + "dev": true, + "dependencies": { + "@types/react": "*", + "algoliasearch": ">=4", + "algoliasearch-helper": ">=3" + } + }, + "node_modules/@types/react-instantsearch-dom": { + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/@types/react-instantsearch-dom/-/react-instantsearch-dom-6.12.3.tgz", + "integrity": "sha512-HAQG74v7OzsUhdjNermd0A8c7LWRLsrMCsFCY6+7HEXK1hikeCs/Hmy6xjFhZVfFEWvpvX78vxJELafoAnuv8Q==", + "dev": true, + "dependencies": { + "@types/react": "*", + "@types/react-instantsearch-core": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "devOptional": true + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "node_modules/@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, + "node_modules/@types/triple-beam": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.3.tgz", + "integrity": "sha512-6tOUG+nVHn0cJbVp25JFayS5UE6+xlbcNF9Lo9mU7U0zk3zeUShZied4YEQZjy1JBF043FSkdXw8YkUJuVtB5g==" + }, + "node_modules/@types/validator": { + "version": "13.11.1", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.1.tgz", + "integrity": "sha512-d/MUkJYdOeKycmm75Arql4M5+UuXmf4cHdHKsyw1GcvnNgL6s77UkgSgJ8TE/rI5PYsnwYq5jkcWBLuN/MpQ1A==" + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.15.0.tgz", + "integrity": "sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.15.0", + "@typescript-eslint/types": "6.15.0", + "@typescript-eslint/typescript-estree": "6.15.0", + "@typescript-eslint/visitor-keys": "6.15.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.15.0.tgz", + "integrity": "sha512-+BdvxYBltqrmgCNu4Li+fGDIkW9n//NrruzG9X1vBzaNK+ExVXPoGB71kneaVw/Jp+4rH/vaMAGC6JfMbHstVg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.15.0", + "@typescript-eslint/visitor-keys": "6.15.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.15.0.tgz", + "integrity": "sha512-yXjbt//E4T/ee8Ia1b5mGlbNj9fB9lJP4jqLbZualwpP2BCQ5is6BcWwxpIsY4XKAhmdv3hrW92GdtJbatC6dQ==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.15.0.tgz", + "integrity": "sha512-7mVZJN7Hd15OmGuWrp2T9UvqR2Ecg+1j/Bp1jXUEY2GZKV6FXlOIoqVDmLpBiEiq3katvj/2n2mR0SDwtloCew==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.15.0", + "@typescript-eslint/visitor-keys": "6.15.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.15.0.tgz", + "integrity": "sha512-1zvtdC1a9h5Tb5jU9x3ADNXO9yjP8rXlaoChu0DQX40vf5ACVpYIVIZhIMZ6d5sDXH7vq4dsZBT1fEGj8D2n2w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.15.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@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==" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-loose": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-loose/-/acorn-loose-8.3.0.tgz", + "integrity": "sha512-75lAs9H19ldmW+fAbyqHdjgdCrz0pWGXKmnqFoh8PyVd1L2RIb4RzYrSjmopeqv3E1G3/Pimu6GgLlrGbrkF7w==", + "dependencies": { + "acorn": "^8.5.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/algoliasearch": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.20.0.tgz", + "integrity": "sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.20.0", + "@algolia/cache-common": "4.20.0", + "@algolia/cache-in-memory": "4.20.0", + "@algolia/client-account": "4.20.0", + "@algolia/client-analytics": "4.20.0", + "@algolia/client-common": "4.20.0", + "@algolia/client-personalization": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/logger-common": "4.20.0", + "@algolia/logger-console": "4.20.0", + "@algolia/requester-browser-xhr": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/requester-node-http": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/algoliasearch-helper": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.14.1.tgz", + "integrity": "sha512-TZihm6eisSqgLWOXpISAUFXAolJvEpa1gkTjUUEDmVl+TTiQuNvzLQ/osOiqIXzx6QSS4Pd6Ry+SKKOwiqJ17g==", + "dev": true, + "dependencies": { + "@algolia/events": "^4.0.1" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 6" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/app-root-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", + "peer": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", + "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", + "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.15", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", + "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001520", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/awilix": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/awilix/-/awilix-8.0.1.tgz", + "integrity": "sha512-zDSp4R204scvQIDb2GMoWigzXemn0+3AKKIAt543T9v2h7lmoypvkmcx1W/Jet/nm27R1N1AsqrsYVviAR9KrA==", + "dependencies": { + "camel-case": "^4.1.2", + "fast-glob": "^3.2.12" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "node_modules/axe-core": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.1.tgz", + "integrity": "sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/axios-retry": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.7.0.tgz", + "integrity": "sha512-ZTnCkJbRtfScvwiRnoVskFAfvU0UG3xNcsjwTR0mawSbIJoothxn67gKsMaNAFHRXJ1RmuLhmZBzvyXi3+9WyQ==", + "dependencies": { + "@babel/runtime": "^7.15.4", + "is-retry-allowed": "^2.2.0" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/boxen/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/boxen/node_modules/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==" + }, + "node_modules/boxen/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bullmq": { + "version": "3.15.8", + "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-3.15.8.tgz", + "integrity": "sha512-k3uimHGhl5svqD7SEak+iI6c5DxeLOaOXzCufI9Ic0ST3nJr69v71TGR4cXCTXdgCff3tLec5HgoBnfyWjgn5A==", + "dependencies": { + "cron-parser": "^4.6.0", + "glob": "^8.0.3", + "ioredis": "^5.3.2", + "lodash": "^4.17.21", + "msgpackr": "^1.6.2", + "semver": "^7.3.7", + "tslib": "^2.0.0", + "uuid": "^9.0.0" + } + }, + "node_modules/bullmq/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/bullmq/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/bullmq/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/bullmq/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/bullmq/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/bullmq/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cachedir": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001538", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz", + "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", + "dependencies": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + }, + "bin": { + "cdl": "bin/cdl.js" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + }, + "node_modules/class-validator": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", + "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", + "dependencies": { + "@types/validator": "^13.7.10", + "libphonenumber-js": "^1.10.14", + "validator": "^13.7.0" + } + }, + "node_modules/class-variance-authority": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.6.1.tgz", + "integrity": "sha512-eurOEGc7YVx3majOrOb099PNKgO3KnKSApOprXI4BTq6bcfbqbQXPN2u+rPPmIJ2di23bMwhk0SxCCthBmszEQ==", + "dependencies": { + "clsx": "1.2.1" + }, + "funding": { + "url": "https://joebell.co.uk" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-highlight/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cli-highlight/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cli-highlight/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cli-highlight/node_modules/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==", + "peer": true + }, + "node_modules/cli-highlight/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-highlight/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "peer": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-highlight/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-progress": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", + "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "dependencies": { + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-ux": { + "version": "5.6.7", + "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-5.6.7.tgz", + "integrity": "sha512-dsKAurMNyFDnO6X1TiiRNiVbL90XReLKcvIq4H777NMqXGBxBws23ag8ubCJE97vVZEgWG2eSUhsyLf63Jv8+g==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dependencies": { + "@oclif/command": "^1.8.15", + "@oclif/errors": "^1.3.5", + "@oclif/linewrap": "^1.0.0", + "@oclif/screen": "^1.0.4", + "ansi-escapes": "^4.3.0", + "ansi-styles": "^4.2.0", + "cardinal": "^2.1.1", + "chalk": "^4.1.0", + "clean-stack": "^3.0.0", + "cli-progress": "^3.4.0", + "extract-stack": "^2.0.0", + "fs-extra": "^8.1", + "hyperlinker": "^1.0.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "js-yaml": "^3.13.1", + "lodash": "^4.17.21", + "natural-orderby": "^2.0.1", + "object-treeify": "^1.1.4", + "password-prompt": "^1.1.2", + "semver": "^7.3.2", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "supports-color": "^8.1.0", + "supports-hyperlinks": "^2.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/cli-ux/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-ux/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/cli-ux/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cli-ux/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-ux/node_modules/clean-stack": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", + "dependencies": { + "escape-string-regexp": "4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-ux/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cli-ux/node_modules/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==" + }, + "node_modules/cli-ux/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-ux/node_modules/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==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/cli-ux/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-ux/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/cli-ux/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/cli-ux/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-ux/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-ux/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/cli-ux/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/cli-ux/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/cli-ux/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/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==" + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/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==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + }, + "node_modules/colors": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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, + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/connect-redis": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/connect-redis/-/connect-redis-5.2.0.tgz", + "integrity": "sha512-wcv1lZWa2K7RbsdSlrvwApBQFLQx+cia+oirLIeim0axR3D/9ZJbHdeTM/j8tJYYKk34dVs2QPAuAqcIklWD+Q==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "dependencies": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/core-js": { + "version": "3.32.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.2.tgz", + "integrity": "sha512-pxXSw1mYZPDGvTQqEc5vgIb83jGQKFGYWY76z4a7weZXUolw3G+OvpZqSRcfYOoOVUQJYEPsWeQK8pKEnUtWxQ==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cron-parser": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", + "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", + "dependencies": { + "luxon": "^3.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/cross-env": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", + "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", + "dependencies": { + "cross-spawn": "^6.0.5" + }, + "bin": { + "cross-env": "dist/bin/cross-env.js", + "cross-env-shell": "dist/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/cross-env/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-env/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/cross-env/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/cross-env/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cross-env/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cross-env/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-inspect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.0.tgz", + "integrity": "sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==", + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "devOptional": true + }, + "node_modules/cypress": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.7.0.tgz", + "integrity": "sha512-+1EE1nuuuwIt/N1KXRR2iWHU+OiIt7H28jJDyyI4tiUftId/DrXYEwoDa5+kH2pki1zxnA0r6HrUGHV5eLbF5Q==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@cypress/request": "^2.88.10", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^14.14.31", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^5.1.0", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "eventemitter2": "^6.4.3", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.6", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.3.2", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/cypress/node_modules/@types/node": { + "version": "14.18.61", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.61.tgz", + "integrity": "sha512-1mFT4DqS4/s9tlZbdkwEB/EnSykA9MDeDLIk3FHApGvIMGY//qgstB2gu9GKGESWyW/qiRUO+jhlLJ9bBJ8j+Q==", + "dev": true + }, + "node_modules/cypress/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cypress/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cypress/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cypress/node_modules/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 + }, + "node_modules/cypress/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/cypress/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cypress/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/cypress/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cypress/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cypress/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/cypress/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/dayjs": { + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", + "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/dset": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz", + "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "peer": true + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.523", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.523.tgz", + "integrity": "sha512-9AreocSUWnzNtvLcbpng6N+GkXnCcBR80IQkxRC9Dfdyg4gaWNUPBujAHUpKkiUkoSoR9UlhA4zD/IgBklmhzg==" + }, + "node_modules/emittery": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.12.1.tgz", + "integrity": "sha512-pYyW59MIZo0HxPFf+Vb3+gacUu0gxVS3TZwB2ClwkEZywgF9f9OJDoVmNLojTn0vKX3tO9LC+pdQEcLP4Oz/bQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/es-abstract": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", + "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", + "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==" + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", + "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.2.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.19.tgz", + "integrity": "sha512-WE8367sqMnjhWHvR5OivmfwENRQ1ixfNE9hZwQqNCsd+iM3KnuMc1V8Pt6ytgjxjf23D+xbesADv9x3xaKfT3g==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "13.4.19", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.31.7", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/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 + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-session": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", + "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", + "dependencies": { + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express-session/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express-session/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express-session/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express-session/node_modules/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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/extract-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/extract-stack/-/extract-stack-2.0.0.tgz", + "integrity": "sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/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==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, + "node_modules/fengari": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/fengari/-/fengari-0.1.4.tgz", + "integrity": "sha512-6ujqUuiIYmcgkGz8MGAdERU57EIluGGPSUgGPTsco657EHa+srq0S3/YUl/r9kx1+D+d4rGfYObd+m8K22gB1g==", + "dependencies": { + "readline-sync": "^1.4.9", + "sprintf-js": "^1.1.1", + "tmp": "^0.0.33" + } + }, + "node_modules/fengari-interop": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fengari-interop/-/fengari-interop-0.1.3.tgz", + "integrity": "sha512-EtZ+oTu3kEwVJnoymFPBVLIbQcCoy9uWCVnMA6h3M/RqHkUBsLYp29+RRHf9rKr6GwjubWREU1O7RretFIXjHw==", + "peerDependencies": { + "fengari": "^0.1.0" + } + }, + "node_modules/fengari/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/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==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "dev": true, + "dependencies": { + "flatted": "^3.2.7", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "peer": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "peer": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz", + "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-exists-cached": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", + "integrity": "sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg==" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-jetpack": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/fs-jetpack/-/fs-jetpack-4.3.1.tgz", + "integrity": "sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ==", + "dependencies": { + "minimatch": "^3.0.2", + "rimraf": "^2.6.3" + } + }, + "node_modules/fs-jetpack/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", + "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/getopts": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.3.0.tgz", + "integrity": "sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==" + }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "dependencies": { + "async": "^3.2.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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==" + }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphql": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hi-base32": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz", + "integrity": "sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==" + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/hogan.js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/hogan.js/-/hogan.js-3.0.2.tgz", + "integrity": "sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg==", + "dependencies": { + "mkdirp": "0.3.0", + "nopt": "1.0.10" + }, + "bin": { + "hulk": "bin/hulk" + } + }, + "node_modules/hogan.js/node_modules/mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "engines": { + "node": "*" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/htm": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/htm/-/htm-3.1.1.tgz", + "integrity": "sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/hyperlinker": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", + "integrity": "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/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==" + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/instantsearch.js": { + "version": "4.56.8", + "resolved": "https://registry.npmjs.org/instantsearch.js/-/instantsearch.js-4.56.8.tgz", + "integrity": "sha512-40DJ5l70ZzVzWPK3qrHTKlJLaHGq1PRZpzfL6281P2mz8G19WOHQHKAP4Zh6a4lOZaRtJQUiPjQwqCHSurXZ5g==", + "dependencies": { + "@algolia/events": "^4.0.1", + "@algolia/ui-components-highlight-vdom": "^1.2.1", + "@algolia/ui-components-shared": "^1.2.1", + "@types/dom-speech-recognition": "^0.0.1", + "@types/google.maps": "^3.45.3", + "@types/hogan.js": "^3.0.0", + "@types/qs": "^6.5.3", + "algoliasearch-helper": "3.14.0", + "hogan.js": "^3.0.2", + "htm": "^3.0.0", + "preact": "^10.10.0", + "qs": "^6.5.1 < 6.10", + "search-insights": "^2.6.0" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 6" + } + }, + "node_modules/instantsearch.js/node_modules/algoliasearch-helper": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.14.0.tgz", + "integrity": "sha512-gXDXzsSS0YANn5dHr71CUXOo84cN4azhHKUbg71vAWnH+1JBiR4jf7to3t3JHXknXkbV0F7f055vUSBKrltHLQ==", + "dependencies": { + "@algolia/events": "^4.0.1" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 6" + } + }, + "node_modules/instantsearch.js/node_modules/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/intl-messageformat": { + "version": "10.5.4", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.4.tgz", + "integrity": "sha512-z+hrFdiJ/heRYlzegrdFYqU1m/KOMOVMqNilIArj+PbsuU8TNE7v4TWdQgSoxlxbT4AcZH3Op3/Fu15QTp+W1w==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.17.2", + "@formatjs/fast-memoize": "2.2.0", + "@formatjs/icu-messageformat-parser": "2.7.0", + "tslib": "^2.4.0" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ioredis": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz", + "integrity": "sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==", + "dependencies": { + "@ioredis/commands": "^1.1.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.1.0", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, + "node_modules/ioredis-mock": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/ioredis-mock/-/ioredis-mock-8.4.0.tgz", + "integrity": "sha512-ZB+Wj9kzYbYcPrU2Xr61Fo+Fcc8Y1/sAnc/8sCKhyi69C4lQf7cdTEqiqRwneICX2OwgGtpCw8Udr7GEyZixOQ==", + "dependencies": { + "@ioredis/as-callback": "^3.0.0", + "@ioredis/commands": "^1.2.0", + "fengari": "^0.1.4", + "fengari-interop": "^0.1.3", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12.22" + }, + "peerDependencies": { + "@types/ioredis-mock": "^8", + "ioredis": "^5" + } + }, + "node_modules/ioredis-mock/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ioredis-mock/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ioredis-mock/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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==" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", + "dependencies": { + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-retry-allowed": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz", + "integrity": "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", + "dependencies": { + "is-invalid-path": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/iso8601-duration": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/iso8601-duration/-/iso8601-duration-1.3.0.tgz", + "integrity": "sha512-K4CiUBzo3YeWk76FuET/dQPH03WE04R94feo5TSKQCXpoXQt9E4yx2CnY737QZnSAI3PI4WlKo/zfqizGx52QQ==" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "peer": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", + "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonwebtoken/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/knex": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/knex/-/knex-2.4.2.tgz", + "integrity": "sha512-tMI1M7a+xwHhPxjbl/H9K1kHX+VncEYcvCx5K00M16bWvpYPKAZd6QrCu68PtHAdIZNQPWZn0GVhqVBEthGWCg==", + "dependencies": { + "colorette": "2.0.19", + "commander": "^9.1.0", + "debug": "4.3.4", + "escalade": "^3.1.1", + "esm": "^3.2.25", + "get-package-type": "^0.1.0", + "getopts": "2.3.0", + "interpret": "^2.2.0", + "lodash": "^4.17.21", + "pg-connection-string": "2.5.0", + "rechoir": "^0.8.0", + "resolve-from": "^5.0.0", + "tarn": "^3.0.2", + "tildify": "2.0.0" + }, + "bin": { + "knex": "bin/cli.js" + }, + "engines": { + "node": ">=12" + }, + "peerDependenciesMeta": { + "better-sqlite3": { + "optional": true + }, + "mysql": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-native": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true + } + } + }, + "node_modules/knex/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/knex/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true, + "engines": { + "node": "> 0.8" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libphonenumber-js": { + "version": "1.10.44", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.44.tgz", + "integrity": "sha512-svlRdNBI5WgBjRC20GrCfbFiclbF0Cx+sCcQob/C1r57nsoq0xg8r65QbTyVyweQIlB33P+Uahyho6EMYgcOyQ==" + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/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==" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-update/node_modules/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 + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logform": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz", + "integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==", + "dependencies": { + "@colors/colors": "1.5.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + } + }, + "node_modules/long-timeout": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", + "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==" + }, + "node_modules/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==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/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==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/luxon": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz", + "integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/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==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" + }, + "node_modules/meant": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/meant/-/meant-1.0.3.tgz", + "integrity": "sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/medusa-core-utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/medusa-core-utils/-/medusa-core-utils-1.2.0.tgz", + "integrity": "sha512-9mzXGkMsll92C46Ub8A9vwjcfFiHfdkgshwmPP9QpRrm02M6N+SQb45S2A9t0dKjyT9J7rgCCSrFhYQg3pvqbw==" + }, + "node_modules/medusa-interfaces": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/medusa-interfaces/-/medusa-interfaces-1.3.8.tgz", + "integrity": "sha512-S1uCwwbOaEnBy9TWwfBlfs9scLSUz/0GcD9p5EWyPLVXvnBfGTmLBt4HI6oj6h3fVd+92RTdrmVnhznRYnOvoQ==", + "peer": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/medusa-react": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/medusa-react/-/medusa-react-9.0.5.tgz", + "integrity": "sha512-O5oJEfTQn7ysky1Zoxctm4nc7xVx8hAHqCzKI6g6KaJpLTaBSKq66pKQvRwMEkU3ao9Um+/CP0QVwwNWyh/skw==", + "dependencies": { + "@medusajs/medusa-js": "*" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@medusajs/medusa": "^1.12.0", + "@tanstack/react-query": "^4.22.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/medusa-telemetry": { + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/medusa-telemetry/-/medusa-telemetry-0.0.17.tgz", + "integrity": "sha512-Wwtm7QE1AKME0/uiEPen7lfzE9wnaO7J9Or8ObT8eTUipOqIbYRLEY7SSdGjMRg4NdyrzOJMIIjbcPz+vvsRVw==", + "hasInstallScript": true, + "dependencies": { + "@babel/runtime": "^7.22.10", + "axios": "^0.21.4", + "axios-retry": "^3.1.9", + "boxen": "^5.0.1", + "ci-info": "^3.2.0", + "configstore": "5.0.1", + "global": "^4.4.0", + "is-docker": "^2.2.1", + "remove-trailing-slash": "^0.1.1", + "uuid": "^8.3.2" + } + }, + "node_modules/medusa-telemetry/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/medusa-test-utils": { + "version": "1.1.41", + "resolved": "https://registry.npmjs.org/medusa-test-utils/-/medusa-test-utils-1.1.41.tgz", + "integrity": "sha512-UZNmkkrWfLXjYwUJUwIKxUvkGC5j22IFB5mv1daHDw//C0ehCrFFi2q0bTqkds9vH1VSTUf31Kz0MUiMdXZs/g==", + "dependencies": { + "@babel/plugin-transform-classes": "^7.9.5", + "medusa-core-utils": "^1.2.0", + "randomatic": "^3.1.1" + } + }, + "node_modules/meilisearch": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/meilisearch/-/meilisearch-0.25.1.tgz", + "integrity": "sha512-20jO0pK9BhghxHSkOLbdoYn58h/Z0PNL3JQcRq7ipNIeqrxkAetCZZ6ttJC3uxcz0jVglmiFoSXu3Z/lEOLOLQ==", + "dependencies": { + "cross-fetch": "^3.1.5" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/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==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mikro-orm": { + "version": "5.7.14", + "resolved": "https://registry.npmjs.org/mikro-orm/-/mikro-orm-5.7.14.tgz", + "integrity": "sha512-izfG8Cz5aYGYhxaNNv1Ozc1LAC/ifIsniwDrTWbxHVJkMlWLKAM8FzJhoZpXZzBissZqeRN9tPdzvBCxwV4G0w==", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "peer": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/morgan/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/msgpackr": { + "version": "1.9.9", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.9.9.tgz", + "integrity": "sha512-sbn6mioS2w0lq1O6PpGtsv6Gy8roWM+o3o4Sqjd6DudrL/nOugY+KyJUimoWzHnf9OkO0T6broHFnYE/R05t9A==", + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz", + "integrity": "sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.0.7" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2" + } + }, + "node_modules/multer": { + "version": "1.4.5-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", + "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-orderby": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", + "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==", + "engines": { + "node": "*" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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==" + }, + "node_modules/next": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/next/-/next-14.0.4.tgz", + "integrity": "sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==", + "dependencies": { + "@next/env": "14.0.4", + "@swc/helpers": "0.5.2", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001406", + "graceful-fs": "^4.2.11", + "postcss": "8.4.31", + "styled-jsx": "5.1.1", + "watchpack": "2.4.0" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=18.17.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "14.0.4", + "@next/swc-darwin-x64": "14.0.4", + "@next/swc-linux-arm64-gnu": "14.0.4", + "@next/swc-linux-arm64-musl": "14.0.4", + "@next/swc-linux-x64-gnu": "14.0.4", + "@next/swc-linux-x64-musl": "14.0.4", + "@next/swc-win32-arm64-msvc": "14.0.4", + "@next/swc-win32-ia32-msvc": "14.0.4", + "@next/swc-win32-x64-msvc": "14.0.4" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/@swc/helpers": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", + "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz", + "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==", + "optional": true, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + }, + "node_modules/node-schedule": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.1.tgz", + "integrity": "sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==", + "dependencies": { + "cron-parser": "^4.2.0", + "long-timeout": "0.1.1", + "sorted-array-functions": "^1.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-treeify": { + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz", + "integrity": "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/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==" + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, + "node_modules/papaparse": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.3.2.tgz", + "integrity": "sha512-6dNZu0Ki+gyV0eBsFKJhYr+MdQYAzFUGlBMNj3GNrmHxmz1lfRa24CjFObPXtjcetlOv5Ad299MhIK0znp3afw==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "peer": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "peer": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "peer": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/passport": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz", + "integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==", + "dependencies": { + "passport-strategy": "1.x.x", + "pause": "0.0.1", + "utils-merge": "^1.0.1" + }, + "engines": { + "node": ">= 0.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jaredhanson" + } + }, + "node_modules/passport-custom": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/passport-custom/-/passport-custom-1.1.1.tgz", + "integrity": "sha512-/2m7jUGxmCYvoqenLB9UrmkCgPt64h8ZtV+UtuQklZ/Tn1NpKBeOorCYkB/8lMRoiZ5hUrCoMmDtxCS/d38mlg==", + "dependencies": { + "passport-strategy": "1.x.x" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/passport-jwt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz", + "integrity": "sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==", + "dependencies": { + "jsonwebtoken": "^9.0.0", + "passport-strategy": "^1.0.0" + } + }, + "node_modules/passport-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", + "integrity": "sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==", + "dependencies": { + "passport-strategy": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/password-prompt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz", + "integrity": "sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==", + "dependencies": { + "ansi-escapes": "^4.3.2", + "cross-spawn": "^7.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "peer": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "peer": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/pg": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", + "integrity": "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==", + "dependencies": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.6.2", + "pg-pool": "^3.6.1", + "pg-protocol": "^1.6.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + }, + "node_modules/pg-god": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/pg-god/-/pg-god-1.0.12.tgz", + "integrity": "sha512-6bxfBlyu0w9NN5hwHg5TksPNJZm729cGIsff0m1BiwX4NUsHY7FoTWVAfgMaSy4QPL4rVR7ShyUv/AZ4Yd2Rug==", + "dependencies": { + "@oclif/command": "^1", + "@oclif/config": "^1", + "@oclif/plugin-help": "^3", + "cli-ux": "^5.4.9", + "pg": "^8.3.0", + "tslib": "^1" + }, + "bin": { + "pg-god": "bin/run" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/pg-god/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", + "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", + "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pg/node_modules/pg-connection-string": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", + "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pony-cause": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-2.1.10.tgz", + "integrity": "sha512-3IKLNXclQgkU++2fSi93sQ6BznFuxSLB11HdvZQ6JW/spahf/P1pAHBQEahr20rs0htZW0UDkM1HmA+nZkXKsw==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + }, + "engines": { + "node": ">= 14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/preact": { + "version": "10.17.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.17.1.tgz", + "integrity": "sha512-X9BODrvQ4Ekwv9GURm9AKAGaomqXmip7NQTZgY7gcNmr7XE83adOMJvd3N42id1tMFU7ojiynRsYnY6/BRFxLA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prism-react-renderer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.1.0.tgz", + "integrity": "sha512-I5cvXHjA1PVGbGm1MsWCpvBCRrYyxEri0MC7/JbfIfYfcXAxHyO5PaUjs3A8H5GW6kJcLhTHxxMaOZZpRZD2iQ==", + "dependencies": { + "@types/prismjs": "^1.26.0", + "clsx": "^1.2.1" + }, + "peerDependencies": { + "react": ">=16.0.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/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==" + }, + "node_modules/promise-polyfill": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", + "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dependencies": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-country-flag": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/react-country-flag/-/react-country-flag-3.1.0.tgz", + "integrity": "sha512-JWQFw1efdv9sTC+TGQvTKXQg1NKbDU2mBiAiRWcKM9F1sK+/zjhP2yGmm8YDddWyZdXVkR8Md47rPMJmo4YO5g==", + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "node_modules/react-currency-input-field": { + "version": "3.6.11", + "resolved": "https://registry.npmjs.org/react-currency-input-field/-/react-currency-input-field-3.6.11.tgz", + "integrity": "sha512-M9vOx1eaioSaYWirm7W2WSBi4bpLg+LK4Gf7C1kNhy6MvoSoOzd0mYZPxA78OC9UBIQ2nM080Wu9D1CwTY6n3w==", + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-day-picker": { + "version": "8.9.1", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.9.1.tgz", + "integrity": "sha512-W0SPApKIsYq+XCtfGeMYDoU0KbsG3wfkYtlw8l+vZp6KoBXGOlhzBUp4tNx1XiwiOZwhfdGOlj7NGSCKGSlg5Q==", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "date-fns": "^2.28.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-hook-form": { + "version": "7.50.1", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.50.1.tgz", + "integrity": "sha512-3PCY82oE0WgeOgUtIr3nYNNtNvqtJ7BZjsbxh6TnYNbXButaD5WpjOmTjdxZfheuHKR68qfeFnEDVYoSSFPMTQ==", + "peer": true, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18" + } + }, + "node_modules/react-instantsearch-hooks": { + "version": "6.47.3", + "resolved": "https://registry.npmjs.org/react-instantsearch-hooks/-/react-instantsearch-hooks-6.47.3.tgz", + "integrity": "sha512-QuGSwZ664MHrzvndXGnsyPhpKHywGqyDgqOVorYpEE24Y063OPv5XtmJaZqn27MIvvByUormTb6dbPgbjqkd8w==", + "deprecated": "package has moved to react-instantsearch-core", + "dependencies": { + "@babel/runtime": "^7.1.2", + "algoliasearch-helper": "3.14.0", + "instantsearch.js": "4.56.8", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 5", + "react": ">= 16.8.0 < 19" + } + }, + "node_modules/react-instantsearch-hooks-web": { + "version": "6.47.3", + "resolved": "https://registry.npmjs.org/react-instantsearch-hooks-web/-/react-instantsearch-hooks-web-6.47.3.tgz", + "integrity": "sha512-JTkPm11xwCX9eO4FgeeJ4v4O98wz1L7cAa2LkspgzDD1MPjMLtmiRVzvGxuYnOayQTtfC5+0GOBwuJEN8TDI8A==", + "deprecated": "package has moved to react-instantsearch", + "dependencies": { + "@babel/runtime": "^7.1.2", + "instantsearch.js": "4.56.8", + "react-instantsearch-hooks": "6.47.3" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 5", + "react": ">= 16.8.0 < 19", + "react-dom": ">= 16.8.0 < 19" + } + }, + "node_modules/react-instantsearch-hooks/node_modules/algoliasearch-helper": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.14.0.tgz", + "integrity": "sha512-gXDXzsSS0YANn5dHr71CUXOo84cN4azhHKUbg71vAWnH+1JBiR4jf7to3t3JHXknXkbV0F7f055vUSBKrltHLQ==", + "dependencies": { + "@algolia/events": "^4.0.1" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 6" + } + }, + "node_modules/react-intersection-observer": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.5.2.tgz", + "integrity": "sha512-EmoV66/yvksJcGa1rdW0nDNc4I1RifDWkT50gXSFnPLYQ4xUptuDD4V7k+Rj1OgVAlww628KLGcxPXFlOkkU/Q==", + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/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==" + }, + "node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", + "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", + "dependencies": { + "esprima": "~4.0.0" + } + }, + "node_modules/redis": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/redis/-/redis-3.1.2.tgz", + "integrity": "sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw==", + "dependencies": { + "denque": "^1.5.0", + "redis-commands": "^1.7.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-redis" + } + }, + "node_modules/redis-commands": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", + "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==" + }, + "node_modules/redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/redis/node_modules/denque": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/remove-trailing-slash": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", + "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==" + }, + "node_modules/request-ip": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/request-ip/-/request-ip-3.3.0.tgz", + "integrity": "sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==" + }, + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", + "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry-axios": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/retry-axios/-/retry-axios-2.6.0.tgz", + "integrity": "sha512-pOLi+Gdll3JekwuFjXO3fTq+L9lzMQGcSq7M5gIjExcl3Gu1hd4XXuf5o3+LuSBsaULQH7DiNbsqPd1chVpQGQ==", + "engines": { + "node": ">=10.7.0" + }, + "peerDependencies": { + "axios": "*" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/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==" + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/scrypt-kdf": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/scrypt-kdf/-/scrypt-kdf-2.0.1.tgz", + "integrity": "sha512-dMhpgBVJPDWZP5erOCwTjI6oAO9hKhFAjZsdSQ0spaWJYHuA/wFNF2weQQfsyCIk8eNKoLfEDxr3zAtM+gZo0Q==", + "engines": { + "node": ">=8.5.0" + } + }, + "node_modules/search-insights": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.8.2.tgz", + "integrity": "sha512-PxA9M5Q2bpBelVvJ3oDZR8nuY00Z6qwOxL53wNpgzV28M/D6u9WUbImDckjLSILBF8F1hn/mgyuUaOPtjow4Qw==" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/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 + }, + "node_modules/sorted-array-functions": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz", + "integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "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" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "engines": { + "node": "*" + } + }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "peer": true + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz", + "integrity": "sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", + "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.18.2", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "dev": true, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/tailwindcss-radix": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tailwindcss-radix/-/tailwindcss-radix-2.8.0.tgz", + "integrity": "sha512-1k1UfoIYgVyBl13FKwwoKavjnJ5VEaUClCTAsgz3VLquN4ay/lyaMPzkbqD71sACDs2fRGImytAUlMb4TzOt1A==" + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/tarn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", + "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/terser": { + "version": "5.19.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz", + "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/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==" + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/tildify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", + "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-regex-range/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typeorm": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.20.tgz", + "integrity": "sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q==", + "peer": true, + "dependencies": { + "@sqltools/formatter": "^1.2.5", + "app-root-path": "^3.1.0", + "buffer": "^6.0.3", + "chalk": "^4.1.2", + "cli-highlight": "^2.1.11", + "dayjs": "^1.11.9", + "debug": "^4.3.4", + "dotenv": "^16.0.3", + "glob": "^10.3.10", + "mkdirp": "^2.1.3", + "reflect-metadata": "^0.2.1", + "sha.js": "^2.4.11", + "tslib": "^2.5.0", + "uuid": "^9.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "typeorm": "cli.js", + "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js", + "typeorm-ts-node-esm": "cli-ts-node-esm.js" + }, + "engines": { + "node": ">=16.13.0" + }, + "funding": { + "url": "https://opencollective.com/typeorm" + }, + "peerDependencies": { + "@google-cloud/spanner": "^5.18.0", + "@sap/hana-client": "^2.12.25", + "better-sqlite3": "^7.1.2 || ^8.0.0 || ^9.0.0", + "hdb-pool": "^0.1.6", + "ioredis": "^5.0.4", + "mongodb": "^5.8.0", + "mssql": "^9.1.1 || ^10.0.1", + "mysql2": "^2.2.5 || ^3.0.1", + "oracledb": "^6.3.0", + "pg": "^8.5.1", + "pg-native": "^3.0.0", + "pg-query-stream": "^4.0.0", + "redis": "^3.1.1 || ^4.0.0", + "sql.js": "^1.4.0", + "sqlite3": "^5.0.3", + "ts-node": "^10.7.0", + "typeorm-aurora-data-api-driver": "^2.0.0" + }, + "peerDependenciesMeta": { + "@google-cloud/spanner": { + "optional": true + }, + "@sap/hana-client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "hdb-pool": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "mongodb": { + "optional": true + }, + "mssql": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "oracledb": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-native": { + "optional": true + }, + "pg-query-stream": { + "optional": true + }, + "redis": { + "optional": true + }, + "sql.js": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "ts-node": { + "optional": true + }, + "typeorm-aurora-data-api-driver": { + "optional": true + } + } + }, + "node_modules/typeorm/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/typeorm/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typeorm/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/typeorm/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/typeorm/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/typeorm/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/typeorm/node_modules/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==", + "peer": true + }, + "node_modules/typeorm/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "peer": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typeorm/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typeorm/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "peer": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typeorm/node_modules/mkdirp": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", + "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", + "peer": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typeorm/node_modules/reflect-metadata": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.1.tgz", + "integrity": "sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==", + "peer": true + }, + "node_modules/typeorm/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/typeorm/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/typeorm/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "peer": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/typeorm/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/typescript": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz", + "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "dependencies": { + "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ulid": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ulid/-/ulid-2.3.0.tgz", + "integrity": "sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==", + "bin": { + "ulid": "bin/cli.js" + } + }, + "node_modules/umzug": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/umzug/-/umzug-3.2.1.tgz", + "integrity": "sha512-XyWQowvP9CKZycKc/Zg9SYWrAWX/gJCE799AUTFqk8yC3tp44K1xWr3LoFF0MNEjClKOo1suCr5ASnoy+KltdA==", + "dependencies": { + "@rushstack/ts-command-line": "^4.12.2", + "emittery": "^0.12.1", + "fs-jetpack": "^4.3.1", + "glob": "^8.0.3", + "pony-cause": "^2.1.2", + "type-fest": "^2.18.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/umzug/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/umzug/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/umzug/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/umzug/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz", + "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", + "dev": true + }, + "node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/value-or-promise": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", + "engines": { + "node": ">=12" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/webpack": { + "version": "5.88.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", + "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/winston": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.10.0.tgz", + "integrity": "sha512-nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g==", + "dependencies": { + "@colors/colors": "1.5.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", + "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/winston/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/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==", + "peer": true + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/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==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/storeagentai-storefront/package.json b/storeagentai-storefront/package.json new file mode 100644 index 00000000..ca6bd3ee --- /dev/null +++ b/storeagentai-storefront/package.json @@ -0,0 +1,68 @@ +{ + "name": "medusa-next", + "version": "1.0.3", + "private": true, + "author": "Kasper Fabricius Kristensen & Victor Gerbrands (https://www.medusajs.com)", + "description": "Next.js Starter to be used with Medusa server", + "keywords": [ + "medusa-storefront" + ], + "scripts": { + "dev": "next dev -p 8000", + "build": "next build", + "start": "next start -p 8000", + "lint": "next lint", + "cypress": "cypress open", + "analyze": "ANALYZE=true next build" + }, + "resolutions": { + "webpack": "^5", + "@types/react": "17.0.40" + }, + "dependencies": { + "@headlessui/react": "^1.6.1", + "@hookform/error-message": "^2.0.0", + "@medusajs/link-modules": "^0.2.3", + "@medusajs/medusa-js": "^6.1.7", + "@medusajs/modules-sdk": "^1.12.3", + "@medusajs/pricing": "^0.1.4", + "@medusajs/product": "^0.3.4", + "@medusajs/ui": "^2.2.0", + "@meilisearch/instant-meilisearch": "^0.7.1", + "@paypal/paypal-js": "^5.0.6", + "@paypal/react-paypal-js": "^7.8.1", + "@stripe/react-stripe-js": "^1.7.2", + "@stripe/stripe-js": "^1.29.0", + "algoliasearch": "^4.20.0", + "lodash": "^4.17.21", + "medusa-react": "^9.0.0", + "next": "^14.0.0", + "react": "^18.2.0", + "react-country-flag": "^3.0.2", + "react-dom": "^18.2.0", + "react-instantsearch-hooks-web": "^6.29.0", + "react-intersection-observer": "^9.3.4", + "tailwindcss-radix": "^2.8.0", + "webpack": "^5" + }, + "devDependencies": { + "@babel/core": "^7.17.5", + "@medusajs/client-types": "^0.2.2", + "@medusajs/medusa": "^1.18.0", + "@medusajs/ui-preset": "^1.0.2", + "@types/lodash": "^4.14.195", + "@types/node": "17.0.21", + "@types/react": "^18.2.42", + "@types/react-dom": "^18.2.18", + "@types/react-instantsearch-dom": "^6.12.3", + "autoprefixer": "^10.4.2", + "babel-loader": "^8.2.3", + "cypress": "^9.5.2", + "eslint": "8.10.0", + "eslint-config-next": "^13.4.5", + "postcss": "^8.4.8", + "prettier": "^2.8.8", + "tailwindcss": "^3.0.23", + "typescript": "^5.3.2" + } +} diff --git a/storeagentai-storefront/postcss.config.js b/storeagentai-storefront/postcss.config.js new file mode 100644 index 00000000..33ad091d --- /dev/null +++ b/storeagentai-storefront/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/storeagentai-storefront/public/favicon.ico b/storeagentai-storefront/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/storeagentai-storefront/src/app/[countryCode]/(checkout)/checkout/page.tsx b/storeagentai-storefront/src/app/[countryCode]/(checkout)/checkout/page.tsx new file mode 100644 index 00000000..a6009a14 --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(checkout)/checkout/page.tsx @@ -0,0 +1,48 @@ +import { Metadata } from "next" +import { cookies } from "next/headers" +import { notFound } from "next/navigation" +import { LineItem } from "@medusajs/medusa" + +import { enrichLineItems } from "@modules/cart/actions" +import Wrapper from "@modules/checkout/components/payment-wrapper" +import CheckoutForm from "@modules/checkout/templates/checkout-form" +import CheckoutSummary from "@modules/checkout/templates/checkout-summary" +import { getCart } from "@lib/data" + +export const metadata: Metadata = { + title: "Checkout", +} + +const fetchCart = async () => { + const cartId = cookies().get("_medusa_cart_id")?.value + + if (!cartId) { + return notFound() + } + + const cart = await getCart(cartId).then((cart) => cart) + + if (cart?.items.length) { + const enrichedItems = await enrichLineItems(cart?.items, cart?.region_id) + cart.items = enrichedItems as LineItem[] + } + + return cart +} + +export default async function Checkout() { + const cart = await fetchCart() + + if (!cart) { + return notFound() + } + + return ( +
+ + + + +
+ ) +} diff --git a/storeagentai-storefront/src/app/[countryCode]/(checkout)/layout.tsx b/storeagentai-storefront/src/app/[countryCode]/(checkout)/layout.tsx new file mode 100644 index 00000000..51720970 --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(checkout)/layout.tsx @@ -0,0 +1,41 @@ +import LocalizedClientLink from "@modules/common/components/localized-client-link" +import ChevronDown from "@modules/common/icons/chevron-down" +import MedusaCTA from "@modules/layout/components/medusa-cta" + +export default function CheckoutLayout({ + children, +}: { + children: React.ReactNode +}) { + return ( +
+
+ +
+
{children}
+
+ +
+
+ ) +} diff --git a/storeagentai-storefront/src/app/[countryCode]/(checkout)/not-found.tsx b/storeagentai-storefront/src/app/[countryCode]/(checkout)/not-found.tsx new file mode 100644 index 00000000..838c9683 --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(checkout)/not-found.tsx @@ -0,0 +1,19 @@ +import InteractiveLink from "@modules/common/components/interactive-link" +import { Metadata } from "next" + +export const metadata: Metadata = { + title: "404", + description: "Something went wrong", +} + +export default async function NotFound() { + return ( +
+

Page not found

+

+ The page you tried to access does not exist. +

+ Go to frontpage +
+ ) +} diff --git a/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/addresses/page.tsx b/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/addresses/page.tsx new file mode 100644 index 00000000..61862d6e --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/addresses/page.tsx @@ -0,0 +1,37 @@ +import { Metadata } from "next" +import { notFound } from "next/navigation" + +import AddressBook from "@modules/account/components/address-book" + +import { getCustomer, getRegion } from "@lib/data" + +import { headers } from "next/headers" + +export const metadata: Metadata = { + title: "Addresses", + description: "View your addresses", +} + +export default async function Addresses() { + const nextHeaders = headers() + const countryCode = nextHeaders.get("next-url")?.split("/")[1] || "" + const customer = await getCustomer() + const region = await getRegion(countryCode) + + if (!customer || !region) { + notFound() + } + + return ( +
+
+

Shipping Addresses

+

+ View and update your shipping addresses, you can add as many as you + like. Saving your addresses will make them available during checkout. +

+
+ +
+ ) +} diff --git a/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/loading.tsx b/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/loading.tsx new file mode 100644 index 00000000..76910954 --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/loading.tsx @@ -0,0 +1,9 @@ +import Spinner from "@modules/common/icons/spinner" + +export default function Loading() { + return ( +
+ +
+ ) +} diff --git a/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/orders/details/[id]/page.tsx b/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/orders/details/[id]/page.tsx new file mode 100644 index 00000000..62321209 --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/orders/details/[id]/page.tsx @@ -0,0 +1,32 @@ +import { Metadata } from "next" +import { notFound } from "next/navigation" + +import { retrieveOrder } from "@lib/data" +import OrderDetailsTemplate from "@modules/order/templates/order-details-template" + +type Props = { + params: { id: string } +} + +export async function generateMetadata({ params }: Props): Promise { + const order = await retrieveOrder(params.id).catch(() => null) + + if (!order) { + notFound() + } + + return { + title: `Order #${order.display_id}`, + description: `View your order`, + } +} + +export default async function OrderDetailPage({ params }: Props) { + const order = await retrieveOrder(params.id).catch(() => null) + + if (!order) { + notFound() + } + + return +} diff --git a/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/orders/page.tsx b/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/orders/page.tsx new file mode 100644 index 00000000..63e18ebc --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/orders/page.tsx @@ -0,0 +1,33 @@ +import { Metadata } from "next" + +import OrderOverview from "@modules/account/components/order-overview" +import { listCustomerOrders } from "@lib/data" +import { notFound } from "next/navigation" + +export const metadata: Metadata = { + title: "Orders", + description: "Overview of your previous orders.", +} + +export default async function Orders() { + const orders = await listCustomerOrders() + + if (!orders) { + notFound() + } + + return ( +
+
+

Orders

+

+ View your previous orders and their status. You can also create + returns or exchanges for your orders if needed. +

+
+
+ +
+
+ ) +} diff --git a/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/page.tsx b/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/page.tsx new file mode 100644 index 00000000..b90dd6b1 --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/page.tsx @@ -0,0 +1,21 @@ +import { Metadata } from "next" + +import { getCustomer, listCustomerOrders } from "@lib/data" +import Overview from "@modules/account/components/overview" +import { notFound } from "next/navigation" + +export const metadata: Metadata = { + title: "Account", + description: "Overview of your account activity.", +} + +export default async function OverviewTemplate() { + const customer = await getCustomer().catch(() => null) + const orders = (await listCustomerOrders().catch(() => null)) || null + + if (!customer) { + notFound() + } + + return +} diff --git a/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/profile/page.tsx b/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/profile/page.tsx new file mode 100644 index 00000000..7402992d --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(main)/account/@dashboard/profile/page.tsx @@ -0,0 +1,52 @@ +import { Metadata } from "next" + +import ProfilePhone from "@modules/account//components/profile-phone" +import ProfileBillingAddress from "@modules/account/components/profile-billing-address" +import ProfileEmail from "@modules/account/components/profile-email" +import ProfileName from "@modules/account/components/profile-name" +import ProfilePassword from "@modules/account/components/profile-password" + +import { getCustomer, listRegions } from "@lib/data" +import { notFound } from "next/navigation" + +export const metadata: Metadata = { + title: "Profile", + description: "View and edit your Medusa Store profile.", +} + +export default async function Profile() { + const customer = await getCustomer() + const regions = await listRegions() + + if (!customer || !regions) { + notFound() + } + + return ( +
+
+

Profile

+

+ View and update your profile information, including your name, email, + and phone number. You can also update your billing address, or change + your password. +

+
+
+ + + + + + + + + +
+
+ ) +} + +const Divider = () => { + return
+} diff --git a/storeagentai-storefront/src/app/[countryCode]/(main)/account/@login/page.tsx b/storeagentai-storefront/src/app/[countryCode]/(main)/account/@login/page.tsx new file mode 100644 index 00000000..848e2123 --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(main)/account/@login/page.tsx @@ -0,0 +1,12 @@ +import { Metadata } from "next" + +import LoginTemplate from "@modules/account/templates/login-template" + +export const metadata: Metadata = { + title: "Sign in", + description: "Sign in to your Medusa Store account.", +} + +export default function Login() { + return +} diff --git a/storeagentai-storefront/src/app/[countryCode]/(main)/account/layout.tsx b/storeagentai-storefront/src/app/[countryCode]/(main)/account/layout.tsx new file mode 100644 index 00000000..2be4b054 --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(main)/account/layout.tsx @@ -0,0 +1,18 @@ +import { getCustomer } from "@lib/data" +import AccountLayout from "@modules/account/templates/account-layout" + +export default async function AccountPageLayout({ + dashboard, + login, +}: { + dashboard?: React.ReactNode + login?: React.ReactNode +}) { + const customer = await getCustomer().catch(() => null) + + return ( + + {customer ? dashboard : login} + + ) +} diff --git a/storeagentai-storefront/src/app/[countryCode]/(main)/account/loading.tsx b/storeagentai-storefront/src/app/[countryCode]/(main)/account/loading.tsx new file mode 100644 index 00000000..76910954 --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(main)/account/loading.tsx @@ -0,0 +1,9 @@ +import Spinner from "@modules/common/icons/spinner" + +export default function Loading() { + return ( +
+ +
+ ) +} diff --git a/storeagentai-storefront/src/app/[countryCode]/(main)/cart/loading.tsx b/storeagentai-storefront/src/app/[countryCode]/(main)/cart/loading.tsx new file mode 100644 index 00000000..e7b6de37 --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(main)/cart/loading.tsx @@ -0,0 +1,5 @@ +import SkeletonCartPage from "@modules/skeletons/templates/skeleton-cart-page" + +export default function Loading() { + return +} diff --git a/storeagentai-storefront/src/app/[countryCode]/(main)/cart/not-found.tsx b/storeagentai-storefront/src/app/[countryCode]/(main)/cart/not-found.tsx new file mode 100644 index 00000000..91af293e --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(main)/cart/not-found.tsx @@ -0,0 +1,21 @@ +import { Metadata } from "next" + +import InteractiveLink from "@modules/common/components/interactive-link" + +export const metadata: Metadata = { + title: "404", + description: "Something went wrong", +} + +export default function NotFound() { + return ( +
+

Page not found

+

+ The cart you tried to access does not exist. Clear your cookies and try + again. +

+ Go to frontpage +
+ ) +} diff --git a/storeagentai-storefront/src/app/[countryCode]/(main)/cart/page.tsx b/storeagentai-storefront/src/app/[countryCode]/(main)/cart/page.tsx new file mode 100644 index 00000000..8b3e2e7c --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(main)/cart/page.tsx @@ -0,0 +1,47 @@ +import { LineItem } from "@medusajs/medusa" +import { Metadata } from "next" +import { cookies } from "next/headers" + +import CartTemplate from "@modules/cart/templates" + +import { enrichLineItems } from "@modules/cart/actions" +import { getCheckoutStep } from "@lib/util/get-checkout-step" +import { CartWithCheckoutStep } from "types/global" +import { getCart, getCustomer } from "@lib/data" + +export const metadata: Metadata = { + title: "Cart", + description: "View your cart", +} + +const fetchCart = async () => { + const cartId = cookies().get("_medusa_cart_id")?.value + + if (!cartId) { + return null + } + + const cart = await getCart(cartId).then( + (cart) => cart as CartWithCheckoutStep + ) + + if (!cart) { + return null + } + + if (cart?.items.length) { + const enrichedItems = await enrichLineItems(cart?.items, cart?.region_id) + cart.items = enrichedItems as LineItem[] + } + + cart.checkout_step = cart && getCheckoutStep(cart) + + return cart +} + +export default async function Cart() { + const cart = await fetchCart() + const customer = await getCustomer() + + return +} diff --git a/storeagentai-storefront/src/app/[countryCode]/(main)/categories/[...category]/page.tsx b/storeagentai-storefront/src/app/[countryCode]/(main)/categories/[...category]/page.tsx new file mode 100644 index 00000000..74fd6584 --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(main)/categories/[...category]/page.tsx @@ -0,0 +1,86 @@ +import { Metadata } from "next" +import { notFound } from "next/navigation" + +import { getCategoryByHandle, listCategories, listRegions } from "@lib/data" +import CategoryTemplate from "@modules/categories/templates" +import { SortOptions } from "@modules/store/components/refinement-list/sort-products" + +type Props = { + params: { category: string[]; countryCode: string } + searchParams: { + sortBy?: SortOptions + page?: string + } +} + +export async function generateStaticParams() { + const product_categories = await listCategories() + + if (!product_categories) { + return [] + } + + const countryCodes = await listRegions().then((regions) => + regions?.map((r) => r.countries.map((c) => c.iso_2)).flat() + ) + + const categoryHandles = product_categories.map((category) => category.handle) + + const staticParams = countryCodes + ?.map((countryCode) => + categoryHandles.map((handle) => ({ + countryCode, + category: [handle], + })) + ) + .flat() + + return staticParams +} + +export async function generateMetadata({ params }: Props): Promise { + try { + const { product_categories } = await getCategoryByHandle( + params.category + ).then((product_categories) => product_categories) + + const title = product_categories + .map((category) => category.name) + .join(" | ") + + const description = + product_categories[product_categories.length - 1].description ?? + `${title} category.` + + return { + title: `${title} | Medusa Store`, + description, + alternates: { + canonical: `${params.category.join("/")}`, + }, + } + } catch (error) { + notFound() + } +} + +export default async function CategoryPage({ params, searchParams }: Props) { + const { sortBy, page } = searchParams + + const { product_categories } = await getCategoryByHandle( + params.category + ).then((product_categories) => product_categories) + + if (!product_categories) { + notFound() + } + + return ( + + ) +} diff --git a/storeagentai-storefront/src/app/[countryCode]/(main)/collections/[handle]/page.tsx b/storeagentai-storefront/src/app/[countryCode]/(main)/collections/[handle]/page.tsx new file mode 100644 index 00000000..8d29729d --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(main)/collections/[handle]/page.tsx @@ -0,0 +1,81 @@ +import { Metadata } from "next" +import { notFound } from "next/navigation" + +import { + getCollectionByHandle, + getCollectionsList, + listRegions, +} from "@lib/data" +import CollectionTemplate from "@modules/collections/templates" +import { SortOptions } from "@modules/store/components/refinement-list/sort-products" + +type Props = { + params: { handle: string; countryCode: string } + searchParams: { + page?: string + sortBy?: SortOptions + } +} + +export const PRODUCT_LIMIT = 12 + +export async function generateStaticParams() { + const { collections } = await getCollectionsList() + + if (!collections) { + return [] + } + + const countryCodes = await listRegions().then((regions) => + regions?.map((r) => r.countries.map((c) => c.iso_2)).flat() + ) + + const collectionHandles = collections.map((collection) => collection.handle) + + const staticParams = countryCodes + ?.map((countryCode) => + collectionHandles.map((handle) => ({ + countryCode, + handle, + })) + ) + .flat() + + return staticParams +} + +export async function generateMetadata({ params }: Props): Promise { + const collection = await getCollectionByHandle(params.handle) + + if (!collection) { + notFound() + } + + const metadata = { + title: `${collection.title} | Medusa Store`, + description: `${collection.title} collection`, + } as Metadata + + return metadata +} + +export default async function CollectionPage({ params, searchParams }: Props) { + const { sortBy, page } = searchParams + + const collection = await getCollectionByHandle(params.handle).then( + (collection) => collection + ) + + if (!collection) { + notFound() + } + + return ( + + ) +} diff --git a/storeagentai-storefront/src/app/[countryCode]/(main)/layout.tsx b/storeagentai-storefront/src/app/[countryCode]/(main)/layout.tsx new file mode 100644 index 00000000..481ff5dd --- /dev/null +++ b/storeagentai-storefront/src/app/[countryCode]/(main)/layout.tsx @@ -0,0 +1,20 @@ +import { Metadata } from "next" + +import Footer from "@modules/layout/templates/footer" +import Nav from "@modules/layout/templates/nav" + +const BASE_URL = process.env.NEXT_PUBLIC_BASE_URL || "https://localhost:8000" + +export const metadata: Metadata = { + metadataBase: new URL(BASE_URL), +} + +export default async function PageLayout(props: { children: React.ReactNode }) { + return ( + <> +
diff --git a/storeagentai-storefront/src/modules/products/components/product-preview/index.tsx b/storeagentai-storefront/src/modules/products/components/product-preview/index.tsx index e794ec5f..5cd92a8b 100644 --- a/storeagentai-storefront/src/modules/products/components/product-preview/index.tsx +++ b/storeagentai-storefront/src/modules/products/components/product-preview/index.tsx @@ -44,7 +44,7 @@ export default async function ProductPreview({ isFeatured={isFeatured} />
- {productPreview.title} + {productPreview.title} {productPreview.subtitle}
{cheapestPrice && }
diff --git a/storeagentai-storefront/src/modules/products/components/product-tabs/index.tsx b/storeagentai-storefront/src/modules/products/components/product-tabs/index.tsx index 7a53621d..7ddce44e 100644 --- a/storeagentai-storefront/src/modules/products/components/product-tabs/index.tsx +++ b/storeagentai-storefront/src/modules/products/components/product-tabs/index.tsx @@ -15,18 +15,18 @@ type ProductTabsProps = { const ProductTabs = ({ product }: ProductTabsProps) => { const tabs = [ { - label: "Product Information", + label: "About", component: , }, - { - label: "Shipping & Returns", - component: , - }, + // { + // label: "Shipping & Returns", + // component: , + // }, ] return (
- + {tabs.map((tab, i) => ( {
- Material -

{product.material ? product.material : "-"}

+ Coordinates +

{product.metadata?.coordinates ? product.metadata?.coordinates : "-"}

- Country of origin -

{product.origin_country ? product.origin_country : "-"}

+ Owned By +

{product.metadata?.owned_by ? product.metadata?.owned_by : "-"}

-
+ {/*
Type

{product.type ? product.type.value : "-"}

-
+
*/}
-
+ {/*
Weight

{product.weight ? `${product.weight} g` : "-"}

@@ -73,7 +73,7 @@ const ProductInfoTab = ({ product }: ProductTabsProps) => { : "-"}

-
+
*/}
{product.tags?.length ? (
diff --git a/storeagentai-storefront/src/modules/products/templates/product-info/index.tsx b/storeagentai-storefront/src/modules/products/templates/product-info/index.tsx index fa2663c6..777b7f06 100644 --- a/storeagentai-storefront/src/modules/products/templates/product-info/index.tsx +++ b/storeagentai-storefront/src/modules/products/templates/product-info/index.tsx @@ -19,7 +19,7 @@ const ProductInfo = ({ product }: ProductInfoProps) => { )} - {product.title} + {product.title}: {product.metadata?.plot_id} diff --git a/storeagentai-storefront/src/types/global.ts b/storeagentai-storefront/src/types/global.ts index eaeb41ce..8eef8aad 100644 --- a/storeagentai-storefront/src/types/global.ts +++ b/storeagentai-storefront/src/types/global.ts @@ -12,6 +12,7 @@ export type FeaturedProduct = { export type ProductPreviewType = { id: string title: string + subtitle?: string | null handle: string | null thumbnail: string | null created_at?: Date diff --git a/storeagentai/medusa-config.js b/storeagentai/medusa-config.js index d29c8759..994eacc2 100644 --- a/storeagentai/medusa-config.js +++ b/storeagentai/medusa-config.js @@ -51,10 +51,16 @@ const plugins = [ open: process.env.OPEN_BROWSER !== "false", }, }, - }, + } ]; const modules = { + inventoryService: { + resolve: "@medusajs/inventory", + }, + stockLocationService: { + resolve: "@medusajs/stock-location", + }, /*eventBus: { resolve: "@medusajs/event-bus-redis", options: { @@ -69,6 +75,10 @@ const modules = { },*/ }; +const featureFlags = { + product_categories: true, +}; + /** @type {import('@medusajs/medusa').ConfigModule["projectConfig"]} */ const projectConfig = { jwtSecret: process.env.JWT_SECRET, @@ -85,4 +95,5 @@ module.exports = { projectConfig, plugins, modules, + featureFlags }; diff --git a/storeagentai/package.json b/storeagentai/package.json index e1db31cd..5659cd58 100644 --- a/storeagentai/package.json +++ b/storeagentai/package.json @@ -31,7 +31,9 @@ "@medusajs/event-bus-local": "^1.9.8", "@medusajs/event-bus-redis": "^1.8.11", "@medusajs/file-local": "^1.0.3", + "@medusajs/inventory": "^1.11.6", "@medusajs/medusa": "1.20.2", + "@medusajs/stock-location": "^1.11.5", "@tanstack/react-query": "4.22.0", "body-parser": "^1.19.0", "cors": "^2.8.5", diff --git a/storeagentai/src/migrations/1709007806066-AddEthereumCurrency.ts b/storeagentai/src/migrations/1709007806066-AddEthereumCurrency.ts new file mode 100644 index 00000000..5ac3b5e6 --- /dev/null +++ b/storeagentai/src/migrations/1709007806066-AddEthereumCurrency.ts @@ -0,0 +1,17 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class AddEthereumCurrency1709007806066 implements MigrationInterface { + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `INSERT INTO currency (code, symbol, symbol_native, name) VALUES ('eth', 'ETH', 'Ξ', 'Ethereum')` + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `DELETE FROM currency WHERE code = 'eth'` + ); + } + +} From ee64ba4b491bac64e6e3f5d582fb9084b85e223d Mon Sep 17 00:00:00 2001 From: netpoe Date: Tue, 5 Mar 2024 12:01:00 -0600 Subject: [PATCH 07/57] chore: sets product.metadata in ProductPreview --- .../src/lib/util/transform-product-preview.ts | 1 + .../src/modules/products/components/product-preview/index.tsx | 2 +- storeagentai-storefront/src/types/global.ts | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/storeagentai-storefront/src/lib/util/transform-product-preview.ts b/storeagentai-storefront/src/lib/util/transform-product-preview.ts index 9f71b68a..ba4bb37c 100644 --- a/storeagentai-storefront/src/lib/util/transform-product-preview.ts +++ b/storeagentai-storefront/src/lib/util/transform-product-preview.ts @@ -27,6 +27,7 @@ const transformProductPreview = ( id: product.id!, title: product.title!, subtitle: product.subtitle, + metadata: product.metadata, handle: product.handle!, thumbnail: product.thumbnail!, created_at: product.created_at, diff --git a/storeagentai-storefront/src/modules/products/components/product-preview/index.tsx b/storeagentai-storefront/src/modules/products/components/product-preview/index.tsx index 5cd92a8b..e975a32e 100644 --- a/storeagentai-storefront/src/modules/products/components/product-preview/index.tsx +++ b/storeagentai-storefront/src/modules/products/components/product-preview/index.tsx @@ -44,7 +44,7 @@ export default async function ProductPreview({ isFeatured={isFeatured} />
- {productPreview.title} {productPreview.subtitle} + {productPreview.title} {productPreview.metadata?.plot_id}
{cheapestPrice && }
diff --git a/storeagentai-storefront/src/types/global.ts b/storeagentai-storefront/src/types/global.ts index 8eef8aad..f3374897 100644 --- a/storeagentai-storefront/src/types/global.ts +++ b/storeagentai-storefront/src/types/global.ts @@ -13,6 +13,7 @@ export type ProductPreviewType = { id: string title: string subtitle?: string | null + metadata?: Record | null handle: string | null thumbnail: string | null created_at?: Date From 535c22dea20830b21dd27b0b2dd9cb4b9e10a20b Mon Sep 17 00:00:00 2001 From: netpoe Date: Tue, 5 Mar 2024 12:02:28 -0600 Subject: [PATCH 08/57] feat(database): user_info, user_address, user_company --- ...231017160215-create-table-square_orders.js | 89 ++++++++++ ...14-rename-table_orders-to-square_orders.js | 16 ++ .../20240305170703-create-table_user_info.js | 38 +++++ ...0240305172419-create-table_user_address.js | 48 ++++++ ...0240305174854-create-table_user_company.js | 33 ++++ ...0305174900-create-table_user_company_gt.js | 33 ++++ database/models/SquareOrder.ts | 154 ++++++++++++++++++ database/models/UserAddress.ts | 62 +++++++ database/models/UserCompany.ts | 41 +++++ database/models/UserCompany_GT.ts | 41 +++++ database/models/UserInfo.ts | 47 ++++++ database/models/index.ts | 19 ++- 12 files changed, 619 insertions(+), 2 deletions(-) create mode 100644 database/migrations/20231017160215-create-table-square_orders.js create mode 100644 database/migrations/20231017164014-rename-table_orders-to-square_orders.js create mode 100644 database/migrations/20240305170703-create-table_user_info.js create mode 100644 database/migrations/20240305172419-create-table_user_address.js create mode 100644 database/migrations/20240305174854-create-table_user_company.js create mode 100644 database/migrations/20240305174900-create-table_user_company_gt.js create mode 100644 database/models/SquareOrder.ts create mode 100644 database/models/UserAddress.ts create mode 100644 database/models/UserCompany.ts create mode 100644 database/models/UserCompany_GT.ts create mode 100644 database/models/UserInfo.ts diff --git a/database/migrations/20231017160215-create-table-square_orders.js b/database/migrations/20231017160215-create-table-square_orders.js new file mode 100644 index 00000000..f653545b --- /dev/null +++ b/database/migrations/20231017160215-create-table-square_orders.js @@ -0,0 +1,89 @@ +const DataTypes = require("sequelize").DataTypes; +module.exports = { + up: async (queryInterface, Sequelize) => { + await queryInterface.createTable("orders", { + id: { + type: DataTypes.STRING, + primaryKey: true, + allowNull: false, + }, + location_id: { + type: DataTypes.STRING, + allowNull: false, + }, + line_items: { + type: DataTypes.JSONB, + allowNull: false, + }, + created_at: { + type: DataTypes.DATE, + }, + updated_at: { + type: DataTypes.DATE, + }, + state: { + type: DataTypes.STRING, + allowNull: false, + }, + total_tax_money: { + type: DataTypes.JSONB, + allowNull: false, + }, + total_discount_money: { + type: DataTypes.JSONB, + allowNull: false, + }, + total_tip_money: { + type: DataTypes.JSONB, + allowNull: false, + }, + total_money: { + type: DataTypes.JSONB, + allowNull: false, + }, + closed_at: { + type: DataTypes.DATE, + allowNull: false, + }, + tenders: { + type: DataTypes.JSONB, + allowNull: false, + }, + total_service_charge_money: { + type: DataTypes.JSONB, + allowNull: false, + }, + return_amounts: { + type: DataTypes.JSONB, + allowNull: false, + }, + net_amounts: { + type: DataTypes.JSONB, + allowNull: false, + }, + source: { + type: DataTypes.JSONB, + allowNull: false, + }, + customer_id: { + type: DataTypes.STRING, + allowNull: false, + }, + net_amount_due_money: { + type: DataTypes.JSONB, + allowNull: false, + }, + createdAt: { + type: DataTypes.DATE, + field: "created_at", + }, + updatedAt: { + type: DataTypes.DATE, + field: "updated_at", + }, + }); + }, + down: async (queryInterface, Sequelize) => { + await queryInterface.dropTable("orders"); + }, +}; \ No newline at end of file diff --git a/database/migrations/20231017164014-rename-table_orders-to-square_orders.js b/database/migrations/20231017164014-rename-table_orders-to-square_orders.js new file mode 100644 index 00000000..e8d0b954 --- /dev/null +++ b/database/migrations/20231017164014-rename-table_orders-to-square_orders.js @@ -0,0 +1,16 @@ +"use strict"; + +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.renameTable("orders", "square_orders"); + }, + + async down(queryInterface, Sequelize) { + /** + * Add reverting commands here. + * + * Example: + * await queryInterface.dropTable('users'); + */ + }, +}; diff --git a/database/migrations/20240305170703-create-table_user_info.js b/database/migrations/20240305170703-create-table_user_info.js new file mode 100644 index 00000000..4c97fc5c --- /dev/null +++ b/database/migrations/20240305170703-create-table_user_info.js @@ -0,0 +1,38 @@ +const { DataTypes } = require("sequelize"); + +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.createTable("user_info", { + id: { + type: DataTypes.UUIDV4, + allowNull: false, + primaryKey: true, + }, + user_id: { + type: Sequelize.STRING, + allowNull: false, + }, + name: { + type: DataTypes.STRING, + allowNull: false, + }, + lastname: { + type: DataTypes.INTEGER, + allowNull: false, + }, + createdAt: { + type: DataTypes.DATE, + allowNull: false, + }, + updatedAt: { + type: DataTypes.DATE, + allowNull: false, + }, + }); + }, + + async down(queryInterface, Sequelize) { + await queryInterface.dropTable("user_info"); + }, +}; diff --git a/database/migrations/20240305172419-create-table_user_address.js b/database/migrations/20240305172419-create-table_user_address.js new file mode 100644 index 00000000..6fab8436 --- /dev/null +++ b/database/migrations/20240305172419-create-table_user_address.js @@ -0,0 +1,48 @@ +"use strict"; + +module.exports = { + up: async (queryInterface, Sequelize) => { + await queryInterface.createTable("user_address", { + id: { + type: Sequelize.UUIDV4, + allowNull: false, + primaryKey: true, + }, + user_id: { + type: Sequelize.STRING, + allowNull: false, + }, + country: { + type: Sequelize.STRING, + allowNull: false, + }, + city: { + type: Sequelize.STRING, + allowNull: false, + }, + address_1: { + type: Sequelize.STRING, + allowNull: false, + }, + address_2: { + type: Sequelize.STRING, + allowNull: true, + }, + zip_code: { + type: Sequelize.STRING, + allowNull: false, + }, + created_at: { + allowNull: false, + type: Sequelize.DATE, + }, + updated_at: { + allowNull: false, + type: Sequelize.DATE, + }, + }); + }, + down: async (queryInterface, Sequelize) => { + await queryInterface.dropTable("user_address"); + }, +}; diff --git a/database/migrations/20240305174854-create-table_user_company.js b/database/migrations/20240305174854-create-table_user_company.js new file mode 100644 index 00000000..1a1631ce --- /dev/null +++ b/database/migrations/20240305174854-create-table_user_company.js @@ -0,0 +1,33 @@ +"use strict"; + +module.exports = { + up: async (queryInterface, Sequelize) => { + await queryInterface.createTable("user_company", { + id: { + allowNull: false, + primaryKey: true, + type: Sequelize.UUID, + defaultValue: Sequelize.UUIDV4, + }, + user_id: { + type: Sequelize.UUID, + allowNull: false, + }, + industry: { + type: Sequelize.STRING(128), + allowNull: false, + }, + created_at: { + allowNull: false, + type: Sequelize.DATE, + }, + updated_at: { + allowNull: false, + type: Sequelize.DATE, + }, + }); + }, + down: async (queryInterface, Sequelize) => { + await queryInterface.dropTable("user_company"); + }, +}; diff --git a/database/migrations/20240305174900-create-table_user_company_gt.js b/database/migrations/20240305174900-create-table_user_company_gt.js new file mode 100644 index 00000000..bd3f9f9d --- /dev/null +++ b/database/migrations/20240305174900-create-table_user_company_gt.js @@ -0,0 +1,33 @@ +"use strict"; + +module.exports = { + up: async (queryInterface, Sequelize) => { + await queryInterface.createTable("user_company_gt", { + id: { + allowNull: false, + primaryKey: true, + type: Sequelize.UUID, + defaultValue: Sequelize.UUIDV4, + }, + user_id: { + type: Sequelize.UUID, + allowNull: false, + }, + NIT: { + type: Sequelize.STRING(128), + allowNull: false, + }, + created_at: { + allowNull: false, + type: Sequelize.DATE, + }, + updated_at: { + allowNull: false, + type: Sequelize.DATE, + }, + }); + }, + down: async (queryInterface, Sequelize) => { + await queryInterface.dropTable("user_company_gt"); + }, +}; diff --git a/database/models/SquareOrder.ts b/database/models/SquareOrder.ts new file mode 100644 index 00000000..5c270b4e --- /dev/null +++ b/database/models/SquareOrder.ts @@ -0,0 +1,154 @@ +import { CreationOptional, DataTypes, InferCreationAttributes, InferAttributes, Model, Sequelize } from "sequelize"; + +type LineItem = { + uid: string; + catalog_object_id: string; + catalog_version: number; + quantity: string; + name: string; + variation_name: string; + base_price_money: Money; + gross_sales_money: Money; + total_tax_money: Money; + total_discount_money: Money; + total_money: Money; + variation_total_price_money: Money; + item_type: string; + total_service_charge_money: Money; +}; + +type Tender = { + id: string; + location_id: string; + transaction_id: string; + created_at: string; + note: string; + amount_money: Money; + processing_fee_money: Money; + customer_id: string; + type: string; +}; + +type Money = { + amount: number; + currency: string; +}; + +type ReturnAmounts = { + total_money: Money; + tax_money: Money; + discount_money: Money; + tip_money: Money; + service_charge_money: Money; +}; + +type NetAmounts = { + total_money: Money; + tax_money: Money; + discount_money: Money; + tip_money: Money; + service_charge_money: Money; +}; + +export class SquareOrder extends Model, InferCreationAttributes> { + declare id: CreationOptional; + declare location_id: string; + declare line_items: LineItem[]; + declare created_at: CreationOptional; + declare updated_at: CreationOptional; + declare state: string; + declare total_tax_money: Money; + declare total_discount_money: Money; + declare total_tip_money: Money; + declare total_money: Money; + declare closed_at: Date; + declare tenders: Tender[]; + declare total_service_charge_money: Money; + declare return_amounts: ReturnAmounts; + declare net_amounts: NetAmounts; + declare source: object; + declare customer_id: string; + declare net_amount_due_money: Money; + + static initModel(sequelize: Sequelize): typeof SquareOrder { + SquareOrder.init( + { + id: { + type: DataTypes.STRING, + primaryKey: true, + allowNull: false, + }, + location_id: { + type: DataTypes.STRING, + allowNull: false, + }, + line_items: { + type: DataTypes.JSONB, + allowNull: false, + }, + created_at: { + type: DataTypes.DATE, + }, + updated_at: { + type: DataTypes.DATE, + }, + state: { + type: DataTypes.STRING, + allowNull: false, + }, + total_tax_money: { + type: DataTypes.JSONB, + allowNull: false, + }, + total_discount_money: { + type: DataTypes.JSONB, + allowNull: false, + }, + total_tip_money: { + type: DataTypes.JSONB, + allowNull: false, + }, + total_money: { + type: DataTypes.JSONB, + allowNull: false, + }, + closed_at: { + type: DataTypes.DATE, + allowNull: false, + }, + tenders: { + type: DataTypes.JSONB, + allowNull: false, + }, + total_service_charge_money: { + type: DataTypes.JSONB, + allowNull: false, + }, + return_amounts: { + type: DataTypes.JSONB, + allowNull: false, + }, + net_amounts: { + type: DataTypes.JSONB, + allowNull: false, + }, + source: { + type: DataTypes.JSONB, + allowNull: false, + }, + customer_id: { + type: DataTypes.STRING, + allowNull: false, + }, + net_amount_due_money: { + type: DataTypes.JSONB, + allowNull: false, + }, + }, + { + sequelize, + }, + ); + return SquareOrder; + } +} diff --git a/database/models/UserAddress.ts b/database/models/UserAddress.ts new file mode 100644 index 00000000..5f31ea39 --- /dev/null +++ b/database/models/UserAddress.ts @@ -0,0 +1,62 @@ +import { CreationOptional, DataTypes, InferAttributes, InferCreationAttributes, Model, Sequelize } from "sequelize"; + +export class UserAddress extends Model, InferCreationAttributes> { + declare id: CreationOptional; + declare user_id: string; + declare country: string; + declare city: string; + declare address_1: string; + declare address_2: string; + declare zip_code: string; + declare created_at: CreationOptional; + declare updated_at: CreationOptional; + + static initModel(sequelize: Sequelize): typeof UserAddress { + UserAddress.init( + { + id: { + type: DataTypes.UUIDV4, + primaryKey: true, + unique: true, + defaultValue: DataTypes.UUIDV4, + }, + user_id: { + type: DataTypes.UUID, + allowNull: false, + }, + country: { + type: DataTypes.STRING, + allowNull: false, + }, + city: { + type: DataTypes.STRING, + allowNull: false, + }, + address_1: { + type: DataTypes.STRING, + allowNull: false, + }, + address_2: { + type: DataTypes.STRING, + allowNull: true, + }, + zip_code: { + type: DataTypes.STRING, + allowNull: false, + }, + created_at: { + type: DataTypes.DATE, + }, + updated_at: { + type: DataTypes.DATE, + }, + }, + { + tableName: "user_address", + sequelize, // passing the `sequelize` instance is required + }, + ); + + return UserAddress; + } +} diff --git a/database/models/UserCompany.ts b/database/models/UserCompany.ts new file mode 100644 index 00000000..7694176f --- /dev/null +++ b/database/models/UserCompany.ts @@ -0,0 +1,41 @@ +import { CreationOptional, DataTypes, InferAttributes, InferCreationAttributes, Model, Sequelize } from "sequelize"; + +export class UserCompany extends Model, InferCreationAttributes> { + declare id: CreationOptional; + declare user_id: string; + declare industry: string; + declare created_at: CreationOptional; + declare updated_at: CreationOptional; + + static initModel(sequelize: Sequelize): typeof UserCompany { + UserCompany.init( + { + id: { + type: DataTypes.UUID, + defaultValue: DataTypes.UUIDV4, + primaryKey: true, + }, + user_id: { + type: DataTypes.UUID, + allowNull: false, + }, + industry: { + type: new DataTypes.STRING(128), + allowNull: false, + }, + created_at: { + type: DataTypes.DATE, + }, + updated_at: { + type: DataTypes.DATE, + }, + }, + { + tableName: "user_company", + sequelize, // passing the `sequelize` instance is required + }, + ); + + return UserCompany; + } +} diff --git a/database/models/UserCompany_GT.ts b/database/models/UserCompany_GT.ts new file mode 100644 index 00000000..8b5fbe35 --- /dev/null +++ b/database/models/UserCompany_GT.ts @@ -0,0 +1,41 @@ +import { CreationOptional, DataTypes, InferAttributes, InferCreationAttributes, Model, Sequelize } from "sequelize"; + +export class UserCompany_GT extends Model, InferCreationAttributes> { + declare id: CreationOptional; + declare user_id: string; + declare NIT: string; + declare created_at: CreationOptional; + declare updated_at: CreationOptional; + + static initModel(sequelize: Sequelize): typeof UserCompany_GT { + UserCompany_GT.init( + { + id: { + type: DataTypes.UUID, + defaultValue: DataTypes.UUIDV4, + primaryKey: true, + }, + user_id: { + type: DataTypes.UUID, + allowNull: false, + }, + NIT: { + type: new DataTypes.STRING(128), + allowNull: true, + }, + created_at: { + type: DataTypes.DATE, + }, + updated_at: { + type: DataTypes.DATE, + }, + }, + { + tableName: "user_company_gt", + sequelize, // passing the `sequelize` instance is required + }, + ); + + return UserCompany_GT; + } +} diff --git a/database/models/UserInfo.ts b/database/models/UserInfo.ts new file mode 100644 index 00000000..441a670c --- /dev/null +++ b/database/models/UserInfo.ts @@ -0,0 +1,47 @@ +import { CreationOptional, DataTypes, InferAttributes, InferCreationAttributes, Model, Sequelize } from "sequelize"; + +export class UserInfo extends Model, InferCreationAttributes> { + declare id: CreationOptional; + declare user_id: string; + declare name: string; + declare lastname: string; + declare created_at: CreationOptional; + declare updated_at: CreationOptional; + + static initModel(sequelize: Sequelize): typeof UserInfo { + UserInfo.init( + { + id: { + type: DataTypes.UUIDV4, + primaryKey: true, + unique: true, + defaultValue: DataTypes.UUIDV4, + }, + user_id: { + type: DataTypes.UUID, + allowNull: false, + }, + name: { + type: new DataTypes.STRING(128), + allowNull: false, + }, + lastname: { + type: new DataTypes.STRING(128), + allowNull: false, + }, + created_at: { + type: DataTypes.DATE, + }, + updated_at: { + type: DataTypes.DATE, + }, + }, + { + tableName: "user_info", + sequelize, // passing the `sequelize` instance is required + }, + ); + + return UserInfo; + } +} diff --git a/database/models/index.ts b/database/models/index.ts index 4ae86315..1ab3aa0d 100644 --- a/database/models/index.ts +++ b/database/models/index.ts @@ -1,12 +1,27 @@ -import type { Sequelize, Model } from "sequelize"; +import type { Sequelize } from "sequelize"; import { ContentExtraction } from "./ContentExtraction"; +import { SquareOrder } from "./SquareOrder"; +import { UserInfo } from "./UserInfo"; +import { UserAddress } from "./UserAddress"; +import { UserCompany } from "./UserCompany"; +import { UserCompany_GT } from "./UserCompany_GT"; -export { ContentExtraction }; +export { ContentExtraction, SquareOrder, UserInfo, UserAddress, UserCompany, UserCompany_GT }; export function initModels(sequelize: Sequelize) { ContentExtraction.initModel(sequelize); + SquareOrder.initModel(sequelize); + UserInfo.initModel(sequelize); + UserAddress.initModel(sequelize); + UserCompany.initModel(sequelize); + UserCompany_GT.initModel(sequelize); return { ContentExtraction, + SquareOrder, + UserInfo, + UserAddress, + UserCompany, + UserCompany_GT, }; } From 8ed84b943008f2b0857860d9f0d4f9d8e78d172c Mon Sep 17 00:00:00 2001 From: netpoe Date: Tue, 5 Mar 2024 12:02:52 -0600 Subject: [PATCH 09/57] feat(chat): messagebird completions API WIP --- app/src/pages/api/chat/openai/completions.ts | 40 +++++++++++++++++++- app/src/pages/api/chat/types.ts | 1 + 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/app/src/pages/api/chat/openai/completions.ts b/app/src/pages/api/chat/openai/completions.ts index e52e0330..65743c62 100644 --- a/app/src/pages/api/chat/openai/completions.ts +++ b/app/src/pages/api/chat/openai/completions.ts @@ -1,4 +1,5 @@ import { NextApiRequest, NextApiResponse } from "next"; +import axios from "axios"; import logger from "providers/logger"; import chat from "providers/chat"; @@ -13,8 +14,25 @@ export default async function Fn(request: NextApiRequest, response: NextApiRespo try { logger.info(`getting chat completion from model ${openai.model}`); - const data: FileAgentRequest = - typeof request.body.body === "string" ? JSON.parse(request.body.body, json.reviver) : request.body.body; + const data: FileAgentRequest = (() => { + if (request.body?.currentMessageMetadata?.source === "messagebird") { + return { + ...request.body, + messages: [ + { + role: "user", + content: "", + }, + ], + }; + } + + if (typeof request.body.body === "string") { + return JSON.parse(request.body.body, json.reviver); + } + + return request.body.body; + })(); const chatCompletion = await openai.client.chat.completions.create({ messages: [ @@ -38,6 +56,24 @@ export default async function Fn(request: NextApiRequest, response: NextApiRespo return; } + if (data.currentMessageMetadata?.source === "messagebird") { + await axios({ + method: "PATCH", + url: "https://api.bird.com/workspaces/305b8974-7995-4878-a7b9-9c426cec8e17/flows/f543bea1-11d9-4893-9ac3-e97ec9e2baca/runs", + headers: { + Authorization: `AccessKey tz8si6wlFuTjOWUPiqDMgr9NV0bKpOrHFaXu`, + "Content-Type": "application/json", + }, + data: { + action: "resume", + resumeKey: "f3561227-7aa8-4d3f-baf8-3759fd2db462", + resumeExtraInput: { + choices, + }, + }, + }); + } + response.status(200).json({ choices }); } catch (error) { logger.error(error); diff --git a/app/src/pages/api/chat/types.ts b/app/src/pages/api/chat/types.ts index 2469a8f3..ca0a69da 100644 --- a/app/src/pages/api/chat/types.ts +++ b/app/src/pages/api/chat/types.ts @@ -11,6 +11,7 @@ export enum APIChatHeaderKeyNames { export type CurrentMessageMetadata = { bucketName?: string; + source?: "messagebird" | "app"; }; export type FileAgentRequest = { From 2ea590f38bfc8f0542dd467def3e2ca7ccdac58f Mon Sep 17 00:00:00 2001 From: netpoe Date: Sun, 10 Mar 2024 14:09:23 -0600 Subject: [PATCH 10/57] feat: openai assistant endpoint WIP --- app/package.json | 2 +- app/src/pages/api/chat/openai/assistant.ts | 164 +++++++++++++++++++ app/src/pages/api/chat/openai/completions.ts | 19 --- app/src/pages/api/chat/types.ts | 3 + app/yarn.lock | 14 +- 5 files changed, 178 insertions(+), 24 deletions(-) create mode 100644 app/src/pages/api/chat/openai/assistant.ts diff --git a/app/package.json b/app/package.json index d743b7b2..516cd83b 100644 --- a/app/package.json +++ b/app/package.json @@ -64,7 +64,7 @@ "near-api-js": "^2.1.4", "next": "12.2.0", "next-i18next": "^8.2.0", - "openai": "^4.3.1", + "openai": "^4.28.4", "react": "^18.2.0", "react-countdown": "^2.3.5", "react-dom": "^18.2.0", diff --git a/app/src/pages/api/chat/openai/assistant.ts b/app/src/pages/api/chat/openai/assistant.ts new file mode 100644 index 00000000..832a93ff --- /dev/null +++ b/app/src/pages/api/chat/openai/assistant.ts @@ -0,0 +1,164 @@ +import { NextApiRequest, NextApiResponse } from "next"; +import { Thread } from "openai/resources/beta/threads/threads"; +import { MessageContentText } from "openai/resources/beta/threads/messages/messages"; + +import logger from "providers/logger"; +import openai from "providers/openai"; +import { ChatLabel } from "context/message/MessageContext.types"; +import { FileAgentRequest } from "../types"; +import json from "providers/json"; +import supabase from "providers/supabase"; + +export default async function Fn(request: NextApiRequest, response: NextApiResponse) { + try { + logger.info(`getting chat assitant from model ${openai.model}`); + + const data: FileAgentRequest = (() => { + if (request.body?.currentMessageMetadata?.source === "messagebird") { + return { + ...request.body, + messages: [ + { + role: "user", + content: "", + }, + ], + }; + } + + if (typeof request.body.body === "string") { + return JSON.parse(request.body.body, json.reviver); + } + + return request.body.body; + })(); + + const user = await supabase.client + .from("user_contact") + .select("id, openai_thread_id, messagebird_participant_id") + .eq("messagebird_participant_id", data.currentMessageMetadata?.messagebird?.participantId); + + const assistant = await openai.client.beta.assistants.retrieve("asst_Ukvy8hXlI6s0uR36XLQO3vrN"); + + let thread: Thread; + + if (!user.error && user.data.length === 0) { + thread = await openai.client.beta.threads.create(); + + const { error } = await supabase.client.from("user_contact").insert({ + messagebird_participant_id: data.currentMessageMetadata?.messagebird?.participantId, + openai_thread_id: thread.id, + }); + + if (error) { + throw new Error(error.message); + } + } else { + thread = await openai.client.beta.threads.retrieve(user.data![0].openai_thread_id); + } + + const message = await openai.client.beta.threads.messages.create(thread.id, { + role: "user", + content: data.currentMessage.content!, + }); + + const run = await openai.client.beta.threads.runs.create(thread.id, { + assistant_id: assistant.id, + instructions: `Eres un asistente que pide información básica para crear una base de datos de proveedores. + +Esta es la información que debes consultar y recolectar una por una (IMPORTANTE que sea una por una) para no abrumar al proveedor: + +Nombre y apellido +Número de Whatsapp +Dirección (insiste amablemente hasta que tengas todos estos datos: país "country", ciudad "city", código postal "zip_code", calle y número "address_1", cómo llegar "address_2") +NIT (Número de Identificación Tributaria) +Categoría (puede ser una de estas: carpintería, plomería, electricista, albañil, ferretería, materiales de construcción, repuestos para carros, carros usados) + +Esta es la información que ya tienes: + +Nombre y apellido: +Número de Whatsapp: +Dirección: +NIT (Número de Facturación): +Categoría: + +`, + }); + + const awaitRun = new Promise((resolve, reject) => { + const interval = setInterval(async () => { + const currentRun = await openai.client.beta.threads.runs.retrieve(thread.id, run.id); + + // this is where we check for identified function_call arguments + if (currentRun.status === "requires_action") { + const requiredAction = currentRun.required_action?.submit_tool_outputs.tool_calls[0]; + + await openai.client.beta.threads.runs.submitToolOutputs(thread.id, run.id, { + tool_outputs: [ + { + tool_call_id: requiredAction!.id, + output: "{success: true}", + }, + ], + }); + + // clearInterval(interval); + + // resolve(currentRun); + } + + if (currentRun.status === "completed") { + clearInterval(interval); + + resolve(currentRun); + } + }, 500); + }); + + await awaitRun; + + const currentRun = await openai.client.beta.threads.runs.retrieve(thread.id, run.id); + + const messages = await openai.client.beta.threads.messages.list(thread.id); + + // const { choices, promises } = chat.processFunctionCalls(messages.data[0].content choices); + + // if (promises.length > 0) { + // const responses = await Promise.all(promises.map((promise) => promise(data.currentMessage, request))); + + // response.status(200).json({ choices: responses }); + + // return; + // } + + response.status(200).json({ + choices: [ + { + message: { + role: "assistant", + content: (messages.data[0].content[0] as MessageContentText).text.value, + label: ChatLabel.chat_completion_success, + type: "text", + }, + }, + ], + }); + } catch (error) { + logger.error(error); + + response.status(500).json({ + error: (error as Error).message, + choices: [ + { + message: { + role: "assistant", + content: "Apologies, I couldn't resolve this request. Try again.", + label: ChatLabel.chat_completion_error, + readOnly: true, + type: "text", + }, + }, + ], + }); + } +} diff --git a/app/src/pages/api/chat/openai/completions.ts b/app/src/pages/api/chat/openai/completions.ts index 65743c62..67fb2416 100644 --- a/app/src/pages/api/chat/openai/completions.ts +++ b/app/src/pages/api/chat/openai/completions.ts @@ -1,5 +1,4 @@ import { NextApiRequest, NextApiResponse } from "next"; -import axios from "axios"; import logger from "providers/logger"; import chat from "providers/chat"; @@ -56,24 +55,6 @@ export default async function Fn(request: NextApiRequest, response: NextApiRespo return; } - if (data.currentMessageMetadata?.source === "messagebird") { - await axios({ - method: "PATCH", - url: "https://api.bird.com/workspaces/305b8974-7995-4878-a7b9-9c426cec8e17/flows/f543bea1-11d9-4893-9ac3-e97ec9e2baca/runs", - headers: { - Authorization: `AccessKey tz8si6wlFuTjOWUPiqDMgr9NV0bKpOrHFaXu`, - "Content-Type": "application/json", - }, - data: { - action: "resume", - resumeKey: "f3561227-7aa8-4d3f-baf8-3759fd2db462", - resumeExtraInput: { - choices, - }, - }, - }); - } - response.status(200).json({ choices }); } catch (error) { logger.error(error); diff --git a/app/src/pages/api/chat/types.ts b/app/src/pages/api/chat/types.ts index ca0a69da..8011125b 100644 --- a/app/src/pages/api/chat/types.ts +++ b/app/src/pages/api/chat/types.ts @@ -12,6 +12,9 @@ export enum APIChatHeaderKeyNames { export type CurrentMessageMetadata = { bucketName?: string; source?: "messagebird" | "app"; + messagebird?: { + participantId?: string; + }; }; export type FileAgentRequest = { diff --git a/app/yarn.lock b/app/yarn.lock index d2527b3b..8291cf74 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -5481,10 +5481,10 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -openai@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/openai/-/openai-4.3.1.tgz#800dd4bfb7dc764a956042197896725f39b6a08d" - integrity sha512-64iI2LbJLk0Ss4Nv5IrdGFe6ALNnKlMuXoGuH525bJYxdupJfDCAtra/Jigex1z8it0U82M87tR2TMGU+HYeFQ== +openai@^4.28.4: + version "4.28.4" + resolved "https://registry.yarnpkg.com/openai/-/openai-4.28.4.tgz#d4bf1f53a89ef151bf066ef284489e12e7dd1657" + integrity sha512-RNIwx4MT/F0zyizGcwS+bXKLzJ8QE9IOyigDG/ttnwB220d58bYjYFp0qjvGwEFBO6+pvFVIDABZPGDl46RFsg== dependencies: "@types/node" "^18.11.18" "@types/node-fetch" "^2.6.4" @@ -5494,6 +5494,7 @@ openai@^4.3.1: form-data-encoder "1.7.2" formdata-node "^4.3.2" node-fetch "^2.6.7" + web-streams-polyfill "^3.2.1" ora@^3.4.0: version "3.4.0" @@ -7299,6 +7300,11 @@ web-streams-polyfill@4.0.0-beta.3: resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38" integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug== +web-streams-polyfill@^3.2.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" From b273c2ae292c8601d571d7893a10443e54ea0e5e Mon Sep 17 00:00:00 2001 From: netpoe Date: Sun, 10 Mar 2024 19:17:03 -0600 Subject: [PATCH 11/57] feat: inserts full name into user_info --- app/src/pages/api/chat/openai/assistant.ts | 50 +++++++---------- app/src/providers/chat/chat.types.ts | 11 ++++ .../functions/database/insert_full_name.ts | 39 ++++++++++++++ app/src/providers/chat/index.ts | 2 + .../chat/process-function-tool-calls.ts | 53 +++++++++++++++++++ 5 files changed, 125 insertions(+), 30 deletions(-) create mode 100644 app/src/providers/chat/functions/database/insert_full_name.ts create mode 100644 app/src/providers/chat/process-function-tool-calls.ts diff --git a/app/src/pages/api/chat/openai/assistant.ts b/app/src/pages/api/chat/openai/assistant.ts index 832a93ff..b3c1bd26 100644 --- a/app/src/pages/api/chat/openai/assistant.ts +++ b/app/src/pages/api/chat/openai/assistant.ts @@ -8,10 +8,11 @@ import { ChatLabel } from "context/message/MessageContext.types"; import { FileAgentRequest } from "../types"; import json from "providers/json"; import supabase from "providers/supabase"; +import chat from "providers/chat"; export default async function Fn(request: NextApiRequest, response: NextApiResponse) { try { - logger.info(`getting chat assitant from model ${openai.model}`); + logger.info(`calling chat assitant from ID asst_Ukvy8hXlI6s0uR36XLQO3vrN`); const data: FileAgentRequest = (() => { if (request.body?.currentMessageMetadata?.source === "messagebird") { @@ -57,7 +58,7 @@ export default async function Fn(request: NextApiRequest, response: NextApiRespo thread = await openai.client.beta.threads.retrieve(user.data![0].openai_thread_id); } - const message = await openai.client.beta.threads.messages.create(thread.id, { + await openai.client.beta.threads.messages.create(thread.id, { role: "user", content: data.currentMessage.content!, }); @@ -85,39 +86,28 @@ Categoría: `, }); - const awaitRun = new Promise((resolve, reject) => { - const interval = setInterval(async () => { - const currentRun = await openai.client.beta.threads.runs.retrieve(thread.id, run.id); + const runStatusCompleted = () => + new Promise((resolve, reject) => { + const interval = setInterval(async () => { + const currentRun = await openai.client.beta.threads.runs.retrieve(thread.id, run.id); - // this is where we check for identified function_call arguments - if (currentRun.status === "requires_action") { - const requiredAction = currentRun.required_action?.submit_tool_outputs.tool_calls[0]; + if (currentRun.status === "requires_action") { + const requiredActions = currentRun.required_action?.submit_tool_outputs.tool_calls; - await openai.client.beta.threads.runs.submitToolOutputs(thread.id, run.id, { - tool_outputs: [ - { - tool_call_id: requiredAction!.id, - output: "{success: true}", - }, - ], - }); + await chat.processFunctionToolCalls(requiredActions!, data, request, thread, run); + } - // clearInterval(interval); + if (currentRun.status === "completed") { + clearInterval(interval); - // resolve(currentRun); - } - - if (currentRun.status === "completed") { - clearInterval(interval); - - resolve(currentRun); - } - }, 500); - }); + resolve(currentRun); + } + }, 500); + }); - await awaitRun; + await runStatusCompleted(); - const currentRun = await openai.client.beta.threads.runs.retrieve(thread.id, run.id); + // const currentRun = await openai.client.beta.threads.runs.retrieve(thread.id, run.id); const messages = await openai.client.beta.threads.messages.list(thread.id); @@ -146,7 +136,7 @@ Categoría: } catch (error) { logger.error(error); - response.status(500).json({ + response.status(200).json({ error: (error as Error).message, choices: [ { diff --git a/app/src/providers/chat/chat.types.ts b/app/src/providers/chat/chat.types.ts index d4e769c9..6887b8fa 100644 --- a/app/src/providers/chat/chat.types.ts +++ b/app/src/providers/chat/chat.types.ts @@ -5,6 +5,8 @@ import { ChatCompletionMessage } from "openai/resources/chat"; import { ChatContextMessage } from "context/message/MessageContext.types"; export enum FunctionCallName { + // Database + get_full_name = "get_full_name", // Nanonets extract_content_from_pdf_file = "extract_content_from_pdf_file", // Dropbox @@ -15,11 +17,20 @@ export enum FunctionCallName { get_square_payments = "get_square_payments", } +export type FunctionCallToolActionOutput = { + success: boolean; +}; + export type ChatCompletionChoice = OpenAI.Chat.ChatCompletion.Choice & { message: ChatCompletionMessage & Pick; }; +export type get_full_name_args = { + name?: string; + lastname?: string; +}; + export type extract_content_from_pdf_file_args = { file_name: string; }; diff --git a/app/src/providers/chat/functions/database/insert_full_name.ts b/app/src/providers/chat/functions/database/insert_full_name.ts new file mode 100644 index 00000000..16e0c4ae --- /dev/null +++ b/app/src/providers/chat/functions/database/insert_full_name.ts @@ -0,0 +1,39 @@ +import { FileAgentRequest } from "api/chat/types"; +import { NextApiRequest } from "next"; + +import { FunctionCallToolActionOutput, get_full_name_args } from "providers/chat/chat.types"; +import logger from "providers/logger"; +import supabase from "providers/supabase"; + +const insert_full_name = async ( + args: get_full_name_args, + agentRequest: FileAgentRequest, + _request: NextApiRequest, +): Promise => { + try { + const { name, lastname } = args; + + // keep track of a potential user setting different names from same number + const { error } = await supabase.client.from("user_info").insert({ + name, + lastname, + messagebird_participant_id: agentRequest.currentMessageMetadata?.messagebird?.participantId, + }); + + if (error) { + throw new Error(error.message); + } + + return { + success: true, + }; + } catch (error) { + logger.error(error); + + return { + success: false, + }; + } +}; + +export default insert_full_name; diff --git a/app/src/providers/chat/index.ts b/app/src/providers/chat/index.ts index 44954fa2..a9e7c4fd 100644 --- a/app/src/providers/chat/index.ts +++ b/app/src/providers/chat/index.ts @@ -1,7 +1,9 @@ import processFunctionCalls from "./process-function-calls"; +import processFunctionToolCalls from "./process-function-tool-calls"; import transformGoogleAIPredictionResponseToStandardChoice from "./normalize-googleai-prediction-response"; export default { processFunctionCalls, + processFunctionToolCalls, transformGoogleAIPredictionResponseToStandardChoice, }; diff --git a/app/src/providers/chat/process-function-tool-calls.ts b/app/src/providers/chat/process-function-tool-calls.ts new file mode 100644 index 00000000..3723a5b3 --- /dev/null +++ b/app/src/providers/chat/process-function-tool-calls.ts @@ -0,0 +1,53 @@ +import { FileAgentRequest } from "api/chat/types"; +import { NextApiRequest } from "next"; +import { RequiredActionFunctionToolCall, Run } from "openai/resources/beta/threads/runs/runs"; +import { Thread } from "openai/resources/beta/threads/threads"; + +import openai from "providers/openai"; + +import { FunctionCallName, get_full_name_args, FunctionCallToolActionOutput } from "./chat.types"; +import insert_full_name from "./functions/database/insert_full_name"; + +const functions: Record< + FunctionCallName, + ( + args: get_full_name_args, + agentRequest: FileAgentRequest, + request: NextApiRequest, + ) => Promise +> = { + [FunctionCallName.get_full_name]: ( + args: get_full_name_args, + agentRequest: FileAgentRequest, + request: NextApiRequest, + ) => insert_full_name(args, agentRequest, request), +}; + +const processFunctionToolCalls = ( + actions: RequiredActionFunctionToolCall[], + agentRequest: FileAgentRequest, + request: NextApiRequest, + thread: Thread, + run: Run, +) => { + actions.forEach(async (action) => { + const { arguments: args, name } = action.function; + + const output = await functions[name as FunctionCallName]( + typeof args === "object" ? args : (JSON.parse(args) as any), + agentRequest, + request, + ); + + await openai.client.beta.threads.runs.submitToolOutputs(thread.id, run.id, { + tool_outputs: [ + { + tool_call_id: action.id, + output: JSON.stringify(output), + }, + ], + }); + }); +}; + +export default processFunctionToolCalls; From 597a5b07dac71c2e914c6b26aa0d76ec8ee44e76 Mon Sep 17 00:00:00 2001 From: netpoe Date: Tue, 12 Mar 2024 12:29:25 -0600 Subject: [PATCH 12/57] fix: openai update ts errors --- app/src/context/message/MessageContext.types.ts | 5 +++-- app/src/pages/api/chat/openai/assistant.ts | 8 +++++--- app/src/providers/chat/chat.types.ts | 7 +++++-- .../dropbox/generate_dropbox_e_signature_request.ts | 1 + .../chat/functions/square/get_square_locations.ts | 2 ++ .../chat/functions/square/get_square_payments.ts | 1 + .../chat/functions/square/search_square_orders.ts | 1 + .../chat/normalize-googleai-prediction-response.ts | 3 +++ app/src/providers/chat/process-function-tool-calls.ts | 8 ++++---- app/src/providers/googleai/parse-messages.ts | 2 +- app/src/ui/dropzone/message-file-type/MessageFileType.tsx | 2 +- app/src/ui/dropzone/message-text-type/MessageTextType.tsx | 6 +++--- 12 files changed, 30 insertions(+), 16 deletions(-) diff --git a/app/src/context/message/MessageContext.types.ts b/app/src/context/message/MessageContext.types.ts index 83f92bdd..2ba35723 100644 --- a/app/src/context/message/MessageContext.types.ts +++ b/app/src/context/message/MessageContext.types.ts @@ -1,4 +1,4 @@ -import { ChatCompletionMessage } from "openai/resources/chat"; +import { ChatCompletionMessageParam } from "openai/resources/chat"; import { Dispatch, ReactNode, SetStateAction } from "react"; import { SquareGetLocationsMetadata } from "providers/chat/functions/square/square.types"; @@ -27,7 +27,7 @@ export enum ChatLabel { chat_completion_error = "chat:completion:error", } -export type ChatMessageBase = ChatCompletionMessage & { +export type ChatMessageBase = ChatCompletionMessageParam & { id?: string; beforeContentComponent?: ReactNode; afterContentComponent?: ReactNode; @@ -36,6 +36,7 @@ export type ChatMessageBase = ChatCompletionMessage & { type?: "text" | "file"; label?: DropboxESignLabel | ChatLabel | SquareAPILabel; metadata?: SquareGetLocationsMetadata; + role: "user" | "assistant"; }; export type TextChatCompletionMessage = { diff --git a/app/src/pages/api/chat/openai/assistant.ts b/app/src/pages/api/chat/openai/assistant.ts index b3c1bd26..d9d09c97 100644 --- a/app/src/pages/api/chat/openai/assistant.ts +++ b/app/src/pages/api/chat/openai/assistant.ts @@ -60,11 +60,12 @@ export default async function Fn(request: NextApiRequest, response: NextApiRespo await openai.client.beta.threads.messages.create(thread.id, { role: "user", - content: data.currentMessage.content!, + content: data.currentMessage.content as string, }); const run = await openai.client.beta.threads.runs.create(thread.id, { assistant_id: assistant.id, + // TODO pass the data that's already been collected instructions: `Eres un asistente que pide información básica para crear una base de datos de proveedores. Esta es la información que debes consultar y recolectar una por una (IMPORTANTE que sea una por una) para no abrumar al proveedor: @@ -87,10 +88,11 @@ Categoría: }); const runStatusCompleted = () => - new Promise((resolve, reject) => { + new Promise((resolve) => { const interval = setInterval(async () => { const currentRun = await openai.client.beta.threads.runs.retrieve(thread.id, run.id); + // TODO data gets inserted multiple times, we need to wait somehow if (currentRun.status === "requires_action") { const requiredActions = currentRun.required_action?.submit_tool_outputs.tool_calls; @@ -102,7 +104,7 @@ Categoría: resolve(currentRun); } - }, 500); + }, 1000); }); await runStatusCompleted(); diff --git a/app/src/providers/chat/chat.types.ts b/app/src/providers/chat/chat.types.ts index 6887b8fa..a877304e 100644 --- a/app/src/providers/chat/chat.types.ts +++ b/app/src/providers/chat/chat.types.ts @@ -5,8 +5,6 @@ import { ChatCompletionMessage } from "openai/resources/chat"; import { ChatContextMessage } from "context/message/MessageContext.types"; export enum FunctionCallName { - // Database - get_full_name = "get_full_name", // Nanonets extract_content_from_pdf_file = "extract_content_from_pdf_file", // Dropbox @@ -17,6 +15,11 @@ export enum FunctionCallName { get_square_payments = "get_square_payments", } +export enum FunctionToolCallName { + // Database + get_full_name = "get_full_name", +} + export type FunctionCallToolActionOutput = { success: boolean; }; diff --git a/app/src/providers/chat/functions/dropbox/generate_dropbox_e_signature_request.ts b/app/src/providers/chat/functions/dropbox/generate_dropbox_e_signature_request.ts index f44dc8c8..39b1b792 100644 --- a/app/src/providers/chat/functions/dropbox/generate_dropbox_e_signature_request.ts +++ b/app/src/providers/chat/functions/dropbox/generate_dropbox_e_signature_request.ts @@ -45,6 +45,7 @@ const generate_dropbox_e_signature_request = async ( const result = await dropbox.createEmbeddedSignatureRequest(accessToken, embeddedSignatureRequestArgs, fileUrls); return { + logprobs: null, finish_reason: "function_call", index: 0, message: { diff --git a/app/src/providers/chat/functions/square/get_square_locations.ts b/app/src/providers/chat/functions/square/get_square_locations.ts index 4c5dc283..14956506 100644 --- a/app/src/providers/chat/functions/square/get_square_locations.ts +++ b/app/src/providers/chat/functions/square/get_square_locations.ts @@ -30,6 +30,7 @@ const get_square_locations = async ( if (!response.result.locations) { return { + logprobs: null, finish_reason: "function_call", index: 0, message: { @@ -42,6 +43,7 @@ const get_square_locations = async ( } return { + logprobs: null, finish_reason: "function_call", index: 0, message: { diff --git a/app/src/providers/chat/functions/square/get_square_payments.ts b/app/src/providers/chat/functions/square/get_square_payments.ts index 45bbba22..6d478492 100644 --- a/app/src/providers/chat/functions/square/get_square_payments.ts +++ b/app/src/providers/chat/functions/square/get_square_payments.ts @@ -47,6 +47,7 @@ const get_square_payments = async ( if (!response.result.payments) { return { + logprobs: null, finish_reason: "function_call", index: 0, message: { diff --git a/app/src/providers/chat/functions/square/search_square_orders.ts b/app/src/providers/chat/functions/square/search_square_orders.ts index bcf89e9c..005db2cf 100644 --- a/app/src/providers/chat/functions/square/search_square_orders.ts +++ b/app/src/providers/chat/functions/square/search_square_orders.ts @@ -50,6 +50,7 @@ const search_square_orders = async ( if (!response.result.orders) { return { + logprobs: null, finish_reason: "function_call", index: 0, message: { diff --git a/app/src/providers/chat/normalize-googleai-prediction-response.ts b/app/src/providers/chat/normalize-googleai-prediction-response.ts index 39c4bd73..0d718799 100644 --- a/app/src/providers/chat/normalize-googleai-prediction-response.ts +++ b/app/src/providers/chat/normalize-googleai-prediction-response.ts @@ -18,6 +18,7 @@ const transformGoogleAIPredictionResponseToStandardChoice = ( } const choice: OpenAI.Chat.ChatCompletion.Choice = { + logprobs: null, index: 0, finish_reason: "stop", message: { @@ -39,6 +40,7 @@ const transformGoogleAIPredictionResponseToStandardChoice = ( const { function_call } = JSON.parse(content); const choice: OpenAI.Chat.ChatCompletion.Choice = { + logprobs: null, index: 0, finish_reason: "function_call", message: { @@ -58,6 +60,7 @@ const transformGoogleAIPredictionResponseToStandardChoice = ( logger.error("Content is not a function call. Continue with default content."); const choice: OpenAI.Chat.ChatCompletion.Choice = { + logprobs: null, index: 0, finish_reason: "stop", message: { diff --git a/app/src/providers/chat/process-function-tool-calls.ts b/app/src/providers/chat/process-function-tool-calls.ts index 3723a5b3..58a99698 100644 --- a/app/src/providers/chat/process-function-tool-calls.ts +++ b/app/src/providers/chat/process-function-tool-calls.ts @@ -5,18 +5,18 @@ import { Thread } from "openai/resources/beta/threads/threads"; import openai from "providers/openai"; -import { FunctionCallName, get_full_name_args, FunctionCallToolActionOutput } from "./chat.types"; +import { get_full_name_args, FunctionCallToolActionOutput, FunctionToolCallName } from "./chat.types"; import insert_full_name from "./functions/database/insert_full_name"; const functions: Record< - FunctionCallName, + FunctionToolCallName, ( args: get_full_name_args, agentRequest: FileAgentRequest, request: NextApiRequest, ) => Promise > = { - [FunctionCallName.get_full_name]: ( + [FunctionToolCallName.get_full_name]: ( args: get_full_name_args, agentRequest: FileAgentRequest, request: NextApiRequest, @@ -33,7 +33,7 @@ const processFunctionToolCalls = ( actions.forEach(async (action) => { const { arguments: args, name } = action.function; - const output = await functions[name as FunctionCallName]( + const output = await functions[name as FunctionToolCallName]( typeof args === "object" ? args : (JSON.parse(args) as any), agentRequest, request, diff --git a/app/src/providers/googleai/parse-messages.ts b/app/src/providers/googleai/parse-messages.ts index 55629a6e..322f6267 100644 --- a/app/src/providers/googleai/parse-messages.ts +++ b/app/src/providers/googleai/parse-messages.ts @@ -21,7 +21,7 @@ const convertFileAgentRequestMessagesToValidPrompt = ( const inputMessages: Array<{ author: string; content: string }> = []; messages.reduce((acc, curr, index, arr) => { - inputMessages.push(curr); + inputMessages.push(curr as { author: string; content: string }); const next = arr[index + 1]; diff --git a/app/src/ui/dropzone/message-file-type/MessageFileType.tsx b/app/src/ui/dropzone/message-file-type/MessageFileType.tsx index f444b87f..e3df2d45 100644 --- a/app/src/ui/dropzone/message-file-type/MessageFileType.tsx +++ b/app/src/ui/dropzone/message-file-type/MessageFileType.tsx @@ -14,7 +14,7 @@ import { MessageFilTypeOptionsProps, MessageFileTypeProps } from "./MessageFileT export const MessageFileType = ({ message, className }: MessageFileTypeProps) => { const isSimulationEnabled = message.role === "assistant" && !message.hasInnerHtml; - const { simulationEnded } = useTypingSimulation(message.content, isSimulationEnabled, `#${message.id}`); + const { simulationEnded } = useTypingSimulation(message.content as string, isSimulationEnabled, `#${message.id}`); const progress: number = useSubscription(0, message.file.progressObservable); diff --git a/app/src/ui/dropzone/message-text-type/MessageTextType.tsx b/app/src/ui/dropzone/message-text-type/MessageTextType.tsx index 220086b0..d2ebca98 100644 --- a/app/src/ui/dropzone/message-text-type/MessageTextType.tsx +++ b/app/src/ui/dropzone/message-text-type/MessageTextType.tsx @@ -40,12 +40,12 @@ const marked = new Marked( export const MessageTextType: React.FC = ({ message, className }) => { const isSimulationEnabled = message.role === "assistant" && !message.hasInnerHtml; - const { simulationEnded } = useTypingSimulation(message.content, isSimulationEnabled, `#${message.id}`); + const { simulationEnded } = useTypingSimulation(message.content as string, isSimulationEnabled, `#${message.id}`); const formContext = useFormContext(); const onClickEdit = () => { - formContext.setFieldValue(FormFieldNames.message, message.content!); + formContext.setFieldValue(FormFieldNames.message, message.content as string); }; const onClickSearchSquareOrders = () => { @@ -106,7 +106,7 @@ Tell me what's the most sold product:`,
) : ( From b268291f0cb9a0e075c5ef98369fa6e31418a7a6 Mon Sep 17 00:00:00 2001 From: netpoe Date: Tue, 12 Mar 2024 13:24:47 -0600 Subject: [PATCH 13/57] feat: yipiti theme --- .../chat/dropbox-chat/DropboxChat.module.scss | 32 ++-- app/src/app/chat/dropbox-chat/DropboxChat.tsx | 59 ++++---- .../context/theme/ThemeContextController.tsx | 4 +- app/src/layouts/chat-layout/ChatLayout.tsx | 7 +- app/src/pages/api/chat/openai/assistant.ts | 14 +- app/src/theme/globals.scss | 1 + app/src/theme/variants/_yipiti-light.scss | 137 ++++++++++++++++++ app/src/ui/fileagent/navbar/Navbar.tsx | 35 ++--- .../ui/theme-selector/ThemeSelector.types.ts | 2 +- 9 files changed, 204 insertions(+), 87 deletions(-) create mode 100644 app/src/theme/variants/_yipiti-light.scss diff --git a/app/src/app/chat/dropbox-chat/DropboxChat.module.scss b/app/src/app/chat/dropbox-chat/DropboxChat.module.scss index ca6d6271..7b4df6d8 100644 --- a/app/src/app/chat/dropbox-chat/DropboxChat.module.scss +++ b/app/src/app/chat/dropbox-chat/DropboxChat.module.scss @@ -5,21 +5,23 @@ @mixin width { @include atLargeTablet { max-width: 50vw; - margin: 0 auto; } } .dropbox-chat { position: relative; display: block; - min-height: 100vh; + height: 100vh; + padding-top: $navbar-height * 1.5; + padding-left: $navbar-height * 1.5; + background-color: var(--color-background); &__textarea { @include atLargeTablet { padding: $space-l; padding-top: 0; } - position: fixed; + position: absolute; right: 0; bottom: 0; left: 0; @@ -27,7 +29,7 @@ border-top: 1px solid var(--color-horizontal-line-background); padding: $space-default; padding-top: 0; - background-color: var(--color-background); + background-color: white; &--actions { @include width; @@ -42,6 +44,11 @@ &--card { @include width; + background-color: var(--color-background); + } + + &--card-content { + display: flex; } &--card-actions { @@ -55,6 +62,9 @@ @include atLargeTablet { margin-left: $space-default; } + display: flex; + flex-direction: column; + justify-content: flex-end; margin-left: auto; } } @@ -63,19 +73,23 @@ min-height: 63px; padding: $space-default !important; font-size: $input-font-size !important; - background-color: var(--color-market-card-background); + background-color: var(--color-input-background); transition: height 0.2s ease-in-out; } } &__messages { @include atLargeTablet { - padding-top: $navbar-height; padding-bottom: 270px; } - padding-top: $navbar-height-mobile; + + @extend .z-depth-1; + position: relative; + height: calc(100vh - $navbar-height * 1.5); + border-top-left-radius: $border-radius-card; padding-bottom: 280px; overflow-y: scroll; + background-color: white; &--item { border-bottom: 1px solid var(--color-horizontal-line-background); @@ -86,10 +100,6 @@ padding-top: $space-m; } - &:nth-child(odd) { - background-color: var(--color-background-contrast); - } - &:last-child { border-bottom: none; } diff --git a/app/src/app/chat/dropbox-chat/DropboxChat.tsx b/app/src/app/chat/dropbox-chat/DropboxChat.tsx index 95cd3c3e..14a82dba 100644 --- a/app/src/app/chat/dropbox-chat/DropboxChat.tsx +++ b/app/src/app/chat/dropbox-chat/DropboxChat.tsx @@ -5,7 +5,6 @@ import { useRouter } from "next/router"; import { Card } from "ui/card/Card"; import { Button } from "ui/button/Button"; -import { Dropzone } from "ui/dropzone/Dropzone"; import { useMessageContext } from "context/message/useMessageContext"; import { ChatContextMessage } from "context/message/MessageContext.types"; import { MessageFileType } from "ui/dropzone/message-file-type/MessageFileType"; @@ -89,39 +88,35 @@ export const DropboxChat: React.FC = ({ className, onSubmit })
{messages.map((message) => getMessageTypeComponent(message))} -
-
-
- - +
+
+ + +
+ + + +
+ +
+
+
- - - - - - - -
- -
-
-
); diff --git a/app/src/context/theme/ThemeContextController.tsx b/app/src/context/theme/ThemeContextController.tsx index cb8b8c48..1ae52fff 100644 --- a/app/src/context/theme/ThemeContextController.tsx +++ b/app/src/context/theme/ThemeContextController.tsx @@ -7,10 +7,10 @@ import { LocalStorageKeys } from "hooks/useLocalStorage/useLocalStorage.types"; import { ThemeContext } from "./ThemeContext"; import { ThemeContextControllerProps } from "./ThemeContext.types"; -const themes: Theme[] = ["fileagent", "fileagent-dark"]; +const themes: Theme[] = ["fileagent", "fileagent-dark", "yipiti-light", "yipiti-dark"]; export const ThemeContextController = ({ children }: ThemeContextControllerProps) => { - const [theme, setTheme] = useState("fileagent"); + const [theme, setTheme] = useState("yipiti-light"); const localStorage = useLocalStorage(); diff --git a/app/src/layouts/chat-layout/ChatLayout.tsx b/app/src/layouts/chat-layout/ChatLayout.tsx index 5fcab9fa..3186a314 100644 --- a/app/src/layouts/chat-layout/ChatLayout.tsx +++ b/app/src/layouts/chat-layout/ChatLayout.tsx @@ -10,7 +10,6 @@ import { FormContextController } from "context/form/FormContextController"; import { Navbar } from "ui/fileagent/navbar/Navbar"; import { AuthorizationContextController } from "context/authorization/AuthorizationContextController"; import { ThemeContextController } from "context/theme/ThemeContextController"; -import { ChatSidebar } from "ui/fileagent/chat-sidebar/ChatSidebar"; import { ChatSidebarContextController } from "context/chat-sidebar/ChatSidebarContextController"; import { Sheet } from "ui/shadcn/sheet/Sheet"; @@ -43,11 +42,7 @@ export const ChatLayout: React.FC = ({ children }) => { - - - - {children} - + {children}
diff --git a/app/src/pages/api/chat/openai/assistant.ts b/app/src/pages/api/chat/openai/assistant.ts index d9d09c97..51aa2430 100644 --- a/app/src/pages/api/chat/openai/assistant.ts +++ b/app/src/pages/api/chat/openai/assistant.ts @@ -16,15 +16,7 @@ export default async function Fn(request: NextApiRequest, response: NextApiRespo const data: FileAgentRequest = (() => { if (request.body?.currentMessageMetadata?.source === "messagebird") { - return { - ...request.body, - messages: [ - { - role: "user", - content: "", - }, - ], - }; + return request.body; } if (typeof request.body.body === "string") { @@ -39,8 +31,6 @@ export default async function Fn(request: NextApiRequest, response: NextApiRespo .select("id, openai_thread_id, messagebird_participant_id") .eq("messagebird_participant_id", data.currentMessageMetadata?.messagebird?.participantId); - const assistant = await openai.client.beta.assistants.retrieve("asst_Ukvy8hXlI6s0uR36XLQO3vrN"); - let thread: Thread; if (!user.error && user.data.length === 0) { @@ -63,6 +53,8 @@ export default async function Fn(request: NextApiRequest, response: NextApiRespo content: data.currentMessage.content as string, }); + const assistant = await openai.client.beta.assistants.retrieve("asst_Ukvy8hXlI6s0uR36XLQO3vrN"); + const run = await openai.client.beta.threads.runs.create(thread.id, { assistant_id: assistant.id, // TODO pass the data that's already been collected diff --git a/app/src/theme/globals.scss b/app/src/theme/globals.scss index e2c1abfd..f56fcfae 100644 --- a/app/src/theme/globals.scss +++ b/app/src/theme/globals.scss @@ -53,3 +53,4 @@ code { @import "src/ui/dropzone/overrides"; @import "src/theme/variants/fileagent"; @import "src/theme/variants/fileagent-dark"; +@import "src/theme/variants/yipiti-light"; diff --git a/app/src/theme/variants/_yipiti-light.scss b/app/src/theme/variants/_yipiti-light.scss new file mode 100644 index 00000000..464d346a --- /dev/null +++ b/app/src/theme/variants/_yipiti-light.scss @@ -0,0 +1,137 @@ +body[data-theme="fileagent"] { + // Status colors + --color-status-info: #5356fc; + --color-status-info-light: rgba(83, 86, 252, 0.7); + --color-status-info-lighter: rgba(83, 86, 252, 0.4); + --color-status-success: #3dd598; + --color-status-success-light: #d6fff5; + --color-status-success-lighter: #e6fff9; + --color-status-warning: rgb(255, 215, 75); + --color-status-warning-light: #fffdb8; + --color-status-warning-lighter: #fffeeb; + --color-status-critical: #bd2d00; + --color-status-critical-light: #ffe2e0; + --color-status-critical-lighter: #fff5f5; + --color-status-unknown: #f4f6f8; + + //Gray dark + --color-white: #fffae9; + --color-black: #161b1c; + --color-dark-11: #222529; + --color-dark-10: #2c3035; + --color-dark-9: #2c3035; + --color-dark-8: #40404a; + --color-dark-7: #5b5b65; + --color-dark-6: #70707c; + --color-dark-5: #8a8a98; + --color-dark-4: #a9a9b7; + --color-dark-3: #d0d0da; + --color-dark-2: #f5f5ff; + --color-dark-1: #ffffff; + + // Brand + --color-primary: #437e40; + --color-primary-shade-mid: #529b4e; + --color-primary-shade-low: #5aa856; + --color-secondary: #ff803e; + --color-secondary-shade-mid: #f7c352; + --color-secondary-shade-low: #f7c352; + + // Background + --color-background: #f1f6f0; + --color-background-contrast: #f3f2f2; + + // Sidebar + --color-sidebar-item: var(--color-white); + --color-sidebar-divider: var(--color-dark-8); + + // Navbar + --color-navbar-logo: var(--color-primary); + --color-navbar-background: #f1f6f0; + + // Button + --color-button-primary: var(--color-primary); + --color-button-primary-text: var(--color-white); + --color-button-primary-hover: var(--color-primary); + --color-button-primary-hover-text: var(--color-white); + --color-button-primary-disabled: var(--color-dark-5); + --color-button-secondary: var(--color-dark-8); + --color-button-secondary-text: var(--color-dark-8); + --color-button-secondary-hover: var(--color-dark-10); + --color-button-secondary-hover-text: var(--color-white); + --color-button-status-critical: var(--color-status-critical); + --color-button-status-critical-text: var(--color-status-critical); + --color-button-status-critical-hover: var(--color-status-critical); + --color-button-status-critical-hover-text: var(--color-white); + + // Button outlined + --color-button-outlined-info: #ffd74b; + --color-button-outlined-info-text: #ffd74b; + --color-button-outlined-disabled: #5b5b65; + --color-button-outlined-disabled-text: #8a8a98; + + //Theme Selector + --color-theme-button-light: #ffffff00; + --color-theme-button-dark: #ffffff40; + --color-theme-button-divider: var(--color-background-contrast); + + // Typography + --color-typography-headline-1: var(--color-black); + --color-typography-headline-2: var(--color-black); + --color-typography-headline-3: var(--color-black); + --color-typography-headline-4: var(--color-black); + --color-typography-headline-5: var(--color-black); + --color-typography-headline-6: var(--color-black); + --color-typography-text: var(--color-black); + --color-typography-text-bold: var(--color-black); + --color-typography-subtitle: var(--color-dark-5); + --color-typography-button-label: var(--color-black); + --color-typography-mini-button-label: var(--color-black); + --color-typography-description: var(--color-dark-9); + --color-typography-mini-description: var(--color-dark-8); + --color-typography-link: var(--color-primary); + + // Tab + --color-tab-navigation-border: var(--color-dark-7); + --color-tab-item-default: var(--color-dark-7); + --color-tab-item-active: var(--color-white); + + // Market Card + --color-market-card-background: var(--color-background); + --color-market-card-background-contrast: var(--color-background); + --color-market-card-title: #fff; + --color-market-card-stat: #b1b1b1; + + // Market Fees Card + --color-market-fees-card-background: #ffd74b; + --color-market-fees-card-text: #fff; + + // Horizontal Line + --color-horizontal-line-background: var(--color-background-contrast); + + // Data Visualization colors + --color-value-increase: #00d3a1; + --color-value-increase-bright: #00bb8e; + --color-value-decrease: #ff7c35; + --color-value-decrease-bright: #e76823; + + // Forms + --color-input-text: var(--color-typography-text); + --color-input-text-disabled: var(--color-typography-description); + --color-input-background: white; + --color-input-background-disabled: var(--color-background-contrast); + --color-input-border: var(--color-black); + --color-input-label: rgba(255, 255, 255, 0.7); + --color-input-placeholder: var(--color-typography-description); + + // Dropzone + --color-dropzone-border: var(--color-typography-description); + --color-dropzone-border-hover: var(--color-primary); + + // Chat Sidebar + --color-chat-sidebar-background: var(--color-background-contrast); + --color-chat-sidebar-background-hover: var(--color-background); + + // Table + --color-table-background: var(--color-background-contrast); +} diff --git a/app/src/ui/fileagent/navbar/Navbar.tsx b/app/src/ui/fileagent/navbar/Navbar.tsx index 30af34e2..09c475f3 100644 --- a/app/src/ui/fileagent/navbar/Navbar.tsx +++ b/app/src/ui/fileagent/navbar/Navbar.tsx @@ -4,9 +4,6 @@ import { Typography } from "ui/typography/Typography"; import { Grid } from "ui/grid/Grid"; import { FileAgentLogo } from "ui/icons/FileAgentLogo"; import { useThemeContext } from "context/theme/useThemeContext"; -import { useChatSidebarContext } from "context/chat-sidebar/useChatSidebarContext"; -import { Icon } from "ui/icon/Icon"; -import { SheetTrigger } from "ui/shadcn/sheet/Sheet"; import { NavbarProps } from "./Navbar.types"; import styles from "./Navbar.module.scss"; @@ -14,8 +11,6 @@ import styles from "./Navbar.module.scss"; export const Navbar: React.FC = ({ className }) => { const { theme } = useThemeContext(); - const chatSidebarContext = useChatSidebarContext(); - return (
@@ -23,28 +18,20 @@ export const Navbar: React.FC = ({ className }) => {
- - - +
+ + + +
+
+ + + +
- -
- - - -
-
- - - -
-
+
diff --git a/app/src/ui/theme-selector/ThemeSelector.types.ts b/app/src/ui/theme-selector/ThemeSelector.types.ts index fe6fb6fd..3a05df34 100644 --- a/app/src/ui/theme-selector/ThemeSelector.types.ts +++ b/app/src/ui/theme-selector/ThemeSelector.types.ts @@ -6,4 +6,4 @@ export type ThemeSelectorProps = { fixed?: boolean; }; -export type Theme = "fileagent" | "fileagent-dark"; +export type Theme = "fileagent" | "fileagent-dark" | "yipiti-light" | "yipiti-dark"; From d133b311c239c71d57fbab29da36a11e6d45da07 Mon Sep 17 00:00:00 2001 From: netpoe Date: Tue, 12 Mar 2024 14:46:17 -0600 Subject: [PATCH 14/57] feat(assistant): keeps a single user session --- .../chat/dropbox-chat/DropboxChat.module.scss | 2 +- .../dropbox-chat/DropboxChatContainer.tsx | 4 ++ .../AuthorizationContext.types.ts | 2 + .../AuthorizationContextController.tsx | 7 +++ .../context/form/FormContextController.tsx | 20 +++++++- .../context/message/MessageContext.types.ts | 8 +++- .../useLocalStorage/useLocalStorage.types.ts | 1 + app/src/hooks/useRoutes/useRoutes.tsx | 2 + app/src/pages/api/chat/openai/assistant.ts | 48 +++++++++++++------ app/src/pages/api/chat/types.ts | 3 ++ .../message-text-type/MessageTextType.tsx | 5 +- app/src/ui/fileagent/navbar/Navbar.tsx | 4 +- 12 files changed, 86 insertions(+), 20 deletions(-) diff --git a/app/src/app/chat/dropbox-chat/DropboxChat.module.scss b/app/src/app/chat/dropbox-chat/DropboxChat.module.scss index 7b4df6d8..102eae3f 100644 --- a/app/src/app/chat/dropbox-chat/DropboxChat.module.scss +++ b/app/src/app/chat/dropbox-chat/DropboxChat.module.scss @@ -21,7 +21,7 @@ padding: $space-l; padding-top: 0; } - position: absolute; + position: fixed; right: 0; bottom: 0; left: 0; diff --git a/app/src/app/chat/dropbox-chat/DropboxChatContainer.tsx b/app/src/app/chat/dropbox-chat/DropboxChatContainer.tsx index 1de077f5..a2618c6d 100644 --- a/app/src/app/chat/dropbox-chat/DropboxChatContainer.tsx +++ b/app/src/app/chat/dropbox-chat/DropboxChatContainer.tsx @@ -25,6 +25,10 @@ export const DropboxChatContainer = () => { }, []); const onSubmit = async (values: ChatFormValues) => { + if (!values.message) { + return; + } + formContext.submit(values); }; diff --git a/app/src/context/authorization/AuthorizationContext.types.ts b/app/src/context/authorization/AuthorizationContext.types.ts index 5070f1e4..964ab127 100644 --- a/app/src/context/authorization/AuthorizationContext.types.ts +++ b/app/src/context/authorization/AuthorizationContext.types.ts @@ -21,7 +21,9 @@ export type AuthorizationContextType = { authItems: Array; revokeAuth: (key: OAuthTokenStoreKey) => void; getGuestId: () => string | null; + getOpenAISessionID: () => string | undefined; generateGuestId: () => string; + setOpenAISessionID: (threadId: string) => void; verifyDropboxESignAuthorization: () => Promise; verifySquareAPIAuthorization: () => Promise; }; diff --git a/app/src/context/authorization/AuthorizationContextController.tsx b/app/src/context/authorization/AuthorizationContextController.tsx index c47af215..ffb00cf8 100644 --- a/app/src/context/authorization/AuthorizationContextController.tsx +++ b/app/src/context/authorization/AuthorizationContextController.tsx @@ -23,6 +23,10 @@ export const AuthorizationContextController = ({ children }: AuthorizationContex const ls = useLocalStorage(); + const setOpenAISessionID = (threadId: string) => { + ls.set(LocalStorageKeys.openAISessionID, threadId); + }; + const generateGuestId = () => { const id = `guest-${uuidv4().slice(0, 4)}`; @@ -32,6 +36,7 @@ export const AuthorizationContextController = ({ children }: AuthorizationContex }; const getGuestId = () => ls.get(LocalStorageKeys.guestId); + const getOpenAISessionID = () => ls.get(LocalStorageKeys.openAISessionID) || undefined; const revokeAuth = (key: OAuthTokenStoreKey) => { Cookies.remove(key); @@ -98,9 +103,11 @@ export const AuthorizationContextController = ({ children }: AuthorizationContex verifySquareAPIAuthorization, accessTokens, getGuestId, + getOpenAISessionID, generateGuestId, authItems, revokeAuth, + setOpenAISessionID, }; return {children}; diff --git a/app/src/context/form/FormContextController.tsx b/app/src/context/form/FormContextController.tsx index f35ab2bc..f88d691a 100644 --- a/app/src/context/form/FormContextController.tsx +++ b/app/src/context/form/FormContextController.tsx @@ -8,7 +8,11 @@ import { useRouter } from "next/router"; import { useMessageContext } from "context/message/useMessageContext"; import { ChatFormValues, FormFieldNames } from "app/chat/dropbox-chat/DropboxChat.types"; -import { ChatContextMessage, TextChatCompletionMessage } from "context/message/MessageContext.types"; +import { + ChatContextMessage, + OpenAIAssistantMetadata, + TextChatCompletionMessage, +} from "context/message/MessageContext.types"; import { useRoutes } from "hooks/useRoutes/useRoutes"; import { useAuthorizationContext } from "context/authorization/useAuthorizationContext"; import { useFileContext } from "context/file/useFileContext"; @@ -64,6 +68,12 @@ export const FormContextController = ({ children }: FormContextControllerProps) setCurrentMessageMetadata({ bucketName: fileContext.getStorageBucketName() }); }, []); + useEffect(() => { + if (authContext.getOpenAISessionID()) { + setCurrentMessageMetadata((prev) => ({ ...prev, openai: { threadId: authContext.getOpenAISessionID() } })); + } + }, []); + const setFieldValue = (field: string, text: string) => { form?.mutators.setValue(field, text); @@ -137,7 +147,7 @@ export const FormContextController = ({ children }: FormContextControllerProps) }; const result = await (process.env.NEXT_PUBLIC_CHAT_AI_API === "openai" - ? axios.post(routes.api.chat.openai.completionsAPI(), options) + ? axios.post(routes.api.chat.openai.assistantsAPI(), options) : axios.post(routes.api.chat.googleai.completionsAPI(), options)); console.log(result); @@ -145,6 +155,12 @@ export const FormContextController = ({ children }: FormContextControllerProps) messageContext.deleteMessage(loadingMessage.id!); messageContext.appendMessage({ ...result.data.choices[0].message } as TextChatCompletionMessage); + + const openAIThreadID = (result.data.choices[0].message.metadata as OpenAIAssistantMetadata)?.openai?.threadId; + + if (openAIThreadID) { + authContext.setOpenAISessionID(openAIThreadID!); + } } catch (error) { console.log(error); diff --git a/app/src/context/message/MessageContext.types.ts b/app/src/context/message/MessageContext.types.ts index 2ba35723..b1f88f30 100644 --- a/app/src/context/message/MessageContext.types.ts +++ b/app/src/context/message/MessageContext.types.ts @@ -27,6 +27,12 @@ export enum ChatLabel { chat_completion_error = "chat:completion:error", } +export type OpenAIAssistantMetadata = { + openai?: { + threadId?: string; + }; +}; + export type ChatMessageBase = ChatCompletionMessageParam & { id?: string; beforeContentComponent?: ReactNode; @@ -35,7 +41,7 @@ export type ChatMessageBase = ChatCompletionMessageParam & { readOnly?: boolean; type?: "text" | "file"; label?: DropboxESignLabel | ChatLabel | SquareAPILabel; - metadata?: SquareGetLocationsMetadata; + metadata?: SquareGetLocationsMetadata | OpenAIAssistantMetadata; role: "user" | "assistant"; }; diff --git a/app/src/hooks/useLocalStorage/useLocalStorage.types.ts b/app/src/hooks/useLocalStorage/useLocalStorage.types.ts index 8bb21d64..e412848d 100644 --- a/app/src/hooks/useLocalStorage/useLocalStorage.types.ts +++ b/app/src/hooks/useLocalStorage/useLocalStorage.types.ts @@ -3,4 +3,5 @@ export enum LocalStorageKeys { threads = "threads", messages = "messages", theme = "theme", + openAISessionID = "openAISessionID", } diff --git a/app/src/hooks/useRoutes/useRoutes.tsx b/app/src/hooks/useRoutes/useRoutes.tsx index 16fbc7eb..dd13a079 100644 --- a/app/src/hooks/useRoutes/useRoutes.tsx +++ b/app/src/hooks/useRoutes/useRoutes.tsx @@ -14,6 +14,7 @@ type RouteMap = { dropboxESign: () => string; openai: { completionsAPI: () => string; + assistantsAPI: () => string; }; googleai: { completionsAPI: () => string; @@ -47,6 +48,7 @@ export const routes: RouteMap = { dropboxESign: () => `${process.env.NEXT_PUBLIC_ORIGIN}/api/chat/dropbox-e-sign`, openai: { completionsAPI: () => `${process.env.NEXT_PUBLIC_ORIGIN}/api/chat/openai/completions`, + assistantsAPI: () => `${process.env.NEXT_PUBLIC_ORIGIN}/api/chat/openai/assistant`, }, googleai: { completionsAPI: () => `${process.env.NEXT_PUBLIC_ORIGIN}/api/chat/googleai/completions`, diff --git a/app/src/pages/api/chat/openai/assistant.ts b/app/src/pages/api/chat/openai/assistant.ts index 51aa2430..30234192 100644 --- a/app/src/pages/api/chat/openai/assistant.ts +++ b/app/src/pages/api/chat/openai/assistant.ts @@ -7,8 +7,9 @@ import openai from "providers/openai"; import { ChatLabel } from "context/message/MessageContext.types"; import { FileAgentRequest } from "../types"; import json from "providers/json"; -import supabase from "providers/supabase"; import chat from "providers/chat"; +import { ChatCompletionChoice } from "providers/chat/chat.types"; +import sequelize from "providers/sequelize"; export default async function Fn(request: NextApiRequest, response: NextApiResponse) { try { @@ -26,26 +27,40 @@ export default async function Fn(request: NextApiRequest, response: NextApiRespo return request.body.body; })(); - const user = await supabase.client - .from("user_contact") - .select("id, openai_thread_id, messagebird_participant_id") - .eq("messagebird_participant_id", data.currentMessageMetadata?.messagebird?.participantId); + const { UserSession } = await sequelize.load(); + + let userSession; + + if (data.currentMessageMetadata?.messagebird?.participantId) { + userSession = await UserSession.findOne({ + where: { + messagebird_participant_id: data.currentMessageMetadata?.messagebird?.participantId, + }, + }); + } else if (data.currentMessageMetadata?.openai?.threadId) { + userSession = await UserSession.findOne({ + where: { + openai_thread_id: data.currentMessageMetadata?.openai?.threadId, + }, + }); + } else { + userSession = UserSession.build(); + } let thread: Thread; - if (!user.error && user.data.length === 0) { + if (!userSession?.openai_thread_id) { thread = await openai.client.beta.threads.create(); - const { error } = await supabase.client.from("user_contact").insert({ - messagebird_participant_id: data.currentMessageMetadata?.messagebird?.participantId, - openai_thread_id: thread.id, - }); + userSession?.set("openai_thread_id", thread.id); - if (error) { - throw new Error(error.message); + if (data.currentMessageMetadata?.messagebird?.participantId) { + userSession?.set("messagebird_participant_id", data.currentMessageMetadata?.messagebird?.participantId); } + + await userSession?.save(); } else { - thread = await openai.client.beta.threads.retrieve(user.data![0].openai_thread_id); + thread = await openai.client.beta.threads.retrieve(userSession.openai_thread_id); } await openai.client.beta.threads.messages.create(thread.id, { @@ -123,10 +138,15 @@ Categoría: content: (messages.data[0].content[0] as MessageContentText).text.value, label: ChatLabel.chat_completion_success, type: "text", + metadata: { + openai: { + threadId: thread.id, + }, + }, }, }, ], - }); + } as { choices: ChatCompletionChoice[] }); } catch (error) { logger.error(error); diff --git a/app/src/pages/api/chat/types.ts b/app/src/pages/api/chat/types.ts index 8011125b..3a13ca70 100644 --- a/app/src/pages/api/chat/types.ts +++ b/app/src/pages/api/chat/types.ts @@ -15,6 +15,9 @@ export type CurrentMessageMetadata = { messagebird?: { participantId?: string; }; + openai?: { + threadId?: string; + }; }; export type FileAgentRequest = { diff --git a/app/src/ui/dropzone/message-text-type/MessageTextType.tsx b/app/src/ui/dropzone/message-text-type/MessageTextType.tsx index d2ebca98..d54c5dd2 100644 --- a/app/src/ui/dropzone/message-text-type/MessageTextType.tsx +++ b/app/src/ui/dropzone/message-text-type/MessageTextType.tsx @@ -12,6 +12,7 @@ import { useFormContext } from "context/form/useFormContext"; import { FormFieldNames } from "app/chat/dropbox-chat/DropboxChat.types"; import { DropboxESignLabel, SquareAPILabel } from "context/message/MessageContext.types"; import date from "providers/date"; +import { SquareGetLocationsMetadata } from "providers/chat/functions/square/square.types"; import { MessageTextTypeProps } from "./MessageTextType.types"; import styles from "./MessageTextType.module.scss"; @@ -52,7 +53,9 @@ export const MessageTextType: React.FC = ({ message, class formContext.setFieldValue( FormFieldNames.message, `Search my Square orders of ${date.now().format("MMMM YYYY")}, for location id: ${ - message.metadata?.locationIds ? message.metadata?.locationIds[0] : "LOCATION_ID" + (message.metadata as SquareGetLocationsMetadata)?.locationIds + ? (message.metadata as SquareGetLocationsMetadata)?.locationIds[0] + : "LOCATION_ID" } Tell me what's the most sold product:`, diff --git a/app/src/ui/fileagent/navbar/Navbar.tsx b/app/src/ui/fileagent/navbar/Navbar.tsx index 09c475f3..8d1516f8 100644 --- a/app/src/ui/fileagent/navbar/Navbar.tsx +++ b/app/src/ui/fileagent/navbar/Navbar.tsx @@ -31,7 +31,9 @@ export const Navbar: React.FC = ({ className }) => {
- + +
+
From a885491f9a37bd3969133b8c9364b84b1f39a8a3 Mon Sep 17 00:00:00 2001 From: netpoe Date: Tue, 12 Mar 2024 14:46:43 -0600 Subject: [PATCH 15/57] chore: renames to user_session --- ...231013033650-create-content_extractions.js | 14 +++-- ...231017160215-create-table-square_orders.js | 20 ++++--- ...14-rename-table_orders-to-square_orders.js | 16 ----- .../20240305170703-create-table_user_info.js | 39 ++++++++---- ...0240305172419-create-table_user_address.js | 25 ++++++-- ...0240305174854-create-table_user_company.js | 24 ++++++-- ...0305174900-create-table_user_company_gt.js | 24 ++++++-- ...0240310173106-create-table_user_session.js | 51 ++++++++++++++++ database/models/User.ts | 34 +++++++++++ database/models/UserInfo.ts | 5 ++ database/models/UserSession.ts | 59 +++++++++++++++++++ database/models/index.ts | 6 +- 12 files changed, 255 insertions(+), 62 deletions(-) delete mode 100644 database/migrations/20231017164014-rename-table_orders-to-square_orders.js create mode 100644 database/migrations/20240310173106-create-table_user_session.js create mode 100644 database/models/User.ts create mode 100644 database/models/UserSession.ts diff --git a/database/migrations/20231013033650-create-content_extractions.js b/database/migrations/20231013033650-create-content_extractions.js index 9bf00205..74a0cbc6 100644 --- a/database/migrations/20231013033650-create-content_extractions.js +++ b/database/migrations/20231013033650-create-content_extractions.js @@ -22,13 +22,15 @@ module.exports = { field: "content", allowNull: false, }, - createdAt: { - type: DataTypes.DATE, - field: "created_at", + created_at: { + type: Sequelize.DATE, + allowNull: false, + defaultValue: Sequelize.literal("CURRENT_TIMESTAMP"), }, - updatedAt: { - type: DataTypes.DATE, - field: "updated_at", + updated_at: { + type: Sequelize.DATE, + allowNull: false, + defaultValue: Sequelize.literal("CURRENT_TIMESTAMP"), }, }); }, diff --git a/database/migrations/20231017160215-create-table-square_orders.js b/database/migrations/20231017160215-create-table-square_orders.js index f653545b..5f159bae 100644 --- a/database/migrations/20231017160215-create-table-square_orders.js +++ b/database/migrations/20231017160215-create-table-square_orders.js @@ -1,7 +1,7 @@ const DataTypes = require("sequelize").DataTypes; module.exports = { up: async (queryInterface, Sequelize) => { - await queryInterface.createTable("orders", { + await queryInterface.createTable("square_orders", { id: { type: DataTypes.STRING, primaryKey: true, @@ -73,17 +73,19 @@ module.exports = { type: DataTypes.JSONB, allowNull: false, }, - createdAt: { - type: DataTypes.DATE, - field: "created_at", + created_at: { + type: Sequelize.DATE, + allowNull: false, + defaultValue: Sequelize.literal("CURRENT_TIMESTAMP"), }, - updatedAt: { - type: DataTypes.DATE, - field: "updated_at", + updated_at: { + type: Sequelize.DATE, + allowNull: false, + defaultValue: Sequelize.literal("CURRENT_TIMESTAMP"), }, }); }, down: async (queryInterface, Sequelize) => { - await queryInterface.dropTable("orders"); + await queryInterface.dropTable("square_orders"); }, -}; \ No newline at end of file +}; diff --git a/database/migrations/20231017164014-rename-table_orders-to-square_orders.js b/database/migrations/20231017164014-rename-table_orders-to-square_orders.js deleted file mode 100644 index e8d0b954..00000000 --- a/database/migrations/20231017164014-rename-table_orders-to-square_orders.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; - -module.exports = { - async up(queryInterface, Sequelize) { - await queryInterface.renameTable("orders", "square_orders"); - }, - - async down(queryInterface, Sequelize) { - /** - * Add reverting commands here. - * - * Example: - * await queryInterface.dropTable('users'); - */ - }, -}; diff --git a/database/migrations/20240305170703-create-table_user_info.js b/database/migrations/20240305170703-create-table_user_info.js index 4c97fc5c..114e7c17 100644 --- a/database/migrations/20240305170703-create-table_user_info.js +++ b/database/migrations/20240305170703-create-table_user_info.js @@ -1,33 +1,48 @@ -const { DataTypes } = require("sequelize"); - /** @type {import('sequelize-cli').Migration} */ module.exports = { async up(queryInterface, Sequelize) { await queryInterface.createTable("user_info", { id: { - type: DataTypes.UUIDV4, - allowNull: false, + type: Sequelize.UUID, primaryKey: true, + unique: true, + allowNull: false, + defaultValue: Sequelize.literal("gen_random_uuid()"), }, user_id: { - type: Sequelize.STRING, - allowNull: false, + type: Sequelize.UUID, + allowNull: true, + references: { + model: { + tableName: "users", + schema: "auth", + }, + key: "id", + }, + onUpdate: "CASCADE", + onDelete: "CASCADE", }, name: { - type: DataTypes.STRING, + type: Sequelize.STRING, allowNull: false, }, lastname: { - type: DataTypes.INTEGER, + type: Sequelize.STRING, allowNull: false, }, - createdAt: { - type: DataTypes.DATE, + messagebird_participant_id: { + type: Sequelize.STRING, + allowNull: true, + }, + created_at: { + type: Sequelize.DATE, allowNull: false, + defaultValue: Sequelize.literal("CURRENT_TIMESTAMP"), }, - updatedAt: { - type: DataTypes.DATE, + updated_at: { + type: Sequelize.DATE, allowNull: false, + defaultValue: Sequelize.literal("CURRENT_TIMESTAMP"), }, }); }, diff --git a/database/migrations/20240305172419-create-table_user_address.js b/database/migrations/20240305172419-create-table_user_address.js index 6fab8436..f2d745e0 100644 --- a/database/migrations/20240305172419-create-table_user_address.js +++ b/database/migrations/20240305172419-create-table_user_address.js @@ -4,13 +4,24 @@ module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.createTable("user_address", { id: { - type: Sequelize.UUIDV4, - allowNull: false, + type: Sequelize.UUID, primaryKey: true, + unique: true, + allowNull: false, + defaultValue: Sequelize.literal("gen_random_uuid()"), }, user_id: { - type: Sequelize.STRING, - allowNull: false, + type: Sequelize.UUID, + allowNull: true, + references: { + model: { + tableName: "users", + schema: "auth", + }, + key: "id", + }, + onUpdate: "CASCADE", + onDelete: "CASCADE", }, country: { type: Sequelize.STRING, @@ -33,12 +44,14 @@ module.exports = { allowNull: false, }, created_at: { - allowNull: false, type: Sequelize.DATE, + allowNull: false, + defaultValue: Sequelize.literal("CURRENT_TIMESTAMP"), }, updated_at: { - allowNull: false, type: Sequelize.DATE, + allowNull: false, + defaultValue: Sequelize.literal("CURRENT_TIMESTAMP"), }, }); }, diff --git a/database/migrations/20240305174854-create-table_user_company.js b/database/migrations/20240305174854-create-table_user_company.js index 1a1631ce..a0b4bf8b 100644 --- a/database/migrations/20240305174854-create-table_user_company.js +++ b/database/migrations/20240305174854-create-table_user_company.js @@ -4,26 +4,38 @@ module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.createTable("user_company", { id: { - allowNull: false, - primaryKey: true, type: Sequelize.UUID, - defaultValue: Sequelize.UUIDV4, + primaryKey: true, + unique: true, + allowNull: false, + defaultValue: Sequelize.literal("gen_random_uuid()"), }, user_id: { type: Sequelize.UUID, - allowNull: false, + allowNull: true, + references: { + model: { + tableName: "users", + schema: "auth", + }, + key: "id", + }, + onUpdate: "CASCADE", + onDelete: "CASCADE", }, industry: { type: Sequelize.STRING(128), allowNull: false, }, created_at: { - allowNull: false, type: Sequelize.DATE, + allowNull: false, + defaultValue: Sequelize.literal("CURRENT_TIMESTAMP"), }, updated_at: { - allowNull: false, type: Sequelize.DATE, + allowNull: false, + defaultValue: Sequelize.literal("CURRENT_TIMESTAMP"), }, }); }, diff --git a/database/migrations/20240305174900-create-table_user_company_gt.js b/database/migrations/20240305174900-create-table_user_company_gt.js index bd3f9f9d..189a95eb 100644 --- a/database/migrations/20240305174900-create-table_user_company_gt.js +++ b/database/migrations/20240305174900-create-table_user_company_gt.js @@ -4,26 +4,38 @@ module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.createTable("user_company_gt", { id: { - allowNull: false, - primaryKey: true, type: Sequelize.UUID, - defaultValue: Sequelize.UUIDV4, + primaryKey: true, + unique: true, + allowNull: false, + defaultValue: Sequelize.literal("gen_random_uuid()"), }, user_id: { type: Sequelize.UUID, - allowNull: false, + allowNull: true, + references: { + model: { + tableName: "users", + schema: "auth", + }, + key: "id", + }, + onUpdate: "CASCADE", + onDelete: "CASCADE", }, NIT: { type: Sequelize.STRING(128), allowNull: false, }, created_at: { - allowNull: false, type: Sequelize.DATE, + allowNull: false, + defaultValue: Sequelize.literal("CURRENT_TIMESTAMP"), }, updated_at: { - allowNull: false, type: Sequelize.DATE, + allowNull: false, + defaultValue: Sequelize.literal("CURRENT_TIMESTAMP"), }, }); }, diff --git a/database/migrations/20240310173106-create-table_user_session.js b/database/migrations/20240310173106-create-table_user_session.js new file mode 100644 index 00000000..aab8dba5 --- /dev/null +++ b/database/migrations/20240310173106-create-table_user_session.js @@ -0,0 +1,51 @@ +"use strict"; + +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.createTable("user_session", { + id: { + type: Sequelize.UUID, + primaryKey: true, + unique: true, + allowNull: false, + defaultValue: Sequelize.literal("gen_random_uuid()"), + }, + user_id: { + type: Sequelize.UUID, + allowNull: true, + references: { + model: { + tableName: "users", + schema: "auth", + }, + key: "id", + }, + onUpdate: "CASCADE", + onDelete: "CASCADE", + }, + messagebird_participant_id: { + type: Sequelize.STRING, + allowNull: true, + }, + openai_thread_id: { + type: Sequelize.STRING, + allowNull: true, + }, + created_at: { + type: Sequelize.DATE, + allowNull: false, + defaultValue: Sequelize.literal("CURRENT_TIMESTAMP"), + }, + updated_at: { + type: Sequelize.DATE, + allowNull: false, + defaultValue: Sequelize.literal("CURRENT_TIMESTAMP"), + }, + }); + }, + + async down(queryInterface, Sequelize) { + await queryInterface.dropTable("user_session"); + }, +}; diff --git a/database/models/User.ts b/database/models/User.ts new file mode 100644 index 00000000..13bacc39 --- /dev/null +++ b/database/models/User.ts @@ -0,0 +1,34 @@ +import { CreationOptional, DataTypes, InferCreationAttributes, InferAttributes, Model, Sequelize } from "sequelize"; + +export class User extends Model, InferCreationAttributes> { + declare id: CreationOptional; + declare createdAt: CreationOptional; + declare updatedAt: CreationOptional; + + static initModel(sequelize: Sequelize): typeof User { + User.init( + { + id: { + type: DataTypes.UUID, + primaryKey: true, + allowNull: false, + unique: true, + defaultValue: DataTypes.UUIDV4, + }, + createdAt: { + type: DataTypes.DATE, + }, + updatedAt: { + type: DataTypes.DATE, + }, + }, + { + schema: "auth", + tableName: "users", + sequelize, + }, + ); + + return User; + } +} diff --git a/database/models/UserInfo.ts b/database/models/UserInfo.ts index 441a670c..580c5454 100644 --- a/database/models/UserInfo.ts +++ b/database/models/UserInfo.ts @@ -5,6 +5,7 @@ export class UserInfo extends Model, InferCreationAttr declare user_id: string; declare name: string; declare lastname: string; + declare messagebird_participant_id: string; declare created_at: CreationOptional; declare updated_at: CreationOptional; @@ -29,6 +30,10 @@ export class UserInfo extends Model, InferCreationAttr type: new DataTypes.STRING(128), allowNull: false, }, + messagebird_participant_id: { + type: DataTypes.STRING, + allowNull: true, + }, created_at: { type: DataTypes.DATE, }, diff --git a/database/models/UserSession.ts b/database/models/UserSession.ts new file mode 100644 index 00000000..175ee100 --- /dev/null +++ b/database/models/UserSession.ts @@ -0,0 +1,59 @@ +import { + Association, + CreationOptional, + DataTypes, + InferAttributes, + InferCreationAttributes, + Model, + Sequelize, +} from "sequelize"; +import { User } from "./User"; + +export class UserSession extends Model, InferCreationAttributes> { + declare id: CreationOptional; + declare user_id: string; + declare messagebird_participant_id: string; + declare openai_thread_id: string; + declare created_at: CreationOptional; + declare updated_at: CreationOptional; + + declare static associations: { + user: Association; + }; + + static initModel(sequelize: Sequelize): typeof UserSession { + UserSession.init( + { + id: { + type: DataTypes.UUID, + defaultValue: DataTypes.UUIDV4, + primaryKey: true, + }, + user_id: { + type: DataTypes.UUID, + allowNull: true, + }, + openai_thread_id: { + type: DataTypes.STRING, + allowNull: true, + }, + messagebird_participant_id: { + type: DataTypes.STRING, + allowNull: true, + }, + created_at: { + type: DataTypes.DATE, + }, + updated_at: { + type: DataTypes.DATE, + }, + }, + { + tableName: "user_session", + sequelize, // passing the `sequelize` instance is required + }, + ); + + return UserSession; + } +} diff --git a/database/models/index.ts b/database/models/index.ts index 1ab3aa0d..11ae1c70 100644 --- a/database/models/index.ts +++ b/database/models/index.ts @@ -5,8 +5,10 @@ import { UserInfo } from "./UserInfo"; import { UserAddress } from "./UserAddress"; import { UserCompany } from "./UserCompany"; import { UserCompany_GT } from "./UserCompany_GT"; +import { UserSession } from "./UserSession"; +import { User } from "./User"; -export { ContentExtraction, SquareOrder, UserInfo, UserAddress, UserCompany, UserCompany_GT }; +export { ContentExtraction, SquareOrder, UserInfo, UserAddress, UserCompany, UserCompany_GT, UserSession }; export function initModels(sequelize: Sequelize) { ContentExtraction.initModel(sequelize); @@ -15,6 +17,7 @@ export function initModels(sequelize: Sequelize) { UserAddress.initModel(sequelize); UserCompany.initModel(sequelize); UserCompany_GT.initModel(sequelize); + UserSession.initModel(sequelize); return { ContentExtraction, @@ -23,5 +26,6 @@ export function initModels(sequelize: Sequelize) { UserAddress, UserCompany, UserCompany_GT, + UserSession, }; } From 70b5e4a92fb938b86208430eb668d02ede215bf7 Mon Sep 17 00:00:00 2001 From: netpoe Date: Tue, 12 Mar 2024 15:39:20 -0600 Subject: [PATCH 16/57] feat: stores user_info from browser session --- .../chat/dropbox-chat/DropboxChat.module.scss | 12 +++++++++--- app/src/app/chat/dropbox-chat/DropboxChat.tsx | 5 +++-- .../context/form/FormContextController.tsx | 2 +- app/src/pages/api/chat/openai/assistant.ts | 14 ++------------ .../functions/database/insert_full_name.ts | 19 +++++++++---------- .../20240305170703-create-table_user_info.js | 2 +- database/models/UserInfo.ts | 6 +++--- 7 files changed, 28 insertions(+), 32 deletions(-) diff --git a/app/src/app/chat/dropbox-chat/DropboxChat.module.scss b/app/src/app/chat/dropbox-chat/DropboxChat.module.scss index 102eae3f..7226e685 100644 --- a/app/src/app/chat/dropbox-chat/DropboxChat.module.scss +++ b/app/src/app/chat/dropbox-chat/DropboxChat.module.scss @@ -18,8 +18,8 @@ &__textarea { @include atLargeTablet { - padding: $space-l; padding-top: 0; + padding-left: $navbar-height * 1.5; } position: fixed; right: 0; @@ -27,9 +27,15 @@ left: 0; width: 100%; border-top: 1px solid var(--color-horizontal-line-background); - padding: $space-default; padding-top: 0; - background-color: white; + background-color: var(--color-background); + + > div { + @extend .z-depth-1; + padding: $space-default; + padding-bottom: $space-l; + background-color: white; + } &--actions { @include width; diff --git a/app/src/app/chat/dropbox-chat/DropboxChat.tsx b/app/src/app/chat/dropbox-chat/DropboxChat.tsx index 14a82dba..2dff3c23 100644 --- a/app/src/app/chat/dropbox-chat/DropboxChat.tsx +++ b/app/src/app/chat/dropbox-chat/DropboxChat.tsx @@ -88,8 +88,9 @@ export const DropboxChat: React.FC = ({ className, onSubmit })
{messages.map((message) => getMessageTypeComponent(message))} - -
+
+
+
-
-
- - {/* Success state */} - - - - {label} updated succesfully - - - - - {/* Error state */} - - - - {errorMessage} - - - - - - -
-
{children}
-
- -
-
-
-
-
- ) -} - -export default AccountInfo diff --git a/storeagentai-storefront/src/modules/account/components/account-nav/index.tsx b/storeagentai-storefront/src/modules/account/components/account-nav/index.tsx deleted file mode 100644 index 70bb29ae..00000000 --- a/storeagentai-storefront/src/modules/account/components/account-nav/index.tsx +++ /dev/null @@ -1,167 +0,0 @@ -"use client" - -import { Customer } from "@medusajs/medusa" -import { clx } from "@medusajs/ui" -import { ArrowRightOnRectangle } from "@medusajs/icons" -import { useParams, usePathname } from "next/navigation" - -import ChevronDown from "@modules/common/icons/chevron-down" -import { signOut } from "@modules/account/actions" -import User from "@modules/common/icons/user" -import MapPin from "@modules/common/icons/map-pin" -import Package from "@modules/common/icons/package" -import LocalizedClientLink from "@modules/common/components/localized-client-link" - -const AccountNav = ({ - customer, -}: { - customer: Omit | null -}) => { - const route = usePathname() - const { countryCode } = useParams() - - const handleLogout = async () => { - await signOut() - } - - return ( -
-
- {route !== `/${countryCode}/account` ? ( - - <> - - Account - - - ) : ( - <> -
- Hello {customer?.first_name} -
-
-
    -
  • - - <> -
    - - Profile -
    - - -
    -
  • -
  • - - <> -
    - - Addresses -
    - - -
    -
  • -
  • - -
    - - Orders -
    - -
    -
  • -
  • - -
  • -
-
- - )} -
-
-
-
-

Account

-
-
-
    -
  • - - Overview - -
  • -
  • - - Profile - -
  • -
  • - - Addresses - -
  • -
  • - - Orders - -
  • -
  • - -
  • -
-
-
-
-
- ) -} - -type AccountNavLinkProps = { - href: string - route: string - children: React.ReactNode -} - -const AccountNavLink = ({ href, route, children }: AccountNavLinkProps) => { - const { countryCode }: { countryCode: string } = useParams() - - const active = route.split(countryCode)[1] === href - return ( - - {children} - - ) -} - -export default AccountNav diff --git a/storeagentai-storefront/src/modules/account/components/address-book/index.tsx b/storeagentai-storefront/src/modules/account/components/address-book/index.tsx deleted file mode 100644 index c1d84e75..00000000 --- a/storeagentai-storefront/src/modules/account/components/address-book/index.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Customer, Region } from "@medusajs/medusa" -import React from "react" - -import AddAddress from "../address-card/add-address" -import EditAddress from "../address-card/edit-address-modal" - -type AddressBookProps = { - customer: Omit - region: Region -} - -const AddressBook: React.FC = ({ customer, region }) => { - return ( -
-
- - {customer.shipping_addresses.map((address) => { - return ( - - ) - })} -
-
- ) -} - -export default AddressBook diff --git a/storeagentai-storefront/src/modules/account/components/address-card/add-address.tsx b/storeagentai-storefront/src/modules/account/components/address-card/add-address.tsx deleted file mode 100644 index 5a8c4873..00000000 --- a/storeagentai-storefront/src/modules/account/components/address-card/add-address.tsx +++ /dev/null @@ -1,142 +0,0 @@ -"use client" - -import { Region } from "@medusajs/medusa" -import { Plus } from "@medusajs/icons" -import { Button, Heading } from "@medusajs/ui" -import { useEffect, useState } from "react" -import { useFormState } from "react-dom" - -import useToggleState from "@lib/hooks/use-toggle-state" -import CountrySelect from "@modules/checkout/components/country-select" -import Input from "@modules/common/components/input" -import Modal from "@modules/common/components/modal" -import { SubmitButton } from "@modules/checkout/components/submit-button" -import { addCustomerShippingAddress } from "@modules/account/actions" - -const AddAddress = ({ region }: { region: Region }) => { - const [successState, setSuccessState] = useState(false) - const { state, open, close: closeModal } = useToggleState(false) - - const [formState, formAction] = useFormState(addCustomerShippingAddress, { - success: false, - error: null, - }) - - const close = () => { - setSuccessState(false) - closeModal() - } - - useEffect(() => { - if (successState) { - close() - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [successState]) - - useEffect(() => { - if (formState.success) { - setSuccessState(true) - } - }, [formState]) - - return ( - <> - - - - - Add address - - - -
-
- - -
- - - -
- - -
- - - -
- {formState.error && ( -
- {formState.error} -
- )} -
- -
- - Save -
-
- -
- - ) -} - -export default AddAddress diff --git a/storeagentai-storefront/src/modules/account/components/address-card/edit-address-modal.tsx b/storeagentai-storefront/src/modules/account/components/address-card/edit-address-modal.tsx deleted file mode 100644 index 56a4f275..00000000 --- a/storeagentai-storefront/src/modules/account/components/address-card/edit-address-modal.tsx +++ /dev/null @@ -1,219 +0,0 @@ -"use client" - -import React, { useEffect, useState } from "react" -import { PencilSquare as Edit, Trash } from "@medusajs/icons" -import { Button, Heading, Text, clx } from "@medusajs/ui" -import { Address, Region } from "@medusajs/medusa" - -import useToggleState from "@lib/hooks/use-toggle-state" -import CountrySelect from "@modules/checkout/components/country-select" -import Input from "@modules/common/components/input" -import Modal from "@modules/common/components/modal" -import { - deleteCustomerShippingAddress, - updateCustomerShippingAddress, -} from "@modules/account/actions" -import Spinner from "@modules/common/icons/spinner" -import { useFormState } from "react-dom" -import { SubmitButton } from "@modules/checkout/components/submit-button" - -type EditAddressProps = { - region: Region - address: Address - isActive?: boolean -} - -const EditAddress: React.FC = ({ - region, - address, - isActive = false, -}) => { - const [removing, setRemoving] = useState(false) - const [successState, setSuccessState] = useState(false) - const { state, open, close: closeModal } = useToggleState(false) - - const [formState, formAction] = useFormState(updateCustomerShippingAddress, { - success: false, - error: null, - addressId: address.id, - }) - - const close = () => { - setSuccessState(false) - closeModal() - } - - useEffect(() => { - if (successState) { - close() - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [successState]) - - useEffect(() => { - if (formState.success) { - setSuccessState(true) - } - }, [formState]) - - const removeAddress = async () => { - setRemoving(true) - await deleteCustomerShippingAddress(address.id) - setRemoving(false) - } - - return ( - <> -
-
- - {address.first_name} {address.last_name} - - {address.company && ( - - {address.company} - - )} - - - {address.address_1} - {address.address_2 && , {address.address_2}} - - - {address.postal_code}, {address.city} - - - {address.province && `${address.province}, `} - {address.country_code?.toUpperCase()} - - -
-
- - -
-
- - - - Edit address - -
- -
-
- - -
- - - -
- - -
- - - -
- {formState.error && ( -
- {formState.error} -
- )} -
- -
- - Save -
-
-
-
- - ) -} - -export default EditAddress diff --git a/storeagentai-storefront/src/modules/account/components/login/index.tsx b/storeagentai-storefront/src/modules/account/components/login/index.tsx deleted file mode 100644 index 91e2ebeb..00000000 --- a/storeagentai-storefront/src/modules/account/components/login/index.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { useFormState } from "react-dom" - -import { LOGIN_VIEW } from "@modules/account/templates/login-template" -import Input from "@modules/common/components/input" -import { logCustomerIn } from "@modules/account/actions" -import ErrorMessage from "@modules/checkout/components/error-message" -import { SubmitButton } from "@modules/checkout/components/submit-button" - -type Props = { - setCurrentView: (view: LOGIN_VIEW) => void -} - -const Login = ({ setCurrentView }: Props) => { - const [message, formAction] = useFormState(logCustomerIn, null) - - return ( -
-

Welcome back

-

- Sign in to access an enhanced shopping experience. -

-
-
- - -
- - Sign in - - - Not a member?{" "} - - . - -
- ) -} - -export default Login diff --git a/storeagentai-storefront/src/modules/account/components/order-card/index.tsx b/storeagentai-storefront/src/modules/account/components/order-card/index.tsx deleted file mode 100644 index baab3fc2..00000000 --- a/storeagentai-storefront/src/modules/account/components/order-card/index.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { Order } from "@medusajs/medusa" -import { Button } from "@medusajs/ui" -import { useMemo } from "react" - -import Thumbnail from "@modules/products/components/thumbnail" -import LocalizedClientLink from "@modules/common/components/localized-client-link" -import { formatAmount } from "@lib/util/prices" - -type OrderCardProps = { - order: Omit -} - -const OrderCard = ({ order }: OrderCardProps) => { - const numberOfLines = useMemo(() => { - return order.items.reduce((acc, item) => { - return acc + item.quantity - }, 0) - }, [order]) - - const numberOfProducts = useMemo(() => { - return order.items.length - }, [order]) - - return ( -
-
#{order.display_id}
-
- - {new Date(order.created_at).toDateString()} - - - {formatAmount({ - amount: order.total, - region: order.region, - includeTaxes: false, - })} - - {`${numberOfLines} ${ - numberOfLines > 1 ? "items" : "item" - }`} -
-
- {order.items.slice(0, 3).map((i) => { - return ( -
- -
- {i.title} - x - {i.quantity} -
-
- ) - })} - {numberOfProducts > 4 && ( -
- - + {numberOfLines - 4} - - more -
- )} -
-
- - - -
-
- ) -} - -export default OrderCard diff --git a/storeagentai-storefront/src/modules/account/components/order-overview/index.tsx b/storeagentai-storefront/src/modules/account/components/order-overview/index.tsx deleted file mode 100644 index 7fcde609..00000000 --- a/storeagentai-storefront/src/modules/account/components/order-overview/index.tsx +++ /dev/null @@ -1,40 +0,0 @@ -"use client" - -import { Order } from "@medusajs/medusa" -import { Button } from "@medusajs/ui" - -import OrderCard from "../order-card" -import LocalizedClientLink from "@modules/common/components/localized-client-link" - -const OrderOverview = ({ orders }: { orders: Order[] }) => { - if (orders?.length) { - return ( -
- {orders.map((o) => ( -
- -
- ))} -
- ) - } - - return ( -
-

Nothing to see here

-

- You don't have any orders yet, let us change that {":)"} -

-
- - - -
-
- ) -} - -export default OrderOverview diff --git a/storeagentai-storefront/src/modules/account/components/overview/index.tsx b/storeagentai-storefront/src/modules/account/components/overview/index.tsx deleted file mode 100644 index 9181d203..00000000 --- a/storeagentai-storefront/src/modules/account/components/overview/index.tsx +++ /dev/null @@ -1,136 +0,0 @@ -import { Customer, Order } from "@medusajs/medusa" -import { Container } from "@medusajs/ui" -import { formatAmount } from "@lib/util/prices" - -import ChevronDown from "@modules/common/icons/chevron-down" -import LocalizedClientLink from "@modules/common/components/localized-client-link" - -type OverviewProps = { - customer: Omit | null - orders: Order[] | null -} - -const Overview = ({ customer, orders }: OverviewProps) => { - return ( -
-
-
- Hello {customer?.first_name} - - Signed in as:{" "} - {customer?.email} - -
-
-
-
-
-

Profile

-
- - {getProfileCompletion(customer)}% - - - Completed - -
-
- -
-

Addresses

-
- - {customer?.shipping_addresses?.length || 0} - - - Saved - -
-
-
- -
-
-

Recent orders

-
-
    - {orders && orders.length > 0 ? ( - orders.slice(0, 5).map((order) => { - return ( -
  • - - -
    - Date placed - - Order number - - - Total amount - - - {new Date(order.created_at).toDateString()} - - #{order.display_id} - - {formatAmount({ - amount: order.total, - region: order.region, - includeTaxes: false, - })} - -
    - -
    -
    -
  • - ) - }) - ) : ( - No recent orders - )} -
-
-
-
-
-
- ) -} - -const getProfileCompletion = ( - customer: Omit | null -) => { - let count = 0 - - if (!customer) { - return 0 - } - - if (customer.email) { - count++ - } - - if (customer.first_name && customer.last_name) { - count++ - } - - if (customer.phone) { - count++ - } - - if (customer.billing_address) { - count++ - } - - return (count / 4) * 100 -} - -export default Overview diff --git a/storeagentai-storefront/src/modules/account/components/profile-billing-address/index.tsx b/storeagentai-storefront/src/modules/account/components/profile-billing-address/index.tsx deleted file mode 100644 index 29edcdd4..00000000 --- a/storeagentai-storefront/src/modules/account/components/profile-billing-address/index.tsx +++ /dev/null @@ -1,177 +0,0 @@ -"use client" - -import { Customer, Region } from "@medusajs/medusa" -import React, { useEffect, useMemo } from "react" - -import Input from "@modules/common/components/input" -import NativeSelect from "@modules/common/components/native-select" - -import AccountInfo from "../account-info" -import { useFormState } from "react-dom" -import { updateCustomerBillingAddress } from "@modules/account/actions" - -type MyInformationProps = { - customer: Omit - regions: Region[] -} - -const ProfileBillingAddress: React.FC = ({ - customer, - regions, -}) => { - const regionOptions = useMemo(() => { - return ( - regions - ?.map((region) => { - return region.countries.map((country) => ({ - value: country.iso_2, - label: country.display_name, - })) - }) - .flat() || [] - ) - }, [regions]) - - const [successState, setSuccessState] = React.useState(false) - - const [state, formAction] = useFormState(updateCustomerBillingAddress, { - error: false, - success: false, - }) - - const clearState = () => { - setSuccessState(false) - } - - useEffect(() => { - setSuccessState(state.success) - }, [state]) - - const currentInfo = useMemo(() => { - if (!customer.billing_address) { - return "No billing address" - } - - const country = - regionOptions?.find( - (country) => country.value === customer.billing_address.country_code - )?.label || customer.billing_address.country_code?.toUpperCase() - - return ( -
- - {customer.billing_address.first_name}{" "} - {customer.billing_address.last_name} - - {customer.billing_address.company} - - {customer.billing_address.address_1} - {customer.billing_address.address_2 - ? `, ${customer.billing_address.address_2}` - : ""} - - - {customer.billing_address.postal_code},{" "} - {customer.billing_address.city} - - {country} -
- ) - }, [customer, regionOptions]) - - return ( -
clearState()} className="w-full"> - -
-
- - -
- - - -
- - -
- - - - {regionOptions.map((option, i) => { - return ( - - ) - })} - -
-
-
- ) -} - -const mapBillingAddressToFormData = ({ customer }: MyInformationProps) => { - return { - billing_address: { - first_name: customer.billing_address?.first_name || undefined, - last_name: customer.billing_address?.last_name || undefined, - company: customer.billing_address?.company || undefined, - address_1: customer.billing_address?.address_1 || undefined, - address_2: customer.billing_address?.address_2 || undefined, - city: customer.billing_address?.city || undefined, - province: customer.billing_address?.province || undefined, - postal_code: customer.billing_address?.postal_code || undefined, - country_code: customer.billing_address?.country_code || undefined, - }, - } -} - -export default ProfileBillingAddress diff --git a/storeagentai-storefront/src/modules/account/components/profile-email/index.tsx b/storeagentai-storefront/src/modules/account/components/profile-email/index.tsx deleted file mode 100644 index c3782c32..00000000 --- a/storeagentai-storefront/src/modules/account/components/profile-email/index.tsx +++ /dev/null @@ -1,57 +0,0 @@ -"use client" - -import { Customer } from "@medusajs/medusa" -import React, { useEffect } from "react" -import { useFormState } from "react-dom" - -import Input from "@modules/common/components/input" - -import AccountInfo from "../account-info" -import { updateCustomerEmail } from "@modules/account/actions" - -type MyInformationProps = { - customer: Omit -} - -const ProfileEmail: React.FC = ({ customer }) => { - const [successState, setSuccessState] = React.useState(false) - - const [state, formAction] = useFormState(updateCustomerEmail, { - error: false, - success: false, - }) - - const clearState = () => { - setSuccessState(false) - } - - useEffect(() => { - setSuccessState(state.success) - }, [state]) - - return ( -
- -
- -
-
-
- ) -} - -export default ProfileEmail diff --git a/storeagentai-storefront/src/modules/account/components/profile-name/index.tsx b/storeagentai-storefront/src/modules/account/components/profile-name/index.tsx deleted file mode 100644 index d4929f18..00000000 --- a/storeagentai-storefront/src/modules/account/components/profile-name/index.tsx +++ /dev/null @@ -1,60 +0,0 @@ -"use client" - -import { Customer } from "@medusajs/medusa" -import React, { useEffect } from "react" -import { useFormState } from "react-dom" - -import Input from "@modules/common/components/input" -import { updateCustomerName } from "@modules/account/actions" - -import AccountInfo from "../account-info" - -type MyInformationProps = { - customer: Omit -} - -const ProfileName: React.FC = ({ customer }) => { - const [successState, setSuccessState] = React.useState(false) - - const [state, formAction] = useFormState(updateCustomerName, { - error: false, - success: false, - }) - - const clearState = () => { - setSuccessState(false) - } - - useEffect(() => { - setSuccessState(state.success) - }, [state]) - - return ( -
- -
- - -
-
-
- ) -} - -export default ProfileName diff --git a/storeagentai-storefront/src/modules/account/components/profile-password/index.tsx b/storeagentai-storefront/src/modules/account/components/profile-password/index.tsx deleted file mode 100644 index 567de907..00000000 --- a/storeagentai-storefront/src/modules/account/components/profile-password/index.tsx +++ /dev/null @@ -1,70 +0,0 @@ -"use client" - -import { Customer } from "@medusajs/medusa" -import React, { useEffect } from "react" - -import Input from "@modules/common/components/input" - -import AccountInfo from "../account-info" -import { updateCustomerPassword } from "@modules/account/actions" -import { useFormState } from "react-dom" - -type MyInformationProps = { - customer: Omit -} - -const ProfileName: React.FC = ({ customer }) => { - const [successState, setSuccessState] = React.useState(false) - - const [state, formAction] = useFormState(updateCustomerPassword, { - customer, - success: false, - error: false, - }) - - const clearState = () => { - setSuccessState(false) - } - - useEffect(() => { - setSuccessState(state.success) - }, [state]) - - return ( -
clearState()} className="w-full"> - The password is not shown for security reasons - } - isSuccess={successState} - isError={!!state.error} - errorMessage={state.error} - clearState={clearState} - > -
- - - -
-
-
- ) -} - -export default ProfileName diff --git a/storeagentai-storefront/src/modules/account/components/profile-phone/index.tsx b/storeagentai-storefront/src/modules/account/components/profile-phone/index.tsx deleted file mode 100644 index 95ace8c6..00000000 --- a/storeagentai-storefront/src/modules/account/components/profile-phone/index.tsx +++ /dev/null @@ -1,57 +0,0 @@ -"use client" - -import { Customer } from "@medusajs/medusa" -import React, { useEffect } from "react" -import { useFormState } from "react-dom" - -import Input from "@modules/common/components/input" - -import AccountInfo from "../account-info" -import { updateCustomerPhone } from "@modules/account/actions" - -type MyInformationProps = { - customer: Omit -} - -const ProfileEmail: React.FC = ({ customer }) => { - const [successState, setSuccessState] = React.useState(false) - - const [state, formAction] = useFormState(updateCustomerPhone, { - error: false, - success: false, - }) - - const clearState = () => { - setSuccessState(false) - } - - useEffect(() => { - setSuccessState(state.success) - }, [state]) - - return ( -
- -
- -
-
-
- ) -} - -export default ProfileEmail diff --git a/storeagentai-storefront/src/modules/account/components/register/index.tsx b/storeagentai-storefront/src/modules/account/components/register/index.tsx deleted file mode 100644 index 14e744e0..00000000 --- a/storeagentai-storefront/src/modules/account/components/register/index.tsx +++ /dev/null @@ -1,92 +0,0 @@ -"use client" - -import { useFormState } from "react-dom" - -import Input from "@modules/common/components/input" -import { LOGIN_VIEW } from "@modules/account/templates/login-template" -import { signUp } from "@modules/account/actions" -import ErrorMessage from "@modules/checkout/components/error-message" -import { SubmitButton } from "@modules/checkout/components/submit-button" -import LocalizedClientLink from "@modules/common/components/localized-client-link" - -type Props = { - setCurrentView: (view: LOGIN_VIEW) => void -} - -const Register = ({ setCurrentView }: Props) => { - const [message, formAction] = useFormState(signUp, null) - - return ( -
-

- Become a Medusa Store Member -

-

- Create your Medusa Store Member profile, and get access to an enhanced - shopping experience. -

-
-
- - - - - -
- - - By creating an account, you agree to Medusa Store's{" "} - - Privacy Policy - {" "} - and{" "} - - Terms of Use - - . - - Join - - - Already a member?{" "} - - . - -
- ) -} - -export default Register diff --git a/storeagentai-storefront/src/modules/account/templates/account-layout.tsx b/storeagentai-storefront/src/modules/account/templates/account-layout.tsx deleted file mode 100644 index 71a1cc3a..00000000 --- a/storeagentai-storefront/src/modules/account/templates/account-layout.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React from "react" - -import UnderlineLink from "@modules/common/components/interactive-link" - -import AccountNav from "../components/account-nav" -import { Customer } from "@medusajs/medusa" - -interface AccountLayoutProps { - customer: Omit | null - children: React.ReactNode -} - -const AccountLayout: React.FC = ({ - customer, - children, -}) => { - return ( -
-
-
-
{customer && }
-
{children}
-
-
-
-

Got questions?

- - You can find frequently asked questions and answers on our - customer service page. - -
-
- - Customer Service - -
-
-
-
- ) -} - -export default AccountLayout diff --git a/storeagentai-storefront/src/modules/account/templates/login-template.tsx b/storeagentai-storefront/src/modules/account/templates/login-template.tsx deleted file mode 100644 index 5d68e643..00000000 --- a/storeagentai-storefront/src/modules/account/templates/login-template.tsx +++ /dev/null @@ -1,27 +0,0 @@ -"use client" - -import { useState } from "react" - -import Register from "@modules/account/components/register" -import Login from "@modules/account/components/login" - -export enum LOGIN_VIEW { - SIGN_IN = "sign-in", - REGISTER = "register", -} - -const LoginTemplate = () => { - const [currentView, setCurrentView] = useState("sign-in") - - return ( -
- {currentView === "sign-in" ? ( - - ) : ( - - )} -
- ) -} - -export default LoginTemplate diff --git a/storeagentai-storefront/src/modules/cart/actions.ts b/storeagentai-storefront/src/modules/cart/actions.ts deleted file mode 100644 index 8c13530e..00000000 --- a/storeagentai-storefront/src/modules/cart/actions.ts +++ /dev/null @@ -1,197 +0,0 @@ -"use server" - -import { LineItem } from "@medusajs/medusa" -import { omit } from "lodash" -import { revalidateTag } from "next/cache" -import { cookies } from "next/headers" - -import { - addItem, - createCart, - getCart, - getProductsById, - getRegion, - removeItem, - updateCart, - updateItem, -} from "@lib/data" - -/** - * Retrieves the cart based on the cartId cookie - * - * @returns {Promise} The cart - * @example - * const cart = await getOrSetCart() - */ -export async function getOrSetCart(countryCode: string) { - const cartId = cookies().get("_medusa_cart_id")?.value - let cart - - if (cartId) { - cart = await getCart(cartId).then((cart) => cart) - } - - const region = await getRegion(countryCode) - - if (!region) { - return null - } - - const region_id = region.id - - if (!cart) { - cart = await createCart({ region_id }).then((res) => res) - cart && cookies().set("_medusa_cart_id", cart.id) - revalidateTag("cart") - } - - if (cart && cart?.region_id !== region_id) { - await updateCart(cart.id, { region_id }) - revalidateTag("cart") - } - - return cart -} - -export async function retrieveCart() { - const cartId = cookies().get("_medusa_cart_id")?.value - - if (!cartId) { - return null - } - - try { - const cart = await getCart(cartId).then((cart) => cart) - return cart - } catch (e) { - console.log(e) - return null - } -} - -export async function addToCart({ - variantId, - quantity, - countryCode, -}: { - variantId: string - quantity: number - countryCode: string -}) { - const cart = await getOrSetCart(countryCode).then((cart) => cart) - - if (!cart) { - return "Missing cart ID" - } - - if (!variantId) { - return "Missing product variant ID" - } - - try { - await addItem({ cartId: cart.id, variantId, quantity }) - revalidateTag("cart") - } catch (e) { - return "Error adding item to cart" - } -} - -export async function updateLineItem({ - lineId, - quantity, -}: { - lineId: string - quantity: number -}) { - const cartId = cookies().get("_medusa_cart_id")?.value - - if (!cartId) { - return "Missing cart ID" - } - - if (!lineId) { - return "Missing lineItem ID" - } - - if (!cartId) { - return "Missing cart ID" - } - - try { - await updateItem({ cartId, lineId, quantity }) - revalidateTag("cart") - } catch (e: any) { - return e.toString() - } -} - -export async function deleteLineItem(lineId: string) { - const cartId = cookies().get("_medusa_cart_id")?.value - - if (!cartId) { - return "Missing cart ID" - } - - if (!lineId) { - return "Missing lineItem ID" - } - - if (!cartId) { - return "Missing cart ID" - } - - try { - await removeItem({ cartId, lineId }) - revalidateTag("cart") - } catch (e) { - return "Error deleting line item" - } -} - -export async function enrichLineItems( - lineItems: LineItem[], - regionId: string -): Promise< - | Omit[] - | undefined -> { - // Prepare query parameters - const queryParams = { - ids: lineItems.map((lineItem) => lineItem.variant.product_id), - regionId: regionId, - } - - // Fetch products by their IDs - const products = await getProductsById(queryParams) - - // If there are no line items or products, return an empty array - if (!lineItems?.length || !products) { - return [] - } - - // Enrich line items with product and variant information - - const enrichedItems = lineItems.map((item) => { - const product = products.find((p) => p.id === item.variant.product_id) - const variant = product?.variants.find((v) => v.id === item.variant_id) - - // If product or variant is not found, return the original item - if (!product || !variant) { - return item - } - - // If product and variant are found, enrich the item - return { - ...item, - metadata: { - ...product.metadata, - }, - variant: { - ...variant, - product: omit(product, "variants"), - }, - } - }) as LineItem[] - - return enrichedItems -} diff --git a/storeagentai-storefront/src/modules/cart/components/cart-item-select/index.tsx b/storeagentai-storefront/src/modules/cart/components/cart-item-select/index.tsx deleted file mode 100644 index 0073df0d..00000000 --- a/storeagentai-storefront/src/modules/cart/components/cart-item-select/index.tsx +++ /dev/null @@ -1,73 +0,0 @@ -"use client" - -import { IconBadge, clx } from "@medusajs/ui" -import { - SelectHTMLAttributes, - forwardRef, - useEffect, - useImperativeHandle, - useRef, - useState, -} from "react" - -import ChevronDown from "@modules/common/icons/chevron-down" - -type NativeSelectProps = { - placeholder?: string - errors?: Record - touched?: Record -} & Omit, "size"> - -const CartItemSelect = forwardRef( - ({ placeholder = "Select...", className, children, ...props }, ref) => { - const innerRef = useRef(null) - const [isPlaceholder, setIsPlaceholder] = useState(false) - - useImperativeHandle( - ref, - () => innerRef.current - ) - - useEffect(() => { - if (innerRef.current && innerRef.current.value === "") { - setIsPlaceholder(true) - } else { - setIsPlaceholder(false) - } - }, [innerRef.current?.value]) - - return ( -
- innerRef.current?.focus()} - onBlur={() => innerRef.current?.blur()} - className={clx( - "relative flex items-center txt-compact-small border text-ui-fg-base group", - className, - { - "text-ui-fg-subtle": isPlaceholder, - } - )} - > - - - - - -
- ) - } -) - -CartItemSelect.displayName = "CartItemSelect" - -export default CartItemSelect diff --git a/storeagentai-storefront/src/modules/cart/components/empty-cart-message/index.tsx b/storeagentai-storefront/src/modules/cart/components/empty-cart-message/index.tsx deleted file mode 100644 index 24a9c48c..00000000 --- a/storeagentai-storefront/src/modules/cart/components/empty-cart-message/index.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { Heading, Text } from "@medusajs/ui" - -import InteractiveLink from "@modules/common/components/interactive-link" - -const EmptyCartMessage = () => { - return ( -
- - Cart - - - You don't have anything in your cart. Let's change that, use - the link below to start browsing our products. - -
- Explore products -
-
- ) -} - -export default EmptyCartMessage diff --git a/storeagentai-storefront/src/modules/cart/components/item/index.tsx b/storeagentai-storefront/src/modules/cart/components/item/index.tsx deleted file mode 100644 index 2915ce09..00000000 --- a/storeagentai-storefront/src/modules/cart/components/item/index.tsx +++ /dev/null @@ -1,123 +0,0 @@ -"use client" - -import { LineItem, Region } from "@medusajs/medusa" -import { Table, Text, clx } from "@medusajs/ui" - -import CartItemSelect from "@modules/cart/components/cart-item-select" -import DeleteButton from "@modules/common/components/delete-button" -import LineItemOptions from "@modules/common/components/line-item-options" -import LineItemPrice from "@modules/common/components/line-item-price" -import LineItemUnitPrice from "@modules/common/components/line-item-unit-price" -import Thumbnail from "@modules/products/components/thumbnail" -import { updateLineItem } from "@modules/cart/actions" -import Spinner from "@modules/common/icons/spinner" -import { useState } from "react" -import ErrorMessage from "@modules/checkout/components/error-message" -import LocalizedClientLink from "@modules/common/components/localized-client-link" - -type ItemProps = { - item: Omit - region: Region - type?: "full" | "preview" -} - -const Item = ({ item, region, type = "full" }: ItemProps) => { - const [updating, setUpdating] = useState(false) - const [error, setError] = useState(null) - - const { handle } = item.variant.product - - const changeQuantity = async (quantity: number) => { - setError(null) - setUpdating(true) - - const message = await updateLineItem({ - lineId: item.id, - quantity, - }) - .catch((err) => { - return err.message - }) - .finally(() => { - setUpdating(false) - }) - - message && setError(message) - } - - return ( - - - - - - - - - {item.title}: {item.metadata?.plot_id} - - - - {type === "full" && ( - -
- - changeQuantity(parseInt(value.target.value))} - className="w-14 h-10 p-4" - > - {Array.from( - { - length: Math.min( - item.variant.inventory_quantity > 0 - ? item.variant.inventory_quantity - : 10, - 10 - ), - }, - (_, i) => ( - - ) - )} - - {updating && } -
- -
- )} - - {type === "full" && ( - - - - )} - - - - {type === "preview" && ( - - {item.quantity}x - - - )} - - - -
- ) -} - -export default Item diff --git a/storeagentai-storefront/src/modules/cart/components/sign-in-prompt/index.tsx b/storeagentai-storefront/src/modules/cart/components/sign-in-prompt/index.tsx deleted file mode 100644 index 407f4894..00000000 --- a/storeagentai-storefront/src/modules/cart/components/sign-in-prompt/index.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { Button, Heading, Text } from "@medusajs/ui" -import LocalizedClientLink from "@modules/common/components/localized-client-link" - -const SignInPrompt = () => { - return ( -
-
- - Already have an account? - - - Sign in for a better experience. - -
-
- - - -
-
- ) -} - -export default SignInPrompt diff --git a/storeagentai-storefront/src/modules/cart/templates/index.tsx b/storeagentai-storefront/src/modules/cart/templates/index.tsx deleted file mode 100644 index 16f4a8cc..00000000 --- a/storeagentai-storefront/src/modules/cart/templates/index.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import ItemsTemplate from "./items" -import Summary from "./summary" -import EmptyCartMessage from "../components/empty-cart-message" -import { CartWithCheckoutStep } from "types/global" -import SignInPrompt from "../components/sign-in-prompt" -import Divider from "@modules/common/components/divider" -import { Customer } from "@medusajs/medusa" - -const CartTemplate = ({ - cart, - customer, -}: { - cart: CartWithCheckoutStep | null - customer: Omit | null -}) => { - return ( -
-
- {cart?.items.length ? ( -
-
- {!customer && ( - <> - - - - )} - -
-
-
- {cart && cart.region && ( - <> -
- -
- - )} -
-
-
- ) : ( -
- -
- )} -
-
- ) -} - -export default CartTemplate diff --git a/storeagentai-storefront/src/modules/cart/templates/items.tsx b/storeagentai-storefront/src/modules/cart/templates/items.tsx deleted file mode 100644 index 173dde42..00000000 --- a/storeagentai-storefront/src/modules/cart/templates/items.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { LineItem, Region } from "@medusajs/medusa" -import { Heading, Table } from "@medusajs/ui" - -import Item from "@modules/cart/components/item" -import SkeletonLineItem from "@modules/skeletons/components/skeleton-line-item" - -type ItemsTemplateProps = { - items?: Omit[] - region?: Region -} - -const ItemsTemplate = ({ items, region }: ItemsTemplateProps) => { - return ( -
-
- Cart -
- - - - Item - - Quantity - - Price - - - Total - - - - - {items && region - ? items - .sort((a, b) => { - return a.created_at > b.created_at ? -1 : 1 - }) - .map((item) => { - return - }) - : Array.from(Array(5).keys()).map((i) => { - return - })} - -
-
- ) -} - -export default ItemsTemplate diff --git a/storeagentai-storefront/src/modules/cart/templates/preview.tsx b/storeagentai-storefront/src/modules/cart/templates/preview.tsx deleted file mode 100644 index 62a78834..00000000 --- a/storeagentai-storefront/src/modules/cart/templates/preview.tsx +++ /dev/null @@ -1,50 +0,0 @@ -"use client" - -import { LineItem, Region } from "@medusajs/medusa" -import { Table, clx } from "@medusajs/ui" - -import Item from "@modules/cart/components/item" -import SkeletonLineItem from "@modules/skeletons/components/skeleton-line-item" - -type ItemsTemplateProps = { - items?: Omit[] - region?: Region -} - -const ItemsPreviewTemplate = ({ items, region }: ItemsTemplateProps) => { - const hasOverflow = items && items.length > 4 - - return ( -
- - - {items && region - ? items - .sort((a, b) => { - return a.created_at > b.created_at ? -1 : 1 - }) - .map((item) => { - return ( - - ) - }) - : Array.from(Array(5).keys()).map((i) => { - return - })} - -
-
- ) -} - -export default ItemsPreviewTemplate diff --git a/storeagentai-storefront/src/modules/cart/templates/summary.tsx b/storeagentai-storefront/src/modules/cart/templates/summary.tsx deleted file mode 100644 index 4596a9b1..00000000 --- a/storeagentai-storefront/src/modules/cart/templates/summary.tsx +++ /dev/null @@ -1,31 +0,0 @@ -"use client" - -import { Button, Heading } from "@medusajs/ui" - -import CartTotals from "@modules/common/components/cart-totals" -import Divider from "@modules/common/components/divider" -import { CartWithCheckoutStep } from "types/global" -import DiscountCode from "@modules/checkout/components/discount-code" -import LocalizedClientLink from "@modules/common/components/localized-client-link" - -type SummaryProps = { - cart: CartWithCheckoutStep -} - -const Summary = ({ cart }: SummaryProps) => { - return ( -
- - Summary - - - - - - - -
- ) -} - -export default Summary diff --git a/storeagentai-storefront/src/modules/categories/templates/index.tsx b/storeagentai-storefront/src/modules/categories/templates/index.tsx deleted file mode 100644 index d86027af..00000000 --- a/storeagentai-storefront/src/modules/categories/templates/index.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { notFound } from "next/navigation" -import { Suspense } from "react" - -import { ProductCategoryWithChildren } from "types/global" -import InteractiveLink from "@modules/common/components/interactive-link" -import SkeletonProductGrid from "@modules/skeletons/templates/skeleton-product-grid" -import RefinementList from "@modules/store/components/refinement-list" -import { SortOptions } from "@modules/store/components/refinement-list/sort-products" -import PaginatedProducts from "@modules/store/templates/paginated-products" -import LocalizedClientLink from "@modules/common/components/localized-client-link" - -export default function CategoryTemplate({ - categories, - sortBy, - page, - countryCode, -}: { - categories: ProductCategoryWithChildren[] - sortBy?: SortOptions - page?: string - countryCode: string -}) { - const pageNumber = page ? parseInt(page) : 1 - - const category = categories[categories.length - 1] - const parents = categories.slice(0, categories.length - 1) - - if (!category || !countryCode) notFound() - - return ( -
- {/* */} -
-
- {parents && - parents.map((parent) => ( - - - {parent.name} - - / - - ))} -

{category.name}

-
- {category.description && ( -
-

{category.description}

-
- )} - {category.category_children && ( -
-
    - {category.category_children?.map((c) => ( -
  • - - {c.name} - -
  • - ))} -
-
- )} - }> - - -
-
- ) -} diff --git a/storeagentai-storefront/src/modules/checkout/actions.ts b/storeagentai-storefront/src/modules/checkout/actions.ts deleted file mode 100644 index b73aa12e..00000000 --- a/storeagentai-storefront/src/modules/checkout/actions.ts +++ /dev/null @@ -1,208 +0,0 @@ -"use server" - -import { cookies } from "next/headers" - -import { - addShippingMethod, - completeCart, - deleteDiscount, - setPaymentSession, - updateCart, -} from "@lib/data" -import { GiftCard, StorePostCartsCartReq } from "@medusajs/medusa" -import { revalidateTag } from "next/cache" -import { redirect } from "next/navigation" - -export async function cartUpdate(data: StorePostCartsCartReq) { - const cartId = cookies().get("_medusa_cart_id")?.value - - if (!cartId) return "No cartId cookie found" - - try { - await updateCart(cartId, data) - revalidateTag("cart") - } catch (error: any) { - return error.toString() - } -} - -export async function applyDiscount(code: string) { - const cartId = cookies().get("_medusa_cart_id")?.value - - if (!cartId) return "No cartId cookie found" - - try { - await updateCart(cartId, { discounts: [{ code }] }).then(() => { - revalidateTag("cart") - }) - } catch (error: any) { - throw error - } -} - -export async function applyGiftCard(code: string) { - const cartId = cookies().get("_medusa_cart_id")?.value - - if (!cartId) return "No cartId cookie found" - - try { - await updateCart(cartId, { gift_cards: [{ code }] }).then(() => { - revalidateTag("cart") - }) - } catch (error: any) { - throw error - } -} - -export async function removeDiscount(code: string) { - const cartId = cookies().get("_medusa_cart_id")?.value - - if (!cartId) return "No cartId cookie found" - - try { - await deleteDiscount(cartId, code) - revalidateTag("cart") - } catch (error: any) { - throw error - } -} - -export async function removeGiftCard( - codeToRemove: string, - giftCards: GiftCard[] -) { - const cartId = cookies().get("_medusa_cart_id")?.value - - if (!cartId) return "No cartId cookie found" - - try { - await updateCart(cartId, { - gift_cards: [...giftCards] - .filter((gc) => gc.code !== codeToRemove) - .map((gc) => ({ code: gc.code })), - }).then(() => { - revalidateTag("cart") - }) - } catch (error: any) { - throw error - } -} - -export async function submitDiscountForm( - currentState: unknown, - formData: FormData -) { - const code = formData.get("code") as string - - try { - await applyDiscount(code).catch(async (err) => { - await applyGiftCard(code) - }) - return null - } catch (error: any) { - return error.toString() - } -} - -export async function setAddresses(currentState: unknown, formData: FormData) { - if (!formData) return "No form data received" - - const cartId = cookies().get("_medusa_cart_id")?.value - - if (!cartId) return { message: "No cartId cookie found" } - - const data = { - shipping_address: { - first_name: formData.get("shipping_address.first_name"), - last_name: formData.get("shipping_address.last_name"), - address_1: formData.get("shipping_address.address_1"), - address_2: "", - company: formData.get("shipping_address.company"), - postal_code: formData.get("shipping_address.postal_code"), - city: formData.get("shipping_address.city"), - country_code: formData.get("shipping_address.country_code"), - province: formData.get("shipping_address.province"), - phone: formData.get("shipping_address.phone"), - }, - email: formData.get("email"), - } as StorePostCartsCartReq - - const sameAsBilling = formData.get("same_as_billing") - - if (sameAsBilling === "on") data.billing_address = data.shipping_address - - if (sameAsBilling !== "on") - data.billing_address = { - first_name: formData.get("billing_address.first_name"), - last_name: formData.get("billing_address.last_name"), - address_1: formData.get("billing_address.address_1"), - address_2: "", - company: formData.get("billing_address.company"), - postal_code: formData.get("billing_address.postal_code"), - city: formData.get("billing_address.city"), - country_code: formData.get("billing_address.country_code"), - province: formData.get("billing_address.province"), - phone: formData.get("billing_address.phone"), - } as StorePostCartsCartReq - - try { - await updateCart(cartId, data) - revalidateTag("cart") - } catch (error: any) { - return error.toString() - } - - redirect( - `/${formData.get("shipping_address.country_code")}/checkout?step=delivery` - ) -} - -export async function setShippingMethod(shippingMethodId: string) { - const cartId = cookies().get("_medusa_cart_id")?.value - - if (!cartId) throw new Error("No cartId cookie found") - - try { - await addShippingMethod({ cartId, shippingMethodId }) - revalidateTag("cart") - } catch (error: any) { - throw error - } -} - -export async function setPaymentMethod(providerId: string) { - const cartId = cookies().get("_medusa_cart_id")?.value - - if (!cartId) throw new Error("No cartId cookie found") - - try { - const cart = await setPaymentSession({ cartId, providerId }) - revalidateTag("cart") - return cart - } catch (error: any) { - throw error - } -} - -export async function placeOrder() { - const cartId = cookies().get("_medusa_cart_id")?.value - - if (!cartId) throw new Error("No cartId cookie found") - - let cart - - try { - cart = await completeCart(cartId) - revalidateTag("cart") - } catch (error: any) { - throw error - } - - if (cart?.type === "order") { - const countryCode = cart.data.shipping_address?.country_code?.toLowerCase() - cookies().set("_medusa_cart_id", "", { maxAge: -1 }) - redirect(`/${countryCode}/order/confirmed/${cart?.data.id}`) - } - - return cart -} diff --git a/storeagentai-storefront/src/modules/checkout/components/address-select/index.tsx b/storeagentai-storefront/src/modules/checkout/components/address-select/index.tsx deleted file mode 100644 index 3d523f7b..00000000 --- a/storeagentai-storefront/src/modules/checkout/components/address-select/index.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import { Listbox, Transition } from "@headlessui/react" -import { Address, AddressPayload, Cart } from "@medusajs/medusa" -import { ChevronUpDown } from "@medusajs/icons" -import { clx } from "@medusajs/ui" -import { omit } from "lodash" -import { Fragment, useMemo } from "react" - -import Radio from "@modules/common/components/radio" -import { cartUpdate } from "@modules/checkout/actions" -import compareAddresses from "@lib/util/compare-addresses" - -type AddressSelectProps = { - addresses: Address[] - cart: Omit | null -} - -const AddressSelect = ({ addresses, cart }: AddressSelectProps) => { - const handleSelect = (id: string) => { - const savedAddress = addresses.find((a) => a.id === id) - if (savedAddress) { - cartUpdate({ - shipping_address: omit(savedAddress, [ - "id", - "created_at", - "updated_at", - "country", - "deleted_at", - "metadata", - "customer_id", - ]) as AddressPayload, - }) - } - } - - const selectedAddress = useMemo(() => { - return addresses.find((a) => compareAddresses(a, cart?.shipping_address)) - }, [addresses, cart?.shipping_address]) - - return ( - -
- - {({ open }) => ( - <> - - {selectedAddress - ? selectedAddress.address_1 - : "Choose an address"} - - - - )} - - - - {addresses.map((address) => { - return ( - -
- -
- - {address.first_name} {address.last_name} - - {address.company && ( - - {address.company} - - )} -
- - {address.address_1} - {address.address_2 && ( - , {address.address_2} - )} - - - {address.postal_code}, {address.city} - - - {address.province && `${address.province}, `} - {address.country_code?.toUpperCase()} - -
-
-
-
- ) - })} -
-
-
-
- ) -} - -export default AddressSelect diff --git a/storeagentai-storefront/src/modules/checkout/components/addresses/index.tsx b/storeagentai-storefront/src/modules/checkout/components/addresses/index.tsx deleted file mode 100644 index 622257b5..00000000 --- a/storeagentai-storefront/src/modules/checkout/components/addresses/index.tsx +++ /dev/null @@ -1,183 +0,0 @@ -"use client" - -import { - useSearchParams, - useRouter, - usePathname, - useParams, -} from "next/navigation" -import { Cart, Customer } from "@medusajs/medusa" -import { CheckCircleSolid } from "@medusajs/icons" -import { Heading, Text, useToggleState } from "@medusajs/ui" - -import Divider from "@modules/common/components/divider" -import Spinner from "@modules/common/icons/spinner" - -import BillingAddress from "../billing_address" -import ShippingAddress from "../shipping-address" -import { setAddresses } from "../../actions" -import { SubmitButton } from "../submit-button" -import { useFormState } from "react-dom" -import ErrorMessage from "../error-message" -import compareAddresses from "@lib/util/compare-addresses" - -const Addresses = ({ - cart, - customer, -}: { - cart: Omit | null - customer: Omit | null -}) => { - const searchParams = useSearchParams() - const router = useRouter() - const pathname = usePathname() - const params = useParams() - - const countryCode = params.countryCode as string - - const isOpen = searchParams.get("step") === "address" - - const { state: sameAsSBilling, toggle: toggleSameAsBilling } = useToggleState( - cart?.shipping_address && cart?.billing_address - ? compareAddresses(cart?.shipping_address, cart?.billing_address) - : true - ) - - const handleEdit = () => { - router.push(pathname + "?step=address") - } - - const [message, formAction] = useFormState(setAddresses, null) - - return ( -
-
- - Address - {!isOpen && } - - {!isOpen && cart?.shipping_address && ( - - - - )} -
- {isOpen ? ( -
-
- - - {!sameAsSBilling && ( -
- - Billing address - - - -
- )} - Continue to delivery - -
-
- ) : ( -
-
- {cart && cart.shipping_address ? ( -
-
-
- - Shipping Address - - - {cart.shipping_address.first_name}{" "} - {cart.shipping_address.last_name} - - - {cart.shipping_address.address_1}{" "} - {cart.shipping_address.address_2} - - - {cart.shipping_address.postal_code},{" "} - {cart.shipping_address.city} - - - {cart.shipping_address.country_code?.toUpperCase()} - -
- -
- - Contact - - - {cart.shipping_address.phone} - - - {cart.email} - -
- -
- - Billing Address - - - {sameAsSBilling ? ( - - Billing- and delivery address are the same. - - ) : ( - <> - - {cart.billing_address.first_name}{" "} - {cart.billing_address.last_name} - - - {cart.billing_address.address_1}{" "} - {cart.billing_address.address_2} - - - {cart.billing_address.postal_code},{" "} - {cart.billing_address.city} - - - {cart.billing_address.country_code?.toUpperCase()} - - - )} -
-
-
- ) : ( -
- -
- )} -
-
- )} - -
- ) -} - -export default Addresses diff --git a/storeagentai-storefront/src/modules/checkout/components/billing_address/index.tsx b/storeagentai-storefront/src/modules/checkout/components/billing_address/index.tsx deleted file mode 100644 index e7e5c15c..00000000 --- a/storeagentai-storefront/src/modules/checkout/components/billing_address/index.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import React, { useState, useEffect } from "react" -import Input from "@modules/common/components/input" -import CountrySelect from "../country-select" -import { Cart } from "@medusajs/medusa" - -const BillingAddress = ({ - cart, - countryCode, -}: { - cart: Omit | null - countryCode: string -}) => { - const [formData, setFormData] = useState({ - "billing_address.first_name": cart?.billing_address?.first_name || "", - "billing_address.last_name": cart?.billing_address?.last_name || "", - "billing_address.address_1": cart?.billing_address?.address_1 || "", - "billing_address.company": cart?.billing_address?.company || "", - "billing_address.postal_code": cart?.billing_address?.postal_code || "", - "billing_address.city": cart?.billing_address?.city || "", - "billing_address.country_code": - cart?.billing_address?.country_code || countryCode || "", - "billing_address.province": cart?.billing_address?.province || "", - "billing_address.phone": cart?.billing_address?.phone || "", - }) - - useEffect(() => { - setFormData({ - "billing_address.first_name": cart?.billing_address?.first_name || "", - "billing_address.last_name": cart?.billing_address?.last_name || "", - "billing_address.address_1": cart?.billing_address?.address_1 || "", - "billing_address.company": cart?.billing_address?.company || "", - "billing_address.postal_code": cart?.billing_address?.postal_code || "", - "billing_address.city": cart?.billing_address?.city || "", - "billing_address.country_code": cart?.billing_address?.country_code || "", - "billing_address.province": cart?.billing_address?.province || "", - "billing_address.phone": cart?.billing_address?.phone || "", - }) - }, [cart?.billing_address]) - - const handleChange = ( - e: React.ChangeEvent< - HTMLInputElement | HTMLInputElement | HTMLSelectElement - > - ) => { - setFormData({ - ...formData, - [e.target.name]: e.target.value, - }) - } - - return ( - <> -
- - - - - - - - - -
- - ) -} - -export default BillingAddress diff --git a/storeagentai-storefront/src/modules/checkout/components/country-select/index.tsx b/storeagentai-storefront/src/modules/checkout/components/country-select/index.tsx deleted file mode 100644 index 401d805e..00000000 --- a/storeagentai-storefront/src/modules/checkout/components/country-select/index.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { forwardRef, useImperativeHandle, useMemo, useRef } from "react" - -import NativeSelect, { - NativeSelectProps, -} from "@modules/common/components/native-select" -import { Region } from "@medusajs/medusa" - -const CountrySelect = forwardRef< - HTMLSelectElement, - NativeSelectProps & { - region?: Region - } ->(({ placeholder = "Country", region, defaultValue, ...props }, ref) => { - const innerRef = useRef(null) - - useImperativeHandle( - ref, - () => innerRef.current - ) - - const countryOptions = useMemo(() => { - if (!region) { - return [] - } - - return region.countries.map((country) => ({ - value: country.iso_2, - label: country.display_name, - })) - }, [region]) - - return ( - - {countryOptions.map(({ value, label }, index) => ( - - ))} - - ) -}) - -CountrySelect.displayName = "CountrySelect" - -export default CountrySelect diff --git a/storeagentai-storefront/src/modules/checkout/components/discount-code/index.tsx b/storeagentai-storefront/src/modules/checkout/components/discount-code/index.tsx deleted file mode 100644 index f3febf96..00000000 --- a/storeagentai-storefront/src/modules/checkout/components/discount-code/index.tsx +++ /dev/null @@ -1,149 +0,0 @@ -"use client" - -import { InformationCircleSolid } from "@medusajs/icons" -import { Cart } from "@medusajs/medusa" -import { Heading, Label, Text, Tooltip } from "@medusajs/ui" -import React, { useMemo } from "react" -import { useFormState } from "react-dom" - -import Input from "@modules/common/components/input" -import Trash from "@modules/common/icons/trash" -import ErrorMessage from "@modules/checkout/components/error-message" -import { SubmitButton } from "@modules/checkout/components/submit-button" -import { - removeDiscount, - removeGiftCard, - submitDiscountForm, -} from "@modules/checkout/actions" -import { formatAmount } from "@lib/util/prices" - -type DiscountCodeProps = { - cart: Omit -} - -const DiscountCode: React.FC = ({ cart }) => { - const [isOpen, setIsOpen] = React.useState(false) - - const { discounts, gift_cards, region } = cart - - const appliedDiscount = useMemo(() => { - if (!discounts || !discounts.length) { - return undefined - } - - switch (discounts[0].rule.type) { - case "percentage": - return `${discounts[0].rule.value}%` - case "fixed": - return `- ${formatAmount({ - amount: discounts[0].rule.value, - region: region, - })}` - - default: - return "Free shipping" - } - }, [discounts, region]) - - const removeGiftCardCode = async (code: string) => { - await removeGiftCard(code, gift_cards) - } - - const removeDiscountCode = async () => { - await removeDiscount(discounts[0].code) - } - - const [message, formAction] = useFormState(submitDiscountForm, null) - - return ( -
-
- {gift_cards.length > 0 && ( -
- Gift card(s) applied: - {gift_cards?.map((gc) => ( -
- - Code: - {gc.code} - - - {formatAmount({ - region: region, - amount: gc.balance, - includeTaxes: false, - })} - - -
- ))} -
- )} - - {appliedDiscount ? ( -
-
- Discount applied: -
- - Code: - {discounts[0].code} - ({appliedDiscount}) - - -
-
-
- ) : ( -
- - {isOpen && ( - <> -
- - Apply -
- - - )} - - )} -
-
- ) -} - -export default DiscountCode diff --git a/storeagentai-storefront/src/modules/checkout/components/error-message/index.tsx b/storeagentai-storefront/src/modules/checkout/components/error-message/index.tsx deleted file mode 100644 index 6afd668d..00000000 --- a/storeagentai-storefront/src/modules/checkout/components/error-message/index.tsx +++ /dev/null @@ -1,13 +0,0 @@ -const ErrorMessage = ({ error }: { error?: string | null }) => { - if (!error) { - return null - } - - return ( -
- {error} -
- ) -} - -export default ErrorMessage diff --git a/storeagentai-storefront/src/modules/checkout/components/payment-button/index.tsx b/storeagentai-storefront/src/modules/checkout/components/payment-button/index.tsx deleted file mode 100644 index 2a2f9d71..00000000 --- a/storeagentai-storefront/src/modules/checkout/components/payment-button/index.tsx +++ /dev/null @@ -1,228 +0,0 @@ -"use client" - -import { Cart, PaymentSession } from "@medusajs/medusa" -import { Button } from "@medusajs/ui" -import { OnApproveActions, OnApproveData } from "@paypal/paypal-js" -import { PayPalButtons, usePayPalScriptReducer } from "@paypal/react-paypal-js" -import { useElements, useStripe } from "@stripe/react-stripe-js" -import { placeOrder } from "@modules/checkout/actions" -import React, { useState } from "react" -import ErrorMessage from "../error-message" -import Spinner from "@modules/common/icons/spinner" - -type PaymentButtonProps = { - cart: Omit -} - -const PaymentButton: React.FC = ({ cart }) => { - const notReady = - !cart || - !cart.shipping_address || - !cart.billing_address || - !cart.email || - cart.shipping_methods.length < 1 - ? true - : false - - const paymentSession = cart.payment_session as PaymentSession - - switch (paymentSession.provider_id) { - case "stripe": - return - case "manual": - return - case "paypal": - return - default: - return - } -} - -const StripePaymentButton = ({ - cart, - notReady, -}: { - cart: Omit - notReady: boolean -}) => { - const [submitting, setSubmitting] = useState(false) - const [errorMessage, setErrorMessage] = useState(null) - - const onPaymentCompleted = async () => { - await placeOrder().catch(() => { - setErrorMessage("An error occurred, please try again.") - setSubmitting(false) - }) - } - - const stripe = useStripe() - const elements = useElements() - const card = elements?.getElement("card") - - const session = cart.payment_session as PaymentSession - - const disabled = !stripe || !elements ? true : false - - const handlePayment = async () => { - setSubmitting(true) - - if (!stripe || !elements || !card || !cart) { - setSubmitting(false) - return - } - - await stripe - .confirmCardPayment(session.data.client_secret as string, { - payment_method: { - card: card, - billing_details: { - name: - cart.billing_address.first_name + - " " + - cart.billing_address.last_name, - address: { - city: cart.billing_address.city ?? undefined, - country: cart.billing_address.country_code ?? undefined, - line1: cart.billing_address.address_1 ?? undefined, - line2: cart.billing_address.address_2 ?? undefined, - postal_code: cart.billing_address.postal_code ?? undefined, - state: cart.billing_address.province ?? undefined, - }, - email: cart.email, - phone: cart.billing_address.phone ?? undefined, - }, - }, - }) - .then(({ error, paymentIntent }) => { - if (error) { - const pi = error.payment_intent - - if ( - (pi && pi.status === "requires_capture") || - (pi && pi.status === "succeeded") - ) { - onPaymentCompleted() - } - - setErrorMessage(error.message || null) - return - } - - if ( - (paymentIntent && paymentIntent.status === "requires_capture") || - paymentIntent.status === "succeeded" - ) { - return onPaymentCompleted() - } - - return - }) - } - - return ( - <> - - - - ) -} - -const PayPalPaymentButton = ({ - cart, - notReady, -}: { - cart: Omit - notReady: boolean -}) => { - const [submitting, setSubmitting] = useState(false) - const [errorMessage, setErrorMessage] = useState(null) - - const onPaymentCompleted = async () => { - await placeOrder().catch(() => { - setErrorMessage("An error occurred, please try again.") - setSubmitting(false) - }) - } - - const session = cart.payment_session as PaymentSession - - const handlePayment = async ( - _data: OnApproveData, - actions: OnApproveActions - ) => { - actions?.order - ?.authorize() - .then((authorization) => { - if (authorization.status !== "COMPLETED") { - setErrorMessage(`An error occurred, status: ${authorization.status}`) - return - } - onPaymentCompleted() - }) - .catch(() => { - setErrorMessage(`An unknown error occurred, please try again.`) - setSubmitting(false) - }) - } - - const [{ isPending, isResolved }] = usePayPalScriptReducer() - - if (isPending) { - return - } - - if (isResolved) { - return ( - <> - session.data.id as string} - onApprove={handlePayment} - disabled={notReady || submitting || isPending} - /> - - - ) - } -} - -const ManualTestPaymentButton = ({ notReady }: { notReady: boolean }) => { - const [submitting, setSubmitting] = useState(false) - const [errorMessage, setErrorMessage] = useState(null) - - const onPaymentCompleted = async () => { - await placeOrder().catch((err) => { - setErrorMessage(err.toString()) - setSubmitting(false) - }) - } - - const handlePayment = () => { - setSubmitting(true) - - onPaymentCompleted() - } - - return ( - <> - - - - ) -} - -export default PaymentButton diff --git a/storeagentai-storefront/src/modules/checkout/components/payment-container/index.tsx b/storeagentai-storefront/src/modules/checkout/components/payment-container/index.tsx deleted file mode 100644 index 6b1a3e88..00000000 --- a/storeagentai-storefront/src/modules/checkout/components/payment-container/index.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import { RadioGroup } from "@headlessui/react" -import { InformationCircleSolid } from "@medusajs/icons" -import { PaymentSession } from "@medusajs/medusa" -import { Text, Tooltip, clx } from "@medusajs/ui" -import React from "react" - -import Radio from "@modules/common/components/radio" - -import PaymentTest from "../payment-test" - -type PaymentContainerProps = { - paymentSession: PaymentSession - selectedPaymentOptionId: string | null - disabled?: boolean - paymentInfoMap: Record -} - -const PaymentContainer: React.FC = ({ - paymentSession, - selectedPaymentOptionId, - paymentInfoMap, - disabled = false, -}) => { - const isDevelopment = process.env.NODE_ENV === "development" - - return ( - <> - -
-
- - - {paymentInfoMap[paymentSession.provider_id]?.title || - paymentSession.provider_id} - - {process.env.NODE_ENV === "development" && - !Object.hasOwn(paymentInfoMap, paymentSession.provider_id) && ( - - - - )} - - {paymentSession.provider_id === "manual" && isDevelopment && ( - - )} -
- - {paymentInfoMap[paymentSession.provider_id]?.icon} - -
- {paymentSession.provider_id === "manual" && isDevelopment && ( - - )} -
- - ) -} - -export default PaymentContainer diff --git a/storeagentai-storefront/src/modules/checkout/components/payment-test/index.tsx b/storeagentai-storefront/src/modules/checkout/components/payment-test/index.tsx deleted file mode 100644 index 25353081..00000000 --- a/storeagentai-storefront/src/modules/checkout/components/payment-test/index.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { Badge } from "@medusajs/ui" - -const PaymentTest = ({ className }: { className?: string }) => { - return ( - - Attention: For testing purposes - only. - - ) -} - -export default PaymentTest diff --git a/storeagentai-storefront/src/modules/checkout/components/payment-wrapper/index.tsx b/storeagentai-storefront/src/modules/checkout/components/payment-wrapper/index.tsx deleted file mode 100644 index feebf19a..00000000 --- a/storeagentai-storefront/src/modules/checkout/components/payment-wrapper/index.tsx +++ /dev/null @@ -1,63 +0,0 @@ -"use client" - -import { Cart, PaymentSession } from "@medusajs/medusa" -import { loadStripe } from "@stripe/stripe-js" -import React from "react" -import StripeWrapper from "./stripe-wrapper" -import { PayPalScriptProvider } from "@paypal/react-paypal-js" -import { createContext } from "react" - -type WrapperProps = { - cart: Omit - children: React.ReactNode -} - -export const StripeContext = createContext(false) - -const stripeKey = process.env.NEXT_PUBLIC_STRIPE_KEY -const stripePromise = stripeKey ? loadStripe(stripeKey) : null - -const paypalClientId = process.env.NEXT_PUBLIC_PAYPAL_CLIENT_ID - -const Wrapper: React.FC = ({ cart, children }) => { - const paymentSession = cart.payment_session as PaymentSession - - const isStripe = paymentSession?.provider_id?.includes("stripe") - - if (isStripe && paymentSession && stripePromise) { - return ( - - - {children} - - - ) - } - - if ( - paymentSession?.provider_id === "paypal" && - paypalClientId !== undefined && - cart - ) { - return ( - - {children} - - ) - } - - return
{children}
-} - -export default Wrapper diff --git a/storeagentai-storefront/src/modules/checkout/components/payment-wrapper/stripe-wrapper.tsx b/storeagentai-storefront/src/modules/checkout/components/payment-wrapper/stripe-wrapper.tsx deleted file mode 100644 index 59d9f537..00000000 --- a/storeagentai-storefront/src/modules/checkout/components/payment-wrapper/stripe-wrapper.tsx +++ /dev/null @@ -1,50 +0,0 @@ -"use client" - -import { Stripe, StripeElementsOptions } from "@stripe/stripe-js" -import { Elements } from "@stripe/react-stripe-js" - -import { PaymentSession } from "@medusajs/medusa" - -type StripeWrapperProps = { - paymentSession: PaymentSession - stripeKey?: string - stripePromise: Promise | null - children: React.ReactNode - } - -const StripeWrapper: React.FC = ({ - paymentSession, - stripeKey, - stripePromise, - children, - }) => { - const options: StripeElementsOptions = { - clientSecret: paymentSession!.data?.client_secret as string | undefined, - } - - if (!stripeKey) { - throw new Error( - "Stripe key is missing. Set NEXT_PUBLIC_STRIPE_KEY environment variable." - ) - } - - if (!stripePromise) { - throw new Error( - "Stripe promise is missing. Make sure you have provided a valid Stripe key." - ) - } - - if (!paymentSession?.data?.client_secret) { - throw new Error( - "Stripe client secret is missing. Cannot initialize Stripe." - ) - } - - return ( - - {children} - - ) - } - - export default StripeWrapper \ No newline at end of file diff --git a/storeagentai-storefront/src/modules/checkout/components/payment/index.tsx b/storeagentai-storefront/src/modules/checkout/components/payment/index.tsx deleted file mode 100644 index 01a78d04..00000000 --- a/storeagentai-storefront/src/modules/checkout/components/payment/index.tsx +++ /dev/null @@ -1,237 +0,0 @@ -"use client" - -import { useCallback, useContext, useEffect, useMemo, useState } from "react" -import { usePathname, useRouter, useSearchParams } from "next/navigation" -import { RadioGroup } from "@headlessui/react" -import ErrorMessage from "@modules/checkout/components/error-message" -import { Cart } from "@medusajs/medusa" -import { CheckCircleSolid, CreditCard } from "@medusajs/icons" -import { Button, Container, Heading, Text, Tooltip, clx } from "@medusajs/ui" -import { CardElement } from "@stripe/react-stripe-js" -import { StripeCardElementOptions } from "@stripe/stripe-js" - -import Divider from "@modules/common/components/divider" -import Spinner from "@modules/common/icons/spinner" -import PaymentContainer from "@modules/checkout/components/payment-container" -import { setPaymentMethod } from "@modules/checkout/actions" -import { paymentInfoMap } from "@lib/constants" -import { StripeContext } from "@modules/checkout/components/payment-wrapper" - -const Payment = ({ - cart, -}: { - cart: Omit | null -}) => { - const [isLoading, setIsLoading] = useState(false) - const [error, setError] = useState(null) - const [cardBrand, setCardBrand] = useState(null) - const [cardComplete, setCardComplete] = useState(false) - - const searchParams = useSearchParams() - const router = useRouter() - const pathname = usePathname() - - const isOpen = searchParams.get("step") === "payment" - - const isStripe = cart?.payment_session?.provider_id === "stripe" - const stripeReady = useContext(StripeContext) - - const paymentReady = - cart?.payment_session && cart?.shipping_methods.length !== 0 - - const useOptions: StripeCardElementOptions = useMemo(() => { - return { - style: { - base: { - fontFamily: "Inter, sans-serif", - color: "#424270", - "::placeholder": { - color: "rgb(107 114 128)", - }, - }, - }, - classes: { - base: "pt-3 pb-1 block w-full h-11 px-4 mt-0 bg-ui-bg-field border rounded-md appearance-none focus:outline-none focus:ring-0 focus:shadow-borders-interactive-with-active border-ui-border-base hover:bg-ui-bg-field-hover transition-all duration-300 ease-in-out", - }, - } - }, []) - - const createQueryString = useCallback( - (name: string, value: string) => { - const params = new URLSearchParams(searchParams) - params.set(name, value) - - return params.toString() - }, - [searchParams] - ) - - const set = async (providerId: string) => { - setIsLoading(true) - await setPaymentMethod(providerId) - .catch((err) => setError(err.toString())) - .finally(() => { - if (providerId === "paypal") return - setIsLoading(false) - }) - } - - const handleChange = (providerId: string) => { - setError(null) - set(providerId) - } - - const handleEdit = () => { - router.push(pathname + "?" + createQueryString("step", "payment"), { - scroll: false, - }) - } - - const handleSubmit = () => { - setIsLoading(true) - router.push(pathname + "?" + createQueryString("step", "review"), { - scroll: false, - }) - } - - useEffect(() => { - setIsLoading(false) - setError(null) - }, [isOpen]) - - return ( -
-
- - Payment - {!isOpen && paymentReady && } - - {!isOpen && paymentReady && ( - - - - )} -
-
- {cart?.payment_sessions?.length ? ( -
- handleChange(value)} - > - {cart.payment_sessions - .sort((a, b) => { - return a.provider_id > b.provider_id ? 1 : -1 - }) - .map((paymentSession) => { - return ( - - ) - })} - - - {isStripe && stripeReady && ( -
- - Enter your card details: - - - { - setCardBrand( - e.brand && - e.brand.charAt(0).toUpperCase() + e.brand.slice(1) - ) - setError(e.error?.message || null) - setCardComplete(e.complete) - }} - /> -
- )} - - - - -
- ) : ( -
- -
- )} - -
- {cart && paymentReady && cart.payment_session && ( -
-
- - Payment method - - - {paymentInfoMap[cart.payment_session.provider_id]?.title || - cart.payment_session.provider_id} - - {process.env.NODE_ENV === "development" && - !Object.hasOwn( - paymentInfoMap, - cart.payment_session.provider_id - ) && ( - - )} -
-
- - Payment details - -
- - {paymentInfoMap[cart.payment_session.provider_id]?.icon || ( - - )} - - - {cart.payment_session.provider_id === "stripe" && cardBrand - ? cardBrand - : "Another step will appear"} - -
-
-
- )} -
-
- -
- ) -} - -export default Payment diff --git a/storeagentai-storefront/src/modules/checkout/components/review/index.tsx b/storeagentai-storefront/src/modules/checkout/components/review/index.tsx deleted file mode 100644 index b4676c85..00000000 --- a/storeagentai-storefront/src/modules/checkout/components/review/index.tsx +++ /dev/null @@ -1,57 +0,0 @@ -"use client" - -import { Heading, Text, clx } from "@medusajs/ui" - -import PaymentButton from "../payment-button" -import { useSearchParams } from "next/navigation" -import { Cart } from "@medusajs/medusa" - -const Review = ({ - cart, -}: { - cart: Omit -}) => { - const searchParams = useSearchParams() - - const isOpen = searchParams.get("step") === "review" - - const previousStepsCompleted = - cart.shipping_address && - cart.shipping_methods.length > 0 && - cart.payment_session - - return ( -
-
- - Review - -
- {isOpen && previousStepsCompleted && ( - <> -
-
- - By clicking the Place Order button, you confirm that you have - read, understand and accept our Terms of Use, Terms of Sale and - Returns Policy and acknowledge that you have read Medusa - Store's Privacy Policy. - -
-
- - - )} -
- ) -} - -export default Review diff --git a/storeagentai-storefront/src/modules/checkout/components/shipping-address/index.tsx b/storeagentai-storefront/src/modules/checkout/components/shipping-address/index.tsx deleted file mode 100644 index 30616fdb..00000000 --- a/storeagentai-storefront/src/modules/checkout/components/shipping-address/index.tsx +++ /dev/null @@ -1,182 +0,0 @@ -import React, { useState, useEffect, useMemo } from "react" -import { Address, Cart, Customer } from "@medusajs/medusa" -import Checkbox from "@modules/common/components/checkbox" -import Input from "@modules/common/components/input" -import AddressSelect from "../address-select" -import CountrySelect from "../country-select" -import { Container } from "@medusajs/ui" - -const ShippingAddress = ({ - customer, - cart, - checked, - onChange, - countryCode, -}: { - customer: Omit | null - cart: Omit | null - checked: boolean - onChange: () => void - countryCode: string -}) => { - const [formData, setFormData] = useState({ - "shipping_address.first_name": cart?.shipping_address?.first_name || "", - "shipping_address.last_name": cart?.shipping_address?.last_name || "", - "shipping_address.address_1": cart?.shipping_address?.address_1 || "", - "shipping_address.company": cart?.shipping_address?.company || "", - "shipping_address.postal_code": cart?.shipping_address?.postal_code || "", - "shipping_address.city": cart?.shipping_address?.city || "", - "shipping_address.country_code": - cart?.shipping_address?.country_code || countryCode || "", - "shipping_address.province": cart?.shipping_address?.province || "", - email: cart?.email || "", - "shipping_address.phone": cart?.shipping_address?.phone || "", - }) - - const countriesInRegion = useMemo( - () => cart?.region.countries.map((c) => c.iso_2), - [cart?.region] - ) - - // check if customer has saved addresses that are in the current region - const addressesInRegion = useMemo( - () => - customer?.shipping_addresses.filter( - (a) => a.country_code && countriesInRegion?.includes(a.country_code) - ), - [customer?.shipping_addresses, countriesInRegion] - ) - - useEffect(() => { - setFormData({ - "shipping_address.first_name": cart?.shipping_address?.first_name || "", - "shipping_address.last_name": cart?.shipping_address?.last_name || "", - "shipping_address.address_1": cart?.shipping_address?.address_1 || "", - "shipping_address.company": cart?.shipping_address?.company || "", - "shipping_address.postal_code": cart?.shipping_address?.postal_code || "", - "shipping_address.city": cart?.shipping_address?.city || "", - "shipping_address.country_code": - cart?.shipping_address?.country_code || "", - "shipping_address.province": cart?.shipping_address?.province || "", - email: cart?.email || "", - "shipping_address.phone": cart?.shipping_address?.phone || "", - }) - }, [cart?.shipping_address, cart?.email]) - - const handleChange = ( - e: React.ChangeEvent< - HTMLInputElement | HTMLInputElement | HTMLSelectElement - > - ) => { - setFormData({ - ...formData, - [e.target.name]: e.target.value, - }) - } - - return ( - <> - {customer && (addressesInRegion?.length || 0) > 0 && ( - -

- {`Hi ${customer.first_name}, do you want to use one of your saved addresses?`} -

- -
- )} -
- - - - - - - - -
-
- -
-
- - -
- - ) -} - -export default ShippingAddress diff --git a/storeagentai-storefront/src/modules/checkout/components/shipping/index.tsx b/storeagentai-storefront/src/modules/checkout/components/shipping/index.tsx deleted file mode 100644 index cb6be04a..00000000 --- a/storeagentai-storefront/src/modules/checkout/components/shipping/index.tsx +++ /dev/null @@ -1,186 +0,0 @@ -"use client" - -import { RadioGroup } from "@headlessui/react" -import { CheckCircleSolid } from "@medusajs/icons" -import { Cart } from "@medusajs/medusa" -import { PricedShippingOption } from "@medusajs/medusa/dist/types/pricing" -import { Button, Heading, Text, clx, useToggleState } from "@medusajs/ui" -import { formatAmount } from "@lib/util/prices" - -import Divider from "@modules/common/components/divider" -import Radio from "@modules/common/components/radio" -import Spinner from "@modules/common/icons/spinner" -import ErrorMessage from "@modules/checkout/components/error-message" -import { setShippingMethod } from "@modules/checkout/actions" -import { useRouter, useSearchParams, usePathname } from "next/navigation" -import { useEffect, useState } from "react" - -type ShippingProps = { - cart: Omit - availableShippingMethods: PricedShippingOption[] | null -} - -const Shipping: React.FC = ({ - cart, - availableShippingMethods, -}) => { - const [isLoading, setIsLoading] = useState(false) - const [error, setError] = useState(null) - - const searchParams = useSearchParams() - const router = useRouter() - const pathname = usePathname() - - const isOpen = searchParams.get("step") === "delivery" - - const handleEdit = () => { - router.push(pathname + "?step=delivery", { scroll: false }) - } - - const handleSubmit = () => { - setIsLoading(true) - router.push(pathname + "?step=payment", { scroll: false }) - } - - const set = async (id: string) => { - setIsLoading(true) - await setShippingMethod(id) - .then(() => { - setIsLoading(false) - }) - .catch((err) => { - setError(err.toString()) - setIsLoading(false) - }) - } - - const handleChange = (value: string) => { - set(value) - } - - useEffect(() => { - setIsLoading(false) - setError(null) - }, [isOpen]) - - return ( -
-
- - Delivery - {!isOpen && cart.shipping_methods.length > 0 && } - - {!isOpen && - cart?.shipping_address && - cart?.billing_address && - cart?.email && ( - - - - )} -
- {isOpen ? ( -
-
- handleChange(value)} - > - {availableShippingMethods ? ( - availableShippingMethods.map((option) => { - return ( - -
- - {option.name} -
- - {formatAmount({ - amount: option.amount!, - region: cart?.region, - includeTaxes: false, - })} - -
- ) - }) - ) : ( -
- -
- )} -
-
- - - - -
- ) : ( -
-
- {cart && cart.shipping_methods.length > 0 && ( -
- - Method - - - {cart.shipping_methods[0].shipping_option.name} ( - {formatAmount({ - amount: cart.shipping_methods[0].price, - region: cart.region, - includeTaxes: false, - }) - .replace(/,/g, "") - .replace(/\./g, ",")} - ) - -
- )} -
-
- )} - -
- ) -} - -export default Shipping diff --git a/storeagentai-storefront/src/modules/checkout/components/submit-button/index.tsx b/storeagentai-storefront/src/modules/checkout/components/submit-button/index.tsx deleted file mode 100644 index df832ca7..00000000 --- a/storeagentai-storefront/src/modules/checkout/components/submit-button/index.tsx +++ /dev/null @@ -1,29 +0,0 @@ -"use client" - -import { Button } from "@medusajs/ui" -import React from "react" -import { useFormStatus } from "react-dom" - -export function SubmitButton({ - children, - variant = "primary", - className, -}: { - children: React.ReactNode - variant?: "primary" | "secondary" | "transparent" | "danger" | null - className?: string -}) { - const { pending } = useFormStatus() - - return ( - - ) -} diff --git a/storeagentai-storefront/src/modules/checkout/templates/checkout-form/index.tsx b/storeagentai-storefront/src/modules/checkout/templates/checkout-form/index.tsx deleted file mode 100644 index 47d090d8..00000000 --- a/storeagentai-storefront/src/modules/checkout/templates/checkout-form/index.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import Addresses from "@modules/checkout/components/addresses" -import Shipping from "@modules/checkout/components/shipping" -import Payment from "@modules/checkout/components/payment" -import Review from "@modules/checkout/components/review" -import { - createPaymentSessions, - getCustomer, - listShippingMethods, -} from "@lib/data" -import { cookies } from "next/headers" -import { CartWithCheckoutStep } from "types/global" -import { getCheckoutStep } from "@lib/util/get-checkout-step" - -export default async function CheckoutForm() { - const cartId = cookies().get("_medusa_cart_id")?.value - - if (!cartId) { - return null - } - - // create payment sessions and get cart - const cart = (await createPaymentSessions(cartId).then( - (cart) => cart - )) as CartWithCheckoutStep - - if (!cart) { - return null - } - - cart.checkout_step = cart && getCheckoutStep(cart) - - // get available shipping methods - const availableShippingMethods = await listShippingMethods( - cart.region_id - ).then((methods) => methods?.filter((m) => !m.is_return)) - - if (!availableShippingMethods) { - return null - } - - // get customer if logged in - const customer = await getCustomer() - - return ( -
-
-
- -
- -
- -
- -
- -
- -
- -
-
-
- ) -} diff --git a/storeagentai-storefront/src/modules/checkout/templates/checkout-summary/index.tsx b/storeagentai-storefront/src/modules/checkout/templates/checkout-summary/index.tsx deleted file mode 100644 index dbca3597..00000000 --- a/storeagentai-storefront/src/modules/checkout/templates/checkout-summary/index.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { Heading } from "@medusajs/ui" - -import ItemsPreviewTemplate from "@modules/cart/templates/preview" -import DiscountCode from "@modules/checkout/components/discount-code" -import CartTotals from "@modules/common/components/cart-totals" -import Divider from "@modules/common/components/divider" -import { cookies } from "next/headers" -import { getCart } from "@lib/data" - -const CheckoutSummary = async () => { - const cartId = cookies().get("_medusa_cart_id")?.value - - if (!cartId) { - return null - } - - const cart = await getCart(cartId).then((cart) => cart) - - if (!cart) { - return null - } - - return ( -
-
- - - In your Cart - - - - -
- -
-
-
- ) -} - -export default CheckoutSummary diff --git a/storeagentai-storefront/src/modules/collections/templates/index.tsx b/storeagentai-storefront/src/modules/collections/templates/index.tsx deleted file mode 100644 index 4b441ac7..00000000 --- a/storeagentai-storefront/src/modules/collections/templates/index.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { ProductCollection } from "@medusajs/medusa" -import { Suspense } from "react" - -import SkeletonProductGrid from "@modules/skeletons/templates/skeleton-product-grid" -import RefinementList from "@modules/store/components/refinement-list" -import { SortOptions } from "@modules/store/components/refinement-list/sort-products" -import PaginatedProducts from "@modules/store/templates/paginated-products" - -export default function CollectionTemplate({ - sortBy, - collection, - page, - countryCode, -}: { - sortBy?: SortOptions - collection: ProductCollection - page?: string - countryCode: string -}) { - const pageNumber = page ? parseInt(page) : 1 - - return ( -
- {/* */} -
-
-

{collection.title}

-
- }> - - -
-
- ) -} diff --git a/storeagentai-storefront/src/modules/common/components/cart-totals/index.tsx b/storeagentai-storefront/src/modules/common/components/cart-totals/index.tsx deleted file mode 100644 index 17444b19..00000000 --- a/storeagentai-storefront/src/modules/common/components/cart-totals/index.tsx +++ /dev/null @@ -1,78 +0,0 @@ -"use client" - -import { formatAmount } from "@lib/util/prices" -import { InformationCircleSolid } from "@medusajs/icons" -import { Cart, Order } from "@medusajs/medusa" -import { Tooltip } from "@medusajs/ui" -import React from "react" - -type CartTotalsProps = { - data: Omit | Order -} - -const CartTotals: React.FC = ({ data }) => { - const { - subtotal, - discount_total, - gift_card_total, - tax_total, - shipping_total, - total, - } = data - - const getAmount = (amount: number | null | undefined) => { - return formatAmount({ - amount: amount || 0, - region: data.region, - includeTaxes: false, - }) - } - - return ( -
-
-
- - Subtotal - - - - - {getAmount(subtotal)} -
- {!!discount_total && ( -
- Discount - - - {getAmount(discount_total)} - -
- )} - {!!gift_card_total && ( -
- Gift card - - - {getAmount(gift_card_total)} - -
- )} -
- Shipping - {getAmount(shipping_total)} -
-
- Taxes - {getAmount(tax_total)} -
-
-
-
- Total - {getAmount(total)} -
-
-
- ) -} - -export default CartTotals diff --git a/storeagentai-storefront/src/modules/common/components/checkbox/index.tsx b/storeagentai-storefront/src/modules/common/components/checkbox/index.tsx deleted file mode 100644 index d7843a4b..00000000 --- a/storeagentai-storefront/src/modules/common/components/checkbox/index.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { Checkbox, Label } from "@medusajs/ui" -import React from "react" - -type CheckboxProps = { - checked?: boolean - onChange?: () => void - label: string - name?: string -} - -const CheckboxWithLabel: React.FC = ({ - checked = true, - onChange, - label, - name, -}) => { - return ( -
- - -
- ) -} - -export default CheckboxWithLabel diff --git a/storeagentai-storefront/src/modules/common/components/delete-button/index.tsx b/storeagentai-storefront/src/modules/common/components/delete-button/index.tsx deleted file mode 100644 index 18cd384f..00000000 --- a/storeagentai-storefront/src/modules/common/components/delete-button/index.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { Spinner, Trash } from "@medusajs/icons" -import { clx } from "@medusajs/ui" -import { useState } from "react" - -import { deleteLineItem } from "@modules/cart/actions" - -const DeleteButton = ({ - id, - children, - className, -}: { - id: string - children?: React.ReactNode - className?: string -}) => { - const [isDeleting, setIsDeleting] = useState(false) - - const handleDelete = async (id: string) => { - setIsDeleting(true) - await deleteLineItem(id).catch((err) => { - setIsDeleting(false) - }) - } - - return ( -
- -
- ) -} - -export default DeleteButton diff --git a/storeagentai-storefront/src/modules/common/components/divider/index.tsx b/storeagentai-storefront/src/modules/common/components/divider/index.tsx deleted file mode 100644 index 9e964861..00000000 --- a/storeagentai-storefront/src/modules/common/components/divider/index.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { clx } from "@medusajs/ui" - -const Divider = ({ className }: { className?: string }) => ( -
-) - -export default Divider diff --git a/storeagentai-storefront/src/modules/common/components/filter-radio-group/index.tsx b/storeagentai-storefront/src/modules/common/components/filter-radio-group/index.tsx deleted file mode 100644 index 28478724..00000000 --- a/storeagentai-storefront/src/modules/common/components/filter-radio-group/index.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { EllipseMiniSolid } from "@medusajs/icons" -import { Label, RadioGroup, Text, clx } from "@medusajs/ui" -import { ChangeEvent } from "react" - -type FilterRadioGroupProps = { - title: string - items: { - value: string - label: string - }[] - value: any - handleChange: (...args: any[]) => void -} - -const FilterRadioGroup = ({ - title, - items, - value, - handleChange, -}: FilterRadioGroupProps) => { - return ( -
- {title} - - {items?.map((i) => ( -
- {i.value === value && } - - handleChange( - e as unknown as ChangeEvent, - i.value - ) - } - className="hidden peer" - id={i.value} - value={i.value} - /> - -
- ))} -
-
- ) -} - -export default FilterRadioGroup diff --git a/storeagentai-storefront/src/modules/common/components/input/index.tsx b/storeagentai-storefront/src/modules/common/components/input/index.tsx deleted file mode 100644 index 1234ebb2..00000000 --- a/storeagentai-storefront/src/modules/common/components/input/index.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import { Label } from "@medusajs/ui" -import React, { useEffect, useImperativeHandle, useState } from "react" - -import Eye from "@modules/common/icons/eye" -import EyeOff from "@modules/common/icons/eye-off" - -type InputProps = Omit< - Omit, "size">, - "placeholder" -> & { - label: string - errors?: Record - touched?: Record - name: string - topLabel?: string -} - -const Input = React.forwardRef( - ({ type, name, label, touched, required, topLabel, ...props }, ref) => { - const inputRef = React.useRef(null) - const [showPassword, setShowPassword] = useState(false) - const [inputType, setInputType] = useState(type) - - useEffect(() => { - if (type === "password" && showPassword) { - setInputType("text") - } - - if (type === "password" && !showPassword) { - setInputType("password") - } - }, [type, showPassword]) - - useImperativeHandle(ref, () => inputRef.current!) - - return ( -
- {topLabel && ( - - )} -
- - - {type === "password" && ( - - )} -
-
- ) - } -) - -Input.displayName = "Input" - -export default Input diff --git a/storeagentai-storefront/src/modules/common/components/interactive-link/index.tsx b/storeagentai-storefront/src/modules/common/components/interactive-link/index.tsx deleted file mode 100644 index d69211fe..00000000 --- a/storeagentai-storefront/src/modules/common/components/interactive-link/index.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { ArrowUpRightMini } from "@medusajs/icons" -import { Text } from "@medusajs/ui" -import LocalizedClientLink from "../localized-client-link" - -type InteractiveLinkProps = { - href: string - children?: React.ReactNode - onClick?: () => void -} - -const InteractiveLink = ({ - href, - children, - onClick, - ...props -}: InteractiveLinkProps) => { - return ( - - {children} - - - ) -} - -export default InteractiveLink diff --git a/storeagentai-storefront/src/modules/common/components/line-item-options/index.tsx b/storeagentai-storefront/src/modules/common/components/line-item-options/index.tsx deleted file mode 100644 index 140367df..00000000 --- a/storeagentai-storefront/src/modules/common/components/line-item-options/index.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { ProductVariant } from "@medusajs/medusa" -import { Text } from "@medusajs/ui" - -type LineItemOptionsProps = { variant: ProductVariant } - -const LineItemOptions = ({ variant }: LineItemOptionsProps) => { - return ( - - Variant: {variant.title} - - ) -} - -export default LineItemOptions diff --git a/storeagentai-storefront/src/modules/common/components/line-item-price/index.tsx b/storeagentai-storefront/src/modules/common/components/line-item-price/index.tsx deleted file mode 100644 index ad03d9f4..00000000 --- a/storeagentai-storefront/src/modules/common/components/line-item-price/index.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { formatAmount } from "@lib/util/prices" -import { LineItem, Region } from "@medusajs/medusa" -import { clx } from "@medusajs/ui" - -import { getPercentageDiff } from "@lib/util/get-precentage-diff" -import { CalculatedVariant } from "types/medusa" - -type LineItemPriceProps = { - item: Omit - region: Region - style?: "default" | "tight" -} - -const LineItemPrice = ({ - item, - region, - style = "default", -}: LineItemPriceProps) => { - const originalPrice = - (item.variant as CalculatedVariant).original_price * item.quantity - const hasReducedPrice = (item.total || 0) < originalPrice - - return ( -
-
- {hasReducedPrice && ( - <> -

- {style === "default" && ( - Original: - )} - - {formatAmount({ - amount: originalPrice, - region: region, - includeTaxes: false, - })} - -

- {style === "default" && ( - - -{getPercentageDiff(originalPrice, item.total || 0)}% - - )} - - )} - - {formatAmount({ - amount: item.total || 0, - region: region, - includeTaxes: false, - })} - -
-
- ) -} - -export default LineItemPrice diff --git a/storeagentai-storefront/src/modules/common/components/line-item-unit-price/index.tsx b/storeagentai-storefront/src/modules/common/components/line-item-unit-price/index.tsx deleted file mode 100644 index c7e5790a..00000000 --- a/storeagentai-storefront/src/modules/common/components/line-item-unit-price/index.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { formatAmount } from "@lib/util/prices" -import { LineItem, Region } from "@medusajs/medusa" -import { clx } from "@medusajs/ui" - -import { getPercentageDiff } from "@lib/util/get-precentage-diff" -import { CalculatedVariant } from "types/medusa" - -type LineItemUnitPriceProps = { - item: Omit - region: Region - style?: "default" | "tight" -} - -const LineItemUnitPrice = ({ - item, - region, - style = "default", -}: LineItemUnitPriceProps) => { - const originalPrice = (item.variant as CalculatedVariant).original_price - const hasReducedPrice = (originalPrice * item.quantity || 0) > item.total! - const reducedPrice = (item.total || 0) / item.quantity! - - return ( -
- {hasReducedPrice && ( - <> -

- {style === "default" && ( - Original: - )} - - {formatAmount({ - amount: originalPrice, - region: region, - includeTaxes: false, - })} - -

- {style === "default" && ( - - -{getPercentageDiff(originalPrice, reducedPrice || 0)}% - - )} - - )} - - {formatAmount({ - amount: reducedPrice || item.unit_price || 0, - region: region, - includeTaxes: false, - })} - -
- ) -} - -export default LineItemUnitPrice diff --git a/storeagentai-storefront/src/modules/common/components/localized-client-link/index.tsx b/storeagentai-storefront/src/modules/common/components/localized-client-link/index.tsx deleted file mode 100644 index af3c909a..00000000 --- a/storeagentai-storefront/src/modules/common/components/localized-client-link/index.tsx +++ /dev/null @@ -1,32 +0,0 @@ -"use client" - -import Link from "next/link" -import { useParams } from "next/navigation" -import React from "react" - -/** - * Use this component to create a Next.js `` that persists the current country code in the url, - * without having to explicitly pass it as a prop. - */ -const LocalizedClientLink = ({ - children, - href, - ...props -}: { - children?: React.ReactNode - href: string - className?: string - onClick?: () => void - passHref?: true - [x: string]: any -}) => { - const { countryCode } = useParams() - - return ( - - {children} - - ) -} - -export default LocalizedClientLink diff --git a/storeagentai-storefront/src/modules/common/components/modal/index.tsx b/storeagentai-storefront/src/modules/common/components/modal/index.tsx deleted file mode 100644 index 0ff1ba23..00000000 --- a/storeagentai-storefront/src/modules/common/components/modal/index.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import { Dialog, Transition } from "@headlessui/react" -import { clx } from "@medusajs/ui" -import React, { Fragment } from "react" - -import { ModalProvider, useModal } from "@lib/context/modal-context" -import X from "@modules/common/icons/x" - -type ModalProps = { - isOpen: boolean - close: () => void - size?: "small" | "medium" | "large" - search?: boolean - children: React.ReactNode -} - -const Modal = ({ - isOpen, - close, - size = "medium", - search = false, - children, -}: ModalProps) => { - return ( - - - -
- - -
-
- - - {children} - - -
-
-
-
- ) -} - -const Title: React.FC<{ children: React.ReactNode }> = ({ children }) => { - const { close } = useModal() - - return ( - -
{children}
-
- -
-
- ) -} - -const Description: React.FC<{ children: React.ReactNode }> = ({ children }) => { - return ( - - {children} - - ) -} - -const Body: React.FC<{ children: React.ReactNode }> = ({ children }) => { - return
{children}
-} - -const Footer: React.FC<{ children: React.ReactNode }> = ({ children }) => { - return
{children}
-} - -Modal.Title = Title -Modal.Description = Description -Modal.Body = Body -Modal.Footer = Footer - -export default Modal diff --git a/storeagentai-storefront/src/modules/common/components/native-select/index.tsx b/storeagentai-storefront/src/modules/common/components/native-select/index.tsx deleted file mode 100644 index 40ee68de..00000000 --- a/storeagentai-storefront/src/modules/common/components/native-select/index.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import { ChevronUpDown } from "@medusajs/icons" -import { clx } from "@medusajs/ui" -import { - SelectHTMLAttributes, - forwardRef, - useEffect, - useImperativeHandle, - useRef, - useState, -} from "react" - -export type NativeSelectProps = { - placeholder?: string - errors?: Record - touched?: Record -} & SelectHTMLAttributes - -const NativeSelect = forwardRef( - ( - { placeholder = "Select...", defaultValue, className, children, ...props }, - ref - ) => { - const innerRef = useRef(null) - const [isPlaceholder, setIsPlaceholder] = useState(false) - - useImperativeHandle( - ref, - () => innerRef.current - ) - - useEffect(() => { - if (innerRef.current && innerRef.current.value === "") { - setIsPlaceholder(true) - } else { - setIsPlaceholder(false) - } - }, [innerRef.current?.value]) - - return ( -
-
innerRef.current?.focus()} - onBlur={() => innerRef.current?.blur()} - className={clx( - "relative flex items-center text-base-regular border border-ui-border-base bg-ui-bg-subtle rounded-md hover:bg-ui-bg-field-hover", - className, - { - "text-ui-fg-muted": isPlaceholder, - } - )} - > - - - - -
-
- ) - } -) - -NativeSelect.displayName = "NativeSelect" - -export default NativeSelect diff --git a/storeagentai-storefront/src/modules/common/components/radio/index.tsx b/storeagentai-storefront/src/modules/common/components/radio/index.tsx deleted file mode 100644 index f001e2ca..00000000 --- a/storeagentai-storefront/src/modules/common/components/radio/index.tsx +++ /dev/null @@ -1,26 +0,0 @@ -const Radio = ({ checked }: { checked: boolean }) => { - return ( - <> - - - ) -} - -export default Radio diff --git a/storeagentai-storefront/src/modules/common/icons/back.tsx b/storeagentai-storefront/src/modules/common/icons/back.tsx deleted file mode 100644 index 078dfe04..00000000 --- a/storeagentai-storefront/src/modules/common/icons/back.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react" - -import { IconProps } from "types/icon" - -const Back: React.FC = ({ - size = "16", - color = "currentColor", - ...attributes -}) => { - return ( - - - - - ) -} - -export default Back diff --git a/storeagentai-storefront/src/modules/common/icons/bancontact.tsx b/storeagentai-storefront/src/modules/common/icons/bancontact.tsx deleted file mode 100644 index 57903d08..00000000 --- a/storeagentai-storefront/src/modules/common/icons/bancontact.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from "react" - -import { IconProps } from "types/icon" - -const Ideal: React.FC = ({ - size = "20", - color = "currentColor", - ...attributes -}) => { - return ( - - Bancontact icon - - - ) -} - -export default Ideal diff --git a/storeagentai-storefront/src/modules/common/icons/chevron-down.tsx b/storeagentai-storefront/src/modules/common/icons/chevron-down.tsx deleted file mode 100644 index 98e261c3..00000000 --- a/storeagentai-storefront/src/modules/common/icons/chevron-down.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React from "react" - -import { IconProps } from "types/icon" - -const ChevronDown: React.FC = ({ - size = "16", - color = "currentColor", - ...attributes -}) => { - return ( - - - - ) -} - -export default ChevronDown diff --git a/storeagentai-storefront/src/modules/common/icons/eye-off.tsx b/storeagentai-storefront/src/modules/common/icons/eye-off.tsx deleted file mode 100644 index a0cafbbd..00000000 --- a/storeagentai-storefront/src/modules/common/icons/eye-off.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react" - -import { IconProps } from "types/icon" - -const EyeOff: React.FC = ({ - size = "20", - color = "currentColor", - ...attributes -}) => { - return ( - - - - - ) -} - -export default EyeOff diff --git a/storeagentai-storefront/src/modules/common/icons/eye.tsx b/storeagentai-storefront/src/modules/common/icons/eye.tsx deleted file mode 100644 index 766b67fd..00000000 --- a/storeagentai-storefront/src/modules/common/icons/eye.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react" - -import { IconProps } from "types/icon" - -const Eye: React.FC = ({ - size = "20", - color = "currentColor", - ...attributes -}) => { - return ( - - - - - ) -} - -export default Eye diff --git a/storeagentai-storefront/src/modules/common/icons/fast-delivery.tsx b/storeagentai-storefront/src/modules/common/icons/fast-delivery.tsx deleted file mode 100644 index 89537e31..00000000 --- a/storeagentai-storefront/src/modules/common/icons/fast-delivery.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import React from "react" - -import { IconProps } from "types/icon" - -const FastDelivery: React.FC = ({ - size = "16", - color = "currentColor", - ...attributes -}) => { - return ( - - - - - - - - - ) -} - -export default FastDelivery diff --git a/storeagentai-storefront/src/modules/common/icons/ideal.tsx b/storeagentai-storefront/src/modules/common/icons/ideal.tsx deleted file mode 100644 index e20eec32..00000000 --- a/storeagentai-storefront/src/modules/common/icons/ideal.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from "react" - -import { IconProps } from "types/icon" - -const Ideal: React.FC = ({ - size = "20", - color = "currentColor", - ...attributes -}) => { - return ( - - iDEAL icon - - - ) -} - -export default Ideal diff --git a/storeagentai-storefront/src/modules/common/icons/map-pin.tsx b/storeagentai-storefront/src/modules/common/icons/map-pin.tsx deleted file mode 100644 index 427d3cc9..00000000 --- a/storeagentai-storefront/src/modules/common/icons/map-pin.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react" - -import { IconProps } from "types/icon" - -const MapPin: React.FC = ({ - size = "20", - color = "currentColor", - ...attributes -}) => { - return ( - - - - - ) -} - -export default MapPin diff --git a/storeagentai-storefront/src/modules/common/icons/medusa.tsx b/storeagentai-storefront/src/modules/common/icons/medusa.tsx deleted file mode 100644 index 2f032d96..00000000 --- a/storeagentai-storefront/src/modules/common/icons/medusa.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from "react" - -import { IconProps } from "types/icon" - -const Medusa: React.FC = ({ - size = "20", - color = "#9CA3AF", - ...attributes -}) => { - return ( - - - - ) -} - -export default Medusa diff --git a/storeagentai-storefront/src/modules/common/icons/nextjs.tsx b/storeagentai-storefront/src/modules/common/icons/nextjs.tsx deleted file mode 100644 index d310d5ca..00000000 --- a/storeagentai-storefront/src/modules/common/icons/nextjs.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from "react" - -import { IconProps } from "types/icon" - -const NextJs: React.FC = ({ - size = "20", - color = "#9CA3AF", - ...attributes -}) => { - return ( - - - - ) -} - -export default NextJs diff --git a/storeagentai-storefront/src/modules/common/icons/package.tsx b/storeagentai-storefront/src/modules/common/icons/package.tsx deleted file mode 100644 index af03f041..00000000 --- a/storeagentai-storefront/src/modules/common/icons/package.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import React from "react" - -import { IconProps } from "types/icon" - -const Package: React.FC = ({ - size = "20", - color = "currentColor", - ...attributes -}) => { - return ( - - - - - - ) -} - -export default Package diff --git a/storeagentai-storefront/src/modules/common/icons/paypal.tsx b/storeagentai-storefront/src/modules/common/icons/paypal.tsx deleted file mode 100644 index e147f976..00000000 --- a/storeagentai-storefront/src/modules/common/icons/paypal.tsx +++ /dev/null @@ -1,30 +0,0 @@ -const PayPal = () => { - return ( - - - - - ) -} - -export default PayPal diff --git a/storeagentai-storefront/src/modules/common/icons/placeholder-image.tsx b/storeagentai-storefront/src/modules/common/icons/placeholder-image.tsx deleted file mode 100644 index 9c381c6e..00000000 --- a/storeagentai-storefront/src/modules/common/icons/placeholder-image.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import React from "react" - -import { IconProps } from "types/icon" - -const PlaceholderImage: React.FC = ({ - size = "20", - color = "currentColor", - ...attributes -}) => { - return ( - - - - - - ) -} - -export default PlaceholderImage diff --git a/storeagentai-storefront/src/modules/common/icons/refresh.tsx b/storeagentai-storefront/src/modules/common/icons/refresh.tsx deleted file mode 100644 index bf3374a2..00000000 --- a/storeagentai-storefront/src/modules/common/icons/refresh.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React from "react" - -import { IconProps } from "types/icon" - -const Refresh: React.FC = ({ - size = "16", - color = "currentColor", - ...attributes -}) => { - return ( - - - - - - - ) -} - -export default Refresh diff --git a/storeagentai-storefront/src/modules/common/icons/spinner.tsx b/storeagentai-storefront/src/modules/common/icons/spinner.tsx deleted file mode 100644 index af5d84e6..00000000 --- a/storeagentai-storefront/src/modules/common/icons/spinner.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react" - -import { IconProps } from "types/icon" - -const Spinner: React.FC = ({ - size = "16", - color = "currentColor", - ...attributes -}) => { - return ( - - - - - ) -} - -export default Spinner diff --git a/storeagentai-storefront/src/modules/common/icons/trash.tsx b/storeagentai-storefront/src/modules/common/icons/trash.tsx deleted file mode 100644 index 6b1abe6d..00000000 --- a/storeagentai-storefront/src/modules/common/icons/trash.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React from "react" - -import { IconProps } from "types/icon" - -const Trash: React.FC = ({ - size = "16", - color = "currentColor", - ...attributes -}) => { - return ( - - - - - - - ) -} - -export default Trash diff --git a/storeagentai-storefront/src/modules/common/icons/user.tsx b/storeagentai-storefront/src/modules/common/icons/user.tsx deleted file mode 100644 index c972c1e6..00000000 --- a/storeagentai-storefront/src/modules/common/icons/user.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react" - -import { IconProps } from "types/icon" - -const User: React.FC = ({ - size = "16", - color = "currentColor", - ...attributes -}) => { - return ( - - - - - ) -} - -export default User diff --git a/storeagentai-storefront/src/modules/common/icons/x.tsx b/storeagentai-storefront/src/modules/common/icons/x.tsx deleted file mode 100644 index cabac7bd..00000000 --- a/storeagentai-storefront/src/modules/common/icons/x.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react" - -import { IconProps } from "types/icon" - -const X: React.FC = ({ - size = "20", - color = "currentColor", - ...attributes -}) => { - return ( - - - - - ) -} - -export default X diff --git a/storeagentai-storefront/src/modules/home/components/featured-products/index.tsx b/storeagentai-storefront/src/modules/home/components/featured-products/index.tsx deleted file mode 100644 index a43d2e87..00000000 --- a/storeagentai-storefront/src/modules/home/components/featured-products/index.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { Region } from "@medusajs/medusa" - -import ProductRail from "@modules/home/components/featured-products/product-rail" -import { ProductCollectionWithPreviews } from "types/global" - -export default async function FeaturedProducts({ - collections, - region, -}: { - collections: ProductCollectionWithPreviews[] - region: Region -}) { - return collections.map((collection) => ( -
  • - -
  • - )) -} diff --git a/storeagentai-storefront/src/modules/home/components/featured-products/product-rail/index.tsx b/storeagentai-storefront/src/modules/home/components/featured-products/product-rail/index.tsx deleted file mode 100644 index ed99b1bf..00000000 --- a/storeagentai-storefront/src/modules/home/components/featured-products/product-rail/index.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { Region } from "@medusajs/medusa" -import { Text } from "@medusajs/ui" - -import InteractiveLink from "@modules/common/components/interactive-link" -import ProductPreview from "@modules/products/components/product-preview" -import { ProductCollectionWithPreviews } from "types/global" - -export default function ProductRail({ - collection, - region, -}: { - collection: ProductCollectionWithPreviews - region: Region -}) { - const { products } = collection - - if (!products) { - return null - } - - return ( -
    -
    - {collection.title} - - View all - -
    -
      - {products && - products.map((product) => ( -
    • - -
    • - ))} -
    -
    - ) -} diff --git a/storeagentai-storefront/src/modules/home/components/hero/index.tsx b/storeagentai-storefront/src/modules/home/components/hero/index.tsx deleted file mode 100644 index ab55c1fb..00000000 --- a/storeagentai-storefront/src/modules/home/components/hero/index.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Github } from "@medusajs/icons" -import { Button, Heading } from "@medusajs/ui" - -const Hero = () => { - return ( -
    -
    - - - Ecommerce Starter Template - - - Powered by Medusa and Next.js - - - - - -
    -
    - ) -} - -export default Hero diff --git a/storeagentai-storefront/src/modules/layout/components/cart-button/index.tsx b/storeagentai-storefront/src/modules/layout/components/cart-button/index.tsx deleted file mode 100644 index f8678553..00000000 --- a/storeagentai-storefront/src/modules/layout/components/cart-button/index.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { LineItem } from "@medusajs/medusa" - -import { enrichLineItems, retrieveCart } from "@modules/cart/actions" - -import CartDropdown from "../cart-dropdown" - -const fetchCart = async () => { - const cart = await retrieveCart() - - if (cart?.items.length) { - const enrichedItems = await enrichLineItems(cart?.items, cart?.region_id) - cart.items = enrichedItems as LineItem[] - } - - return cart -} - -export default async function CartButton() { - const cart = await fetchCart() - - return -} diff --git a/storeagentai-storefront/src/modules/layout/components/cart-dropdown/index.tsx b/storeagentai-storefront/src/modules/layout/components/cart-dropdown/index.tsx deleted file mode 100644 index b6b9875e..00000000 --- a/storeagentai-storefront/src/modules/layout/components/cart-dropdown/index.tsx +++ /dev/null @@ -1,197 +0,0 @@ -"use client" - -import { Popover, Transition } from "@headlessui/react" -import { Cart } from "@medusajs/medusa" -import { Button } from "@medusajs/ui" -import { useParams, usePathname } from "next/navigation" -import { Fragment, useEffect, useRef, useState } from "react" - -import { formatAmount } from "@lib/util/prices" -import DeleteButton from "@modules/common/components/delete-button" -import LineItemOptions from "@modules/common/components/line-item-options" -import LineItemPrice from "@modules/common/components/line-item-price" -import LocalizedClientLink from "@modules/common/components/localized-client-link" -import Thumbnail from "@modules/products/components/thumbnail" - -const CartDropdown = ({ - cart: cartState, -}: { - cart?: Omit | null -}) => { - const [activeTimer, setActiveTimer] = useState( - undefined - ) - const [cartDropdownOpen, setCartDropdownOpen] = useState(false) - - const { countryCode } = useParams() - - const open = () => setCartDropdownOpen(true) - const close = () => setCartDropdownOpen(false) - - const totalItems = - cartState?.items?.reduce((acc, item) => { - return acc + item.quantity - }, 0) || 0 - - const itemRef = useRef(totalItems || 0) - - const timedOpen = () => { - open() - - const timer = setTimeout(close, 5000) - - setActiveTimer(timer) - } - - const openAndCancel = () => { - if (activeTimer) { - clearTimeout(activeTimer) - } - - open() - } - - // Clean up the timer when the component unmounts - useEffect(() => { - return () => { - if (activeTimer) { - clearTimeout(activeTimer) - } - } - }, [activeTimer]) - - const pathname = usePathname() - - // open cart dropdown when modifying the cart items, but only if we're not on the cart page - useEffect(() => { - if (itemRef.current !== totalItems && !pathname.includes("/cart")) { - timedOpen() - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [totalItems, itemRef.current]) - - return ( -
    - - - {`Cart (${totalItems})`} - - - -
    -

    Cart

    -
    - {cartState && cartState.items?.length ? ( - <> -
    - {cartState.items - .sort((a, b) => { - return a.created_at > b.created_at ? -1 : 1 - }) - .map((item) => ( -
    - - - -
    -
    -
    -
    -

    - - {item.title} - -

    - - Quantity: {item.quantity} -
    -
    - -
    -
    -
    - - Remove - -
    -
    - ))} -
    -
    -
    - - Subtotal{" "} - (excl. taxes) - - - {formatAmount({ - amount: cartState.subtotal || 0, - region: cartState.region, - includeTaxes: false, - })} - -
    - - - -
    - - ) : ( -
    -
    -
    - 0 -
    - Your shopping bag is empty. -
    - - <> - Go to all products page - - - -
    -
    -
    - )} -
    -
    -
    -
    - ) -} - -export default CartDropdown diff --git a/storeagentai-storefront/src/modules/layout/components/country-select/index.tsx b/storeagentai-storefront/src/modules/layout/components/country-select/index.tsx deleted file mode 100644 index 807f5332..00000000 --- a/storeagentai-storefront/src/modules/layout/components/country-select/index.tsx +++ /dev/null @@ -1,124 +0,0 @@ -"use client" - -import { Listbox, Transition } from "@headlessui/react" -import { Region } from "@medusajs/medusa" -import { Fragment, useEffect, useMemo, useState } from "react" -import ReactCountryFlag from "react-country-flag" - -import { StateType } from "@lib/hooks/use-toggle-state" -import { updateRegion } from "app/actions" -import { useParams, usePathname } from "next/navigation" - -type CountryOption = { - country: string - region: string - label: string -} - -type CountrySelectProps = { - toggleState: StateType - regions: Region[] -} - -const CountrySelect = ({ toggleState, regions }: CountrySelectProps) => { - const [current, setCurrent] = useState(undefined) - - const { countryCode } = useParams() - const currentPath = usePathname().split(`/${countryCode}`)[1] - - const { state, close } = toggleState - - const options: CountryOption[] | undefined = useMemo(() => { - return regions - ?.map((r) => { - return r.countries.map((c) => ({ - country: c.iso_2, - region: r.id, - label: c.display_name, - })) - }) - .flat() - .sort((a, b) => a.label.localeCompare(b.label)) - }, [regions]) - - useEffect(() => { - if (countryCode) { - const option = options?.find((o) => o.country === countryCode) - setCurrent(option) - } - }, [options, countryCode]) - - const handleChange = (option: CountryOption) => { - updateRegion(option.country, currentPath) - close() - } - - return ( -
    - o.country === countryCode) - : undefined - } - > - -
    - Shipping to: - {current && ( - - - {current.label} - - )} -
    -
    -
    - - - {options?.map((o, index) => { - return ( - - {" "} - {o.label} - - ) - })} - - -
    -
    -
    - ) -} - -export default CountrySelect diff --git a/storeagentai-storefront/src/modules/layout/components/medusa-cta/index.tsx b/storeagentai-storefront/src/modules/layout/components/medusa-cta/index.tsx deleted file mode 100644 index d4469471..00000000 --- a/storeagentai-storefront/src/modules/layout/components/medusa-cta/index.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { Text } from "@medusajs/ui" - -import Medusa from "../../../common/icons/medusa" -import NextJs from "../../../common/icons/nextjs" - -const MedusaCTA = () => { - return ( - - Powered by - - - - & - - - - - ) -} - -export default MedusaCTA diff --git a/storeagentai-storefront/src/modules/layout/components/side-menu/index.tsx b/storeagentai-storefront/src/modules/layout/components/side-menu/index.tsx deleted file mode 100644 index df1a5e62..00000000 --- a/storeagentai-storefront/src/modules/layout/components/side-menu/index.tsx +++ /dev/null @@ -1,102 +0,0 @@ -"use client" - -import { Popover, Transition } from "@headlessui/react" -import { ArrowRightMini, XMark } from "@medusajs/icons" -import { Region } from "@medusajs/medusa" -import { Text, clx, useToggleState } from "@medusajs/ui" -import { Fragment } from "react" - -import LocalizedClientLink from "@modules/common/components/localized-client-link" -import CountrySelect from "../country-select" - -const SideMenuItems = { - Home: "/", - Store: "/store", - Search: "/search", - Account: "/account", - Cart: "/cart", -} - -const SideMenu = ({ regions }: { regions: Region[] | null }) => { - const toggleState = useToggleState() - - return ( -
    -
    - - {({ open, close }) => ( - <> -
    - - Menu - -
    - - - -
    -
    - -
    -
      - {Object.entries(SideMenuItems).map(([name, href]) => { - return ( -
    • - - {name} - -
    • - ) - })} -
    -
    -
    - {regions && ( - - )} - -
    - - © {new Date().getFullYear()} Medusa Store. All rights - reserved. - -
    -
    -
    -
    - - )} -
    -
    -
    - ) -} - -export default SideMenu diff --git a/storeagentai-storefront/src/modules/layout/templates/footer/index.tsx b/storeagentai-storefront/src/modules/layout/templates/footer/index.tsx deleted file mode 100644 index f7b41831..00000000 --- a/storeagentai-storefront/src/modules/layout/templates/footer/index.tsx +++ /dev/null @@ -1,150 +0,0 @@ -import { Text, clx } from "@medusajs/ui" - -import { getCategoriesList, getCollectionsList } from "@lib/data" - -import LocalizedClientLink from "@modules/common/components/localized-client-link" -import MedusaCTA from "@modules/layout/components/medusa-cta" - -export default async function Footer() { - const { collections } = await getCollectionsList(0, 6) - const { product_categories } = await getCategoriesList(0, 6) - - return ( -
    -
    -
    -
    - - {/* Medusa Store */} - -
    -
    - {product_categories && product_categories?.length > 0 && ( -
    - - Categories - -
      - {product_categories?.slice(0, 6).map((c) => { - if (c.parent_category) { - return - } - - const children = - c.category_children?.map((child) => ({ - name: child.name, - handle: child.handle, - id: child.id, - })) || null - - return ( -
    • - - {c.name} - - {children && ( -
        - {children && - children.map((child) => ( -
      • - - {child.name} - -
      • - ))} -
      - )} -
    • - ) - })} -
    -
    - )} - {collections && collections.length > 0 && ( -
    - - Collections - -
      3, - } - )} - > - {collections?.slice(0, 6).map((c) => ( -
    • - - {c.title} - -
    • - ))} -
    -
    - )} - {/* */} -
    -
    - {/*
    - - © {new Date().getFullYear()} Medusa Store. All rights reserved. - - -
    */} -
    -
    - ) -} diff --git a/storeagentai-storefront/src/modules/layout/templates/index.tsx b/storeagentai-storefront/src/modules/layout/templates/index.tsx deleted file mode 100644 index 95a8db12..00000000 --- a/storeagentai-storefront/src/modules/layout/templates/index.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from "react" - -import Footer from "@modules/layout/templates/footer" -import Nav from "@modules/layout/templates/nav" - -const Layout: React.FC<{ - children: React.ReactNode -}> = ({ children }) => { - return ( -
    -
    - ) -} - -export default Layout diff --git a/storeagentai-storefront/src/modules/layout/templates/nav/index.tsx b/storeagentai-storefront/src/modules/layout/templates/nav/index.tsx deleted file mode 100644 index 30b0999b..00000000 --- a/storeagentai-storefront/src/modules/layout/templates/nav/index.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { headers } from "next/headers" -import { Suspense } from "react" - -import { listRegions } from "@lib/data" -import LocalizedClientLink from "@modules/common/components/localized-client-link" -import CartButton from "@modules/layout/components/cart-button" -import SideMenu from "@modules/layout/components/side-menu" - -export default async function Nav() { - const regions = await listRegions().then((regions) => regions) - - return ( -
    -
    - -
    -
    - ) -} diff --git a/storeagentai-storefront/src/modules/order/components/help/index.tsx b/storeagentai-storefront/src/modules/order/components/help/index.tsx deleted file mode 100644 index 45106d05..00000000 --- a/storeagentai-storefront/src/modules/order/components/help/index.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { Heading } from "@medusajs/ui" -import LocalizedClientLink from "@modules/common/components/localized-client-link" -import React from "react" - -const Help = () => { - return ( -
    - Need help? -
    -
      -
    • - Contact -
    • -
    • - - Returns & Exchanges - -
    • -
    -
    -
    - ) -} - -export default Help diff --git a/storeagentai-storefront/src/modules/order/components/item/index.tsx b/storeagentai-storefront/src/modules/order/components/item/index.tsx deleted file mode 100644 index 63101b6f..00000000 --- a/storeagentai-storefront/src/modules/order/components/item/index.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { LineItem, Region } from "@medusajs/medusa" -import { Table, Text } from "@medusajs/ui" - -import LineItemOptions from "@modules/common/components/line-item-options" -import LineItemPrice from "@modules/common/components/line-item-price" -import LineItemUnitPrice from "@modules/common/components/line-item-unit-price" -import Thumbnail from "@modules/products/components/thumbnail" - -type ItemProps = { - item: Omit - region: Region -} - -const Item = ({ item, region }: ItemProps) => { - return ( - - -
    - -
    -
    - - - {item.title} - - - - - - - {item.quantity}x - - - - - - -
    - ) -} - -export default Item diff --git a/storeagentai-storefront/src/modules/order/components/items/index.tsx b/storeagentai-storefront/src/modules/order/components/items/index.tsx deleted file mode 100644 index 5de9f623..00000000 --- a/storeagentai-storefront/src/modules/order/components/items/index.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { LineItem, Region } from "@medusajs/medusa" -import { Table } from "@medusajs/ui" - -import Divider from "@modules/common/components/divider" -import Item from "@modules/order/components/item" -import SkeletonLineItem from "@modules/skeletons/components/skeleton-line-item" - -type ItemsProps = { - items: LineItem[] - region: Region -} - -const Items = ({ items, region }: ItemsProps) => { - return ( -
    - - - - {items?.length && region - ? items - .sort((a, b) => { - return a.created_at > b.created_at ? -1 : 1 - }) - .map((item) => { - return - }) - : Array.from(Array(5).keys()).map((i) => { - return - })} - -
    -
    - ) -} - -export default Items diff --git a/storeagentai-storefront/src/modules/order/components/onboarding-cta/index.tsx b/storeagentai-storefront/src/modules/order/components/onboarding-cta/index.tsx deleted file mode 100644 index dd37b25a..00000000 --- a/storeagentai-storefront/src/modules/order/components/onboarding-cta/index.tsx +++ /dev/null @@ -1,28 +0,0 @@ -"use client" - -import { Button, Container, Text } from "@medusajs/ui" -import { resetOnboardingState } from "app/actions" - -const OnboardingCta = ({ orderId }: { orderId: string }) => { - return ( - -
    - - Your test order was successfully created! 🎉 - - - You can now complete setting up your store in the admin. - - -
    -
    - ) -} - -export default OnboardingCta diff --git a/storeagentai-storefront/src/modules/order/components/order-details/index.tsx b/storeagentai-storefront/src/modules/order/components/order-details/index.tsx deleted file mode 100644 index c0d57751..00000000 --- a/storeagentai-storefront/src/modules/order/components/order-details/index.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { Order } from "@medusajs/medusa" -import { Text } from "@medusajs/ui" - -type OrderDetailsProps = { - order: Order - showStatus?: boolean -} - -const OrderDetails = ({ order, showStatus }: OrderDetailsProps) => { - const formatStatus = (str: string) => { - const formatted = str.split("_").join(" ") - - return formatted.slice(0, 1).toUpperCase() + formatted.slice(1) - } - - return ( -
    - - We have sent the order confirmation details to{" "} - - {order.email} - - . - - - Order date: {new Date(order.created_at).toDateString()} - - - Order number: {order.display_id} - - -
    - {showStatus && ( - <> - - Order status:{" "} - - {formatStatus(order.fulfillment_status)} - - - - Payment status:{" "} - - {formatStatus(order.payment_status)} - - - - )} -
    -
    - ) -} - -export default OrderDetails diff --git a/storeagentai-storefront/src/modules/order/components/order-summary/index.tsx b/storeagentai-storefront/src/modules/order/components/order-summary/index.tsx deleted file mode 100644 index 8513a8d7..00000000 --- a/storeagentai-storefront/src/modules/order/components/order-summary/index.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { Order } from "@medusajs/medusa" -import { formatAmount } from "@lib/util/prices" - -type OrderSummaryProps = { - order: Order -} - -const OrderSummary = ({ order }: OrderSummaryProps) => { - const getAmount = (amount?: number | null) => { - if (!amount) { - return - } - - return formatAmount({ amount, region: order.region, includeTaxes: false }) - } - - return ( -
    -

    Order Summary

    -
    -
    - Subtotal - {getAmount(order.subtotal)} -
    -
    - {order.discount_total > 0 && ( -
    - Discount - - {getAmount(order.discount_total)} -
    - )} - {order.gift_card_total > 0 && ( -
    - Discount - - {getAmount(order.gift_card_total)} -
    - )} -
    - Shipping - {getAmount(order.shipping_total)} -
    -
    - Taxes - {getAmount(order.tax_total)} -
    -
    -
    -
    - Total - {getAmount(order.total)} -
    -
    -
    - ) -} - -export default OrderSummary diff --git a/storeagentai-storefront/src/modules/order/components/payment-details/index.tsx b/storeagentai-storefront/src/modules/order/components/payment-details/index.tsx deleted file mode 100644 index d3ac8539..00000000 --- a/storeagentai-storefront/src/modules/order/components/payment-details/index.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { Order } from "@medusajs/medusa" -import { Container, Heading, Text } from "@medusajs/ui" -import { formatAmount } from "@lib/util/prices" - -import { paymentInfoMap } from "@lib/constants" -import Divider from "@modules/common/components/divider" - -type PaymentDetailsProps = { - order: Order -} - -const PaymentDetails = ({ order }: PaymentDetailsProps) => { - const payment = order.payments[0] - return ( -
    - - Payment - -
    - {payment && ( -
    -
    - - Payment method - - - {paymentInfoMap[payment.provider_id].title} - -
    -
    - - Payment details - -
    - - {paymentInfoMap[payment.provider_id].icon} - - - {payment.provider_id === "stripe" && payment.data.card_last4 - ? `**** **** **** ${payment.data.card_last4}` - : `${formatAmount({ - amount: payment.amount, - region: order.region, - includeTaxes: false, - })} paid at ${new Date(payment.created_at).toString()}`} - -
    -
    -
    - )} -
    - - -
    - ) -} - -export default PaymentDetails diff --git a/storeagentai-storefront/src/modules/order/components/shipping-details/index.tsx b/storeagentai-storefront/src/modules/order/components/shipping-details/index.tsx deleted file mode 100644 index eda824ea..00000000 --- a/storeagentai-storefront/src/modules/order/components/shipping-details/index.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { Order } from "@medusajs/medusa" -import { Heading, Text } from "@medusajs/ui" -import { formatAmount } from "@lib/util/prices" - -import Divider from "@modules/common/components/divider" - -type ShippingDetailsProps = { - order: Order -} - -const ShippingDetails = ({ order }: ShippingDetailsProps) => { - return ( -
    - - Delivery - -
    -
    - - Shipping Address - - - {order.shipping_address.first_name}{" "} - {order.shipping_address.last_name} - - - {order.shipping_address.address_1}{" "} - {order.shipping_address.address_2} - - - {order.shipping_address.postal_code}, {order.shipping_address.city} - - - {order.shipping_address.country_code?.toUpperCase()} - -
    - -
    - Contact - - {order.shipping_address.phone} - - {order.email} -
    - -
    - Method - - {order.shipping_methods[0].shipping_option?.name} ( - {formatAmount({ - amount: order.shipping_methods[0].price, - region: order.region, - includeTaxes: false, - }) - .replace(/,/g, "") - .replace(/\./g, ",")} - ) - -
    -
    - -
    - ) -} - -export default ShippingDetails diff --git a/storeagentai-storefront/src/modules/order/templates/order-completed-template.tsx b/storeagentai-storefront/src/modules/order/templates/order-completed-template.tsx deleted file mode 100644 index b6ab986f..00000000 --- a/storeagentai-storefront/src/modules/order/templates/order-completed-template.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { Order } from "@medusajs/medusa" -import { Heading } from "@medusajs/ui" -import { cookies } from "next/headers" - -import CartTotals from "@modules/common/components/cart-totals" -import Help from "@modules/order/components/help" -import Items from "@modules/order/components/items" -import OnboardingCta from "@modules/order/components/onboarding-cta" -import OrderDetails from "@modules/order/components/order-details" -import ShippingDetails from "@modules/order/components/shipping-details" -import PaymentDetails from "@modules/order/components/payment-details" - -type OrderCompletedTemplateProps = { - order: Order -} - -export default function OrderCompletedTemplate({ - order, -}: OrderCompletedTemplateProps) { - const isOnboarding = cookies().get("_medusa_onboarding")?.value === "true" - - return ( -
    -
    - {isOnboarding && } -
    - - Thank you! - Your order was placed successfully. - - - - Summary - - - - - - -
    -
    -
    - ) -} diff --git a/storeagentai-storefront/src/modules/order/templates/order-details-template.tsx b/storeagentai-storefront/src/modules/order/templates/order-details-template.tsx deleted file mode 100644 index 0a904e9b..00000000 --- a/storeagentai-storefront/src/modules/order/templates/order-details-template.tsx +++ /dev/null @@ -1,43 +0,0 @@ -"use client" - -import { Order } from "@medusajs/medusa" -import { XMark } from "@medusajs/icons" -import React from "react" - -import Help from "@modules/order/components/help" -import Items from "@modules/order/components/items" -import OrderDetails from "@modules/order/components/order-details" -import OrderSummary from "@modules/order/components/order-summary" -import ShippingDetails from "@modules/order/components/shipping-details" -import LocalizedClientLink from "@modules/common/components/localized-client-link" - -type OrderDetailsTemplateProps = { - order: Order -} - -const OrderDetailsTemplate: React.FC = ({ - order, -}) => { - return ( -
    -
    -

    Order details

    - - Back to overview - -
    -
    - - - - - -
    -
    - ) -} - -export default OrderDetailsTemplate diff --git a/storeagentai-storefront/src/modules/products/components/image-gallery/index.tsx b/storeagentai-storefront/src/modules/products/components/image-gallery/index.tsx deleted file mode 100644 index f226ac07..00000000 --- a/storeagentai-storefront/src/modules/products/components/image-gallery/index.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { Image as MedusaImage } from "@medusajs/medusa" -import { Container } from "@medusajs/ui" -import Image from "next/image" - -type ImageGalleryProps = { - images: MedusaImage[] -} - -const ImageGallery = ({ images }: ImageGalleryProps) => { - return ( -
    -
    - {images.map((image, index) => { - return ( - - {`Product - - ) - })} -
    -
    - ) -} - -export default ImageGallery diff --git a/storeagentai-storefront/src/modules/products/components/mobile-actions/index.tsx b/storeagentai-storefront/src/modules/products/components/mobile-actions/index.tsx deleted file mode 100644 index 934506de..00000000 --- a/storeagentai-storefront/src/modules/products/components/mobile-actions/index.tsx +++ /dev/null @@ -1,189 +0,0 @@ -import { Dialog, Transition } from "@headlessui/react" -import { - PricedProduct, - PricedVariant, -} from "@medusajs/medusa/dist/types/pricing" -import { Button, clx } from "@medusajs/ui" -import React, { Fragment, useMemo } from "react" - -import useToggleState from "@lib/hooks/use-toggle-state" -import ChevronDown from "@modules/common/icons/chevron-down" -import X from "@modules/common/icons/x" - -import { getProductPrice } from "@lib/util/get-product-price" -import { Region } from "@medusajs/medusa" -import OptionSelect from "../option-select" - -type MobileActionsProps = { - product: PricedProduct - variant?: PricedVariant - region: Region - options: Record - updateOptions: (update: Record) => void - inStock?: boolean - handleAddToCart: () => void - isAdding?: boolean - show: boolean -} - -const MobileActions: React.FC = ({ - product, - variant, - region, - options, - updateOptions, - inStock, - handleAddToCart, - isAdding, - show, -}) => { - const { state, open, close } = useToggleState() - - const price = getProductPrice({ - product: product, - variantId: variant?.id, - region, - }) - - const selectedPrice = useMemo(() => { - if (!price) { - return null - } - const { variantPrice, cheapestPrice } = price - - return variantPrice || cheapestPrice || null - }, [price]) - - return ( - <> -
    - -
    -
    - {product.title} - - {selectedPrice ? ( -
    - {selectedPrice.price_type === "sale" && ( -

    - - {selectedPrice.original_price} - -

    - )} - - {selectedPrice.calculated_price} - -
    - ) : ( -
    - )} -
    -
    - - -
    -
    -
    -
    - - - -
    - - -
    -
    - - -
    - -
    -
    - {product.variants.length > 1 && ( -
    - {(product.options || []).map((option) => { - return ( -
    - -
    - ) - })} -
    - )} -
    -
    -
    -
    -
    -
    -
    - - ) -} - -export default MobileActions diff --git a/storeagentai-storefront/src/modules/products/components/option-select/index.tsx b/storeagentai-storefront/src/modules/products/components/option-select/index.tsx deleted file mode 100644 index 91453a4d..00000000 --- a/storeagentai-storefront/src/modules/products/components/option-select/index.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { ProductOption } from "@medusajs/medusa" -import { clx } from "@medusajs/ui" -import React from "react" - -import { onlyUnique } from "@lib/util/only-unique" - -type OptionSelectProps = { - option: ProductOption - current: string - updateOption: (option: Record) => void - title: string -} - -const OptionSelect: React.FC = ({ - option, - current, - updateOption, - title, -}) => { - const filteredOptions = option.values.map((v) => v.value).filter(onlyUnique) - - return ( -
    - Select {title} -
    - {filteredOptions.map((v) => { - return ( - - ) - })} -
    -
    - ) -} - -export default OptionSelect diff --git a/storeagentai-storefront/src/modules/products/components/product-actions/index.tsx b/storeagentai-storefront/src/modules/products/components/product-actions/index.tsx deleted file mode 100644 index 025ba457..00000000 --- a/storeagentai-storefront/src/modules/products/components/product-actions/index.tsx +++ /dev/null @@ -1,178 +0,0 @@ -"use client" - -import { Region } from "@medusajs/medusa" -import { PricedProduct } from "@medusajs/medusa/dist/types/pricing" -import { Button } from "@medusajs/ui" -import { isEqual } from "lodash" -import { useParams } from "next/navigation" -import { useEffect, useMemo, useRef, useState } from "react" - -import { useIntersection } from "@lib/hooks/use-in-view" -import { addToCart } from "@modules/cart/actions" -import Divider from "@modules/common/components/divider" -import OptionSelect from "@modules/products/components/option-select" - -import MobileActions from "../mobile-actions" -import ProductPrice from "../product-price" - -type ProductActionsProps = { - product: PricedProduct - region: Region -} - -export type PriceType = { - calculated_price: string - original_price?: string - price_type?: "sale" | "default" - percentage_diff?: string -} - -export default function ProductActions({ - product, - region, -}: ProductActionsProps) { - const [options, setOptions] = useState>({}) - const [isAdding, setIsAdding] = useState(false) - - const countryCode = useParams().countryCode as string - - const variants = product.variants - - // initialize the option state - useEffect(() => { - const optionObj: Record = {} - - for (const option of product.options || []) { - Object.assign(optionObj, { [option.id]: undefined }) - } - - setOptions(optionObj) - }, [product]) - - // memoized record of the product's variants - const variantRecord = useMemo(() => { - const map: Record> = {} - - for (const variant of variants) { - if (!variant.options || !variant.id) continue - - const temp: Record = {} - - for (const option of variant.options) { - temp[option.option_id] = option.value - } - - map[variant.id] = temp - } - - return map - }, [variants]) - - // memoized function to check if the current options are a valid variant - const variant = useMemo(() => { - let variantId: string | undefined = undefined - - for (const key of Object.keys(variantRecord)) { - if (isEqual(variantRecord[key], options)) { - variantId = key - } - } - - return variants.find((v) => v.id === variantId) - }, [options, variantRecord, variants]) - - // if product only has one variant, then select it - useEffect(() => { - if (variants.length === 1 && variants[0].id) { - setOptions(variantRecord[variants[0].id]) - } - }, [variants, variantRecord]) - - // update the options when a variant is selected - const updateOptions = (update: Record) => { - setOptions({ ...options, ...update }) - } - - // check if the selected variant is in stock - const inStock = useMemo(() => { - if (variant && !variant.inventory_quantity) { - return false - } - - if (variant && variant.allow_backorder === false) { - return true - } - }, [variant]) - - const actionsRef = useRef(null) - - const inView = useIntersection(actionsRef, "0px") - - // add the selected variant to the cart - const handleAddToCart = async () => { - if (!variant?.id) return null - - setIsAdding(true) - - await addToCart({ - variantId: variant.id, - quantity: 1, - countryCode, - }) - - setIsAdding(false) - } - - return ( - <> -
    -
    - {product.variants.length > 1 && ( -
    - {(product.options || []).map((option) => { - return ( -
    - -
    - ) - })} - -
    - )} -
    - - - - - -
    - - ) -} diff --git a/storeagentai-storefront/src/modules/products/components/product-onboarding-cta/index.tsx b/storeagentai-storefront/src/modules/products/components/product-onboarding-cta/index.tsx deleted file mode 100644 index 97d5124b..00000000 --- a/storeagentai-storefront/src/modules/products/components/product-onboarding-cta/index.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { Button, Container, Text } from "@medusajs/ui" -import { cookies } from "next/headers" - -const ProductOnboardingCta = () => { - const isOnboarding = cookies().get("_medusa_onboarding")?.value === "true" - - if (!isOnboarding) { - return null - } - - return ( - -
    - - Your demo product was successfully created! 🎉 - - - You can now continue setting up your store in the admin. - - - - -
    -
    - ) -} - -export default ProductOnboardingCta diff --git a/storeagentai-storefront/src/modules/products/components/product-preview/index.tsx b/storeagentai-storefront/src/modules/products/components/product-preview/index.tsx deleted file mode 100644 index e975a32e..00000000 --- a/storeagentai-storefront/src/modules/products/components/product-preview/index.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { Text } from "@medusajs/ui" - -import { ProductPreviewType } from "types/global" - -import { retrievePricedProductById } from "@lib/data" -import { getProductPrice } from "@lib/util/get-product-price" -import { Region } from "@medusajs/medusa" -import LocalizedClientLink from "@modules/common/components/localized-client-link" -import Thumbnail from "../thumbnail" -import PreviewPrice from "./price" - -export default async function ProductPreview({ - productPreview, - isFeatured, - region, -}: { - productPreview: ProductPreviewType - isFeatured?: boolean - region: Region -}) { - const pricedProduct = await retrievePricedProductById({ - id: productPreview.id, - regionId: region.id, - }).then((product) => product) - - if (!pricedProduct) { - return null - } - - const { cheapestPrice } = getProductPrice({ - product: pricedProduct, - region, - }) - - return ( - -
    - -
    - {productPreview.title} {productPreview.metadata?.plot_id} -
    - {cheapestPrice && } -
    -
    -
    -
    - ) -} diff --git a/storeagentai-storefront/src/modules/products/components/product-preview/price.tsx b/storeagentai-storefront/src/modules/products/components/product-preview/price.tsx deleted file mode 100644 index 80df56dc..00000000 --- a/storeagentai-storefront/src/modules/products/components/product-preview/price.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { Text, clx } from "@medusajs/ui" - -import { PriceType } from "../product-actions" - -export default async function PreviewPrice({ price }: { price: PriceType }) { - return ( - <> - {price.price_type === "sale" && ( - - {price.original_price} - - )} - - {price.calculated_price} - - - ) -} diff --git a/storeagentai-storefront/src/modules/products/components/product-price/index.tsx b/storeagentai-storefront/src/modules/products/components/product-price/index.tsx deleted file mode 100644 index f87f2879..00000000 --- a/storeagentai-storefront/src/modules/products/components/product-price/index.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { - PricedProduct, - PricedVariant, -} from "@medusajs/medusa/dist/types/pricing" -import { clx } from "@medusajs/ui" - -import { getProductPrice } from "@lib/util/get-product-price" -import { RegionInfo } from "types/global" - -export default function ProductPrice({ - product, - variant, - region, -}: { - product: PricedProduct - variant?: PricedVariant - region: RegionInfo -}) { - const { cheapestPrice, variantPrice } = getProductPrice({ - product, - variantId: variant?.id, - region, - }) - - const selectedPrice = variant ? variantPrice : cheapestPrice - - if (!selectedPrice) { - return
    - } - - return ( -
    - - {!variant && "From "} - {selectedPrice.calculated_price} - - {selectedPrice.price_type === "sale" && ( - <> -

    - Original: - {selectedPrice.original_price} -

    - - -{selectedPrice.percentage_diff}% - - - )} -
    - ) -} diff --git a/storeagentai-storefront/src/modules/products/components/product-tabs/accordion.tsx b/storeagentai-storefront/src/modules/products/components/product-tabs/accordion.tsx deleted file mode 100644 index db8855a4..00000000 --- a/storeagentai-storefront/src/modules/products/components/product-tabs/accordion.tsx +++ /dev/null @@ -1,105 +0,0 @@ -import { Text, clx } from "@medusajs/ui" -import * as AccordionPrimitive from "@radix-ui/react-accordion" -import React from "react" - -type AccordionItemProps = AccordionPrimitive.AccordionItemProps & { - title: string - subtitle?: string - description?: string - required?: boolean - tooltip?: string - forceMountContent?: true - headingSize?: "small" | "medium" | "large" - customTrigger?: React.ReactNode - complete?: boolean - active?: boolean - triggerable?: boolean - children: React.ReactNode -} - -type AccordionProps = - | (AccordionPrimitive.AccordionSingleProps & - React.RefAttributes) - | (AccordionPrimitive.AccordionMultipleProps & - React.RefAttributes) - -const Accordion: React.FC & { - Item: React.FC -} = ({ children, ...props }) => { - return ( - /* @ts-expect-error */ - {children} - ) -} - -const Item: React.FC = ({ - title, - subtitle, - description, - children, - className, - headingSize = "large", - customTrigger = undefined, - forceMountContent = undefined, - triggerable, - ...props -}) => { - return ( - /* @ts-expect-error */ - - {/* @ts-expect-error */} - -
    -
    -
    - {title} -
    - {/* @ts-expect-error */} - - {customTrigger || } - -
    - {subtitle && ( - - {subtitle} - - )} -
    -
    - {/* @ts-expect-error */} - -
    - {description && {description}} -
    {children}
    -
    -
    -
    - ) -} - -Accordion.Item = Item - -const MorphingTrigger = () => { - return ( -
    -
    - - -
    -
    - ) -} - -export default Accordion diff --git a/storeagentai-storefront/src/modules/products/components/product-tabs/index.tsx b/storeagentai-storefront/src/modules/products/components/product-tabs/index.tsx deleted file mode 100644 index 7ddce44e..00000000 --- a/storeagentai-storefront/src/modules/products/components/product-tabs/index.tsx +++ /dev/null @@ -1,127 +0,0 @@ -"use client" - -import { PricedProduct } from "@medusajs/medusa/dist/types/pricing" - -import Back from "@modules/common/icons/back" -import FastDelivery from "@modules/common/icons/fast-delivery" -import Refresh from "@modules/common/icons/refresh" - -import Accordion from "./accordion" - -type ProductTabsProps = { - product: PricedProduct -} - -const ProductTabs = ({ product }: ProductTabsProps) => { - const tabs = [ - { - label: "About", - component: , - }, - // { - // label: "Shipping & Returns", - // component: , - // }, - ] - - return ( -
    - - {tabs.map((tab, i) => ( - - {tab.component} - - ))} - -
    - ) -} - -const ProductInfoTab = ({ product }: ProductTabsProps) => { - return ( -
    -
    -
    -
    - Coordinates -

    {product.metadata?.coordinates ? product.metadata?.coordinates : "-"}

    -
    -
    - Owned By -

    {product.metadata?.owned_by ? product.metadata?.owned_by : "-"}

    -
    - {/*
    - Type -

    {product.type ? product.type.value : "-"}

    -
    */} -
    - {/*
    -
    - Weight -

    {product.weight ? `${product.weight} g` : "-"}

    -
    -
    - Dimensions -

    - {product.length && product.width && product.height - ? `${product.length}L x ${product.width}W x ${product.height}H` - : "-"} -

    -
    -
    */} -
    - {product.tags?.length ? ( -
    - Tags -
    - ) : null} -
    - ) -} - -const ShippingInfoTab = () => { - return ( -
    -
    -
    - -
    - Fast delivery -

    - Your package will arrive in 3-5 business days at your pick up - location or in the comfort of your home. -

    -
    -
    -
    - -
    - Simple exchanges -

    - Is the fit not quite right? No worries - we'll exchange your - product for a new one. -

    -
    -
    -
    - -
    - Easy returns -

    - Just return your product and we'll refund your money. No - questions asked – we'll do our best to make sure your return - is hassle-free. -

    -
    -
    -
    -
    - ) -} - -export default ProductTabs diff --git a/storeagentai-storefront/src/modules/products/components/related-products/index.tsx b/storeagentai-storefront/src/modules/products/components/related-products/index.tsx deleted file mode 100644 index a645ca9d..00000000 --- a/storeagentai-storefront/src/modules/products/components/related-products/index.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import { StoreGetProductsParams } from "@medusajs/medusa" -import { PricedProduct } from "@medusajs/medusa/dist/types/pricing" - -import { getProductsList, getRegion } from "@lib/data" - -import ProductPreview from "../product-preview" - -type RelatedProductsProps = { - product: PricedProduct - countryCode: string -} - -export default async function RelatedProducts({ - product, - countryCode, -}: RelatedProductsProps) { - const region = await getRegion(countryCode) - - if (!region) { - return null - } - - // edit this function to define your related products logic - const setQueryParams = (): StoreGetProductsParams => { - const params: StoreGetProductsParams = {} - - if (region?.id) { - params.region_id = region.id - } - - if (region?.currency_code) { - params.currency_code = region.currency_code - } - - if (product.collection_id) { - params.collection_id = [product.collection_id] - } - - if (product.tags) { - params.tags = product.tags.map((t) => t.value) - } - - params.is_giftcard = false - - return params - } - - const queryParams = setQueryParams() - - const productPreviews = await getProductsList({ - queryParams, - countryCode, - }).then(({ response }) => - response.products.filter( - (productPreview) => productPreview.id !== product.id - ) - ) - - if (!productPreviews.length) { - return null - } - - return ( -
    -
    - - Related products - -

    - You might also want to check out these products. -

    -
    - -
      - {productPreviews.map((productPreview) => ( -
    • - -
    • - ))} -
    -
    - ) -} diff --git a/storeagentai-storefront/src/modules/products/components/thumbnail/index.tsx b/storeagentai-storefront/src/modules/products/components/thumbnail/index.tsx deleted file mode 100644 index 8abf28f0..00000000 --- a/storeagentai-storefront/src/modules/products/components/thumbnail/index.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { Image as MedusaImage } from "@medusajs/medusa" -import { Container, clx } from "@medusajs/ui" -import Image from "next/image" -import React from "react" - -import PlaceholderImage from "@modules/common/icons/placeholder-image" - -type ThumbnailProps = { - thumbnail?: string | null - images?: MedusaImage[] | null - size?: "small" | "medium" | "large" | "full" | "square" - isFeatured?: boolean - className?: string -} - -const Thumbnail: React.FC = ({ - thumbnail, - images, - size = "small", - isFeatured, - className, -}) => { - const initialImage = thumbnail || images?.[0]?.url - - return ( - - - - ) -} - -const ImageOrPlaceholder = ({ - image, - size, -}: Pick & { image?: string }) => { - return image ? ( - Thumbnail - ) : ( -
    - -
    - ) -} - -export default Thumbnail diff --git a/storeagentai-storefront/src/modules/products/templates/index.tsx b/storeagentai-storefront/src/modules/products/templates/index.tsx deleted file mode 100644 index 8c5a85ba..00000000 --- a/storeagentai-storefront/src/modules/products/templates/index.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { Region } from "@medusajs/medusa" -import { PricedProduct } from "@medusajs/medusa/dist/types/pricing" -import React, { Suspense } from "react" - -import ImageGallery from "@modules/products/components/image-gallery" -import ProductActions from "@modules/products/components/product-actions" -import ProductOnboardingCta from "@modules/products/components/product-onboarding-cta" -import ProductTabs from "@modules/products/components/product-tabs" -import RelatedProducts from "@modules/products/components/related-products" -import ProductInfo from "@modules/products/templates/product-info" -import SkeletonRelatedProducts from "@modules/skeletons/templates/skeleton-related-products" -import { notFound } from "next/navigation" -import ProductActionsWrapper from "./product-actions-wrapper" - -type ProductTemplateProps = { - product: PricedProduct - region: Region - countryCode: string -} - -const ProductTemplate: React.FC = ({ - product, - region, - countryCode, -}) => { - if (!product || !product.id) { - return notFound() - } - - return ( - <> -
    -
    - - -
    -
    - -
    -
    - - } - > - - -
    -
    -
    - }> - - -
    - - ) -} - -export default ProductTemplate diff --git a/storeagentai-storefront/src/modules/products/templates/product-actions-wrapper/index.tsx b/storeagentai-storefront/src/modules/products/templates/product-actions-wrapper/index.tsx deleted file mode 100644 index 4be6d2e0..00000000 --- a/storeagentai-storefront/src/modules/products/templates/product-actions-wrapper/index.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { retrievePricedProductById } from "@lib/data" -import { Region } from "@medusajs/medusa" -import ProductActions from "@modules/products/components/product-actions" - -/** - * Fetches real time pricing for a product and renders the product actions component. - */ -export default async function ProductActionsWrapper({ - id, - region, -}: { - id: string - region: Region -}) { - const product = await retrievePricedProductById({ id, regionId: region.id }) - - if (!product) { - return null - } - - return -} diff --git a/storeagentai-storefront/src/modules/products/templates/product-info/index.tsx b/storeagentai-storefront/src/modules/products/templates/product-info/index.tsx deleted file mode 100644 index 777b7f06..00000000 --- a/storeagentai-storefront/src/modules/products/templates/product-info/index.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { PricedProduct } from "@medusajs/medusa/dist/types/pricing" -import { Heading, Text } from "@medusajs/ui" -import LocalizedClientLink from "@modules/common/components/localized-client-link" - -type ProductInfoProps = { - product: PricedProduct -} - -const ProductInfo = ({ product }: ProductInfoProps) => { - return ( -
    -
    - {product.collection && ( - - {product.collection.title} - - )} - - {product.title}: {product.metadata?.plot_id} - - - - {product.description} - -
    -
    - ) -} - -export default ProductInfo diff --git a/storeagentai-storefront/src/modules/search/actions.ts b/storeagentai-storefront/src/modules/search/actions.ts deleted file mode 100644 index 67b63eed..00000000 --- a/storeagentai-storefront/src/modules/search/actions.ts +++ /dev/null @@ -1,30 +0,0 @@ -"use server" - -import { SEARCH_INDEX_NAME, searchClient } from "@lib/search-client" - -interface Hits { - readonly objectID?: string - id?: string - [x: string | number | symbol]: unknown -} - -/** - * Uses MeiliSearch or Algolia to search for a query - * @param {string} query - search query - */ -export async function search(query: string) { - // MeiliSearch - const queries = [{ params: { query }, indexName: SEARCH_INDEX_NAME }] - const { results } = (await searchClient.search(queries)) as Record< - string, - any - > - const { hits } = results[0] as { hits: Hits[] } - - // In case you want to use Algolia instead of MeiliSearch, uncomment the following lines and delete the above lines. - - // const index = searchClient.initIndex(SEARCH_INDEX_NAME) - // const { hits } = (await index.search(query)) as { hits: Hits[] } - - return hits -} diff --git a/storeagentai-storefront/src/modules/search/components/hit/index.tsx b/storeagentai-storefront/src/modules/search/components/hit/index.tsx deleted file mode 100644 index fadf97cc..00000000 --- a/storeagentai-storefront/src/modules/search/components/hit/index.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { ProductVariant } from "@medusajs/medusa" -import { Container, Text } from "@medusajs/ui" - -import Thumbnail from "@modules/products/components/thumbnail" -import LocalizedClientLink from "@modules/common/components/localized-client-link" - -export type ProductHit = { - id: string - title: string - handle: string - description: string | null - thumbnail: string | null - variants: ProductVariant[] - collection_handle: string | null - collection_id: string | null -} - -type HitProps = { - hit: ProductHit -} - -const Hit = ({ hit }: HitProps) => { - return ( - - - -
    -
    - {hit.title} -
    -
    -
    -
    - ) -} - -export default Hit diff --git a/storeagentai-storefront/src/modules/search/components/hits/index.tsx b/storeagentai-storefront/src/modules/search/components/hits/index.tsx deleted file mode 100644 index da184a8c..00000000 --- a/storeagentai-storefront/src/modules/search/components/hits/index.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { clx } from "@medusajs/ui" -import React from "react" -import { - UseHitsProps, - useHits, - useSearchBox, -} from "react-instantsearch-hooks-web" - -import { ProductHit } from "../hit" -import ShowAll from "../show-all" - -type HitsProps = React.ComponentProps<"div"> & - UseHitsProps & { - hitComponent: (props: { hit: THit }) => JSX.Element - } - -const Hits = ({ - hitComponent: Hit, - className, - ...props -}: HitsProps) => { - const { query } = useSearchBox() - const { hits } = useHits(props) - - return ( -
    -
    - {hits.slice(0, 6).map((hit, index) => ( -
  • 2, - })} - > - -
  • - ))} -
    - -
    - ) -} - -export default Hits diff --git a/storeagentai-storefront/src/modules/search/components/search-box-wrapper/index.tsx b/storeagentai-storefront/src/modules/search/components/search-box-wrapper/index.tsx deleted file mode 100644 index f298848a..00000000 --- a/storeagentai-storefront/src/modules/search/components/search-box-wrapper/index.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import { useRouter } from "next/navigation" -import { - ChangeEvent, - FormEvent, - RefObject, - useEffect, - useRef, - useState, -} from "react" -import { UseSearchBoxProps, useSearchBox } from "react-instantsearch-hooks-web" - -export type ControlledSearchBoxProps = React.ComponentProps<"div"> & { - inputRef: RefObject - onChange(event: ChangeEvent): void - onReset(event: FormEvent): void - onSubmit?(event: FormEvent): void - placeholder?: string - value: string -} - -type SearchBoxProps = { - children: (state: { - value: string - inputRef: RefObject - onChange: (event: ChangeEvent) => void - onReset: () => void - placeholder: string - }) => React.ReactNode - placeholder?: string -} & UseSearchBoxProps - -const SearchBoxWrapper = ({ - children, - placeholder = "Search products...", - ...rest -}: SearchBoxProps) => { - const { query, refine } = useSearchBox(rest) - const [value, setValue] = useState(query) - const inputRef = useRef(null) - - const router = useRouter() - - const onReset = () => { - setValue("") - } - - const onChange = (event: ChangeEvent) => { - setValue(event.currentTarget.value) - } - - const onSubmit = () => { - if (value) { - router.push(`/results/${value}`) - } - } - - useEffect(() => { - if (query !== value) { - refine(value) - } - // We don't want to track when the InstantSearch query changes. - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [value]) - - useEffect(() => { - // We bypass the state update if the input is focused to avoid concurrent - // updates when typing. - if (document.activeElement !== inputRef.current && query !== value) { - setValue(query) - } - // We don't want to track when the React state value changes. - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [query]) - - useEffect(() => { - if (inputRef.current) { - inputRef.current.focus() - } - }, []) - - const state = { - value, - inputRef, - onChange, - onSubmit, - onReset, - placeholder, - } - - return children(state) as React.ReactElement -} - -export default SearchBoxWrapper diff --git a/storeagentai-storefront/src/modules/search/components/search-box/index.tsx b/storeagentai-storefront/src/modules/search/components/search-box/index.tsx deleted file mode 100644 index a41f9d4c..00000000 --- a/storeagentai-storefront/src/modules/search/components/search-box/index.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import { XMarkMini } from "@medusajs/icons" -import { FormEvent } from "react" -import { useRouter } from "next/navigation" - -import SearchBoxWrapper, { - ControlledSearchBoxProps, -} from "../search-box-wrapper" - -const ControlledSearchBox = ({ - inputRef, - onChange, - onReset, - onSubmit, - placeholder, - value, - ...props -}: ControlledSearchBoxProps) => { - const handleSubmit = (event: FormEvent) => { - event.preventDefault() - event.stopPropagation() - - if (onSubmit) { - onSubmit(event) - } - - if (inputRef.current) { - inputRef.current.blur() - } - } - - const handleReset = (event: FormEvent) => { - event.preventDefault() - event.stopPropagation() - - onReset(event) - - if (inputRef.current) { - inputRef.current.focus() - } - } - - return ( -
    -
    -
    - - {value && ( - - )} -
    -
    -
    - ) -} - -const SearchBox = () => { - const router = useRouter() - - return ( - - {(props) => { - return ( - <> - - - ) - }} - - ) -} - -export default SearchBox diff --git a/storeagentai-storefront/src/modules/search/components/show-all/index.tsx b/storeagentai-storefront/src/modules/search/components/show-all/index.tsx deleted file mode 100644 index e99d6654..00000000 --- a/storeagentai-storefront/src/modules/search/components/show-all/index.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { Container, Text } from "@medusajs/ui" -import { useHits, useSearchBox } from "react-instantsearch-hooks-web" - -import InteractiveLink from "@modules/common/components/interactive-link" - -const ShowAll = () => { - const { hits } = useHits() - const { query } = useSearchBox() - const width = typeof window !== "undefined" ? window.innerWidth : 0 - - if (query === "") return null - if (hits.length > 0 && hits.length <= 6) return null - - if (hits.length === 0) { - return ( - - No results found. - - ) - } - - return ( - - Showing the first {width > 640 ? 6 : 3} results. - View all - - ) -} - -export default ShowAll diff --git a/storeagentai-storefront/src/modules/search/templates/search-modal/index.tsx b/storeagentai-storefront/src/modules/search/templates/search-modal/index.tsx deleted file mode 100644 index b63cc3e6..00000000 --- a/storeagentai-storefront/src/modules/search/templates/search-modal/index.tsx +++ /dev/null @@ -1,80 +0,0 @@ -"use client" - -import { InstantSearch } from "react-instantsearch-hooks-web" -import { useRouter } from "next/navigation" -import { MagnifyingGlassMini } from "@medusajs/icons" - -import { SEARCH_INDEX_NAME, searchClient } from "@lib/search-client" -import Hit from "@modules/search/components/hit" -import Hits from "@modules/search/components/hits" -import SearchBox from "@modules/search/components/search-box" -import { useEffect, useRef } from "react" - -export default function SearchModal() { - const router = useRouter() - const searchRef = useRef(null) - - // close modal on outside click - const handleOutsideClick = (event: MouseEvent) => { - if (event.target === searchRef.current) { - router.back() - } - } - - useEffect(() => { - window.addEventListener("click", handleOutsideClick) - // cleanup - return () => { - window.removeEventListener("click", handleOutsideClick) - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []) - - // disable scroll on body when modal is open - useEffect(() => { - document.body.style.overflow = "hidden" - return () => { - document.body.style.overflow = "unset" - } - }, []) - - // on escape key press, close modal - useEffect(() => { - const handleEsc = (event: KeyboardEvent) => { - if (event.key === "Escape") { - router.back() - } - } - window.addEventListener("keydown", handleEsc) - - // cleanup - return () => { - window.removeEventListener("keydown", handleEsc) - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []) - - return ( -
    -
    -
    -
    - -
    -
    - - -
    -
    - -
    -
    -
    -
    -
    -
    - ) -} diff --git a/storeagentai-storefront/src/modules/search/templates/search-results-template/index.tsx b/storeagentai-storefront/src/modules/search/templates/search-results-template/index.tsx deleted file mode 100644 index bc5d8ffe..00000000 --- a/storeagentai-storefront/src/modules/search/templates/search-results-template/index.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { Heading, Text } from "@medusajs/ui" -import Link from "next/link" - -import RefinementList from "@modules/store/components/refinement-list" -import { SortOptions } from "@modules/store/components/refinement-list/sort-products" -import PaginatedProducts from "@modules/store/templates/paginated-products" -import LocalizedClientLink from "@modules/common/components/localized-client-link" - -type SearchResultsTemplateProps = { - query: string - ids: string[] - sortBy?: SortOptions - page?: string - countryCode: string -} - -const SearchResultsTemplate = ({ - query, - ids, - sortBy, - page, - countryCode, -}: SearchResultsTemplateProps) => { - const pageNumber = page ? parseInt(page) : 1 - - return ( - <> -
    -
    - Search Results for: - - {decodeURI(query)} ({ids.length}) - -
    - - Clear - -
    -
    - {ids.length > 0 ? ( - <> - -
    - -
    - - ) : ( - No results. - )} -
    - - ) -} - -export default SearchResultsTemplate diff --git a/storeagentai-storefront/src/modules/skeletons/components/skeleton-button/index.tsx b/storeagentai-storefront/src/modules/skeletons/components/skeleton-button/index.tsx deleted file mode 100644 index 7ed430f4..00000000 --- a/storeagentai-storefront/src/modules/skeletons/components/skeleton-button/index.tsx +++ /dev/null @@ -1,5 +0,0 @@ -const SkeletonButton = () => { - return
    -} - -export default SkeletonButton diff --git a/storeagentai-storefront/src/modules/skeletons/components/skeleton-cart-item/index.tsx b/storeagentai-storefront/src/modules/skeletons/components/skeleton-cart-item/index.tsx deleted file mode 100644 index e6b38edb..00000000 --- a/storeagentai-storefront/src/modules/skeletons/components/skeleton-cart-item/index.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { Table } from "@medusajs/ui" - -const SkeletonCartItem = () => { - return ( - - -
    - - -
    -
    -
    -
    - - -
    -
    -
    -
    - - -
    -
    -
    - - -
    -
    -
    - - - ) -} - -export default SkeletonCartItem diff --git a/storeagentai-storefront/src/modules/skeletons/components/skeleton-cart-totals/index.tsx b/storeagentai-storefront/src/modules/skeletons/components/skeleton-cart-totals/index.tsx deleted file mode 100644 index 606e9521..00000000 --- a/storeagentai-storefront/src/modules/skeletons/components/skeleton-cart-totals/index.tsx +++ /dev/null @@ -1,30 +0,0 @@ -const SkeletonCartTotals = ({ header = true }) => { - return ( -
    - {header &&
    } -
    -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    - -
    - -
    -
    -
    -
    -
    - ) -} - -export default SkeletonCartTotals diff --git a/storeagentai-storefront/src/modules/skeletons/components/skeleton-code-form/index.tsx b/storeagentai-storefront/src/modules/skeletons/components/skeleton-code-form/index.tsx deleted file mode 100644 index a8ef237b..00000000 --- a/storeagentai-storefront/src/modules/skeletons/components/skeleton-code-form/index.tsx +++ /dev/null @@ -1,13 +0,0 @@ -const SkeletonCodeForm = () => { - return ( -
    -
    -
    -
    -
    -
    -
    - ) -} - -export default SkeletonCodeForm diff --git a/storeagentai-storefront/src/modules/skeletons/components/skeleton-line-item/index.tsx b/storeagentai-storefront/src/modules/skeletons/components/skeleton-line-item/index.tsx deleted file mode 100644 index 30c8a8d6..00000000 --- a/storeagentai-storefront/src/modules/skeletons/components/skeleton-line-item/index.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { Table } from "@medusajs/ui" - -const SkeletonLineItem = () => { - return ( - - -
    - - -
    -
    -
    -
    - - -
    -
    -
    -
    - - -
    -
    -
    - - -
    -
    -
    - - - ) -} - -export default SkeletonLineItem diff --git a/storeagentai-storefront/src/modules/skeletons/components/skeleton-order-confirmed-header/index.tsx b/storeagentai-storefront/src/modules/skeletons/components/skeleton-order-confirmed-header/index.tsx deleted file mode 100644 index c496721f..00000000 --- a/storeagentai-storefront/src/modules/skeletons/components/skeleton-order-confirmed-header/index.tsx +++ /dev/null @@ -1,14 +0,0 @@ -const SkeletonOrderConfirmedHeader = () => { - return ( -
    -
    -
    -
    -
    -
    -
    -
    - ) -} - -export default SkeletonOrderConfirmedHeader diff --git a/storeagentai-storefront/src/modules/skeletons/components/skeleton-order-information/index.tsx b/storeagentai-storefront/src/modules/skeletons/components/skeleton-order-information/index.tsx deleted file mode 100644 index 863f6264..00000000 --- a/storeagentai-storefront/src/modules/skeletons/components/skeleton-order-information/index.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import SkeletonCartTotals from "@modules/skeletons/components/skeleton-cart-totals" - -const SkeletonOrderInformation = () => { - return ( -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - - -
    -
    - ) -} - -export default SkeletonOrderInformation diff --git a/storeagentai-storefront/src/modules/skeletons/components/skeleton-order-items/index.tsx b/storeagentai-storefront/src/modules/skeletons/components/skeleton-order-items/index.tsx deleted file mode 100644 index ba9e3ecf..00000000 --- a/storeagentai-storefront/src/modules/skeletons/components/skeleton-order-items/index.tsx +++ /dev/null @@ -1,43 +0,0 @@ -const SkeletonOrderItems = () => { - return ( -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - ) -} - -export default SkeletonOrderItems diff --git a/storeagentai-storefront/src/modules/skeletons/components/skeleton-order-summary/index.tsx b/storeagentai-storefront/src/modules/skeletons/components/skeleton-order-summary/index.tsx deleted file mode 100644 index abeae20b..00000000 --- a/storeagentai-storefront/src/modules/skeletons/components/skeleton-order-summary/index.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import SkeletonButton from "@modules/skeletons/components/skeleton-button" -import SkeletonCartTotals from "@modules/skeletons/components/skeleton-cart-totals" - -const SkeletonOrderSummary = () => { - return ( -
    - -
    - -
    -
    - ) -} - -export default SkeletonOrderSummary diff --git a/storeagentai-storefront/src/modules/skeletons/components/skeleton-product-preview/index.tsx b/storeagentai-storefront/src/modules/skeletons/components/skeleton-product-preview/index.tsx deleted file mode 100644 index ada90edb..00000000 --- a/storeagentai-storefront/src/modules/skeletons/components/skeleton-product-preview/index.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { Container } from "@medusajs/ui" - -const SkeletonProductPreview = () => { - return ( -
    - -
    -
    -
    -
    -
    - ) -} - -export default SkeletonProductPreview diff --git a/storeagentai-storefront/src/modules/skeletons/templates/skeleton-cart-page/index.tsx b/storeagentai-storefront/src/modules/skeletons/templates/skeleton-cart-page/index.tsx deleted file mode 100644 index 9b3b8d38..00000000 --- a/storeagentai-storefront/src/modules/skeletons/templates/skeleton-cart-page/index.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { Table } from "@medusajs/ui" - -import repeat from "@lib/util/repeat" -import SkeletonCartItem from "@modules/skeletons/components/skeleton-cart-item" -import SkeletonCodeForm from "@modules/skeletons/components/skeleton-code-form" -import SkeletonOrderSummary from "@modules/skeletons/components/skeleton-order-summary" - -const SkeletonCartPage = () => { - return ( -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - - - - -
    - - - -
    - - -
    - - -
    -
    -
    - - - - - {repeat(4).map((index) => ( - - ))} - -
    -
    -
    -
    - - -
    -
    -
    -
    - ) -} - -export default SkeletonCartPage diff --git a/storeagentai-storefront/src/modules/skeletons/templates/skeleton-order-confirmed/index.tsx b/storeagentai-storefront/src/modules/skeletons/templates/skeleton-order-confirmed/index.tsx deleted file mode 100644 index db54e6b2..00000000 --- a/storeagentai-storefront/src/modules/skeletons/templates/skeleton-order-confirmed/index.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import SkeletonOrderConfirmedHeader from "@modules/skeletons/components/skeleton-order-confirmed-header" -import SkeletonOrderInformation from "@modules/skeletons/components/skeleton-order-information" -import SkeletonOrderItems from "@modules/skeletons/components/skeleton-order-items" - -const SkeletonOrderConfirmed = () => { - return ( -
    -
    -
    - - - - - -
    -
    -
    - ) -} - -export default SkeletonOrderConfirmed diff --git a/storeagentai-storefront/src/modules/skeletons/templates/skeleton-product-grid/index.tsx b/storeagentai-storefront/src/modules/skeletons/templates/skeleton-product-grid/index.tsx deleted file mode 100644 index bec25006..00000000 --- a/storeagentai-storefront/src/modules/skeletons/templates/skeleton-product-grid/index.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import repeat from "@lib/util/repeat" -import SkeletonProductPreview from "@modules/skeletons/components/skeleton-product-preview" - -const SkeletonProductGrid = () => { - return ( -
      - {repeat(8).map((index) => ( -
    • - -
    • - ))} -
    - ) -} - -export default SkeletonProductGrid diff --git a/storeagentai-storefront/src/modules/skeletons/templates/skeleton-related-products/index.tsx b/storeagentai-storefront/src/modules/skeletons/templates/skeleton-related-products/index.tsx deleted file mode 100644 index 3175d05f..00000000 --- a/storeagentai-storefront/src/modules/skeletons/templates/skeleton-related-products/index.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import repeat from "@lib/util/repeat" -import SkeletonProductPreview from "@modules/skeletons/components/skeleton-product-preview" - -const SkeletonRelatedProducts = () => { - return ( -
    -
    -
    -
    -
    -
    -
    -
    -
      - {repeat(3).map((index) => ( -
    • - -
    • - ))} -
    -
    - ) -} - -export default SkeletonRelatedProducts diff --git a/storeagentai-storefront/src/modules/store/components/pagination/index.tsx b/storeagentai-storefront/src/modules/store/components/pagination/index.tsx deleted file mode 100644 index 4f8c2a91..00000000 --- a/storeagentai-storefront/src/modules/store/components/pagination/index.tsx +++ /dev/null @@ -1,112 +0,0 @@ -"use client" - -import { clx } from "@medusajs/ui" -import { usePathname, useRouter, useSearchParams } from "next/navigation" - -export function Pagination({ - page, - totalPages, -}: { - page: number - totalPages: number -}) { - const router = useRouter() - const pathname = usePathname() - const searchParams = useSearchParams() - - // Helper function to generate an array of numbers within a range - const arrayRange = (start: number, stop: number) => - Array.from({ length: stop - start + 1 }, (_, index) => start + index) - - // Function to handle page changes - const handlePageChange = (newPage: number) => { - const params = new URLSearchParams(searchParams) - params.set("page", newPage.toString()) - router.push(`${pathname}?${params.toString()}`) - } - - // Function to render a page button - const renderPageButton = ( - p: number, - label: string | number, - isCurrent: boolean - ) => ( - - ) - - // Function to render ellipsis - const renderEllipsis = (key: string) => ( - - ... - - ) - - // Function to render page buttons based on the current page and total pages - const renderPageButtons = () => { - const buttons = [] - - if (totalPages <= 7) { - // Show all pages - buttons.push( - ...arrayRange(1, totalPages).map((p) => - renderPageButton(p, p, p === page) - ) - ) - } else { - // Handle different cases for displaying pages and ellipses - if (page <= 4) { - // Show 1, 2, 3, 4, 5, ..., lastpage - buttons.push( - ...arrayRange(1, 5).map((p) => renderPageButton(p, p, p === page)) - ) - buttons.push(renderEllipsis("ellipsis1")) - buttons.push( - renderPageButton(totalPages, totalPages, totalPages === page) - ) - } else if (page >= totalPages - 3) { - // Show 1, ..., lastpage - 4, lastpage - 3, lastpage - 2, lastpage - 1, lastpage - buttons.push(renderPageButton(1, 1, 1 === page)) - buttons.push(renderEllipsis("ellipsis2")) - buttons.push( - ...arrayRange(totalPages - 4, totalPages).map((p) => - renderPageButton(p, p, p === page) - ) - ) - } else { - // Show 1, ..., page - 1, page, page + 1, ..., lastpage - buttons.push(renderPageButton(1, 1, 1 === page)) - buttons.push(renderEllipsis("ellipsis3")) - buttons.push( - ...arrayRange(page - 1, page + 1).map((p) => - renderPageButton(p, p, p === page) - ) - ) - buttons.push(renderEllipsis("ellipsis4")) - buttons.push( - renderPageButton(totalPages, totalPages, totalPages === page) - ) - } - } - - return buttons - } - - // Render the component - return ( -
    -
    {renderPageButtons()}
    -
    - ) -} diff --git a/storeagentai-storefront/src/modules/store/components/refinement-list/index.tsx b/storeagentai-storefront/src/modules/store/components/refinement-list/index.tsx deleted file mode 100644 index 372e578e..00000000 --- a/storeagentai-storefront/src/modules/store/components/refinement-list/index.tsx +++ /dev/null @@ -1,40 +0,0 @@ -"use client" - -import { usePathname, useRouter, useSearchParams } from "next/navigation" -import { useCallback } from "react" - -import SortProducts, { SortOptions } from "./sort-products" - -type RefinementListProps = { - sortBy: SortOptions - search?: boolean -} - -const RefinementList = ({ sortBy }: RefinementListProps) => { - const router = useRouter() - const pathname = usePathname() - const searchParams = useSearchParams() - - const createQueryString = useCallback( - (name: string, value: string) => { - const params = new URLSearchParams(searchParams) - params.set(name, value) - - return params.toString() - }, - [searchParams] - ) - - const setQueryParams = (name: string, value: string) => { - const query = createQueryString(name, value) - router.push(`${pathname}?${query}`) - } - - return ( -
    - -
    - ) -} - -export default RefinementList diff --git a/storeagentai-storefront/src/modules/store/components/refinement-list/sort-products/index.tsx b/storeagentai-storefront/src/modules/store/components/refinement-list/sort-products/index.tsx deleted file mode 100644 index 8177d381..00000000 --- a/storeagentai-storefront/src/modules/store/components/refinement-list/sort-products/index.tsx +++ /dev/null @@ -1,45 +0,0 @@ -"use client" - -import { ChangeEvent } from "react" - -import FilterRadioGroup from "@modules/common/components/filter-radio-group" - -export type SortOptions = "price_asc" | "price_desc" | "created_at" - -type SortProductsProps = { - sortBy: SortOptions - setQueryParams: (name: string, value: SortOptions) => void -} - -const sortOptions = [ - { - value: "created_at", - label: "Latest Arrivals", - }, - { - value: "price_asc", - label: "Price: Low -> High", - }, - { - value: "price_desc", - label: "Price: High -> Low", - }, -] - -const SortProducts = ({ sortBy, setQueryParams }: SortProductsProps) => { - const handleChange = (e: ChangeEvent) => { - const newSortBy = e.target.value as SortOptions - setQueryParams("sortBy", newSortBy) - } - - return ( - - ) -} - -export default SortProducts diff --git a/storeagentai-storefront/src/modules/store/templates/index.tsx b/storeagentai-storefront/src/modules/store/templates/index.tsx deleted file mode 100644 index 0112bf80..00000000 --- a/storeagentai-storefront/src/modules/store/templates/index.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { Suspense } from "react" - -import SkeletonProductGrid from "@modules/skeletons/templates/skeleton-product-grid" -import RefinementList from "@modules/store/components/refinement-list" -import { SortOptions } from "@modules/store/components/refinement-list/sort-products" - -import PaginatedProducts from "./paginated-products" - -const StoreTemplate = ({ - sortBy, - page, - countryCode, -}: { - sortBy?: SortOptions - page?: string - countryCode: string -}) => { - const pageNumber = page ? parseInt(page) : 1 - - return ( -
    - -
    -
    -

    All products

    -
    - }> - - -
    -
    - ) -} - -export default StoreTemplate diff --git a/storeagentai-storefront/src/modules/store/templates/paginated-products.tsx b/storeagentai-storefront/src/modules/store/templates/paginated-products.tsx deleted file mode 100644 index 64a4deef..00000000 --- a/storeagentai-storefront/src/modules/store/templates/paginated-products.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import { getProductsListWithSort, getRegion } from "@lib/data" -import ProductPreview from "@modules/products/components/product-preview" -import { Pagination } from "@modules/store/components/pagination" -import { SortOptions } from "@modules/store/components/refinement-list/sort-products" - -const PRODUCT_LIMIT = 12 - -type PaginatedProductsParams = { - limit: number - collection_id?: string[] - category_id?: string[] - id?: string[] -} - -export default async function PaginatedProducts({ - sortBy, - page, - collectionId, - categoryId, - productsIds, - countryCode, -}: { - sortBy?: SortOptions - page: number - collectionId?: string - categoryId?: string - productsIds?: string[] - countryCode: string -}) { - const region = await getRegion(countryCode) - - if (!region) { - return null - } - - const queryParams: PaginatedProductsParams = { - limit: PRODUCT_LIMIT, - } - - if (collectionId) { - queryParams["collection_id"] = [collectionId] - } - - if (categoryId) { - queryParams["category_id"] = [categoryId] - } - - if (productsIds) { - queryParams["id"] = productsIds - } - - const { - response: { products, count }, - } = await getProductsListWithSort({ - page, - queryParams, - sortBy, - countryCode, - }) - - const totalPages = Math.ceil(count / PRODUCT_LIMIT) - - return ( - <> -
      - {products.map((p) => { - return ( -
    • - -
    • - ) - })} -
    - {totalPages > 1 && } - - ) -} diff --git a/storeagentai-storefront/src/styles/globals.css b/storeagentai-storefront/src/styles/globals.css deleted file mode 100644 index 1ebe912a..00000000 --- a/storeagentai-storefront/src/styles/globals.css +++ /dev/null @@ -1,112 +0,0 @@ -@import "tailwindcss/base"; -@import "tailwindcss/components"; -@import "tailwindcss/utilities"; - -@layer utilities { - /* Chrome, Safari and Opera */ - .no-scrollbar::-webkit-scrollbar { - display: none; - } - - .no-scrollbar::-webkit-scrollbar-track { - background-color: transparent; - } - - .no-scrollbar { - -ms-overflow-style: none; /* IE and Edge */ - scrollbar-width: none; /* Firefox */ - } - - input:focus ~ label, - input:not(:placeholder-shown) ~ label { - @apply -translate-y-2 text-xsmall-regular; - } - - input:focus ~ label { - @apply left-0; - } - - input:-webkit-autofill, - input:-webkit-autofill:hover, - input:-webkit-autofill:focus, - textarea:-webkit-autofill, - textarea:-webkit-autofill:hover, - textarea:-webkit-autofill:focus, - select:-webkit-autofill, - select:-webkit-autofill:hover, - select:-webkit-autofill:focus { - border: 1px solid #212121; - -webkit-text-fill-color: #212121; - -webkit-box-shadow: 0 0 0px 1000px #fff inset; - transition: background-color 5000s ease-in-out 0s; - } - - input[type="search"]::-webkit-search-decoration, - input[type="search"]::-webkit-search-cancel-button, - input[type="search"]::-webkit-search-results-button, - input[type="search"]::-webkit-search-results-decoration { - -webkit-appearance: none; - } -} - -@layer components { - .content-container { - @apply max-w-[1440px] w-full mx-auto px-6; - } - - .contrast-btn { - @apply px-4 py-2 border border-black rounded-full hover:bg-black hover:text-white transition-colors duration-200 ease-in; - } - - .text-xsmall-regular { - @apply text-[10px] leading-4 font-normal; - } - - .text-small-regular { - @apply text-xs leading-5 font-normal; - } - - .text-small-semi { - @apply text-xs leading-5 font-semibold; - } - - .text-base-regular { - @apply text-sm leading-6 font-normal; - } - - .text-base-semi { - @apply text-sm leading-6 font-semibold; - } - - .text-large-regular { - @apply text-base leading-6 font-normal; - } - - .text-large-semi { - @apply text-base leading-6 font-semibold; - } - - .text-xl-regular { - @apply text-2xl leading-[36px] font-normal; - } - - .text-xl-semi { - @apply text-2xl leading-[36px] font-semibold; - } - - .text-2xl-regular { - @apply text-[30px] leading-[48px] font-normal; - } - - .text-2xl-semi { - @apply text-[30px] leading-[48px] font-semibold; - } - - .text-3xl-regular { - @apply text-[32px] leading-[44px] font-normal; - } - - .text-3xl-semi { - @apply text-[32px] leading-[44px] font-semibold; - } -} diff --git a/storeagentai-storefront/src/types/global.ts b/storeagentai-storefront/src/types/global.ts deleted file mode 100644 index f3374897..00000000 --- a/storeagentai-storefront/src/types/global.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Cart, ProductCategory, ProductVariant, Region } from "@medusajs/medusa" -import { PricedProduct } from "@medusajs/medusa/dist/types/pricing" -import { ProductCollection } from "@medusajs/product" - -export type FeaturedProduct = { - id: string - title: string - handle: string - thumbnail?: string -} - -export type ProductPreviewType = { - id: string - title: string - subtitle?: string | null - metadata?: Record | null - handle: string | null - thumbnail: string | null - created_at?: Date - price?: { - calculated_price: string - original_price: string - difference: string - price_type: "default" | "sale" - } - isFeatured?: boolean -} - -export type ProductCollectionWithPreviews = Omit< - ProductCollection, - "products" -> & { - products: ProductPreviewType[] -} - -export type InfiniteProductPage = { - response: { - products: PricedProduct[] - count: number - } -} - -export type ProductVariantInfo = Pick - -export type RegionInfo = Pick - -export type CartWithCheckoutStep = Omit< - Cart, - "beforeInsert" | "beforeUpdate" | "afterUpdateOrLoad" -> & { - checkout_step: "address" | "delivery" | "payment" -} - -export type ProductCategoryWithChildren = Omit< - ProductCategory, - "category_children" -> & { - category_children: ProductCategory[] - category_parent?: ProductCategory -} diff --git a/storeagentai-storefront/src/types/icon.ts b/storeagentai-storefront/src/types/icon.ts deleted file mode 100644 index a00d7f4d..00000000 --- a/storeagentai-storefront/src/types/icon.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type IconProps = { - color?: string - size?: string | number -} & React.SVGAttributes diff --git a/storeagentai-storefront/src/types/medusa.ts b/storeagentai-storefront/src/types/medusa.ts deleted file mode 100644 index f63c4f58..00000000 --- a/storeagentai-storefront/src/types/medusa.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Region as MedusaRegion, ProductVariant } from "@medusajs/medusa" - -export type Variant = Omit - -export interface Region extends Omit {} - -export type CalculatedVariant = ProductVariant & { - calculated_price: number - calculated_price_type: "sale" | "default" - original_price: number -} diff --git a/storeagentai-storefront/store-config.js b/storeagentai-storefront/store-config.js deleted file mode 100644 index 65c87f16..00000000 --- a/storeagentai-storefront/store-config.js +++ /dev/null @@ -1,16 +0,0 @@ -function withStoreConfig(nextConfig = {}) { - const features = nextConfig.features || {} - delete nextConfig.features - - nextConfig.env = nextConfig.env || {} - - Object.entries(features).forEach(([key, value]) => { - if (value) { - nextConfig.env[`FEATURE_${key.toUpperCase()}_ENABLED`] = true - } - }) - - return nextConfig -} - -module.exports = { withStoreConfig } diff --git a/storeagentai-storefront/store.config.json b/storeagentai-storefront/store.config.json deleted file mode 100644 index e4df9fa6..00000000 --- a/storeagentai-storefront/store.config.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "features": { - "search": false - } -} diff --git a/storeagentai-storefront/tailwind.config.js b/storeagentai-storefront/tailwind.config.js deleted file mode 100644 index 1840213b..00000000 --- a/storeagentai-storefront/tailwind.config.js +++ /dev/null @@ -1,161 +0,0 @@ -const path = require("path") - -module.exports = { - presets: [require("@medusajs/ui-preset")], - content: [ - "./src/app/**/*.{js,ts,jsx,tsx}", - "./src/pages/**/*.{js,ts,jsx,tsx}", - "./src/components/**/*.{js,ts,jsx,tsx}", - "./src/modules/**/*.{js,ts,jsx,tsx}", - "./node_modules/@medusajs/ui/dist/**/*.{js,jsx,ts,tsx}", - ], - theme: { - extend: { - transitionProperty: { - width: "width margin", - height: "height", - bg: "background-color", - display: "display opacity", - visibility: "visibility", - padding: "padding-top padding-right padding-bottom padding-left", - }, - colors: { - grey: { - 0: "#FFFFFF", - 5: "#F9FAFB", - 10: "#F3F4F6", - 20: "#E5E7EB", - 30: "#D1D5DB", - 40: "#9CA3AF", - 50: "#6B7280", - 60: "#4B5563", - 70: "#374151", - 80: "#1F2937", - 90: "#111827", - }, - }, - borderRadius: { - none: "0px", - soft: "2px", - base: "4px", - rounded: "8px", - large: "16px", - circle: "9999px", - }, - maxWidth: { - "8xl": "100rem", - }, - screens: { - "2xsmall": "320px", - xsmall: "512px", - small: "1024px", - medium: "1280px", - large: "1440px", - xlarge: "1680px", - "2xlarge": "1920px", - }, - fontSize: { - "3xl": "2rem", - }, - fontFamily: { - sans: [ - "Inter", - "-apple-system", - "BlinkMacSystemFont", - "Segoe UI", - "Roboto", - "Helvetica Neue", - "Ubuntu", - "sans-serif", - ], - }, - keyframes: { - ring: { - "0%": { transform: "rotate(0deg)" }, - "100%": { transform: "rotate(360deg)" }, - }, - "fade-in-right": { - "0%": { - opacity: "0", - transform: "translateX(10px)", - }, - "100%": { - opacity: "1", - transform: "translateX(0)", - }, - }, - "fade-in-top": { - "0%": { - opacity: "0", - transform: "translateY(-10px)", - }, - "100%": { - opacity: "1", - transform: "translateY(0)", - }, - }, - "fade-out-top": { - "0%": { - height: "100%", - }, - "99%": { - height: "0", - }, - "100%": { - visibility: "hidden", - }, - }, - "accordion-slide-up": { - "0%": { - height: "var(--radix-accordion-content-height)", - opacity: "1", - }, - "100%": { - height: "0", - opacity: "0", - }, - }, - "accordion-slide-down": { - "0%": { - "min-height": "0", - "max-height": "0", - opacity: "0", - }, - "100%": { - "min-height": "var(--radix-accordion-content-height)", - "max-height": "none", - opacity: "1", - }, - }, - enter: { - "0%": { transform: "scale(0.9)", opacity: 0 }, - "100%": { transform: "scale(1)", opacity: 1 }, - }, - leave: { - "0%": { transform: "scale(1)", opacity: 1 }, - "100%": { transform: "scale(0.9)", opacity: 0 }, - }, - "slide-in": { - "0%": { transform: "translateY(-100%)" }, - "100%": { transform: "translateY(0)" }, - }, - }, - animation: { - ring: "ring 2.2s cubic-bezier(0.5, 0, 0.5, 1) infinite", - "fade-in-right": - "fade-in-right 0.3s cubic-bezier(0.5, 0, 0.5, 1) forwards", - "fade-in-top": "fade-in-top 0.2s cubic-bezier(0.5, 0, 0.5, 1) forwards", - "fade-out-top": - "fade-out-top 0.2s cubic-bezier(0.5, 0, 0.5, 1) forwards", - "accordion-open": - "accordion-slide-down 300ms cubic-bezier(0.87, 0, 0.13, 1) forwards", - "accordion-close": - "accordion-slide-up 300ms cubic-bezier(0.87, 0, 0.13, 1) forwards", - enter: "enter 200ms ease-out", - "slide-in": "slide-in 1.2s cubic-bezier(.41,.73,.51,1.02)", - leave: "leave 150ms ease-in forwards", - }, - }, - }, - plugins: [require("tailwindcss-radix")()], -} diff --git a/storeagentai-storefront/tsconfig.json b/storeagentai-storefront/tsconfig.json deleted file mode 100644 index f5ced5f8..00000000 --- a/storeagentai-storefront/tsconfig.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "types": ["cypress"], - "baseUrl": "./src", - "paths": { - "@lib/*": ["lib/*"], - "@modules/*": ["modules/*"], - "@pages/*": ["pages/*"] - }, - "plugins": [ - { - "name": "next" - } - ] - }, - "include": [ - "next-env.d.ts", - "**/*.ts", - "**/*.tsx", - "cypress/support/index.js", - "cypress/support/commands.js", - "cypress/integration/product.spec.js", - "cypress/plugins/index.js", - ".next/types/**/*.ts" - ], - "exclude": [ - "node_modules", - ".next", - ".nyc_output", - "cypress-coverage", - "coverage", - "jest-coverage" - ] -} diff --git a/storeagentai-storefront/yarn.lock b/storeagentai-storefront/yarn.lock deleted file mode 100644 index 926778e7..00000000 --- a/storeagentai-storefront/yarn.lock +++ /dev/null @@ -1,8571 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@algolia/cache-browser-local-storage@4.20.0": - version "4.20.0" - resolved "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.20.0.tgz" - integrity sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ== - dependencies: - "@algolia/cache-common" "4.20.0" - -"@algolia/cache-common@4.20.0": - version "4.20.0" - resolved "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.20.0.tgz" - integrity sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ== - -"@algolia/cache-in-memory@4.20.0": - version "4.20.0" - resolved "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.20.0.tgz" - integrity sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg== - dependencies: - "@algolia/cache-common" "4.20.0" - -"@algolia/client-account@4.20.0": - version "4.20.0" - resolved "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.20.0.tgz" - integrity sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q== - dependencies: - "@algolia/client-common" "4.20.0" - "@algolia/client-search" "4.20.0" - "@algolia/transporter" "4.20.0" - -"@algolia/client-analytics@4.20.0": - version "4.20.0" - resolved "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.20.0.tgz" - integrity sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug== - dependencies: - "@algolia/client-common" "4.20.0" - "@algolia/client-search" "4.20.0" - "@algolia/requester-common" "4.20.0" - "@algolia/transporter" "4.20.0" - -"@algolia/client-common@4.20.0": - version "4.20.0" - resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.20.0.tgz" - integrity sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ== - dependencies: - "@algolia/requester-common" "4.20.0" - "@algolia/transporter" "4.20.0" - -"@algolia/client-personalization@4.20.0": - version "4.20.0" - resolved "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.20.0.tgz" - integrity sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ== - dependencies: - "@algolia/client-common" "4.20.0" - "@algolia/requester-common" "4.20.0" - "@algolia/transporter" "4.20.0" - -"@algolia/client-search@4.20.0": - version "4.20.0" - resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.20.0.tgz" - integrity sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg== - dependencies: - "@algolia/client-common" "4.20.0" - "@algolia/requester-common" "4.20.0" - "@algolia/transporter" "4.20.0" - -"@algolia/events@^4.0.1": - version "4.0.1" - resolved "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz" - integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== - -"@algolia/logger-common@4.20.0": - version "4.20.0" - resolved "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.20.0.tgz" - integrity sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ== - -"@algolia/logger-console@4.20.0": - version "4.20.0" - resolved "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.20.0.tgz" - integrity sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA== - dependencies: - "@algolia/logger-common" "4.20.0" - -"@algolia/requester-browser-xhr@4.20.0": - version "4.20.0" - resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.20.0.tgz" - integrity sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw== - dependencies: - "@algolia/requester-common" "4.20.0" - -"@algolia/requester-common@4.20.0": - version "4.20.0" - resolved "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.20.0.tgz" - integrity sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng== - -"@algolia/requester-node-http@4.20.0": - version "4.20.0" - resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.20.0.tgz" - integrity sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng== - dependencies: - "@algolia/requester-common" "4.20.0" - -"@algolia/transporter@4.20.0": - version "4.20.0" - resolved "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.20.0.tgz" - integrity sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg== - dependencies: - "@algolia/cache-common" "4.20.0" - "@algolia/logger-common" "4.20.0" - "@algolia/requester-common" "4.20.0" - -"@algolia/ui-components-highlight-vdom@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@algolia/ui-components-highlight-vdom/-/ui-components-highlight-vdom-1.2.1.tgz" - integrity sha512-IlYgIaCUEkz9ezNbwugwKv991oOHhveyq6nzL0F1jDzg1p3q5Yj/vO4KpNG910r2dwGCG3nEm5GtChcLnarhFA== - dependencies: - "@algolia/ui-components-shared" "1.2.1" - "@babel/runtime" "^7.0.0" - -"@algolia/ui-components-shared@^1.2.1", "@algolia/ui-components-shared@1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@algolia/ui-components-shared/-/ui-components-shared-1.2.1.tgz" - integrity sha512-a7mYHf/GVQfhAx/HRiMveKkFvHspQv/REdG+C/FIOosiSmNZxX7QebDwJkrGSmDWdXO12D0Qv1xn3AytFcEDlQ== - -"@alloc/quick-lru@^5.2.0": - version "5.2.0" - resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz" - integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== - -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== - dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" - -"@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== - -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.17.5": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.22.20.tgz" - integrity sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.22.15" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.22.20" - "@babel/helpers" "^7.22.15" - "@babel/parser" "^7.22.16" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.22.20" - "@babel/types" "^7.22.19" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.22.15": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz" - integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA== - dependencies: - "@babel/types" "^7.22.15" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-compilation-targets@^7.22.15": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== - dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.22.15": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz" - integrity sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-transforms@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz" - integrity sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-replace-supers@^7.22.9": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.22.19", "@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== - -"@babel/helpers@^7.22.15": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz" - integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.22.15", "@babel/parser@^7.22.16": - version "7.22.16" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz" - integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA== - -"@babel/plugin-transform-classes@^7.9.5": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz" - integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.10": - version "7.23.2" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz" - integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.22.15", "@babel/template@^7.22.5": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/traverse@^7.22.15", "@babel/traverse@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.20.tgz" - integrity sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.16" - "@babel/types" "^7.22.19" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5": - version "7.22.19" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz" - integrity sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.19" - to-fast-properties "^2.0.0" - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - -"@cypress/request@^2.88.10": - version "2.88.12" - resolved "https://registry.npmjs.org/@cypress/request/-/request-2.88.12.tgz" - integrity sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA== - 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" - http-signature "~1.3.6" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - performance-now "^2.1.0" - qs "~6.10.3" - safe-buffer "^5.1.2" - tough-cookie "^4.1.3" - tunnel-agent "^0.6.0" - uuid "^8.3.2" - -"@cypress/xvfb@^1.2.4": - version "1.2.4" - resolved "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz" - integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== - dependencies: - debug "^3.1.0" - lodash.once "^4.1.1" - -"@dabh/diagnostics@^2.0.2": - version "2.0.3" - resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz" - integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== - dependencies: - colorspace "1.1.x" - enabled "2.0.x" - kuler "^2.0.0" - -"@eslint/eslintrc@^1.2.0": - version "1.4.1" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.4.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@floating-ui/core@^1.4.2": - version "1.5.0" - resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz" - integrity sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg== - dependencies: - "@floating-ui/utils" "^0.1.3" - -"@floating-ui/dom@^1.5.1": - version "1.5.3" - resolved "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz" - integrity sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA== - dependencies: - "@floating-ui/core" "^1.4.2" - "@floating-ui/utils" "^0.1.3" - -"@floating-ui/react-dom@^2.0.0": - version "2.0.2" - resolved "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.2.tgz" - integrity sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ== - dependencies: - "@floating-ui/dom" "^1.5.1" - -"@floating-ui/utils@^0.1.3": - version "0.1.6" - resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz" - integrity sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A== - -"@formatjs/ecma402-abstract@1.17.2": - version "1.17.2" - resolved "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.17.2.tgz" - integrity sha512-k2mTh0m+IV1HRdU0xXM617tSQTi53tVR2muvYOsBeYcUgEAyxV1FOC7Qj279th3fBVQ+Dj6muvNJZcHSPNdbKg== - dependencies: - "@formatjs/intl-localematcher" "0.4.2" - tslib "^2.4.0" - -"@formatjs/fast-memoize@2.2.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz" - integrity sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA== - dependencies: - tslib "^2.4.0" - -"@formatjs/icu-messageformat-parser@2.7.0": - version "2.7.0" - resolved "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.0.tgz" - integrity sha512-7uqC4C2RqOaBQtcjqXsSpGRYVn+ckjhNga5T/otFh6MgxRrCJQqvjfbrGLpX1Lcbxdm5WH3Z2WZqt1+Tm/cn/Q== - dependencies: - "@formatjs/ecma402-abstract" "1.17.2" - "@formatjs/icu-skeleton-parser" "1.6.2" - tslib "^2.4.0" - -"@formatjs/icu-skeleton-parser@1.6.2": - version "1.6.2" - resolved "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.6.2.tgz" - integrity sha512-VtB9Slo4ZL6QgtDFJ8Injvscf0xiDd4bIV93SOJTBjUF4xe2nAWOoSjLEtqIG+hlIs1sNrVKAaFo3nuTI4r5ZA== - dependencies: - "@formatjs/ecma402-abstract" "1.17.2" - tslib "^2.4.0" - -"@formatjs/intl-localematcher@0.4.2": - version "0.4.2" - resolved "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.4.2.tgz" - integrity sha512-BGdtJFmaNJy5An/Zan4OId/yR9Ih1OojFjcduX/xOvq798OgWSyDtd6Qd5jqJXwJs1ipe4Fxu9+cshic5Ox2tA== - dependencies: - tslib "^2.4.0" - -"@graphql-tools/merge@^9.0.0", "@graphql-tools/merge@^9.0.1": - version "9.0.1" - resolved "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.1.tgz" - integrity sha512-hIEExWO9fjA6vzsVjJ3s0cCQ+Q/BEeMVJZtMXd7nbaVefVy0YDyYlEkeoYYNV3NVVvu1G9lr6DM1Qd0DGo9Caw== - dependencies: - "@graphql-tools/utils" "^10.0.10" - tslib "^2.4.0" - -"@graphql-tools/schema@^10.0.0": - version "10.0.2" - resolved "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.2.tgz" - integrity sha512-TbPsIZnWyDCLhgPGnDjt4hosiNU2mF/rNtSk5BVaXWnZqvKJ6gzJV4fcHcvhRIwtscDMW2/YTnK6dLVnk8pc4w== - dependencies: - "@graphql-tools/merge" "^9.0.1" - "@graphql-tools/utils" "^10.0.10" - tslib "^2.4.0" - value-or-promise "^1.0.12" - -"@graphql-tools/utils@^10.0.10": - version "10.0.10" - resolved "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.10.tgz" - integrity sha512-NzK2qZP+jUt4Cc+l879wLqk/JGGu8SAEJgqaamYBgIgfmsuwzDWpKw2VpO0DbZdFdtlAStl7a3mbJmOrRqmZnw== - dependencies: - "@graphql-typed-document-node/core" "^3.1.1" - cross-inspect "1.0.0" - dset "^3.1.2" - tslib "^2.4.0" - -"@graphql-typed-document-node/core@^3.1.1": - version "3.2.0" - resolved "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz" - integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== - -"@headlessui/react@^1.6.1": - version "1.7.17" - resolved "https://registry.npmjs.org/@headlessui/react/-/react-1.7.17.tgz" - integrity sha512-4am+tzvkqDSSgiwrsEpGWqgGo9dz8qU5M3znCkC4PgkpY4HcCZzEDEvozltGGGHIKl9jbXbZPSH5TWn4sWJdow== - dependencies: - client-only "^0.0.1" - -"@hookform/error-message@^2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@hookform/error-message/-/error-message-2.0.1.tgz" - integrity sha512-U410sAr92xgxT1idlu9WWOVjndxLdgPUHEB8Schr27C9eh7/xUnITWpCMF93s+lGiG++D4JnbSnrb5A21AdSNg== - -"@humanwhocodes/config-array@^0.9.2": - version "0.9.5" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz" - integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@internationalized/date@^3.5.0": - version "3.5.0" - resolved "https://registry.npmjs.org/@internationalized/date/-/date-3.5.0.tgz" - integrity sha512-nw0Q+oRkizBWMioseI8+2TeUPEyopJVz5YxoYVzR0W1v+2YytiYah7s/ot35F149q/xAg4F1gT/6eTd+tsUpFQ== - dependencies: - "@swc/helpers" "^0.5.0" - -"@internationalized/message@^3.1.1": - version "3.1.1" - resolved "https://registry.npmjs.org/@internationalized/message/-/message-3.1.1.tgz" - integrity sha512-ZgHxf5HAPIaR0th+w0RUD62yF6vxitjlprSxmLJ1tam7FOekqRSDELMg4Cr/DdszG5YLsp5BG3FgHgqquQZbqw== - dependencies: - "@swc/helpers" "^0.5.0" - intl-messageformat "^10.1.0" - -"@internationalized/number@^3.3.0": - version "3.3.0" - resolved "https://registry.npmjs.org/@internationalized/number/-/number-3.3.0.tgz" - integrity sha512-PuxgnKE5NJMOGKUcX1QROo8jq7sW7UWLrL5B6Rfe8BdWgU/be04cVvLyCeALD46vvbAv3d1mUvyHav/Q9a237g== - dependencies: - "@swc/helpers" "^0.5.0" - -"@internationalized/string@^3.1.1": - version "3.1.1" - resolved "https://registry.npmjs.org/@internationalized/string/-/string-3.1.1.tgz" - integrity sha512-fvSr6YRoVPgONiVIUhgCmIAlifMVCeej/snPZVzbzRPxGpHl3o1GRe+d/qh92D8KhgOciruDUH8I5mjdfdjzfA== - dependencies: - "@swc/helpers" "^0.5.0" - -"@ioredis/as-callback@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@ioredis/as-callback/-/as-callback-3.0.0.tgz" - integrity sha512-Kqv1rZ3WbgOrS+hgzJ5xG5WQuhvzzSTRYvNeyPMLOAM78MHSnuKI20JeJGbpuAt//LCuP0vsexZcorqW7kWhJg== - -"@ioredis/commands@^1.1.1", "@ioredis/commands@^1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz" - integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@medusajs/client-types@^0.2.2": - version "0.2.5" - resolved "https://registry.npmjs.org/@medusajs/client-types/-/client-types-0.2.5.tgz" - integrity sha512-jB43v+OWNSVo+9jv4EWShDKy+JGEx/LYRdcC0iS8HQx9eXNqSIsP27R8sRetdxschsuE+bd6K2Lj130DFiOICw== - -"@medusajs/icons@*": - version "1.1.0" - resolved "https://registry.npmjs.org/@medusajs/icons/-/icons-1.1.0.tgz" - integrity sha512-90+nCmUq9W4KHgg8XuyiZcp41yRleTqT1Y/OZW+Th8FkCvFd8981ugwu7DYZjnaUvXnBCpsGDQ0zYuJ7sU4QIA== - -"@medusajs/link-modules@^0.2.3": - version "0.2.3" - resolved "https://registry.npmjs.org/@medusajs/link-modules/-/link-modules-0.2.3.tgz" - integrity sha512-zebvSoLia0W6NbgMrxwql4Ghudx+8Uc2ESNfX+bf56efJz7Uk+NDXhbKWQXSK/oHtxPXuJM0vbGDtvWOa0MK5A== - dependencies: - "@medusajs/modules-sdk" "^1.12.3" - "@medusajs/types" "^1.11.6" - "@medusajs/utils" "^1.10.5" - "@mikro-orm/core" "5.7.12" - "@mikro-orm/postgresql" "5.7.12" - awilix "^8.0.0" - -"@medusajs/medusa-cli@^1.3.21": - version "1.3.21" - resolved "https://registry.npmjs.org/@medusajs/medusa-cli/-/medusa-cli-1.3.21.tgz" - integrity sha512-j898S/3ipWFG3HIBZtyUc/KfqnO2JV5h4Mj30M/P+7vXxvLlpavKiU6qdBRxLZBQHHZ2mGuyHRoq3RatHrrw/Q== - dependencies: - "@medusajs/utils" "^1.10.0" - axios "^0.21.4" - chalk "^4.0.0" - configstore "5.0.1" - core-js "^3.6.5" - dotenv "16.0.3" - execa "^5.1.1" - fs-exists-cached "^1.0.0" - fs-extra "^10.0.0" - glob "^7.1.6" - hosted-git-info "^4.0.2" - inquirer "^8.0.0" - is-valid-path "^0.1.1" - meant "^1.0.3" - medusa-core-utils "^1.2.0" - medusa-telemetry "^0.0.17" - open "^8.0.6" - ora "^5.4.1" - pg "^8.11.0" - pg-god "^1.0.12" - prompts "^2.4.2" - regenerator-runtime "^0.13.11" - resolve-cwd "^3.0.0" - semver "^7.3.8" - stack-trace "^0.0.10" - ulid "^2.3.0" - winston "^3.8.2" - yargs "^15.3.1" - -"@medusajs/medusa-js@*", "@medusajs/medusa-js@^6.1.7": - version "6.1.7" - resolved "https://registry.npmjs.org/@medusajs/medusa-js/-/medusa-js-6.1.7.tgz" - integrity sha512-WJf6pZCTf1aKw64NkwrtsCPcYXZzTO3XaETbHLucWuPDf9kHzzCTcHvsshnW3dDRzKIn4Vn48HygzzkvhoN+HA== - dependencies: - axios "^0.24.0" - cross-env "^5.2.1" - qs "^6.10.3" - retry-axios "^2.6.0" - uuid "^9.0.0" - -"@medusajs/medusa@^1.12.0", "@medusajs/medusa@^1.17.2", "@medusajs/medusa@^1.18.0": - version "1.18.0" - resolved "https://registry.npmjs.org/@medusajs/medusa/-/medusa-1.18.0.tgz" - integrity sha512-6yh5ytCiH+gjtziqFivpFLfAq4R1L4awPFkL++9iDwEBYHRZ4gUDlyiytC4lgvHEqHYcH/LdNU0jrY8BBU2PEg== - dependencies: - "@medusajs/link-modules" "^0.2.3" - "@medusajs/medusa-cli" "^1.3.21" - "@medusajs/modules-sdk" "^1.12.3" - "@medusajs/orchestration" "^0.4.4" - "@medusajs/utils" "^1.11.0" - "@medusajs/workflows" "^0.3.0" - awilix "^8.0.0" - body-parser "^1.19.0" - boxen "^5.0.1" - bullmq "^3.5.6" - chokidar "^3.4.2" - class-transformer "^0.5.1" - class-validator "^0.14.0" - compression "^1.7.4" - connect-redis "^5.0.0" - cookie-parser "^1.4.6" - core-js "^3.6.5" - cors "^2.8.5" - cross-spawn "^7.0.3" - dotenv "^16.0.3" - express "^4.18.2" - express-session "^1.17.3" - fs-exists-cached "^1.0.0" - glob "^7.1.6" - ioredis "^5.2.5" - ioredis-mock "8.4.0" - iso8601-duration "^1.3.0" - jsonwebtoken "^9.0.0" - lodash "^4.17.21" - medusa-core-utils "^1.2.0" - medusa-telemetry "^0.0.17" - medusa-test-utils "^1.1.40" - morgan "^1.9.1" - multer "^1.4.5-lts.1" - node-schedule "^2.1.1" - papaparse "5.3.2" - passport "^0.6.0" - passport-custom "^1.1.1" - passport-jwt "^4.0.1" - passport-local "^1.0.0" - pg "^8.11.2" - qs "^6.11.2" - randomatic "^3.1.1" - redis "^3.0.2" - reflect-metadata "^0.1.13" - regenerator-runtime "^0.13.11" - request-ip "^3.3.0" - scrypt-kdf "^2.0.1" - ulid "^2.3.0" - uuid "^9.0.0" - winston "^3.8.2" - -"@medusajs/modules-sdk@^1.12.3": - version "1.12.3" - resolved "https://registry.npmjs.org/@medusajs/modules-sdk/-/modules-sdk-1.12.3.tgz" - integrity sha512-r95PKgf+ndRXNCFQtunTb1PBwCuP3AjlS3WHktSprSbsvXIBFiLV9v1WFmLp/yC8W/+z/rMMVA3nm5DMLk30Rw== - dependencies: - "@graphql-tools/merge" "^9.0.0" - "@graphql-tools/schema" "^10.0.0" - "@medusajs/orchestration" "^0.4.4" - "@medusajs/types" "^1.11.6" - "@medusajs/utils" "^1.10.5" - awilix "^8.0.0" - knex "2.4.2" - pg "^8.11.2" - resolve-cwd "^3.0.0" - -"@medusajs/orchestration@^0.4.4": - version "0.4.4" - resolved "https://registry.npmjs.org/@medusajs/orchestration/-/orchestration-0.4.4.tgz" - integrity sha512-JRS2g4DX8POn8b5W6vTBE3yvQuDF5VPOMS1e4Owhg9hjJ6p+mIuPju7RheKj6dZ2KtQjPT5sCSHpscVUca/z1w== - dependencies: - "@medusajs/types" "^1.11.6" - "@medusajs/utils" "^1.10.5" - awilix "^8.0.0" - graphql "^16.6.0" - -"@medusajs/pricing@^0.1.4": - version "0.1.4" - resolved "https://registry.npmjs.org/@medusajs/pricing/-/pricing-0.1.4.tgz" - integrity sha512-cEiBZ+l10ds8RalOT9Dq3yOEMU95Ke9MnjS/rxXKu4uI38mz9UV6vf23V1Zfe8w8wZaVdt2sv/JEhDa3jssh5A== - dependencies: - "@medusajs/modules-sdk" "^1.12.3" - "@medusajs/types" "^1.11.7" - "@medusajs/utils" "^1.11.0" - "@mikro-orm/core" "5.7.12" - "@mikro-orm/migrations" "5.7.12" - "@mikro-orm/postgresql" "5.7.12" - awilix "^8.0.0" - dotenv "^16.1.4" - knex "2.4.2" - -"@medusajs/product@^0.3.4": - version "0.3.4" - resolved "https://registry.npmjs.org/@medusajs/product/-/product-0.3.4.tgz" - integrity sha512-GBmNw1puI1sG7xlkZ55HPzpUN9EB/LkWW8GrOp971KSK9/1ITouFY0GMEPZNHsESwCDBD2aDCh/LJsf7NASoUQ== - dependencies: - "@medusajs/modules-sdk" "^1.12.3" - "@medusajs/types" "^1.11.7" - "@medusajs/utils" "^1.11.0" - "@mikro-orm/core" "5.7.12" - "@mikro-orm/migrations" "5.7.12" - "@mikro-orm/postgresql" "5.7.12" - awilix "^8.0.0" - dotenv "^16.1.4" - knex "2.4.2" - lodash "^4.17.21" - -"@medusajs/types@^1.11.6", "@medusajs/types@^1.11.7": - version "1.11.7" - resolved "https://registry.npmjs.org/@medusajs/types/-/types-1.11.7.tgz" - integrity sha512-KkNJd4pxu5zoiv09nsG2ARtrC17LxsDD941uX35IMfvNeWYRk31kQ59EipYE59SBvGpvatoaBHzTxSAsrebzTQ== - -"@medusajs/ui-preset@^1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@medusajs/ui-preset/-/ui-preset-1.0.2.tgz" - integrity sha512-Z+VUZ/VbRAkAvXT4NAMO/saSouqa5BCr/SFkw/a/LdNkl3FY70nQZQ1B1fpY2BuaunmmzCON92tcjxGMXhJEHg== - dependencies: - "@tailwindcss/forms" "^0.5.3" - tailwindcss-animate "^1.0.6" - -"@medusajs/ui@^2.2.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@medusajs/ui/-/ui-2.2.0.tgz" - integrity sha512-T2VdLrIQSaa2+DCWaN0sc55WS+TnQv5En2JbLVoAsbABXerYMu81uQeWtVHX5p1ojloSFtCz+cdWxMLK7uJb+Q== - dependencies: - "@medusajs/icons" "*" - "@radix-ui/react-accordion" "^1.1.2" - "@radix-ui/react-alert-dialog" "^1.0.4" - "@radix-ui/react-avatar" "^1.0.3" - "@radix-ui/react-checkbox" "^1.0.4" - "@radix-ui/react-dialog" "^1.0.4" - "@radix-ui/react-dropdown-menu" "^2.0.5" - "@radix-ui/react-label" "^2.0.2" - "@radix-ui/react-popover" "^1.0.6" - "@radix-ui/react-portal" "^1.0.3" - "@radix-ui/react-radio-group" "^1.1.3" - "@radix-ui/react-scroll-area" "^1.0.4" - "@radix-ui/react-select" "^2.0.0" - "@radix-ui/react-slot" "^1.0.2" - "@radix-ui/react-switch" "^1.0.3" - "@radix-ui/react-tabs" "^1.0.4" - "@radix-ui/react-toast" "^1.1.4" - "@radix-ui/react-tooltip" "^1.0.6" - "@react-aria/datepicker" "^3.5.0" - "@react-stately/datepicker" "^3.5.0" - class-variance-authority "^0.6.1" - clsx "^1.2.1" - copy-to-clipboard "^3.3.3" - date-fns "^2.30.0" - prism-react-renderer "^2.0.6" - react-currency-input-field "^3.6.11" - react-day-picker "^8.8.0" - tailwind-merge "^1.13.2" - -"@medusajs/utils@^1.10.0", "@medusajs/utils@^1.10.5", "@medusajs/utils@^1.11.0": - version "1.11.0" - resolved "https://registry.npmjs.org/@medusajs/utils/-/utils-1.11.0.tgz" - integrity sha512-ysMu+NNc/xQmocodWE/KEVUZ/bwtAjXJg9/DmPlfER4gR9kN+G22NVxl3v0jfyhSxPyxQ3OKqFhpsFaGeu/Www== - dependencies: - "@medusajs/types" "^1.11.7" - "@mikro-orm/core" "5.7.12" - "@mikro-orm/migrations" "5.7.12" - "@mikro-orm/postgresql" "5.7.12" - awilix "^8.0.1" - knex "2.4.2" - ulid "^2.3.0" - -"@medusajs/workflows@^0.3.0": - version "0.3.0" - resolved "https://registry.npmjs.org/@medusajs/workflows/-/workflows-0.3.0.tgz" - integrity sha512-ONb2mXaFTnk+Y4iP3p/lYxzrvar8u/mZBtDMszxbiEcov5SQzOYkNNxOu859QgHuhUJztTk3Xhcyfhkr1QztEA== - dependencies: - "@medusajs/modules-sdk" "^1.12.3" - "@medusajs/orchestration" "^0.4.4" - "@medusajs/utils" "^1.11.0" - awilix "^8.0.1" - ulid "^2.3.0" - -"@meilisearch/instant-meilisearch@^0.7.1": - version "0.7.1" - resolved "https://registry.npmjs.org/@meilisearch/instant-meilisearch/-/instant-meilisearch-0.7.1.tgz" - integrity sha512-bUGiGO/da915Y9Dmu2n5fTMFvSlJHC6ABOcL7056OiBSCU1Bx1EvVEkzYmTxac3lqIoIpxZU5t0WXiPeikrg4g== - dependencies: - meilisearch "0.25.1" - -"@mikro-orm/core@^5.0.0", "@mikro-orm/core@5.7.12": - version "5.7.12" - resolved "https://registry.npmjs.org/@mikro-orm/core/-/core-5.7.12.tgz" - integrity sha512-bd9M4zCzdUGjM2uDGVZmo2ENqa/slzSxOk4knS/LUeAVGgLizidRIT9A41lObILCT1giaVV70n1PhxNSrHe8sA== - dependencies: - acorn-loose "8.3.0" - acorn-walk "8.2.0" - dotenv "16.1.4" - fs-extra "11.1.1" - globby "11.1.0" - mikro-orm "~5.7.12" - reflect-metadata "0.1.13" - -"@mikro-orm/knex@~5.7.12": - version "5.7.14" - resolved "https://registry.npmjs.org/@mikro-orm/knex/-/knex-5.7.14.tgz" - integrity sha512-dLw80JiOfQ6YBtKXI3j0C31lYfbWlytZUpXFM4tEKlMbAMmSbPqDgZpiF3luxBKTg3JpsnGSK0urBOxL1c/m+g== - dependencies: - fs-extra "11.1.1" - knex "2.5.1" - sqlstring "2.3.3" - -"@mikro-orm/migrations@^5.0.0", "@mikro-orm/migrations@5.7.12": - version "5.7.12" - resolved "https://registry.npmjs.org/@mikro-orm/migrations/-/migrations-5.7.12.tgz" - integrity sha512-hUKUMKw01KpCKEoLMSbqLpztymE8Gk95+/nO7ThO5PTkNzH5eqLt00Zy9KlFgDEi85mOkyGnKbthzZMHPSLxSg== - dependencies: - "@mikro-orm/knex" "~5.7.12" - fs-extra "11.1.1" - knex "2.4.2" - umzug "3.2.1" - -"@mikro-orm/postgresql@^5.0.0", "@mikro-orm/postgresql@5.7.12": - version "5.7.12" - resolved "https://registry.npmjs.org/@mikro-orm/postgresql/-/postgresql-5.7.12.tgz" - integrity sha512-JF89Yf3D/nyA45TzXxclajaDrHXFB/ad3edkF0BA5+sFKsj6it18P/wq0HEk/rhqsHLTlxcmyG0/F+AO3HOPow== - dependencies: - "@mikro-orm/knex" "~5.7.12" - pg "8.11.0" - -"@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.2": - version "3.0.2" - resolved "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz" - integrity sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw== - -"@next/env@14.0.4": - version "14.0.4" - resolved "https://registry.npmjs.org/@next/env/-/env-14.0.4.tgz" - integrity sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ== - -"@next/eslint-plugin-next@13.4.19": - version "13.4.19" - resolved "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.19.tgz" - integrity sha512-N/O+zGb6wZQdwu6atMZHbR7T9Np5SUFUjZqCbj0sXm+MwQO35M8TazVB4otm87GkXYs2l6OPwARd3/PUWhZBVQ== - dependencies: - glob "7.1.7" - -"@next/swc-darwin-x64@14.0.4": - version "14.0.4" - resolved "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.4.tgz" - integrity sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@oclif/command@^1", "@oclif/command@^1.8.15": - version "1.8.36" - resolved "https://registry.npmjs.org/@oclif/command/-/command-1.8.36.tgz" - integrity sha512-/zACSgaYGtAQRzc7HjzrlIs14FuEYAZrMOEwicRoUnZVyRunG4+t5iSEeQu0Xy2bgbCD0U1SP/EdeNZSTXRwjQ== - dependencies: - "@oclif/config" "^1.18.2" - "@oclif/errors" "^1.3.6" - "@oclif/help" "^1.0.1" - "@oclif/parser" "^3.8.17" - debug "^4.1.1" - semver "^7.5.4" - -"@oclif/config@^1", "@oclif/config@^1.18.2": - version "1.18.17" - resolved "https://registry.npmjs.org/@oclif/config/-/config-1.18.17.tgz" - integrity sha512-k77qyeUvjU8qAJ3XK3fr/QVAqsZO8QOBuESnfeM5HHtPNLSyfVcwiMM2zveSW5xRdLSG3MfV8QnLVkuyCL2ENg== - dependencies: - "@oclif/errors" "^1.3.6" - "@oclif/parser" "^3.8.17" - debug "^4.3.4" - globby "^11.1.0" - is-wsl "^2.1.1" - tslib "^2.6.1" - -"@oclif/config@1.18.16": - version "1.18.16" - resolved "https://registry.npmjs.org/@oclif/config/-/config-1.18.16.tgz" - integrity sha512-VskIxVcN22qJzxRUq+raalq6Q3HUde7sokB7/xk5TqRZGEKRVbFeqdQBxDWwQeudiJEgcNiMvIFbMQ43dY37FA== - dependencies: - "@oclif/errors" "^1.3.6" - "@oclif/parser" "^3.8.16" - debug "^4.3.4" - globby "^11.1.0" - is-wsl "^2.1.1" - tslib "^2.6.1" - -"@oclif/config@1.18.2": - version "1.18.2" - resolved "https://registry.npmjs.org/@oclif/config/-/config-1.18.2.tgz" - integrity sha512-cE3qfHWv8hGRCP31j7fIS7BfCflm/BNZ2HNqHexH+fDrdF2f1D5S8VmXWLC77ffv3oDvWyvE9AZeR0RfmHCCaA== - dependencies: - "@oclif/errors" "^1.3.3" - "@oclif/parser" "^3.8.0" - debug "^4.1.1" - globby "^11.0.1" - is-wsl "^2.1.1" - tslib "^2.0.0" - -"@oclif/errors@^1.3.3", "@oclif/errors@1.3.5": - version "1.3.5" - resolved "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.5.tgz" - integrity sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ== - dependencies: - clean-stack "^3.0.0" - fs-extra "^8.1" - indent-string "^4.0.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -"@oclif/errors@^1.3.5", "@oclif/errors@^1.3.6", "@oclif/errors@1.3.6": - version "1.3.6" - resolved "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.6.tgz" - integrity sha512-fYaU4aDceETd89KXP+3cLyg9EHZsLD3RxF2IU9yxahhBpspWjkWi3Dy3bTgcwZ3V47BgxQaGapzJWDM33XIVDQ== - dependencies: - clean-stack "^3.0.0" - fs-extra "^8.1" - indent-string "^4.0.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -"@oclif/help@^1.0.1": - version "1.0.15" - resolved "https://registry.npmjs.org/@oclif/help/-/help-1.0.15.tgz" - integrity sha512-Yt8UHoetk/XqohYX76DfdrUYLsPKMc5pgkzsZVHDyBSkLiGRzujVaGZdjr32ckVZU9q3a47IjhWxhip7Dz5W/g== - dependencies: - "@oclif/config" "1.18.16" - "@oclif/errors" "1.3.6" - chalk "^4.1.2" - indent-string "^4.0.0" - lodash "^4.17.21" - string-width "^4.2.0" - strip-ansi "^6.0.0" - widest-line "^3.1.0" - wrap-ansi "^6.2.0" - -"@oclif/linewrap@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz" - integrity sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw== - -"@oclif/parser@^3.8.0", "@oclif/parser@^3.8.16", "@oclif/parser@^3.8.17": - version "3.8.17" - resolved "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.17.tgz" - integrity sha512-l04iSd0xoh/16TGVpXb81Gg3z7tlQGrEup16BrVLsZBK6SEYpYHRJZnM32BwZrHI97ZSFfuSwVlzoo6HdsaK8A== - dependencies: - "@oclif/errors" "^1.3.6" - "@oclif/linewrap" "^1.0.0" - chalk "^4.1.0" - tslib "^2.6.2" - -"@oclif/plugin-help@^3": - version "3.3.1" - resolved "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.3.1.tgz" - integrity sha512-QuSiseNRJygaqAdABYFWn/H1CwIZCp9zp/PLid6yXvy6VcQV7OenEFF5XuYaCvSARe2Tg9r8Jqls5+fw1A9CbQ== - dependencies: - "@oclif/command" "^1.8.15" - "@oclif/config" "1.18.2" - "@oclif/errors" "1.3.5" - "@oclif/help" "^1.0.1" - chalk "^4.1.2" - indent-string "^4.0.0" - lodash "^4.17.21" - string-width "^4.2.0" - strip-ansi "^6.0.0" - widest-line "^3.1.0" - wrap-ansi "^6.2.0" - -"@oclif/screen@^1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@oclif/screen/-/screen-1.0.4.tgz" - integrity sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw== - -"@paypal/paypal-js@^5.0.6", "@paypal/paypal-js@^5.1.6": - version "5.1.6" - resolved "https://registry.npmjs.org/@paypal/paypal-js/-/paypal-js-5.1.6.tgz" - integrity sha512-1upF06pv0AUtTftRVSra44p8ibqGa3ruKLArvdhpZla25zcrND7R+nDUIMrJ0iteVYZowhujZStFs6NoruExfg== - dependencies: - promise-polyfill "^8.3.0" - -"@paypal/react-paypal-js@^7.8.1": - version "7.8.3" - resolved "https://registry.npmjs.org/@paypal/react-paypal-js/-/react-paypal-js-7.8.3.tgz" - integrity sha512-7sD5JFA0IH9kysyGFv5DTmtPn54vLWZ0DLhdjUvsjqZnoEs11mJJJlTsTA7MkIO3jBAJOWlfoA4wLYzmy68C4g== - dependencies: - "@paypal/paypal-js" "^5.1.6" - "@paypal/sdk-constants" "^1.0.122" - -"@paypal/sdk-constants@^1.0.122": - version "1.0.135" - resolved "https://registry.npmjs.org/@paypal/sdk-constants/-/sdk-constants-1.0.135.tgz" - integrity sha512-ZIQgsmeLZVl2QZaX8nhf+6BJ7CDT54Fj1QaqKpHXVKJnN1qY5ht9kJq08hse3/bF/s4Ho0zlsFND12KUJYFaqQ== - dependencies: - hi-base32 "^0.5.0" - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@radix-ui/number@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz" - integrity sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/primitive@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz" - integrity sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-accordion@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.1.2.tgz" - integrity sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-collapsible" "1.0.3" - "@radix-ui/react-collection" "1.0.3" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-controllable-state" "1.0.1" - -"@radix-ui/react-alert-dialog@^1.0.4": - version "1.0.5" - resolved "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.0.5.tgz" - integrity sha512-OrVIOcZL0tl6xibeuGt5/+UxoT2N27KCFOPjFyfXMnchxSHZ/OW7cCX2nGlIYJrbHK/fczPcFzAwvNBB6XBNMA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-dialog" "1.0.5" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-slot" "1.0.2" - -"@radix-ui/react-arrow@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz" - integrity sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.3" - -"@radix-ui/react-avatar@^1.0.3": - version "1.0.4" - resolved "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.0.4.tgz" - integrity sha512-kVK2K7ZD3wwj3qhle0ElXhOjbezIgyl2hVvgwfIdexL3rN6zJmy5AqqIf+D31lxVppdzV8CjAfZ6PklkmInZLw== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-layout-effect" "1.0.1" - -"@radix-ui/react-checkbox@^1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.0.4.tgz" - integrity sha512-CBuGQa52aAYnADZVt/KBQzXrwx6TqnlwtcIPGtVt5JkkzQwMOLJjPukimhfKEr4GQNd43C+djUh5Ikopj8pSLg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-presence" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-controllable-state" "1.0.1" - "@radix-ui/react-use-previous" "1.0.1" - "@radix-ui/react-use-size" "1.0.1" - -"@radix-ui/react-collapsible@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.0.3.tgz" - integrity sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-presence" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-controllable-state" "1.0.1" - "@radix-ui/react-use-layout-effect" "1.0.1" - -"@radix-ui/react-collection@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz" - integrity sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-slot" "1.0.2" - -"@radix-ui/react-compose-refs@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz" - integrity sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-context@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz" - integrity sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-dialog@^1.0.4", "@radix-ui/react-dialog@1.0.5": - version "1.0.5" - resolved "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz" - integrity sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-dismissable-layer" "1.0.5" - "@radix-ui/react-focus-guards" "1.0.1" - "@radix-ui/react-focus-scope" "1.0.4" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-portal" "1.0.4" - "@radix-ui/react-presence" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-slot" "1.0.2" - "@radix-ui/react-use-controllable-state" "1.0.1" - aria-hidden "^1.1.1" - react-remove-scroll "2.5.5" - -"@radix-ui/react-direction@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz" - integrity sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-dismissable-layer@1.0.5": - version "1.0.5" - resolved "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz" - integrity sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-escape-keydown" "1.0.3" - -"@radix-ui/react-dropdown-menu@^2.0.5": - version "2.0.6" - resolved "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.6.tgz" - integrity sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-menu" "2.0.6" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-controllable-state" "1.0.1" - -"@radix-ui/react-focus-guards@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz" - integrity sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-focus-scope@1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz" - integrity sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - -"@radix-ui/react-id@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz" - integrity sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-layout-effect" "1.0.1" - -"@radix-ui/react-label@^2.0.2": - version "2.0.2" - resolved "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.0.2.tgz" - integrity sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.3" - -"@radix-ui/react-menu@2.0.6": - version "2.0.6" - resolved "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.6.tgz" - integrity sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-collection" "1.0.3" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-dismissable-layer" "1.0.5" - "@radix-ui/react-focus-guards" "1.0.1" - "@radix-ui/react-focus-scope" "1.0.4" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-popper" "1.1.3" - "@radix-ui/react-portal" "1.0.4" - "@radix-ui/react-presence" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-roving-focus" "1.0.4" - "@radix-ui/react-slot" "1.0.2" - "@radix-ui/react-use-callback-ref" "1.0.1" - aria-hidden "^1.1.1" - react-remove-scroll "2.5.5" - -"@radix-ui/react-popover@^1.0.6": - version "1.0.7" - resolved "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.0.7.tgz" - integrity sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-dismissable-layer" "1.0.5" - "@radix-ui/react-focus-guards" "1.0.1" - "@radix-ui/react-focus-scope" "1.0.4" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-popper" "1.1.3" - "@radix-ui/react-portal" "1.0.4" - "@radix-ui/react-presence" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-slot" "1.0.2" - "@radix-ui/react-use-controllable-state" "1.0.1" - aria-hidden "^1.1.1" - react-remove-scroll "2.5.5" - -"@radix-ui/react-popper@1.1.3": - version "1.1.3" - resolved "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz" - integrity sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w== - dependencies: - "@babel/runtime" "^7.13.10" - "@floating-ui/react-dom" "^2.0.0" - "@radix-ui/react-arrow" "1.0.3" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-layout-effect" "1.0.1" - "@radix-ui/react-use-rect" "1.0.1" - "@radix-ui/react-use-size" "1.0.1" - "@radix-ui/rect" "1.0.1" - -"@radix-ui/react-portal@^1.0.3", "@radix-ui/react-portal@1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz" - integrity sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.3" - -"@radix-ui/react-presence@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz" - integrity sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-use-layout-effect" "1.0.1" - -"@radix-ui/react-primitive@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz" - integrity sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-slot" "1.0.2" - -"@radix-ui/react-radio-group@^1.1.3": - version "1.1.3" - resolved "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.1.3.tgz" - integrity sha512-x+yELayyefNeKeTx4fjK6j99Fs6c4qKm3aY38G3swQVTN6xMpsrbigC0uHs2L//g8q4qR7qOcww8430jJmi2ag== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-presence" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-roving-focus" "1.0.4" - "@radix-ui/react-use-controllable-state" "1.0.1" - "@radix-ui/react-use-previous" "1.0.1" - "@radix-ui/react-use-size" "1.0.1" - -"@radix-ui/react-roving-focus@1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz" - integrity sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-collection" "1.0.3" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-controllable-state" "1.0.1" - -"@radix-ui/react-scroll-area@^1.0.4": - version "1.0.5" - resolved "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.0.5.tgz" - integrity sha512-b6PAgH4GQf9QEn8zbT2XUHpW5z8BzqEc7Kl11TwDrvuTrxlkcjTD5qa/bxgKr+nmuXKu4L/W5UZ4mlP/VG/5Gw== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/number" "1.0.1" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-presence" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-layout-effect" "1.0.1" - -"@radix-ui/react-select@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.0.0.tgz" - integrity sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/number" "1.0.1" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-collection" "1.0.3" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-dismissable-layer" "1.0.5" - "@radix-ui/react-focus-guards" "1.0.1" - "@radix-ui/react-focus-scope" "1.0.4" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-popper" "1.1.3" - "@radix-ui/react-portal" "1.0.4" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-slot" "1.0.2" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-controllable-state" "1.0.1" - "@radix-ui/react-use-layout-effect" "1.0.1" - "@radix-ui/react-use-previous" "1.0.1" - "@radix-ui/react-visually-hidden" "1.0.3" - aria-hidden "^1.1.1" - react-remove-scroll "2.5.5" - -"@radix-ui/react-slot@^1.0.2", "@radix-ui/react-slot@1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz" - integrity sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.1" - -"@radix-ui/react-switch@^1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.0.3.tgz" - integrity sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-controllable-state" "1.0.1" - "@radix-ui/react-use-previous" "1.0.1" - "@radix-ui/react-use-size" "1.0.1" - -"@radix-ui/react-tabs@^1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.4.tgz" - integrity sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-presence" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-roving-focus" "1.0.4" - "@radix-ui/react-use-controllable-state" "1.0.1" - -"@radix-ui/react-toast@^1.1.4": - version "1.1.5" - resolved "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.1.5.tgz" - integrity sha512-fRLn227WHIBRSzuRzGJ8W+5YALxofH23y0MlPLddaIpLpCDqdE0NZlS2NRQDRiptfxDeeCjgFIpexB1/zkxDlw== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-collection" "1.0.3" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-dismissable-layer" "1.0.5" - "@radix-ui/react-portal" "1.0.4" - "@radix-ui/react-presence" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-controllable-state" "1.0.1" - "@radix-ui/react-use-layout-effect" "1.0.1" - "@radix-ui/react-visually-hidden" "1.0.3" - -"@radix-ui/react-tooltip@^1.0.6": - version "1.0.7" - resolved "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.7.tgz" - integrity sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-dismissable-layer" "1.0.5" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-popper" "1.1.3" - "@radix-ui/react-portal" "1.0.4" - "@radix-ui/react-presence" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-slot" "1.0.2" - "@radix-ui/react-use-controllable-state" "1.0.1" - "@radix-ui/react-visually-hidden" "1.0.3" - -"@radix-ui/react-use-callback-ref@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz" - integrity sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-use-controllable-state@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz" - integrity sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-callback-ref" "1.0.1" - -"@radix-ui/react-use-escape-keydown@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz" - integrity sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-callback-ref" "1.0.1" - -"@radix-ui/react-use-layout-effect@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz" - integrity sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-use-previous@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz" - integrity sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-use-rect@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz" - integrity sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/rect" "1.0.1" - -"@radix-ui/react-use-size@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz" - integrity sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-layout-effect" "1.0.1" - -"@radix-ui/react-visually-hidden@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz" - integrity sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.3" - -"@radix-ui/rect@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz" - integrity sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ== - dependencies: - "@babel/runtime" "^7.13.10" - -"@react-aria/datepicker@^3.5.0": - version "3.8.1" - resolved "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.8.1.tgz" - integrity sha512-q2Z5DYDkic3RWzvg3oysrA2VEebuxtEfqj8PSlNFndZh/pNrA+Tvkaatdk/BoxlsZsfeLof+/tBq6yWeqTDguQ== - dependencies: - "@internationalized/date" "^3.5.0" - "@internationalized/number" "^3.3.0" - "@internationalized/string" "^3.1.1" - "@react-aria/focus" "^3.14.3" - "@react-aria/i18n" "^3.8.4" - "@react-aria/interactions" "^3.19.1" - "@react-aria/label" "^3.7.2" - "@react-aria/spinbutton" "^3.5.4" - "@react-aria/utils" "^3.21.1" - "@react-stately/datepicker" "^3.8.0" - "@react-types/button" "^3.9.0" - "@react-types/calendar" "^3.4.1" - "@react-types/datepicker" "^3.6.1" - "@react-types/dialog" "^3.5.6" - "@react-types/shared" "^3.21.0" - "@swc/helpers" "^0.5.0" - -"@react-aria/focus@^3.14.3": - version "3.14.3" - resolved "https://registry.npmjs.org/@react-aria/focus/-/focus-3.14.3.tgz" - integrity sha512-gvO/frZ7SxyfyHJYC+kRsUXnXct8hGHKlG1TwbkzCCXim9XIPKDgRzfNGuFfj0i8ZpR9xmsjOBUkHZny0uekFA== - dependencies: - "@react-aria/interactions" "^3.19.1" - "@react-aria/utils" "^3.21.1" - "@react-types/shared" "^3.21.0" - "@swc/helpers" "^0.5.0" - clsx "^1.1.1" - -"@react-aria/i18n@^3.8.4": - version "3.8.4" - resolved "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.8.4.tgz" - integrity sha512-YlTJn7YJlUxds/T5dNtme551qc118NoDQhK+IgGpzcmPQ3xSnwBAQP4Zwc7wCpAU+xEwnNcsGw+L1wJd49He/A== - dependencies: - "@internationalized/date" "^3.5.0" - "@internationalized/message" "^3.1.1" - "@internationalized/number" "^3.3.0" - "@internationalized/string" "^3.1.1" - "@react-aria/ssr" "^3.8.0" - "@react-aria/utils" "^3.21.1" - "@react-types/shared" "^3.21.0" - "@swc/helpers" "^0.5.0" - -"@react-aria/interactions@^3.19.1": - version "3.19.1" - resolved "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.19.1.tgz" - integrity sha512-2QFOvq/rJfMGEezmtYcGcJmfaD16kHKcSTLFrZ8aeBK6hYFddGVZJZk+dXf+G7iNaffa8rMt6uwzVe/malJPBA== - dependencies: - "@react-aria/ssr" "^3.8.0" - "@react-aria/utils" "^3.21.1" - "@react-types/shared" "^3.21.0" - "@swc/helpers" "^0.5.0" - -"@react-aria/label@^3.7.2": - version "3.7.2" - resolved "https://registry.npmjs.org/@react-aria/label/-/label-3.7.2.tgz" - integrity sha512-rS0xQy+4RH1+JLESzLZd9H285McjNNf2kKwBhzU0CW3akjlu7gqaMKEJhX9MlpPDIVOUc2oEObGdU3UMmqa8ew== - dependencies: - "@react-aria/utils" "^3.21.1" - "@react-types/label" "^3.8.1" - "@react-types/shared" "^3.21.0" - "@swc/helpers" "^0.5.0" - -"@react-aria/live-announcer@^3.3.1": - version "3.3.1" - resolved "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.3.1.tgz" - integrity sha512-hsc77U7S16trM86d+peqJCOCQ7/smO1cybgdpOuzXyiwcHQw8RQ4GrXrS37P4Ux/44E9nMZkOwATQRT2aK8+Ew== - dependencies: - "@swc/helpers" "^0.5.0" - -"@react-aria/spinbutton@^3.5.4": - version "3.5.4" - resolved "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.5.4.tgz" - integrity sha512-W5dhUOjyBIgd8d4z526fW/HXQ+BdFceeGyvNAXoYBi/1gt3KqN/6CZgskG7OQEufxCOWc9e4A2eWNwvkQVJvWg== - dependencies: - "@react-aria/i18n" "^3.8.4" - "@react-aria/live-announcer" "^3.3.1" - "@react-aria/utils" "^3.21.1" - "@react-types/button" "^3.9.0" - "@react-types/shared" "^3.21.0" - "@swc/helpers" "^0.5.0" - -"@react-aria/ssr@^3.8.0": - version "3.8.0" - resolved "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.8.0.tgz" - integrity sha512-Y54xs483rglN5DxbwfCPHxnkvZ+gZ0LbSYmR72LyWPGft8hN/lrl1VRS1EW2SMjnkEWlj+Km2mwvA3kEHDUA0A== - dependencies: - "@swc/helpers" "^0.5.0" - -"@react-aria/utils@^3.21.1": - version "3.21.1" - resolved "https://registry.npmjs.org/@react-aria/utils/-/utils-3.21.1.tgz" - integrity sha512-tySfyWHXOhd/b6JSrSOl7krngEXN3N6pi1hCAXObRu3+MZlaZOMDf/j18aoteaIF2Jpv8HMWUJUJtQKGmBJGRA== - dependencies: - "@react-aria/ssr" "^3.8.0" - "@react-stately/utils" "^3.8.0" - "@react-types/shared" "^3.21.0" - "@swc/helpers" "^0.5.0" - clsx "^1.1.1" - -"@react-stately/datepicker@^3.5.0", "@react-stately/datepicker@^3.8.0": - version "3.8.0" - resolved "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.8.0.tgz" - integrity sha512-6YDSmkrRafYCWhRHks8Z2tZavM1rqSOy8GY8VYjYMCVTFpRuhPK9TQaFv2BdzZL/vJ6OGThxqoglcEwywZVq2g== - dependencies: - "@internationalized/date" "^3.5.0" - "@internationalized/string" "^3.1.1" - "@react-stately/overlays" "^3.6.3" - "@react-stately/utils" "^3.8.0" - "@react-types/datepicker" "^3.6.1" - "@react-types/shared" "^3.21.0" - "@swc/helpers" "^0.5.0" - -"@react-stately/overlays@^3.6.3": - version "3.6.3" - resolved "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.3.tgz" - integrity sha512-K3eIiYAdAGTepYqNf2pVb+lPqLoVudXwmxPhyOSZXzjgpynD6tR3E9QfWQtkMazBuU73PnNX7zkH4l87r2AmTg== - dependencies: - "@react-stately/utils" "^3.8.0" - "@react-types/overlays" "^3.8.3" - "@swc/helpers" "^0.5.0" - -"@react-stately/utils@^3.8.0": - version "3.8.0" - resolved "https://registry.npmjs.org/@react-stately/utils/-/utils-3.8.0.tgz" - integrity sha512-wCIoFDbt/uwNkWIBF+xV+21k8Z8Sj5qGO3uptTcVmjYcZngOaGGyB4NkiuZhmhG70Pkv+yVrRwoC1+4oav9cCg== - dependencies: - "@swc/helpers" "^0.5.0" - -"@react-types/button@^3.9.0": - version "3.9.0" - resolved "https://registry.npmjs.org/@react-types/button/-/button-3.9.0.tgz" - integrity sha512-YhbchUDB7yL88ZFA0Zqod6qOMdzCLD5yVRmhWymk0yNLvB7EB1XX4c5sRANalfZSFP0RpCTlkjB05Hzp4+xOYg== - dependencies: - "@react-types/shared" "^3.21.0" - -"@react-types/calendar@^3.4.1": - version "3.4.1" - resolved "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.4.1.tgz" - integrity sha512-tiCkHi6IQtYcVoAESG79eUBWDXoo8NImo+Mj8WAWpo1lOA3SV1W2PpeXkoRNqtloilQ0aYcmsaJJUhciQG4ndg== - dependencies: - "@internationalized/date" "^3.5.0" - "@react-types/shared" "^3.21.0" - -"@react-types/datepicker@^3.6.1": - version "3.6.1" - resolved "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.6.1.tgz" - integrity sha512-/M+0e9hL9w98f5k4EoxeH2UfPsUPoS6fvmFsmwUZJcDiw7wP510XngnDLy9GOHj9xgqagZ20S79cxcEuTq7U6g== - dependencies: - "@internationalized/date" "^3.5.0" - "@react-types/calendar" "^3.4.1" - "@react-types/overlays" "^3.8.3" - "@react-types/shared" "^3.21.0" - -"@react-types/dialog@^3.5.6": - version "3.5.6" - resolved "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.6.tgz" - integrity sha512-lwwaAgoi4xe4eEJxBns+cBIRstIPTKWWddMkp51r7Teeh2uKs1Wki7N+Acb9CfT6JQTQDqtVJm6K76rcqNBVwg== - dependencies: - "@react-types/overlays" "^3.8.3" - "@react-types/shared" "^3.21.0" - -"@react-types/label@^3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@react-types/label/-/label-3.8.1.tgz" - integrity sha512-fA6zMTF2TmfU7H8JBJi0pNd8t5Ak4gO+ZA3cZBysf8r3EmdAsgr3LLqFaGTnZzPH1Fux6c7ARI3qjVpyNiejZQ== - dependencies: - "@react-types/shared" "^3.21.0" - -"@react-types/overlays@^3.8.3": - version "3.8.3" - resolved "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.8.3.tgz" - integrity sha512-TrCG2I2+V+TD0PGi3CqfnyU5jEzcelSGgYJQvVxsl5Vv3ri7naBLIsOjF9x66tPxhINLCPUtOze/WYRAexp8aw== - dependencies: - "@react-types/shared" "^3.21.0" - -"@react-types/shared@^3.21.0": - version "3.21.0" - resolved "https://registry.npmjs.org/@react-types/shared/-/shared-3.21.0.tgz" - integrity sha512-wJA2cUF8dP4LkuNUt9Vh2kkfiQb2NLnV2pPXxVnKJZ7d4x2/7VPccN+LYPnH8m0X3+rt50cxWuPKQmjxSsCFOg== - -"@rushstack/eslint-patch@^1.1.3": - version "1.4.0" - resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.4.0.tgz" - integrity sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg== - -"@rushstack/ts-command-line@^4.12.2": - version "4.16.0" - resolved "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.16.0.tgz" - integrity sha512-WJKhdR9ThK9Iy7t78O3at7I3X4Ssp5RRZay/IQa8NywqkFy/DQbT3iLouodMMdUwLZD9n8n++xLubVd3dkmpkg== - dependencies: - "@types/argparse" "1.0.38" - argparse "~1.0.9" - colors "~1.2.1" - string-argv "~0.3.1" - -"@sqltools/formatter@^1.2.5": - version "1.2.5" - resolved "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz" - integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw== - -"@stripe/react-stripe-js@^1.7.2": - version "1.16.5" - resolved "https://registry.npmjs.org/@stripe/react-stripe-js/-/react-stripe-js-1.16.5.tgz" - integrity sha512-lVPW3IfwdacyS22pP+nBB6/GNFRRhT/4jfgAK6T2guQmtzPwJV1DogiGGaBNhiKtSY18+yS8KlHSu+PvZNclvQ== - dependencies: - prop-types "^15.7.2" - -"@stripe/stripe-js@^1.29.0", "@stripe/stripe-js@^1.44.1": - version "1.54.2" - resolved "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-1.54.2.tgz" - integrity sha512-R1PwtDvUfs99cAjfuQ/WpwJ3c92+DAMy9xGApjqlWQMj0FKQabUAys2swfTRNzuYAYJh7NqK2dzcYVNkKLEKUg== - -"@swc/helpers@^0.5.0": - version "0.5.3" - resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.3.tgz" - integrity sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A== - dependencies: - tslib "^2.4.0" - -"@swc/helpers@0.5.2": - version "0.5.2" - resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz" - integrity sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw== - dependencies: - tslib "^2.4.0" - -"@tailwindcss/forms@^0.5.3": - version "0.5.6" - resolved "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.6.tgz" - integrity sha512-Fw+2BJ0tmAwK/w01tEFL5TiaJBX1NLT1/YbWgvm7ws3Qcn11kiXxzNTEQDMs5V3mQemhB56l3u0i9dwdzSQldA== - dependencies: - mini-svg-data-uri "^1.2.3" - -"@tanstack/query-core@4.36.1": - version "4.36.1" - resolved "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.36.1.tgz" - integrity sha512-DJSilV5+ytBP1FbFcEJovv4rnnm/CokuVvrBEtW/Va9DvuJ3HksbXUJEpI0aV1KtuL4ZoO9AVE6PyNLzF7tLeA== - -"@tanstack/react-query@^4.22.0": - version "4.36.1" - resolved "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.36.1.tgz" - integrity sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw== - dependencies: - "@tanstack/query-core" "4.36.1" - use-sync-external-store "^1.2.0" - -"@types/argparse@1.0.38": - version "1.0.38" - resolved "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz" - integrity sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA== - -"@types/dom-speech-recognition@^0.0.1": - version "0.0.1" - resolved "https://registry.npmjs.org/@types/dom-speech-recognition/-/dom-speech-recognition-0.0.1.tgz" - integrity sha512-udCxb8DvjcDKfk1WTBzDsxFbLgYxmQGKrE/ricoMqHRNjSlSUCcamVTA5lIQqzY10mY5qCY0QDwBfFEwhfoDPw== - -"@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.44.2" - resolved "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz" - integrity sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^1.0.0": - version "1.0.1" - resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== - -"@types/google.maps@^3.45.3": - version "3.54.1" - resolved "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.54.1.tgz" - integrity sha512-zh6333O/yPfcvRxpBTjnNFJjiHiujvy+tTAWwvNj3LMy90Y+VLTom8n9gvmgjXhOHgHvYpgO2Xyz31wYEYN27A== - -"@types/hogan.js@^3.0.0": - version "3.0.2" - resolved "https://registry.npmjs.org/@types/hogan.js/-/hogan.js-3.0.2.tgz" - integrity sha512-M6jOVsZEK31II8HV9QaYI5pg/w7fZb+3aqdCn3M3uofBswvrYBzbaQwSudB6z1UqF2IT3B8vt/3oBoa7XqugFw== - -"@types/ioredis-mock@^8": - version "8.2.5" - resolved "https://registry.npmjs.org/@types/ioredis-mock/-/ioredis-mock-8.2.5.tgz" - integrity sha512-cZyuwC9LGtg7s5G9/w6rpy3IOZ6F/hFR0pQlWYZESMo1xQUYbDpa6haqB4grTePjsGzcB/YLBFCjqRunK5wieg== - dependencies: - "@types/node" "*" - ioredis ">=5" - -"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": - version "7.0.13" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz" - integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/lodash@^4.14.195": - version "4.14.198" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz" - integrity sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg== - -"@types/node@*", "@types/node@17.0.21": - version "17.0.21" - resolved "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz" - integrity sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ== - -"@types/node@^14.14.31": - version "14.18.61" - resolved "https://registry.npmjs.org/@types/node/-/node-14.18.61.tgz" - integrity sha512-1mFT4DqS4/s9tlZbdkwEB/EnSykA9MDeDLIk3FHApGvIMGY//qgstB2gu9GKGESWyW/qiRUO+jhlLJ9bBJ8j+Q== - -"@types/prismjs@^1.26.0": - version "1.26.2" - resolved "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.2.tgz" - integrity sha512-/r7Cp7iUIk7gts26mHXD66geUC+2Fo26TZYjQK6Nr4LDfi6lmdRmMqM0oPwfiMhUwoBAOFe8GstKi2pf6hZvwA== - -"@types/prop-types@*": - version "15.7.6" - resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.6.tgz" - integrity sha512-RK/kBbYOQQHLYj9Z95eh7S6t7gq4Ojt/NT8HTk8bWVhA5DaF+5SMnxHKkP4gPNN3wAZkKP+VjAf0ebtYzf+fxg== - -"@types/qs@^6.5.3": - version "6.9.8" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz" - integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== - -"@types/react-dom@*", "@types/react-dom@^18.2.18": - version "18.2.18" - resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.18.tgz" - integrity sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw== - dependencies: - "@types/react" "*" - -"@types/react-instantsearch-core@*": - version "6.26.4" - resolved "https://registry.npmjs.org/@types/react-instantsearch-core/-/react-instantsearch-core-6.26.4.tgz" - integrity sha512-Iy6I0oOojQiVhPzaN9HsKs0ajODXv7nuUDDLGTSWw8XS7l6Dz2PaMwusEIhfSMz//13J5bUas3K5xoreRdptzA== - dependencies: - "@types/react" "*" - algoliasearch ">=4" - algoliasearch-helper ">=3" - -"@types/react-instantsearch-dom@^6.12.3": - version "6.12.3" - resolved "https://registry.npmjs.org/@types/react-instantsearch-dom/-/react-instantsearch-dom-6.12.3.tgz" - integrity sha512-HAQG74v7OzsUhdjNermd0A8c7LWRLsrMCsFCY6+7HEXK1hikeCs/Hmy6xjFhZVfFEWvpvX78vxJELafoAnuv8Q== - dependencies: - "@types/react" "*" - "@types/react-instantsearch-core" "*" - -"@types/react@*", "@types/react@^16.8.0 || ^17.0.0 || ^18.0.0", "@types/react@^16.9.0 || ^17.0.0 || ^18.0.0", "@types/react@^18.2.42": - version "18.2.42" - resolved "https://registry.npmjs.org/@types/react/-/react-18.2.42.tgz" - integrity sha512-c1zEr96MjakLYus/wPnuWDo1/zErfdU9rNsIGmE+NV71nx88FG9Ttgo5dqorXTu/LImX2f63WBP986gJkMPNbA== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.3" - resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz" - integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== - -"@types/sinonjs__fake-timers@8.1.1": - version "8.1.1" - resolved "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz" - integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== - -"@types/sizzle@^2.3.2": - version "2.3.3" - resolved "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz" - integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== - -"@types/triple-beam@^1.3.2": - version "1.3.3" - resolved "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.3.tgz" - integrity sha512-6tOUG+nVHn0cJbVp25JFayS5UE6+xlbcNF9Lo9mU7U0zk3zeUShZied4YEQZjy1JBF043FSkdXw8YkUJuVtB5g== - -"@types/validator@^13.7.10": - version "13.11.1" - resolved "https://registry.npmjs.org/@types/validator/-/validator-13.11.1.tgz" - integrity sha512-d/MUkJYdOeKycmm75Arql4M5+UuXmf4cHdHKsyw1GcvnNgL6s77UkgSgJ8TE/rI5PYsnwYq5jkcWBLuN/MpQ1A== - -"@types/yauzl@^2.9.1": - version "2.10.0" - resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz" - integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== - dependencies: - "@types/node" "*" - -"@typescript-eslint/parser@^5.4.2 || ^6.0.0": - version "6.15.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.15.0.tgz" - integrity sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA== - dependencies: - "@typescript-eslint/scope-manager" "6.15.0" - "@typescript-eslint/types" "6.15.0" - "@typescript-eslint/typescript-estree" "6.15.0" - "@typescript-eslint/visitor-keys" "6.15.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@6.15.0": - version "6.15.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.15.0.tgz" - integrity sha512-+BdvxYBltqrmgCNu4Li+fGDIkW9n//NrruzG9X1vBzaNK+ExVXPoGB71kneaVw/Jp+4rH/vaMAGC6JfMbHstVg== - dependencies: - "@typescript-eslint/types" "6.15.0" - "@typescript-eslint/visitor-keys" "6.15.0" - -"@typescript-eslint/types@6.15.0": - version "6.15.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.15.0.tgz" - integrity sha512-yXjbt//E4T/ee8Ia1b5mGlbNj9fB9lJP4jqLbZualwpP2BCQ5is6BcWwxpIsY4XKAhmdv3hrW92GdtJbatC6dQ== - -"@typescript-eslint/typescript-estree@6.15.0": - version "6.15.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.15.0.tgz" - integrity sha512-7mVZJN7Hd15OmGuWrp2T9UvqR2Ecg+1j/Bp1jXUEY2GZKV6FXlOIoqVDmLpBiEiq3katvj/2n2mR0SDwtloCew== - dependencies: - "@typescript-eslint/types" "6.15.0" - "@typescript-eslint/visitor-keys" "6.15.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/visitor-keys@6.15.0": - version "6.15.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.15.0.tgz" - integrity sha512-1zvtdC1a9h5Tb5jU9x3ADNXO9yjP8rXlaoChu0DQX40vf5ACVpYIVIZhIMZ6d5sDXH7vq4dsZBT1fEGj8D2n2w== - dependencies: - "@typescript-eslint/types" "6.15.0" - eslint-visitor-keys "^3.4.1" - -"@webassemblyjs/ast@^1.11.5", "@webassemblyjs/ast@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== - -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== - -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== - -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== - -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" - -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - -"@webassemblyjs/wasm-parser@^1.11.5", "@webassemblyjs/wasm-parser@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abbrev@1: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-loose@8.3.0: - version "8.3.0" - resolved "https://registry.npmjs.org/acorn-loose/-/acorn-loose-8.3.0.tgz" - integrity sha512-75lAs9H19ldmW+fAbyqHdjgdCrz0pWGXKmnqFoh8PyVd1L2RIb4RzYrSjmopeqv3E1G3/Pimu6GgLlrGbrkF7w== - dependencies: - acorn "^8.5.0" - -acorn-walk@8.2.0: - version "8.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - 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" - -algoliasearch-helper@>=3: - version "3.14.1" - resolved "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.14.1.tgz" - integrity sha512-TZihm6eisSqgLWOXpISAUFXAolJvEpa1gkTjUUEDmVl+TTiQuNvzLQ/osOiqIXzx6QSS4Pd6Ry+SKKOwiqJ17g== - dependencies: - "@algolia/events" "^4.0.1" - -algoliasearch-helper@3.14.0: - version "3.14.0" - resolved "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.14.0.tgz" - integrity sha512-gXDXzsSS0YANn5dHr71CUXOo84cN4azhHKUbg71vAWnH+1JBiR4jf7to3t3JHXknXkbV0F7f055vUSBKrltHLQ== - dependencies: - "@algolia/events" "^4.0.1" - -algoliasearch@^4.20.0, "algoliasearch@>= 3.1 < 5", "algoliasearch@>= 3.1 < 6", algoliasearch@>=4: - version "4.20.0" - resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.20.0.tgz" - integrity sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g== - dependencies: - "@algolia/cache-browser-local-storage" "4.20.0" - "@algolia/cache-common" "4.20.0" - "@algolia/cache-in-memory" "4.20.0" - "@algolia/client-account" "4.20.0" - "@algolia/client-analytics" "4.20.0" - "@algolia/client-common" "4.20.0" - "@algolia/client-personalization" "4.20.0" - "@algolia/client-search" "4.20.0" - "@algolia/logger-common" "4.20.0" - "@algolia/logger-console" "4.20.0" - "@algolia/requester-browser-xhr" "4.20.0" - "@algolia/requester-common" "4.20.0" - "@algolia/requester-node-http" "4.20.0" - "@algolia/transporter" "4.20.0" - -ansi-align@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: - version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - 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== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.2.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz" - integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -app-root-path@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz" - integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== - -append-field@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz" - integrity sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw== - -arch@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz" - integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== - -arg@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -argparse@~1.0.9: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -aria-hidden@^1.1.1: - version "1.2.3" - resolved "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz" - integrity sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ== - dependencies: - tslib "^2.0.0" - -aria-query@^5.1.3: - version "5.3.0" - resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== - dependencies: - dequal "^2.0.3" - -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-includes@^3.1.6, array-includes@^3.1.7: - version "3.1.7" - resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array.prototype.findlastindex@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" - -array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.tosorted@^1.1.1: - version "1.1.2" - resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz" - integrity sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" - -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" - is-shared-array-buffer "^1.0.2" - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@^1.0.0, assert-plus@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz" - integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async@^3.2.0, async@^3.2.3: - version "3.2.4" - resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - -asynciterator.prototype@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz" - integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== - dependencies: - has-symbols "^1.0.3" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -autoprefixer@^10.4.2: - version "10.4.15" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz" - integrity sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew== - dependencies: - browserslist "^4.21.10" - caniuse-lite "^1.0.30001520" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -awilix@^8.0.0, awilix@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/awilix/-/awilix-8.0.1.tgz" - integrity sha512-zDSp4R204scvQIDb2GMoWigzXemn0+3AKKIAt543T9v2h7lmoypvkmcx1W/Jet/nm27R1N1AsqrsYVviAR9KrA== - dependencies: - camel-case "^4.1.2" - fast-glob "^3.2.12" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== - -axe-core@^4.6.2: - version "4.8.1" - resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.8.1.tgz" - integrity sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ== - -axios-retry@^3.1.9: - version "3.7.0" - resolved "https://registry.npmjs.org/axios-retry/-/axios-retry-3.7.0.tgz" - integrity sha512-ZTnCkJbRtfScvwiRnoVskFAfvU0UG3xNcsjwTR0mawSbIJoothxn67gKsMaNAFHRXJ1RmuLhmZBzvyXi3+9WyQ== - dependencies: - "@babel/runtime" "^7.15.4" - is-retry-allowed "^2.2.0" - -axios@*, axios@^0.21.4: - version "0.21.4" - resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -axios@^0.24.0: - version "0.24.0" - resolved "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz" - integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== - dependencies: - follow-redirects "^1.14.4" - -axobject-query@^3.1.1: - version "3.2.1" - resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz" - integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== - dependencies: - dequal "^2.0.3" - -babel-loader@^8.2.3: - version "8.3.0" - resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz" - integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== - dependencies: - find-cache-dir "^3.3.1" - loader-utils "^2.0.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -basic-auth@~2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz" - integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== - dependencies: - safe-buffer "5.1.2" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -blob-util@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz" - integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== - -bluebird@^3.7.2: - version "3.7.2" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -body-parser@^1.19.0: - version "1.20.2" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -boxen@^5.0.1: - version "5.1.2" - resolved "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz" - integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.2" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.14.5, browserslist@^4.21.10, browserslist@^4.21.9, "browserslist@>= 4.21.0": - version "4.21.10" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz" - integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== - dependencies: - caniuse-lite "^1.0.30001517" - electron-to-chromium "^1.4.477" - node-releases "^2.0.13" - update-browserslist-db "^1.0.11" - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-writer@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz" - integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== - -buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bullmq@^3.5.6: - version "3.15.8" - resolved "https://registry.npmjs.org/bullmq/-/bullmq-3.15.8.tgz" - integrity sha512-k3uimHGhl5svqD7SEak+iI6c5DxeLOaOXzCufI9Ic0ST3nJr69v71TGR4cXCTXdgCff3tLec5HgoBnfyWjgn5A== - dependencies: - cron-parser "^4.6.0" - glob "^8.0.3" - ioredis "^5.3.2" - lodash "^4.17.21" - msgpackr "^1.6.2" - semver "^7.3.7" - tslib "^2.0.0" - uuid "^9.0.0" - -busboy@^1.0.0, busboy@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cachedir@^2.3.0: - version "2.4.0" - resolved "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz" - integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ== - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - 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.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" - 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.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001520: - version "1.0.30001538" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz" - integrity sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw== - -cardinal@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz" - integrity sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw== - dependencies: - ansicolors "~0.3.2" - redeyed "~2.1.0" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - 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.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -check-more-types@^2.24.0: - version "2.24.0" - resolved "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz" - integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== - -chokidar@^3.4.2, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== - -class-transformer@^0.5.1: - version "0.5.1" - resolved "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz" - integrity sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw== - -class-validator@^0.14.0: - version "0.14.0" - resolved "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz" - integrity sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A== - dependencies: - "@types/validator" "^13.7.10" - libphonenumber-js "^1.10.14" - validator "^13.7.0" - -class-variance-authority@^0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.6.1.tgz" - integrity sha512-eurOEGc7YVx3majOrOb099PNKgO3KnKSApOprXI4BTq6bcfbqbQXPN2u+rPPmIJ2di23bMwhk0SxCCthBmszEQ== - dependencies: - clsx "1.2.1" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -clean-stack@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz" - integrity sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg== - dependencies: - escape-string-regexp "4.0.0" - -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-highlight@^2.1.11: - version "2.1.11" - resolved "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz" - integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== - dependencies: - chalk "^4.0.0" - highlight.js "^10.7.1" - mz "^2.4.0" - parse5 "^5.1.1" - parse5-htmlparser2-tree-adapter "^6.0.0" - yargs "^16.0.0" - -cli-progress@^3.4.0: - version "3.12.0" - resolved "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz" - integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A== - dependencies: - string-width "^4.2.3" - -cli-spinners@^2.5.0: - version "2.9.1" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz" - integrity sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ== - -cli-table3@~0.6.1: - version "0.6.3" - resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== - dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" - -cli-ux@^5.4.9: - version "5.6.7" - resolved "https://registry.npmjs.org/cli-ux/-/cli-ux-5.6.7.tgz" - integrity sha512-dsKAurMNyFDnO6X1TiiRNiVbL90XReLKcvIq4H777NMqXGBxBws23ag8ubCJE97vVZEgWG2eSUhsyLf63Jv8+g== - dependencies: - "@oclif/command" "^1.8.15" - "@oclif/errors" "^1.3.5" - "@oclif/linewrap" "^1.0.0" - "@oclif/screen" "^1.0.4" - ansi-escapes "^4.3.0" - ansi-styles "^4.2.0" - cardinal "^2.1.1" - chalk "^4.1.0" - clean-stack "^3.0.0" - cli-progress "^3.4.0" - extract-stack "^2.0.0" - fs-extra "^8.1" - hyperlinker "^1.0.0" - indent-string "^4.0.0" - is-wsl "^2.2.0" - js-yaml "^3.13.1" - lodash "^4.17.21" - natural-orderby "^2.0.1" - object-treeify "^1.1.4" - password-prompt "^1.1.2" - semver "^7.3.2" - string-width "^4.2.0" - strip-ansi "^6.0.0" - supports-color "^8.1.0" - supports-hyperlinks "^2.1.0" - tslib "^2.0.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -client-only@^0.0.1, client-only@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz" - integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -clsx@^1.1.1, clsx@^1.2.1, clsx@1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz" - integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== - -cluster-key-slot@^1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz" - integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== - -color-convert@^1.9.0, color-convert@^1.9.3: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@^1.0.0, color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.6.0: - version "1.9.1" - resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.1.3: - version "3.2.1" - resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" - integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== - dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" - -colorette@^2.0.16, colorette@2.0.19: - version "2.0.19" - resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== - -colors@~1.2.1: - version "1.2.5" - resolved "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz" - integrity sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg== - -colorspace@1.1.x: - version "1.1.4" - resolved "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz" - integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== - dependencies: - color "^3.1.3" - text-hex "1.0.x" - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^10.0.0: - version "10.0.1" - resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@^2.20.0: - 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== - -commander@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -commander@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== - -commander@^9.1.0: - version "9.5.0" - resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" - integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== - -common-tags@^1.8.0: - version "1.8.2" - resolved "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz" - integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^1.5.2: - version "1.6.2" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -configstore@5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - -connect-redis@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/connect-redis/-/connect-redis-5.2.0.tgz" - integrity sha512-wcv1lZWa2K7RbsdSlrvwApBQFLQx+cia+oirLIeim0axR3D/9ZJbHdeTM/j8tJYYKk34dVs2QPAuAqcIklWD+Q== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -cookie-parser@^1.4.6: - version "1.4.6" - resolved "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz" - integrity sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA== - dependencies: - cookie "0.4.1" - cookie-signature "1.0.6" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz" - integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== - -cookie@0.4.2: - version "0.4.2" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -copy-to-clipboard@^3.3.3: - version "3.3.3" - resolved "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz" - integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== - dependencies: - toggle-selection "^1.0.6" - -core-js@^3.6.5: - version "3.32.2" - resolved "https://registry.npmjs.org/core-js/-/core-js-3.32.2.tgz" - integrity sha512-pxXSw1mYZPDGvTQqEc5vgIb83jGQKFGYWY76z4a7weZXUolw3G+OvpZqSRcfYOoOVUQJYEPsWeQK8pKEnUtWxQ== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -cors@^2.8.5: - version "2.8.5" - resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - -cron-parser@^4.2.0, cron-parser@^4.6.0: - version "4.9.0" - resolved "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz" - integrity sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q== - dependencies: - luxon "^3.2.1" - -cross-env@^5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz" - integrity sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ== - dependencies: - cross-spawn "^6.0.5" - -cross-fetch@^3.1.5: - version "3.1.8" - resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz" - integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== - dependencies: - node-fetch "^2.6.12" - -cross-inspect@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.0.tgz" - integrity sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ== - dependencies: - tslib "^2.4.0" - -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -csstype@^3.0.2: - version "3.1.2" - resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== - -cypress@^9.5.2: - version "9.7.0" - resolved "https://registry.npmjs.org/cypress/-/cypress-9.7.0.tgz" - integrity sha512-+1EE1nuuuwIt/N1KXRR2iWHU+OiIt7H28jJDyyI4tiUftId/DrXYEwoDa5+kH2pki1zxnA0r6HrUGHV5eLbF5Q== - dependencies: - "@cypress/request" "^2.88.10" - "@cypress/xvfb" "^1.2.4" - "@types/node" "^14.14.31" - "@types/sinonjs__fake-timers" "8.1.1" - "@types/sizzle" "^2.3.2" - arch "^2.2.0" - blob-util "^2.0.2" - bluebird "^3.7.2" - buffer "^5.6.0" - cachedir "^2.3.0" - chalk "^4.1.0" - check-more-types "^2.24.0" - cli-cursor "^3.1.0" - cli-table3 "~0.6.1" - commander "^5.1.0" - common-tags "^1.8.0" - dayjs "^1.10.4" - debug "^4.3.2" - enquirer "^2.3.6" - eventemitter2 "^6.4.3" - execa "4.1.0" - executable "^4.1.1" - extract-zip "2.0.1" - figures "^3.2.0" - fs-extra "^9.1.0" - getos "^3.2.1" - is-ci "^3.0.0" - is-installed-globally "~0.4.0" - lazy-ass "^1.6.0" - listr2 "^3.8.3" - lodash "^4.17.21" - log-symbols "^4.0.0" - minimist "^1.2.6" - ospath "^1.2.2" - pretty-bytes "^5.6.0" - proxy-from-env "1.0.0" - request-progress "^3.0.0" - semver "^7.3.2" - supports-color "^8.1.1" - tmp "~0.2.1" - untildify "^4.0.0" - yauzl "^2.10.0" - -damerau-levenshtein@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz" - integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -date-fns@^2.28.0, date-fns@^2.30.0: - version "2.30.0" - resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz" - integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== - dependencies: - "@babel/runtime" "^7.21.0" - -dayjs@^1.10.4, dayjs@^1.11.9: - version "1.11.9" - resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz" - integrity sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA== - -debug@^3.1.0: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -denque@^1.5.0: - version "1.5.1" - resolved "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz" - integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== - -denque@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" - integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== - -depd@~2.0.0, depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-node-es@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz" - integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== - -didyoumean@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== - -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dotenv@^16.0.3, dotenv@^16.1.4: - version "16.3.1" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz" - integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== - -dotenv@16.0.3: - version "16.0.3" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz" - integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== - -dotenv@16.1.4: - version "16.1.4" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.1.4.tgz" - integrity sha512-m55RtE8AsPeJBpOIFKihEmqUcoVncQIwo7x9U8ZwLEZw9ZpXboz2c+rvog+jUaJvVrZ5kBOeYQBX5+8Aa/OZQw== - -dset@^3.1.2: - version "3.1.3" - resolved "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz" - integrity sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.477: - version "1.4.523" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.523.tgz" - integrity sha512-9AreocSUWnzNtvLcbpng6N+GkXnCcBR80IQkxRC9Dfdyg4gaWNUPBujAHUpKkiUkoSoR9UlhA4zD/IgBklmhzg== - -emittery@^0.12.1: - version "0.12.1" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.12.1.tgz" - integrity sha512-pYyW59MIZo0HxPFf+Vb3+gacUu0gxVS3TZwB2ClwkEZywgF9f9OJDoVmNLojTn0vKX3tO9LC+pdQEcLP4Oz/bQ== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -enabled@2.0.x: - version "2.0.0" - resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz" - integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -end-of-stream@^1.1.0: - 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== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.12.0, enhanced-resolve@^5.15.0: - version "5.15.0" - resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -enquirer@^2.3.6, "enquirer@>= 2.3.0 < 3": - version "2.4.1" - resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz" - integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== - dependencies: - ansi-colors "^4.1.1" - strip-ansi "^6.0.1" - -es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.12" - is-weakref "^1.0.2" - object-inspect "^1.12.3" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" - -es-iterator-helpers@^1.0.12: - version "1.0.15" - resolved "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz" - integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g== - dependencies: - asynciterator.prototype "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.1" - es-abstract "^1.22.1" - es-set-tostringtag "^2.0.1" - function-bind "^1.1.1" - get-intrinsic "^1.2.1" - globalthis "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - iterator.prototype "^1.1.2" - safe-array-concat "^1.0.1" - -es-module-lexer@^1.2.1: - version "1.3.1" - resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz" - integrity sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q== - -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - has-tostringtag "^1.0.0" - -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== - dependencies: - has "^1.0.3" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-next@^13.4.5: - version "13.4.19" - resolved "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.19.tgz" - integrity sha512-WE8367sqMnjhWHvR5OivmfwENRQ1ixfNE9hZwQqNCsd+iM3KnuMc1V8Pt6ytgjxjf23D+xbesADv9x3xaKfT3g== - dependencies: - "@next/eslint-plugin-next" "13.4.19" - "@rushstack/eslint-patch" "^1.1.3" - "@typescript-eslint/parser" "^5.4.2 || ^6.0.0" - eslint-import-resolver-node "^0.3.6" - eslint-import-resolver-typescript "^3.5.2" - eslint-plugin-import "^2.26.0" - eslint-plugin-jsx-a11y "^6.5.1" - eslint-plugin-react "^7.31.7" - eslint-plugin-react-hooks "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" - -eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: - version "0.3.9" - resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-import-resolver-typescript@^3.5.2: - version "3.6.1" - resolved "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz" - integrity sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg== - dependencies: - debug "^4.3.4" - enhanced-resolve "^5.12.0" - eslint-module-utils "^2.7.4" - fast-glob "^3.3.1" - get-tsconfig "^4.5.0" - is-core-module "^2.11.0" - is-glob "^4.0.3" - -eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== - dependencies: - debug "^3.2.7" - -eslint-plugin-import@*, eslint-plugin-import@^2.26.0: - version "2.29.1" - resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== - dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" - semver "^6.3.1" - tsconfig-paths "^3.15.0" - -eslint-plugin-jsx-a11y@^6.5.1: - version "6.7.1" - resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz" - integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== - dependencies: - "@babel/runtime" "^7.20.7" - aria-query "^5.1.3" - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - ast-types-flow "^0.0.7" - axe-core "^4.6.2" - axobject-query "^3.1.1" - damerau-levenshtein "^1.0.8" - emoji-regex "^9.2.2" - has "^1.0.3" - jsx-ast-utils "^3.3.3" - language-tags "=1.0.5" - minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - semver "^6.3.0" - -"eslint-plugin-react-hooks@^4.5.0 || 5.0.0-canary-7118f5dd7-20230705": - version "4.6.0" - resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== - -eslint-plugin-react@^7.31.7: - version "7.33.2" - resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz" - integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== - dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" - doctrine "^2.1.0" - es-iterator-helpers "^1.0.12" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" - prop-types "^15.8.1" - resolve "^2.0.0-next.4" - semver "^6.3.1" - string.prototype.matchall "^4.0.8" - -eslint-scope@^7.1.1: - version "7.2.2" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.3" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.23.0 || ^8.0.0", eslint@>=5, eslint@8.10.0: - version "8.10.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz" - integrity sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw== - dependencies: - "@eslint/eslintrc" "^1.2.0" - "@humanwhocodes/config-array" "^0.9.2" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.6.0" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -esm@^3.2.25: - version "3.2.25" - resolved "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz" - integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== - -espree@^9.3.1, espree@^9.4.0: - version "9.6.1" - resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@^4.0.0, esprima@~4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.5.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eventemitter2@^6.4.3: - version "6.4.9" - resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz" - integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg== - -events@^3.2.0: - version "3.3.0" - resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -execa@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - 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" - -executable@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz" - integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== - dependencies: - pify "^2.2.0" - -express-session@^1.17.3: - version "1.17.3" - resolved "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz" - integrity sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw== - dependencies: - cookie "0.4.2" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~2.0.0" - on-headers "~1.0.2" - parseurl "~1.3.3" - safe-buffer "5.2.1" - uid-safe "~2.1.5" - -express@^4.18.2: - version "4.18.2" - resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extract-stack@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/extract-stack/-/extract-stack-2.0.0.tgz" - integrity sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ== - -extract-zip@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - -extsprintf@^1.2.0, extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - 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-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.1: - version "3.3.1" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - -fecha@^4.2.0: - version "4.2.3" - resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz" - integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== - -fengari-interop@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/fengari-interop/-/fengari-interop-0.1.3.tgz" - integrity sha512-EtZ+oTu3kEwVJnoymFPBVLIbQcCoy9uWCVnMA6h3M/RqHkUBsLYp29+RRHf9rKr6GwjubWREU1O7RretFIXjHw== - -fengari@^0.1.0, fengari@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/fengari/-/fengari-0.1.4.tgz" - integrity sha512-6ujqUuiIYmcgkGz8MGAdERU57EIluGGPSUgGPTsco657EHa+srq0S3/YUl/r9kx1+D+d4rGfYObd+m8K22gB1g== - dependencies: - readline-sync "^1.4.9" - sprintf-js "^1.1.1" - tmp "^0.0.33" - -figures@^3.0.0, figures@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-cache-dir@^3.3.1: - version "3.3.2" - resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.1.0" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz" - integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== - dependencies: - flatted "^3.2.7" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.7: - version "3.2.9" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== - -fn.name@1.x.x: - version "1.1.0" - resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz" - integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== - -follow-redirects@^1.14.0, follow-redirects@^1.14.4: - version "1.15.5" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz" - integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fraction.js@^4.2.0: - version "4.3.6" - resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz" - integrity sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-exists-cached@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz" - integrity sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg== - -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^8.1: - version "8.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@11.1.1: - version "11.1.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-jetpack@^4.3.1: - version "4.3.1" - resolved "https://registry.npmjs.org/fs-jetpack/-/fs-jetpack-4.3.1.tgz" - integrity sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ== - dependencies: - minimatch "^3.0.2" - rimraf "^2.6.3" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.1, function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.1, get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - -get-nonce@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz" - integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -get-tsconfig@^4.5.0: - version "4.7.0" - resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz" - integrity sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw== - dependencies: - resolve-pkg-maps "^1.0.0" - -getopts@2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/getopts/-/getopts-2.3.0.tgz" - integrity sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA== - -getos@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz" - integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== - dependencies: - async "^3.2.0" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-to-regexp@^0.4.1: - 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== - -glob@^10.3.10: - version "10.3.10" - resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - -glob@^7.1.3, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^8.0.3: - version "8.1.0" - resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@7.1.6: - version "7.1.6" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@7.1.7: - version "7.1.7" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-dirs@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz" - integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== - dependencies: - ini "2.0.0" - -global@^4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/global/-/global-4.4.0.tgz" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== - dependencies: - min-document "^2.19.0" - process "^0.11.10" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globals@^13.6.0: - version "13.21.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz" - integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -globby@^11.0.1, globby@^11.1.0, globby@11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -"graphql@^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", "graphql@^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", graphql@^16.6.0: - version "16.8.1" - resolved "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz" - integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - dependencies: - function-bind "^1.1.2" - -hi-base32@^0.5.0: - version "0.5.1" - resolved "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz" - integrity sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA== - -highlight.js@^10.7.1: - version "10.7.3" - resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz" - integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== - -hogan.js@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/hogan.js/-/hogan.js-3.0.2.tgz" - integrity sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg== - dependencies: - mkdirp "0.3.0" - nopt "1.0.10" - -hosted-git-info@^4.0.2: - version "4.1.0" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - -htm@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/htm/-/htm-3.1.1.tgz" - integrity sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-signature@~1.3.6: - version "1.3.6" - resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" - integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== - dependencies: - assert-plus "^1.0.0" - jsprim "^2.0.2" - sshpk "^1.14.1" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -hyperlinker@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz" - integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== - -iconv-lite@^0.4.24, iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2, inherits@2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - -inquirer@^8.0.0: - version "8.2.6" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz" - integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^6.0.1" - -instantsearch.js@4.56.8: - version "4.56.8" - resolved "https://registry.npmjs.org/instantsearch.js/-/instantsearch.js-4.56.8.tgz" - integrity sha512-40DJ5l70ZzVzWPK3qrHTKlJLaHGq1PRZpzfL6281P2mz8G19WOHQHKAP4Zh6a4lOZaRtJQUiPjQwqCHSurXZ5g== - dependencies: - "@algolia/events" "^4.0.1" - "@algolia/ui-components-highlight-vdom" "^1.2.1" - "@algolia/ui-components-shared" "^1.2.1" - "@types/dom-speech-recognition" "^0.0.1" - "@types/google.maps" "^3.45.3" - "@types/hogan.js" "^3.0.0" - "@types/qs" "^6.5.3" - algoliasearch-helper "3.14.0" - hogan.js "^3.0.2" - htm "^3.0.0" - preact "^10.10.0" - qs "^6.5.1 < 6.10" - search-insights "^2.6.0" - -internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== - dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" - -interpret@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== - -intl-messageformat@^10.1.0: - version "10.5.4" - resolved "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.4.tgz" - integrity sha512-z+hrFdiJ/heRYlzegrdFYqU1m/KOMOVMqNilIArj+PbsuU8TNE7v4TWdQgSoxlxbT4AcZH3Op3/Fu15QTp+W1w== - dependencies: - "@formatjs/ecma402-abstract" "1.17.2" - "@formatjs/fast-memoize" "2.2.0" - "@formatjs/icu-messageformat-parser" "2.7.0" - tslib "^2.4.0" - -invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -ioredis-mock@8.4.0: - version "8.4.0" - resolved "https://registry.npmjs.org/ioredis-mock/-/ioredis-mock-8.4.0.tgz" - integrity sha512-ZB+Wj9kzYbYcPrU2Xr61Fo+Fcc8Y1/sAnc/8sCKhyi69C4lQf7cdTEqiqRwneICX2OwgGtpCw8Udr7GEyZixOQ== - dependencies: - "@ioredis/as-callback" "^3.0.0" - "@ioredis/commands" "^1.2.0" - fengari "^0.1.4" - fengari-interop "^0.1.3" - semver "^7.3.8" - -ioredis@^5, ioredis@^5.0.4, ioredis@^5.2.5, ioredis@^5.3.2, ioredis@>=5: - version "5.3.2" - resolved "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz" - integrity sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA== - dependencies: - "@ioredis/commands" "^1.1.1" - cluster-key-slot "^1.1.0" - debug "^4.3.4" - denque "^2.1.0" - lodash.defaults "^4.2.0" - lodash.isarguments "^3.1.0" - redis-errors "^1.2.0" - redis-parser "^3.0.0" - standard-as-callback "^2.1.0" - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== - dependencies: - has-tostringtag "^1.0.0" - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-ci@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - -is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.9.0: - version "2.13.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-date-object@^1.0.1, is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-docker@^2.0.0, is-docker@^2.1.1, is-docker@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" - integrity sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== - dependencies: - call-bind "^1.0.2" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-function@^1.0.10: - version "1.0.10" - resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" - integrity sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg== - dependencies: - is-extglob "^1.0.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-invalid-path@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz" - integrity sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ== - dependencies: - is-glob "^2.0.0" - -is-map@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz" - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-retry-allowed@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz" - integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg== - -is-set@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-valid-path@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz" - integrity sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A== - dependencies: - is-invalid-path "^0.1.0" - -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -is-wsl@^2.1.1, is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -iso8601-duration@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/iso8601-duration/-/iso8601-duration-1.3.0.tgz" - integrity sha512-K4CiUBzo3YeWk76FuET/dQPH03WE04R94feo5TSKQCXpoXQt9E4yx2CnY737QZnSAI3PI4WlKo/zfqizGx52QQ== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - -iterator.prototype@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz" - integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== - dependencies: - define-properties "^1.2.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - reflect.getprototypeof "^1.0.4" - set-function-name "^2.0.1" - -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jiti@^1.18.2: - version "1.20.0" - resolved "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz" - integrity sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - 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== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonwebtoken@^9.0.0: - version "9.0.2" - resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz" - integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== - dependencies: - jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^7.5.4" - -jsprim@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" - integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: - version "3.3.5" - resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz" - integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== - dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - object.assign "^4.1.4" - object.values "^1.1.6" - -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -keyv@^4.5.3: - version "4.5.3" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== - dependencies: - json-buffer "3.0.1" - -kind-of@^6.0.0: - version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -knex@2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/knex/-/knex-2.4.2.tgz" - integrity sha512-tMI1M7a+xwHhPxjbl/H9K1kHX+VncEYcvCx5K00M16bWvpYPKAZd6QrCu68PtHAdIZNQPWZn0GVhqVBEthGWCg== - dependencies: - colorette "2.0.19" - commander "^9.1.0" - debug "4.3.4" - escalade "^3.1.1" - esm "^3.2.25" - get-package-type "^0.1.0" - getopts "2.3.0" - interpret "^2.2.0" - lodash "^4.17.21" - pg-connection-string "2.5.0" - rechoir "^0.8.0" - resolve-from "^5.0.0" - tarn "^3.0.2" - tildify "2.0.0" - -knex@2.5.1: - version "2.5.1" - resolved "https://registry.npmjs.org/knex/-/knex-2.5.1.tgz" - integrity sha512-z78DgGKUr4SE/6cm7ku+jHvFT0X97aERh/f0MUKAKgFnwCYBEW4TFBqtHWFYiJFid7fMrtpZ/gxJthvz5mEByA== - dependencies: - colorette "2.0.19" - commander "^10.0.0" - debug "4.3.4" - escalade "^3.1.1" - esm "^3.2.25" - get-package-type "^0.1.0" - getopts "2.3.0" - interpret "^2.2.0" - lodash "^4.17.21" - pg-connection-string "2.6.1" - rechoir "^0.8.0" - resolve-from "^5.0.0" - tarn "^3.0.2" - tildify "2.0.0" - -kuler@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz" - integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== - -language-subtag-registry@~0.3.2: - version "0.3.22" - resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== - -language-tags@=1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz" - integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== - dependencies: - language-subtag-registry "~0.3.2" - -lazy-ass@^1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz" - integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -libphonenumber-js@^1.10.14: - version "1.10.44" - resolved "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.44.tgz" - integrity sha512-svlRdNBI5WgBjRC20GrCfbFiclbF0Cx+sCcQob/C1r57nsoq0xg8r65QbTyVyweQIlB33P+Uahyho6EMYgcOyQ== - -lilconfig@^2.0.5, lilconfig@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -listr2@^3.8.3: - version "3.14.0" - resolved "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz" - integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== - dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.16" - log-update "^4.0.0" - p-map "^4.0.0" - rfdc "^1.3.0" - rxjs "^7.5.1" - through "^2.3.8" - wrap-ansi "^7.0.0" - -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -loader-utils@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz" - integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== - -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" - integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== - -lodash.isarguments@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz" - integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" - integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== - -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" - integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== - -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" - integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" - integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.once@^4.0.0, lodash.once@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" - integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== - -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.0.0, log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" - 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" - -logform@^2.3.2, logform@^2.4.0: - version "2.5.1" - resolved "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz" - integrity sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg== - dependencies: - "@colors/colors" "1.5.0" - "@types/triple-beam" "^1.3.2" - fecha "^4.2.0" - ms "^2.1.1" - safe-stable-stringify "^2.3.1" - triple-beam "^1.3.0" - -long-timeout@0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz" - integrity sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w== - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -"lru-cache@^9.1.1 || ^10.0.0": - version "10.2.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - -luxon@^3.2.1: - version "3.4.3" - resolved "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz" - integrity sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg== - -make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: - 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== - dependencies: - semver "^6.0.0" - -math-random@^1.0.1: - version "1.0.4" - resolved "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz" - integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== - -meant@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/meant/-/meant-1.0.3.tgz" - integrity sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -medusa-core-utils@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/medusa-core-utils/-/medusa-core-utils-1.2.0.tgz" - integrity sha512-9mzXGkMsll92C46Ub8A9vwjcfFiHfdkgshwmPP9QpRrm02M6N+SQb45S2A9t0dKjyT9J7rgCCSrFhYQg3pvqbw== - -medusa-interfaces@^1.3.7: - version "1.3.8" - resolved "https://registry.npmjs.org/medusa-interfaces/-/medusa-interfaces-1.3.8.tgz" - integrity sha512-S1uCwwbOaEnBy9TWwfBlfs9scLSUz/0GcD9p5EWyPLVXvnBfGTmLBt4HI6oj6h3fVd+92RTdrmVnhznRYnOvoQ== - -medusa-react@^9.0.0: - version "9.0.5" - resolved "https://registry.npmjs.org/medusa-react/-/medusa-react-9.0.5.tgz" - integrity sha512-O5oJEfTQn7ysky1Zoxctm4nc7xVx8hAHqCzKI6g6KaJpLTaBSKq66pKQvRwMEkU3ao9Um+/CP0QVwwNWyh/skw== - dependencies: - "@medusajs/medusa-js" "*" - -medusa-telemetry@^0.0.17: - version "0.0.17" - resolved "https://registry.npmjs.org/medusa-telemetry/-/medusa-telemetry-0.0.17.tgz" - integrity sha512-Wwtm7QE1AKME0/uiEPen7lfzE9wnaO7J9Or8ObT8eTUipOqIbYRLEY7SSdGjMRg4NdyrzOJMIIjbcPz+vvsRVw== - dependencies: - "@babel/runtime" "^7.22.10" - axios "^0.21.4" - axios-retry "^3.1.9" - boxen "^5.0.1" - ci-info "^3.2.0" - configstore "5.0.1" - global "^4.4.0" - is-docker "^2.2.1" - remove-trailing-slash "^0.1.1" - uuid "^8.3.2" - -medusa-test-utils@^1.1.40: - version "1.1.41" - resolved "https://registry.npmjs.org/medusa-test-utils/-/medusa-test-utils-1.1.41.tgz" - integrity sha512-UZNmkkrWfLXjYwUJUwIKxUvkGC5j22IFB5mv1daHDw//C0ehCrFFi2q0bTqkds9vH1VSTUf31Kz0MUiMdXZs/g== - dependencies: - "@babel/plugin-transform-classes" "^7.9.5" - medusa-core-utils "^1.2.0" - randomatic "^3.1.1" - -meilisearch@0.25.1: - version "0.25.1" - resolved "https://registry.npmjs.org/meilisearch/-/meilisearch-0.25.1.tgz" - integrity sha512-20jO0pK9BhghxHSkOLbdoYn58h/Z0PNL3JQcRq7ipNIeqrxkAetCZZ6ttJC3uxcz0jVglmiFoSXu3Z/lEOLOLQ== - dependencies: - cross-fetch "^3.1.5" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mikro-orm@~5.7.12: - version "5.7.14" - resolved "https://registry.npmjs.org/mikro-orm/-/mikro-orm-5.7.14.tgz" - integrity sha512-izfG8Cz5aYGYhxaNNv1Ozc1LAC/ifIsniwDrTWbxHVJkMlWLKAM8FzJhoZpXZzBissZqeRN9tPdzvBCxwV4G0w== - -"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz" - integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== - dependencies: - dom-walk "^0.1.0" - -mini-svg-data-uri@^1.2.3: - version "1.4.4" - resolved "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz" - integrity sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg== - -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -mkdirp@^0.5.4: - version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mkdirp@^2.1.3: - version "2.1.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz" - integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== - -mkdirp@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz" - integrity sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew== - -morgan@^1.9.1: - version "1.10.0" - resolved "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz" - integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== - dependencies: - basic-auth "~2.0.1" - debug "2.6.9" - depd "~2.0.0" - on-finished "~2.3.0" - on-headers "~1.0.2" - -ms@^2.1.1, ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -msgpackr-extract@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz" - integrity sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A== - dependencies: - node-gyp-build-optional-packages "5.0.7" - optionalDependencies: - "@msgpackr-extract/msgpackr-extract-darwin-arm64" "3.0.2" - "@msgpackr-extract/msgpackr-extract-darwin-x64" "3.0.2" - "@msgpackr-extract/msgpackr-extract-linux-arm" "3.0.2" - "@msgpackr-extract/msgpackr-extract-linux-arm64" "3.0.2" - "@msgpackr-extract/msgpackr-extract-linux-x64" "3.0.2" - "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.2" - -msgpackr@^1.6.2: - version "1.9.9" - resolved "https://registry.npmjs.org/msgpackr/-/msgpackr-1.9.9.tgz" - integrity sha512-sbn6mioS2w0lq1O6PpGtsv6Gy8roWM+o3o4Sqjd6DudrL/nOugY+KyJUimoWzHnf9OkO0T6broHFnYE/R05t9A== - optionalDependencies: - msgpackr-extract "^3.0.2" - -multer@^1.4.5-lts.1: - version "1.4.5-lts.1" - resolved "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz" - integrity sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ== - dependencies: - append-field "^1.0.0" - busboy "^1.0.0" - concat-stream "^1.5.2" - mkdirp "^0.5.4" - object-assign "^4.1.1" - type-is "^1.6.4" - xtend "^4.0.0" - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -mz@^2.4.0, mz@^2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nanoid@^3.3.6: - version "3.3.7" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -natural-orderby@^2.0.1: - version "2.0.3" - resolved "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz" - integrity sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -next@^14.0.0: - version "14.0.4" - resolved "https://registry.npmjs.org/next/-/next-14.0.4.tgz" - integrity sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA== - dependencies: - "@next/env" "14.0.4" - "@swc/helpers" "0.5.2" - busboy "1.6.0" - caniuse-lite "^1.0.30001406" - graceful-fs "^4.2.11" - postcss "8.4.31" - styled-jsx "5.1.1" - watchpack "2.4.0" - optionalDependencies: - "@next/swc-darwin-arm64" "14.0.4" - "@next/swc-darwin-x64" "14.0.4" - "@next/swc-linux-arm64-gnu" "14.0.4" - "@next/swc-linux-arm64-musl" "14.0.4" - "@next/swc-linux-x64-gnu" "14.0.4" - "@next/swc-linux-x64-musl" "14.0.4" - "@next/swc-win32-arm64-msvc" "14.0.4" - "@next/swc-win32-ia32-msvc" "14.0.4" - "@next/swc-win32-x64-msvc" "14.0.4" - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-fetch@^2.6.12: - version "2.7.0" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build-optional-packages@5.0.7: - version "5.0.7" - resolved "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz" - integrity sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w== - -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -node-schedule@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.1.tgz" - integrity sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ== - dependencies: - cron-parser "^4.2.0" - long-timeout "0.1.1" - sorted-array-functions "^1.3.0" - -nopt@1.0.10: - version "1.0.10" - resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" - integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== - dependencies: - abbrev "1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -npm-run-path@^4.0.0, npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-treeify@^1.1.4: - version "1.1.33" - resolved "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz" - integrity sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A== - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.entries@^1.1.6: - version "1.1.7" - resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.fromentries@^2.0.6, object.fromentries@^2.0.7: - version "2.0.7" - resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.groupby@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - -object.hasown@^1.1.2: - version "1.1.3" - resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz" - integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== - dependencies: - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.values@^1.1.6, object.values@^1.1.7: - version "1.1.7" - resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" - integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== - dependencies: - ee-first "1.1.1" - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -one-time@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz" - integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== - dependencies: - fn.name "1.x.x" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^8.0.6: - version "8.4.2" - resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -optionator@^0.9.1: - version "0.9.3" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -ospath@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz" - integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -packet-reader@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz" - integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== - -papaparse@5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/papaparse/-/papaparse-5.3.2.tgz" - integrity sha512-6dNZu0Ki+gyV0eBsFKJhYr+MdQYAzFUGlBMNj3GNrmHxmz1lfRa24CjFObPXtjcetlOv5Ad299MhIK0znp3afw== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse5-htmlparser2-tree-adapter@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== - dependencies: - parse5 "^6.0.1" - -parse5@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -passport-custom@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/passport-custom/-/passport-custom-1.1.1.tgz" - integrity sha512-/2m7jUGxmCYvoqenLB9UrmkCgPt64h8ZtV+UtuQklZ/Tn1NpKBeOorCYkB/8lMRoiZ5hUrCoMmDtxCS/d38mlg== - dependencies: - passport-strategy "1.x.x" - -passport-jwt@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz" - integrity sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ== - dependencies: - jsonwebtoken "^9.0.0" - passport-strategy "^1.0.0" - -passport-local@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz" - integrity sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow== - dependencies: - passport-strategy "1.x.x" - -passport-strategy@^1.0.0, passport-strategy@1.x.x: - version "1.0.0" - resolved "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz" - integrity sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA== - -passport@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz" - integrity sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug== - dependencies: - passport-strategy "1.x.x" - pause "0.0.1" - utils-merge "^1.0.1" - -password-prompt@^1.1.2: - version "1.1.3" - resolved "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz" - integrity sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw== - dependencies: - ansi-escapes "^4.3.2" - cross-spawn "^7.0.3" - -path-exists@^4.0.0: - 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@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pause@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz" - integrity sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg== - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -pg-cloudflare@^1.1.0, pg-cloudflare@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz" - integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== - -pg-connection-string@^2.6.0: - version "2.6.2" - resolved "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz" - integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA== - -pg-connection-string@^2.6.2: - version "2.6.2" - resolved "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz" - integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA== - -pg-connection-string@2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz" - integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ== - -pg-connection-string@2.6.1: - version "2.6.1" - resolved "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.1.tgz" - integrity sha512-w6ZzNu6oMmIzEAYVw+RLK0+nqHPt8K3ZnknKi+g48Ak2pr3dtljJW3o+D/n2zzCG07Zoe9VOX3aiKpj+BN0pjg== - -pg-god@^1.0.12: - version "1.0.12" - resolved "https://registry.npmjs.org/pg-god/-/pg-god-1.0.12.tgz" - integrity sha512-6bxfBlyu0w9NN5hwHg5TksPNJZm729cGIsff0m1BiwX4NUsHY7FoTWVAfgMaSy4QPL4rVR7ShyUv/AZ4Yd2Rug== - dependencies: - "@oclif/command" "^1" - "@oclif/config" "^1" - "@oclif/plugin-help" "^3" - cli-ux "^5.4.9" - pg "^8.3.0" - tslib "^1" - -pg-int8@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz" - integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== - -pg-pool@^3.6.0, pg-pool@^3.6.1: - version "3.6.1" - resolved "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz" - integrity sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og== - -pg-protocol@^1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz" - integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q== - -pg-types@^2.1.0: - version "2.2.0" - resolved "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz" - integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== - dependencies: - pg-int8 "1.0.1" - postgres-array "~2.0.0" - postgres-bytea "~1.0.0" - postgres-date "~1.0.4" - postgres-interval "^1.1.0" - -pg@*, pg@^8.11.0, pg@^8.11.2, pg@^8.3.0, pg@^8.5.1, pg@>=8.0: - version "8.11.3" - resolved "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz" - integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g== - dependencies: - buffer-writer "2.0.0" - packet-reader "1.0.0" - pg-connection-string "^2.6.2" - pg-pool "^3.6.1" - pg-protocol "^1.6.0" - pg-types "^2.1.0" - pgpass "1.x" - optionalDependencies: - pg-cloudflare "^1.1.1" - -pg@8.11.0: - version "8.11.0" - resolved "https://registry.npmjs.org/pg/-/pg-8.11.0.tgz" - integrity sha512-meLUVPn2TWgJyLmy7el3fQQVwft4gU5NGyvV0XbD41iU9Jbg8lCH4zexhIkihDzVHJStlt6r088G6/fWeNjhXA== - dependencies: - buffer-writer "2.0.0" - packet-reader "1.0.0" - pg-connection-string "^2.6.0" - pg-pool "^3.6.0" - pg-protocol "^1.6.0" - pg-types "^2.1.0" - pgpass "1.x" - optionalDependencies: - pg-cloudflare "^1.1.0" - -pgpass@1.x: - version "1.0.5" - resolved "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz" - integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== - dependencies: - split2 "^4.1.0" - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.2.0, pify@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.1.0: - 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== - dependencies: - find-up "^4.0.0" - -pony-cause@^2.1.2: - version "2.1.10" - resolved "https://registry.npmjs.org/pony-cause/-/pony-cause-2.1.10.tgz" - integrity sha512-3IKLNXclQgkU++2fSi93sQ6BznFuxSLB11HdvZQ6JW/spahf/P1pAHBQEahr20rs0htZW0UDkM1HmA+nZkXKsw== - -postcss-import@^15.1.0: - version "15.1.0" - resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz" - integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-js@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz" - integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== - dependencies: - camelcase-css "^2.0.1" - -postcss-load-config@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz" - integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== - dependencies: - lilconfig "^2.0.5" - yaml "^2.1.1" - -postcss-nested@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz" - integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== - dependencies: - postcss-selector-parser "^6.0.11" - -postcss-selector-parser@^6.0.11: - version "6.0.13" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.8, postcss@>=8.0.9, postcss@8.4.31: - version "8.4.31" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postgres-array@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz" - integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== - -postgres-bytea@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz" - integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== - -postgres-date@~1.0.4: - version "1.0.7" - resolved "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz" - integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== - -postgres-interval@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz" - integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== - dependencies: - xtend "^4.0.0" - -preact@^10.10.0: - version "10.17.1" - resolved "https://registry.npmjs.org/preact/-/preact-10.17.1.tgz" - integrity sha512-X9BODrvQ4Ekwv9GURm9AKAGaomqXmip7NQTZgY7gcNmr7XE83adOMJvd3N42id1tMFU7ojiynRsYnY6/BRFxLA== - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier@^2.8.8: - version "2.8.8" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -pretty-bytes@^5.6.0: - version "5.6.0" - resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - -prism-react-renderer@^2.0.6: - version "2.1.0" - resolved "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.1.0.tgz" - integrity sha512-I5cvXHjA1PVGbGm1MsWCpvBCRrYyxEri0MC7/JbfIfYfcXAxHyO5PaUjs3A8H5GW6kJcLhTHxxMaOZZpRZD2iQ== - dependencies: - "@types/prismjs" "^1.26.0" - clsx "^1.2.1" - -process-nextick-args@~2.0.0: - 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== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -promise-polyfill@^8.3.0: - version "8.3.0" - resolved "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz" - integrity sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg== - -prompts@^2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -prop-types@^15.7.2, prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -proxy-from-env@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz" - integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A== - -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -qs@^6.10.3, qs@^6.11.2: - version "6.11.2" - resolved "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - -"qs@^6.5.1 < 6.10": - version "6.9.7" - resolved "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz" - integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== - -qs@~6.10.3: - version "6.10.5" - resolved "https://registry.npmjs.org/qs/-/qs-6.10.5.tgz" - integrity sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ== - dependencies: - side-channel "^1.0.4" - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -random-bytes@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz" - integrity sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ== - -randomatic@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz" - integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -react-country-flag@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/react-country-flag/-/react-country-flag-3.1.0.tgz" - integrity sha512-JWQFw1efdv9sTC+TGQvTKXQg1NKbDU2mBiAiRWcKM9F1sK+/zjhP2yGmm8YDddWyZdXVkR8Md47rPMJmo4YO5g== - -react-currency-input-field@^3.6.11: - version "3.6.11" - resolved "https://registry.npmjs.org/react-currency-input-field/-/react-currency-input-field-3.6.11.tgz" - integrity sha512-M9vOx1eaioSaYWirm7W2WSBi4bpLg+LK4Gf7C1kNhy6MvoSoOzd0mYZPxA78OC9UBIQ2nM080Wu9D1CwTY6n3w== - -react-day-picker@^8.8.0: - version "8.9.1" - resolved "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.9.1.tgz" - integrity sha512-W0SPApKIsYq+XCtfGeMYDoU0KbsG3wfkYtlw8l+vZp6KoBXGOlhzBUp4tNx1XiwiOZwhfdGOlj7NGSCKGSlg5Q== - -"react-dom@^16 || ^17 || ^18", "react-dom@^16.8 || ^17.0 || ^18.0", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.8.0 || ^17.0.0-rc.1 || ^18.0.0", react-dom@^18.0.0, react-dom@^18.2.0, "react-dom@>= 16.8.0 < 19", react-dom@>=16.3.0, react-dom@>=16.8.0: - version "18.2.0" - resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" - -react-hook-form@^7.0.0: - version "7.50.1" - resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.50.1.tgz" - integrity sha512-3PCY82oE0WgeOgUtIr3nYNNtNvqtJ7BZjsbxh6TnYNbXButaD5WpjOmTjdxZfheuHKR68qfeFnEDVYoSSFPMTQ== - -react-instantsearch-hooks-web@^6.29.0: - version "6.47.3" - resolved "https://registry.npmjs.org/react-instantsearch-hooks-web/-/react-instantsearch-hooks-web-6.47.3.tgz" - integrity sha512-JTkPm11xwCX9eO4FgeeJ4v4O98wz1L7cAa2LkspgzDD1MPjMLtmiRVzvGxuYnOayQTtfC5+0GOBwuJEN8TDI8A== - dependencies: - "@babel/runtime" "^7.1.2" - instantsearch.js "4.56.8" - react-instantsearch-hooks "6.47.3" - -react-instantsearch-hooks@6.47.3: - version "6.47.3" - resolved "https://registry.npmjs.org/react-instantsearch-hooks/-/react-instantsearch-hooks-6.47.3.tgz" - integrity sha512-QuGSwZ664MHrzvndXGnsyPhpKHywGqyDgqOVorYpEE24Y063OPv5XtmJaZqn27MIvvByUormTb6dbPgbjqkd8w== - dependencies: - "@babel/runtime" "^7.1.2" - algoliasearch-helper "3.14.0" - instantsearch.js "4.56.8" - use-sync-external-store "^1.0.0" - -react-intersection-observer@^9.3.4: - version "9.5.2" - resolved "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.5.2.tgz" - integrity sha512-EmoV66/yvksJcGa1rdW0nDNc4I1RifDWkT50gXSFnPLYQ4xUptuDD4V7k+Rj1OgVAlww628KLGcxPXFlOkkU/Q== - -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-remove-scroll-bar@^2.3.3: - version "2.3.4" - resolved "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz" - integrity sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A== - dependencies: - react-style-singleton "^2.2.1" - tslib "^2.0.0" - -react-remove-scroll@2.5.5: - version "2.5.5" - resolved "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz" - integrity sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw== - dependencies: - react-remove-scroll-bar "^2.3.3" - react-style-singleton "^2.2.1" - tslib "^2.1.0" - use-callback-ref "^1.3.0" - use-sidecar "^1.1.2" - -react-style-singleton@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz" - integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== - dependencies: - get-nonce "^1.0.0" - invariant "^2.2.4" - tslib "^2.0.0" - -"react@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16 || ^17 || ^18", "react@^16.8 || ^17.0 || ^18.0", "react@^16.8.0 || ^17 || ^18", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.0-rc.1 || ^18.0.0", "react@^16.9.0 || ^17.0.0 || ^18.0.0", "react@^16.x || ^17.x || ^18.x", react@^18.0.0, react@^18.2.0, "react@>= 16.8.0 < 19", "react@>= 16.8.0 || 17.x.x || ^18.0.0-0", react@>=16, react@>=16.0.0, react@>=16.3.0, react@>=16.8.0: - version "18.2.0" - resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" - -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" - integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - dependencies: - pify "^2.3.0" - -readable-stream@^2.2.2: - version "2.3.8" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -readline-sync@^1.4.9: - version "1.4.10" - resolved "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz" - integrity sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw== - -rechoir@^0.8.0: - version "0.8.0" - resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz" - integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== - dependencies: - resolve "^1.20.0" - -redeyed@~2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz" - integrity sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ== - dependencies: - esprima "~4.0.0" - -redis-commands@^1.7.0: - version "1.7.0" - resolved "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz" - integrity sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ== - -redis-errors@^1.0.0, redis-errors@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz" - integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== - -redis-parser@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz" - integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== - dependencies: - redis-errors "^1.0.0" - -redis@^3.0.2, "redis@^3.1.1 || ^4.0.0": - version "3.1.2" - resolved "https://registry.npmjs.org/redis/-/redis-3.1.2.tgz" - integrity sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw== - dependencies: - denque "^1.5.0" - redis-commands "^1.7.0" - redis-errors "^1.2.0" - redis-parser "^3.0.0" - -reflect-metadata@^0.1.13, reflect-metadata@0.1.13: - version "0.1.13" - resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" - integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== - -reflect-metadata@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.1.tgz" - integrity sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw== - -reflect.getprototypeof@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz" - integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" - -regenerator-runtime@^0.13.11: - version "0.13.11" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -remove-trailing-slash@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz" - integrity sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA== - -request-ip@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/request-ip/-/request-ip-3.3.0.tgz" - integrity sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA== - -request-progress@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz" - integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg== - dependencies: - throttleit "^1.0.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -resolve@^1.1.7, resolve@^1.20.0, resolve@^1.22.2, resolve@^1.22.4: - version "1.22.6" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.4: - version "2.0.0-next.4" - resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry-axios@^2.6.0: - version "2.6.0" - resolved "https://registry.npmjs.org/retry-axios/-/retry-axios-2.6.0.tgz" - integrity sha512-pOLi+Gdll3JekwuFjXO3fTq+L9lzMQGcSq7M5gIjExcl3Gu1hd4XXuf5o3+LuSBsaULQH7DiNbsqPd1chVpQGQ== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.1, rxjs@^7.5.5: - version "7.8.1" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-array-concat@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -safe-stable-stringify@^2.3.1: - version "2.4.3" - resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== - -safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" - -schema-utils@^2.6.5: - version "2.7.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -schema-utils@^3.1.1: - version "3.3.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^3.2.0: - version "3.3.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -scrypt-kdf@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/scrypt-kdf/-/scrypt-kdf-2.0.1.tgz" - integrity sha512-dMhpgBVJPDWZP5erOCwTjI6oAO9hKhFAjZsdSQ0spaWJYHuA/wFNF2weQQfsyCIk8eNKoLfEDxr3zAtM+gZo0Q== - -search-insights@^2.6.0: - version "2.8.2" - resolved "https://registry.npmjs.org/search-insights/-/search-insights-2.8.2.tgz" - integrity sha512-PxA9M5Q2bpBelVvJ3oDZR8nuY00Z6qwOxL53wNpgzV28M/D6u9WUbImDckjLSILBF8F1hn/mgyuUaOPtjow4Qw== - -semver@^5.5.0: - version "5.7.2" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.2: - version "7.5.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.7: - version "7.5.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.8: - version "7.5.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -semver@^7.5.4: - version "7.5.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== - dependencies: - randombytes "^2.1.0" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-function-name@^2.0.0, set-function-name@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== - dependencies: - define-data-property "^1.0.1" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.11: - version "2.4.11" - resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -sorted-array-functions@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz" - integrity sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA== - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -split2@^4.1.0: - version "4.2.0" - resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -sprintf-js@^1.1.1: - version "1.1.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -sqlstring@2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz" - integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg== - -sshpk@^1.14.1: - version "1.17.0" - resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - 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" - -stack-trace@^0.0.10, stack-trace@0.0.x: - version "0.0.10" - resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" - integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== - -standard-as-callback@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz" - integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - -string_decoder@^1.1.1, string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -string-argv@~0.3.1: - version "0.3.2" - resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz" - integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.matchall@^4.0.8: - version "4.0.10" - resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz" - integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - regexp.prototype.flags "^1.5.0" - set-function-name "^2.0.0" - side-channel "^1.0.4" - -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -styled-jsx@5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz" - integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw== - dependencies: - client-only "0.0.1" - -sucrase@^3.32.0: - version "3.34.0" - resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz" - integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.2" - commander "^4.0.0" - glob "7.1.6" - lines-and-columns "^1.1.6" - mz "^2.7.0" - pirates "^4.0.1" - ts-interface-checker "^0.1.9" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.1.0: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.1.1: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -tailwind-merge@^1.13.2: - version "1.14.0" - resolved "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz" - integrity sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ== - -tailwindcss-animate@^1.0.6: - version "1.0.7" - resolved "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz" - integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA== - -tailwindcss-radix@^2.8.0: - version "2.8.0" - resolved "https://registry.npmjs.org/tailwindcss-radix/-/tailwindcss-radix-2.8.0.tgz" - integrity sha512-1k1UfoIYgVyBl13FKwwoKavjnJ5VEaUClCTAsgz3VLquN4ay/lyaMPzkbqD71sACDs2fRGImytAUlMb4TzOt1A== - -tailwindcss@^3.0.23, tailwindcss@>=3.0.0, "tailwindcss@>=3.0.0 || >= 3.0.0-alpha.1", "tailwindcss@>=3.0.0 || insiders": - version "3.3.3" - resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz" - integrity sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w== - dependencies: - "@alloc/quick-lru" "^5.2.0" - arg "^5.0.2" - chokidar "^3.5.3" - didyoumean "^1.2.2" - dlv "^1.1.3" - fast-glob "^3.2.12" - glob-parent "^6.0.2" - is-glob "^4.0.3" - jiti "^1.18.2" - lilconfig "^2.1.0" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-hash "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.23" - postcss-import "^15.1.0" - postcss-js "^4.0.1" - postcss-load-config "^4.0.1" - postcss-nested "^6.0.1" - postcss-selector-parser "^6.0.11" - resolve "^1.22.2" - sucrase "^3.32.0" - -tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tarn@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz" - integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ== - -terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.8" - -terser@^5.16.8: - version "5.19.4" - resolved "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz" - integrity sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -text-hex@1.0.x: - version "1.0.0" - resolved "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz" - integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -throttleit@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz" - integrity sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g== - -through@^2.3.6, through@^2.3.8: - version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tildify@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz" - integrity sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - 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== - dependencies: - is-number "^7.0.0" - -toggle-selection@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz" - integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tough-cookie@^4.1.3: - version "4.1.3" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -triple-beam@^1.3.0: - version "1.4.1" - resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz" - integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== - -ts-api-utils@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz" - integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== - -ts-interface-checker@^0.1.9: - version "0.1.13" - resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" - integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== - -tsconfig-paths@^3.15.0: - version "3.15.0" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.1, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^2.18.0: - version "2.19.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - -type-is@^1.6.4, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" - -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -typeorm@^0.3.16: - version "0.3.20" - resolved "https://registry.npmjs.org/typeorm/-/typeorm-0.3.20.tgz" - integrity sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q== - dependencies: - "@sqltools/formatter" "^1.2.5" - app-root-path "^3.1.0" - buffer "^6.0.3" - chalk "^4.1.2" - cli-highlight "^2.1.11" - dayjs "^1.11.9" - debug "^4.3.4" - dotenv "^16.0.3" - glob "^10.3.10" - mkdirp "^2.1.3" - reflect-metadata "^0.2.1" - sha.js "^2.4.11" - tslib "^2.5.0" - uuid "^9.0.0" - yargs "^17.6.2" - -typescript@^5.3.2, typescript@>=3.3.1, typescript@>=4.2.0: - version "5.3.2" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz" - integrity sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ== - -uid-safe@~2.1.5: - version "2.1.5" - resolved "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz" - integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA== - dependencies: - random-bytes "~1.0.0" - -ulid@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/ulid/-/ulid-2.3.0.tgz" - integrity sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw== - -umzug@3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/umzug/-/umzug-3.2.1.tgz" - integrity sha512-XyWQowvP9CKZycKc/Zg9SYWrAWX/gJCE799AUTFqk8yC3tp44K1xWr3LoFF0MNEjClKOo1suCr5ASnoy+KltdA== - dependencies: - "@rushstack/ts-command-line" "^4.12.2" - emittery "^0.12.1" - fs-jetpack "^4.3.1" - glob "^8.0.3" - pony-cause "^2.1.2" - type-fest "^2.18.0" - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@~1.0.0, unpipe@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -untildify@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz" - integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== - -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -use-callback-ref@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz" - integrity sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w== - dependencies: - tslib "^2.0.0" - -use-sidecar@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz" - integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== - dependencies: - detect-node-es "^1.1.0" - tslib "^2.0.0" - -use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -utils-merge@^1.0.1, utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -uuid@^9.0.0: - version "9.0.1" - resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -v8-compile-cache@^2.0.3: - version "2.4.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz" - integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== - -validator@^13.7.0: - version "13.11.0" - resolved "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz" - integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== - -value-or-promise@^1.0.12: - version "1.0.12" - resolved "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz" - integrity sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q== - -vary@^1, vary@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -watchpack@^2.4.0, watchpack@2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5, webpack@^5.1.0, webpack@>=2: - version "5.88.2" - resolved "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz" - integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" - 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-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== - dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" - is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" - is-generator-function "^1.0.10" - is-regex "^1.1.4" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - -which-module@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz" - integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== - -which-typed-array@^1.1.11, which-typed-array@^1.1.9: - version "1.1.11" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - -winston-transport@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz" - integrity sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q== - dependencies: - logform "^2.3.2" - readable-stream "^3.6.0" - triple-beam "^1.3.0" - -winston@^3.8.2: - version "3.10.0" - resolved "https://registry.npmjs.org/winston/-/winston-3.10.0.tgz" - integrity sha512-nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g== - dependencies: - "@colors/colors" "1.5.0" - "@dabh/diagnostics" "^2.0.2" - async "^3.2.3" - is-stream "^2.0.0" - logform "^2.4.0" - one-time "^1.0.0" - readable-stream "^3.4.0" - safe-stable-stringify "^2.3.1" - stack-trace "0.0.x" - triple-beam "^1.3.0" - winston-transport "^4.5.0" - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^6.0.1: - version "6.2.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^2.1.1: - version "2.3.2" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz" - integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg== - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^15.3.1: - version "15.4.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yargs@^16.0.0: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.6.2: - version "17.7.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" diff --git a/storeagentai/.babelrc.js b/storeagentai/.babelrc.js deleted file mode 100644 index ae10f028..00000000 --- a/storeagentai/.babelrc.js +++ /dev/null @@ -1,12 +0,0 @@ -let ignore = [`**/dist`] - -// Jest needs to compile this code, but generally we don't want this copied -// to output folders -if (process.env.NODE_ENV !== `test`) { - ignore.push(`**/__tests__`) -} - -module.exports = { - presets: [["babel-preset-medusa-package"], ["@babel/preset-typescript"]], - ignore, -} diff --git a/storeagentai/.env.template b/storeagentai/.env.template deleted file mode 100644 index 68fe3ef5..00000000 --- a/storeagentai/.env.template +++ /dev/null @@ -1,5 +0,0 @@ -JWT_SECRET=something -COOKIE_SECRET=something - -DATABASE_TYPE="postgres" -REDIS_URL=redis://localhost:6379 diff --git a/storeagentai/.github/dependabot.yml b/storeagentai/.github/dependabot.yml deleted file mode 100644 index d499e13f..00000000 --- a/storeagentai/.github/dependabot.yml +++ /dev/null @@ -1,21 +0,0 @@ -version: 2 -updates: - - package-ecosystem: "npm" - directory: "/" - schedule: - interval: "daily" - allow: - - dependency-type: production - groups: - medusa: - patterns: - - "@medusajs*" - - "medusa*" - update-types: - - "minor" - - "patch" - ignore: - - dependency-name: "@medusajs*" - update-types: ["version-update:semver-major"] - - dependency-name: "medusa*" - update-types: ["version-update:semver-major"] diff --git a/storeagentai/.gitignore b/storeagentai/.gitignore deleted file mode 100644 index 6d5c3998..00000000 --- a/storeagentai/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -/dist -.env -.DS_Store -/uploads -/node_modules -yarn-error.log - -.idea - -coverage - -!src/** - -./tsconfig.tsbuildinfo -package-lock.json -yarn.lock -medusa-db.sql -build -.cache - -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/sdks -!.yarn/versions diff --git a/storeagentai/.vscode/settings.json b/storeagentai/.vscode/settings.json deleted file mode 100644 index 0967ef42..00000000 --- a/storeagentai/.vscode/settings.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/storeagentai/.yarnrc.yml b/storeagentai/.yarnrc.yml deleted file mode 100644 index 8b757b29..00000000 --- a/storeagentai/.yarnrc.yml +++ /dev/null @@ -1 +0,0 @@ -nodeLinker: node-modules \ No newline at end of file diff --git a/storeagentai/README.md b/storeagentai/README.md deleted file mode 100644 index 8b4c0c1a..00000000 --- a/storeagentai/README.md +++ /dev/null @@ -1,70 +0,0 @@ -

    - - - - - Medusa logo - - -

    -

    - Medusa -

    - -

    - Documentation | - Website -

    - -

    - Building blocks for digital commerce -

    -

    - - PRs welcome! - - Product Hunt - - Discord Chat - - - Follow @medusajs - -

    - -## Compatibility - -This starter is compatible with versions >= 1.8.0 of `@medusajs/medusa`. - -## Getting Started - -Visit the [Quickstart Guide](https://docs.medusajs.com/create-medusa-app) to set up a server. - -Visit the [Docs](https://docs.medusajs.com/development/backend/prepare-environment) to learn more about our system requirements. - -## What is Medusa - -Medusa is a set of commerce modules and tools that allow you to build rich, reliable, and performant commerce applications without reinventing core commerce logic. The modules can be customized and used to build advanced ecommerce stores, marketplaces, or any product that needs foundational commerce primitives. All modules are open-source and freely available on npm. - -Learn more about [Medusa’s architecture](https://docs.medusajs.com/development/fundamentals/architecture-overview) and [commerce modules](https://docs.medusajs.com/modules/overview) in the Docs. - -## Roadmap, Upgrades & Plugins - -You can view the planned, started and completed features in the [Roadmap discussion](https://github.com/medusajs/medusa/discussions/categories/roadmap). - -Follow the [Upgrade Guides](https://docs.medusajs.com/upgrade-guides/) to keep your Medusa project up-to-date. - -Check out all [available Medusa plugins](https://medusajs.com/plugins/). - -## Community & Contributions - -The community and core team are available in [GitHub Discussions](https://github.com/medusajs/medusa/discussions), where you can ask for support, discuss roadmap, and share ideas. - -Join our [Discord server](https://discord.com/invite/medusajs) to meet other community members. - -## Other channels - -- [GitHub Issues](https://github.com/medusajs/medusa/issues) -- [Twitter](https://twitter.com/medusajs) -- [LinkedIn](https://www.linkedin.com/company/medusajs) -- [Medusa Blog](https://medusajs.com/blog/) diff --git a/storeagentai/data/seed-onboarding.json b/storeagentai/data/seed-onboarding.json deleted file mode 100644 index 1179190c..00000000 --- a/storeagentai/data/seed-onboarding.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "store": { - "currencies": ["eur", "usd"] - }, - "users": [], - "regions": [ - { - "id": "test-region-eu", - "name": "EU", - "currency_code": "eur", - "tax_rate": 0, - "payment_providers": ["manual"], - "fulfillment_providers": ["manual"], - "countries": ["gb", "de", "dk", "se", "fr", "es", "it"] - }, - { - "id": "test-region-na", - "name": "NA", - "currency_code": "usd", - "tax_rate": 0, - "payment_providers": ["manual"], - "fulfillment_providers": ["manual"], - "countries": ["us", "ca"] - } - ], - "shipping_options": [ - { - "name": "PostFake Standard", - "region_id": "test-region-eu", - "provider_id": "manual", - "data": { - "id": "manual-fulfillment" - }, - "price_type": "flat_rate", - "amount": 1000 - }, - { - "name": "PostFake Express", - "region_id": "test-region-eu", - "provider_id": "manual", - "data": { - "id": "manual-fulfillment" - }, - "price_type": "flat_rate", - "amount": 1500 - }, - { - "name": "PostFake Return", - "region_id": "test-region-eu", - "provider_id": "manual", - "data": { - "id": "manual-fulfillment" - }, - "price_type": "flat_rate", - "is_return": true, - "amount": 1000 - }, - { - "name": "I want to return it myself", - "region_id": "test-region-eu", - "provider_id": "manual", - "data": { - "id": "manual-fulfillment" - }, - "price_type": "flat_rate", - "is_return": true, - "amount": 0 - }, - { - "name": "FakeEx Standard", - "region_id": "test-region-na", - "provider_id": "manual", - "data": { - "id": "manual-fulfillment" - }, - "price_type": "flat_rate", - "amount": 800 - }, - { - "name": "FakeEx Express", - "region_id": "test-region-na", - "provider_id": "manual", - "data": { - "id": "manual-fulfillment" - }, - "price_type": "flat_rate", - "amount": 1200 - }, - { - "name": "FakeEx Return", - "region_id": "test-region-na", - "provider_id": "manual", - "data": { - "id": "manual-fulfillment" - }, - "price_type": "flat_rate", - "is_return": true, - "amount": 800 - }, - { - "name": "I want to return it myself", - "region_id": "test-region-na", - "provider_id": "manual", - "data": { - "id": "manual-fulfillment" - }, - "price_type": "flat_rate", - "is_return": true, - "amount": 0 - } - ], - "products": [], - "categories": [], - "publishable_api_keys": [ - { - "title": "Development" - } - ] -} diff --git a/storeagentai/data/seed.json b/storeagentai/data/seed.json deleted file mode 100644 index f7308100..00000000 --- a/storeagentai/data/seed.json +++ /dev/null @@ -1,949 +0,0 @@ -{ - "store": { - "currencies": ["eur", "usd"] - }, - "users": [ - { - "email": "admin@medusa-test.com", - "password": "supersecret" - } - ], - "regions": [ - { - "id": "test-region-eu", - "name": "EU", - "currency_code": "eur", - "tax_rate": 0, - "payment_providers": ["manual"], - "fulfillment_providers": ["manual"], - "countries": ["gb", "de", "dk", "se", "fr", "es", "it"] - }, - { - "id": "test-region-na", - "name": "NA", - "currency_code": "usd", - "tax_rate": 0, - "payment_providers": ["manual"], - "fulfillment_providers": ["manual"], - "countries": ["us", "ca"] - } - ], - "shipping_options": [ - { - "name": "PostFake Standard", - "region_id": "test-region-eu", - "provider_id": "manual", - "data": { - "id": "manual-fulfillment" - }, - "price_type": "flat_rate", - "amount": 1000 - }, - { - "name": "PostFake Express", - "region_id": "test-region-eu", - "provider_id": "manual", - "data": { - "id": "manual-fulfillment" - }, - "price_type": "flat_rate", - "amount": 1500 - }, - { - "name": "PostFake Return", - "region_id": "test-region-eu", - "provider_id": "manual", - "data": { - "id": "manual-fulfillment" - }, - "price_type": "flat_rate", - "is_return": true, - "amount": 1000 - }, - { - "name": "I want to return it myself", - "region_id": "test-region-eu", - "provider_id": "manual", - "data": { - "id": "manual-fulfillment" - }, - "price_type": "flat_rate", - "is_return": true, - "amount": 0 - }, - { - "name": "FakeEx Standard", - "region_id": "test-region-na", - "provider_id": "manual", - "data": { - "id": "manual-fulfillment" - }, - "price_type": "flat_rate", - "amount": 800 - }, - { - "name": "FakeEx Express", - "region_id": "test-region-na", - "provider_id": "manual", - "data": { - "id": "manual-fulfillment" - }, - "price_type": "flat_rate", - "amount": 1200 - }, - { - "name": "FakeEx Return", - "region_id": "test-region-na", - "provider_id": "manual", - "data": { - "id": "manual-fulfillment" - }, - "price_type": "flat_rate", - "is_return": true, - "amount": 800 - }, - { - "name": "I want to return it myself", - "region_id": "test-region-na", - "provider_id": "manual", - "data": { - "id": "manual-fulfillment" - }, - "price_type": "flat_rate", - "is_return": true, - "amount": 0 - } - ], - "products": [ - { - "title": "Medusa T-Shirt", - "categories": [ - { - "id": "pcat_shirts" - } - ], - "subtitle": null, - "description": "Reimagine the feeling of a classic T-shirt. With our cotton T-shirts, everyday essentials no longer have to be ordinary.", - "handle": "t-shirt", - "is_giftcard": false, - "weight": 400, - "images": [ - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/tee-black-front.png", - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/tee-black-back.png", - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/tee-white-front.png", - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/tee-white-back.png" - ], - "options": [ - { - "title": "Size", - "values": ["S", "M", "L", "XL"] - }, - { - "title": "Color", - "values": ["Black", "White"] - } - ], - "variants": [ - { - "title": "S / Black", - "prices": [ - { - "currency_code": "eur", - "amount": 1950 - }, - { - "currency_code": "usd", - "amount": 2200 - } - ], - "options": [ - { - "value": "S" - }, - { - "value": "Black" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "S / White", - "prices": [ - { - "currency_code": "eur", - "amount": 1950 - }, - { - "currency_code": "usd", - "amount": 2200 - } - ], - "options": [ - { - "value": "S" - }, - { - "value": "White" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "M / Black", - "prices": [ - { - "currency_code": "eur", - "amount": 1950 - }, - { - "currency_code": "usd", - "amount": 2200 - } - ], - "options": [ - { - "value": "M" - }, - { - "value": "Black" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "M / White", - "prices": [ - { - "currency_code": "eur", - "amount": 1950 - }, - { - "currency_code": "usd", - "amount": 2200 - } - ], - "options": [ - { - "value": "M" - }, - { - "value": "White" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "L / Black", - "prices": [ - { - "currency_code": "eur", - "amount": 1950 - }, - { - "currency_code": "usd", - "amount": 2200 - } - ], - "options": [ - { - "value": "L" - }, - { - "value": "Black" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "L / White", - "prices": [ - { - "currency_code": "eur", - "amount": 1950 - }, - { - "currency_code": "usd", - "amount": 2200 - } - ], - "options": [ - { - "value": "L" - }, - { - "value": "White" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "XL / Black", - "prices": [ - { - "currency_code": "eur", - "amount": 1950 - }, - { - "currency_code": "usd", - "amount": 2200 - } - ], - "options": [ - { - "value": "XL" - }, - { - "value": "Black" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "XL / White", - "prices": [ - { - "currency_code": "eur", - "amount": 1950 - }, - { - "currency_code": "usd", - "amount": 2200 - } - ], - "options": [ - { - "value": "XL" - }, - { - "value": "White" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - } - ] - }, - { - "title": "Medusa Sweatshirt", - "categories": [ - { - "id": "pcat_shirts" - } - ], - "subtitle": null, - "description": "Reimagine the feeling of a classic sweatshirt. With our cotton sweatshirt, everyday essentials no longer have to be ordinary.", - "handle": "sweatshirt", - "is_giftcard": false, - "weight": 400, - "images": [ - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/sweatshirt-vintage-front.png", - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/sweatshirt-vintage-back.png" - ], - "options": [ - { - "title": "Size", - "values": ["S", "M", "L", "XL"] - } - ], - "variants": [ - { - "title": "S", - "prices": [ - { - "currency_code": "eur", - "amount": 2950 - }, - { - "currency_code": "usd", - "amount": 3350 - } - ], - "options": [ - { - "value": "S" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "M", - "prices": [ - { - "currency_code": "eur", - "amount": 2950 - }, - { - "currency_code": "usd", - "amount": 3350 - } - ], - "options": [ - { - "value": "M" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "L", - "prices": [ - { - "currency_code": "eur", - "amount": 2950 - }, - { - "currency_code": "usd", - "amount": 3350 - } - ], - "options": [ - { - "value": "L" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "XL", - "prices": [ - { - "currency_code": "eur", - "amount": 2950 - }, - { - "currency_code": "usd", - "amount": 3350 - } - ], - "options": [ - { - "value": "XL" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - } - ] - }, - { - "title": "Medusa Sweatpants", - "categories": [ - { - "id": "pcat_pants" - } - ], - "subtitle": null, - "description": "Reimagine the feeling of classic sweatpants. With our cotton sweatpants, everyday essentials no longer have to be ordinary.", - "handle": "sweatpants", - "is_giftcard": false, - "weight": 400, - "images": [ - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/sweatpants-gray-front.png", - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/sweatpants-gray-back.png" - ], - "options": [ - { - "title": "Size", - "values": ["S", "M", "L", "XL"] - } - ], - "variants": [ - { - "title": "S", - "prices": [ - { - "currency_code": "eur", - "amount": 2950 - }, - { - "currency_code": "usd", - "amount": 3350 - } - ], - "options": [ - { - "value": "S" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "M", - "prices": [ - { - "currency_code": "eur", - "amount": 2950 - }, - { - "currency_code": "usd", - "amount": 3350 - } - ], - "options": [ - { - "value": "M" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "L", - "prices": [ - { - "currency_code": "eur", - "amount": 2950 - }, - { - "currency_code": "usd", - "amount": 3350 - } - ], - "options": [ - { - "value": "L" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "XL", - "prices": [ - { - "currency_code": "eur", - "amount": 2950 - }, - { - "currency_code": "usd", - "amount": 3350 - } - ], - "options": [ - { - "value": "XL" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - } - ] - }, - { - "title": "Medusa Shorts", - "categories": [ - { - "id": "pcat_merch" - } - ], - "subtitle": null, - "description": "Reimagine the feeling of classic shorts. With our cotton shorts, everyday essentials no longer have to be ordinary.", - "handle": "shorts", - "is_giftcard": false, - "weight": 400, - "images": [ - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/shorts-vintage-front.png", - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/shorts-vintage-back.png" - ], - "options": [ - { - "title": "Size", - "values": ["S", "M", "L", "XL"] - } - ], - "variants": [ - { - "title": "S", - "prices": [ - { - "currency_code": "eur", - "amount": 2500 - }, - { - "currency_code": "usd", - "amount": 2850 - } - ], - "options": [ - { - "value": "S" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "M", - "prices": [ - { - "currency_code": "eur", - "amount": 2500 - }, - { - "currency_code": "usd", - "amount": 2850 - } - ], - "options": [ - { - "value": "M" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "L", - "prices": [ - { - "currency_code": "eur", - "amount": 2500 - }, - { - "currency_code": "usd", - "amount": 2850 - } - ], - "options": [ - { - "value": "L" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "XL", - "prices": [ - { - "currency_code": "eur", - "amount": 2500 - }, - { - "currency_code": "usd", - "amount": 2850 - } - ], - "options": [ - { - "value": "XL" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - } - ] - }, - { - "title": "Medusa Hoodie", - "categories": [ - { - "id": "pcat_merch" - }, - { - "id": "pcat_hidden_featured" - } - ], - "subtitle": null, - "description": "Reimagine the feeling of a classic hoodie. With our cotton hoodie, everyday essentials no longer have to be ordinary.", - "handle": "hoodie", - "is_giftcard": false, - "weight": 400, - "images": [ - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/black_hoodie_front.png", - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/black_hoodie_back.png" - ], - "options": [ - { - "title": "Size", - "values": ["S", "M", "L", "XL"] - } - ], - "variants": [ - { - "title": "S", - "prices": [ - { - "currency_code": "eur", - "amount": 3650 - }, - { - "currency_code": "usd", - "amount": 4150 - } - ], - "options": [ - { - "value": "S" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "M", - "prices": [ - { - "currency_code": "eur", - "amount": 3650 - }, - { - "currency_code": "usd", - "amount": 4150 - } - ], - "options": [ - { - "value": "M" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "L", - "prices": [ - { - "currency_code": "eur", - "amount": 3650 - }, - { - "currency_code": "usd", - "amount": 4150 - } - ], - "options": [ - { - "value": "L" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "XL", - "prices": [ - { - "currency_code": "eur", - "amount": 3650 - }, - { - "currency_code": "usd", - "amount": 4150 - } - ], - "options": [ - { - "value": "XL" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - } - ] - }, - { - "title": "Medusa Longsleeve", - "categories": [ - { - "id": "pcat_shirts" - }, - { - "id": "pcat_hidden_featured" - } - ], - "subtitle": null, - "description": "Reimagine the feeling of a classic longsleeve. With our cotton longsleeve, everyday essentials no longer have to be ordinary.", - "handle": "longsleeve", - "is_giftcard": false, - "weight": 400, - "images": [ - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/ls-black-front.png", - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/ls-black-back.png" - ], - "options": [ - { - "title": "Size", - "values": ["S", "M", "L", "XL"] - } - ], - "variants": [ - { - "title": "S", - "prices": [ - { - "currency_code": "eur", - "amount": 3650 - }, - { - "currency_code": "usd", - "amount": 4150 - } - ], - "options": [ - { - "value": "S" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "M", - "prices": [ - { - "currency_code": "eur", - "amount": 3650 - }, - { - "currency_code": "usd", - "amount": 4150 - } - ], - "options": [ - { - "value": "M" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "L", - "prices": [ - { - "currency_code": "eur", - "amount": 3650 - }, - { - "currency_code": "usd", - "amount": 4150 - } - ], - "options": [ - { - "value": "L" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - }, - { - "title": "XL", - "prices": [ - { - "currency_code": "eur", - "amount": 3650 - }, - { - "currency_code": "usd", - "amount": 4150 - } - ], - "options": [ - { - "value": "XL" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - } - ] - }, - { - "title": "Medusa Coffee Mug", - "categories": [ - { - "id": "pcat_merch" - }, - { - "id": "pcat_hidden_featured" - } - ], - "subtitle": null, - "description": "Every programmer's best friend.", - "handle": "coffee-mug", - "is_giftcard": false, - "weight": 400, - "images": [ - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/coffee-mug.png" - ], - "options": [ - { - "title": "Size", - "values": ["One Size"] - } - ], - "variants": [ - { - "title": "One Size", - "prices": [ - { - "currency_code": "eur", - "amount": 1000 - }, - { - "currency_code": "usd", - "amount": 1200 - } - ], - "options": [ - { - "value": "One Size" - } - ], - "inventory_quantity": 100, - "manage_inventory": true - } - ] - } - ], - "categories": [ - { - "id": "pcat_pants", - "name": "Pants", - "rank": 0, - "category_children": [], - "handle": "pants" - }, - { - "id": "pcat_shirts", - "name": "Shirts", - "rank": 0, - "category_children": [], - "handle": "shirts" - }, - { - "id": "pcat_merch", - "name": "Merch", - "rank": 0, - "category_children": [], - "handle": "merch" - }, - { - "id": "pcat_hidden_carousel", - "name": "Hidden homepage carousel", - "rank": 0, - "category_children": [], - "handle": "hidden-homepage-carousel" - }, - { - "id": "pcat_hidden_featured", - "name": "Hidden homepage featured", - "rank": 0, - "category_children": [], - "handle": "hidden-homepage-featured-items" - } - ] -} diff --git a/storeagentai/index.js b/storeagentai/index.js deleted file mode 100644 index e44fcfe5..00000000 --- a/storeagentai/index.js +++ /dev/null @@ -1,50 +0,0 @@ -const express = require("express") -const { GracefulShutdownServer } = require("medusa-core-utils") - -const loaders = require("@medusajs/medusa/dist/loaders/index").default - -;(async() => { - async function start() { - const app = express() - const directory = process.cwd() - - try { - const { container } = await loaders({ - directory, - expressApp: app - }) - const configModule = container.resolve("configModule") - const port = process.env.PORT ?? configModule.projectConfig.port ?? 9000 - - const server = GracefulShutdownServer.create( - app.listen(port, (err) => { - if (err) { - return - } - console.log(`Server is ready on port: ${port}`) - }) - ) - - // Handle graceful shutdown - const gracefulShutDown = () => { - server - .shutdown() - .then(() => { - console.info("Gracefully stopping the server.") - process.exit(0) - }) - .catch((e) => { - console.error("Error received when shutting down the server.", e) - process.exit(1) - }) - } - process.on("SIGTERM", gracefulShutDown) - process.on("SIGINT", gracefulShutDown) - } catch (err) { - console.error("Error starting server", err) - process.exit(1) - } - } - - await start() -})() diff --git a/storeagentai/medusa-config.js b/storeagentai/medusa-config.js deleted file mode 100644 index 994eacc2..00000000 --- a/storeagentai/medusa-config.js +++ /dev/null @@ -1,99 +0,0 @@ -const dotenv = require("dotenv"); - -let ENV_FILE_NAME = ""; -switch (process.env.NODE_ENV) { - case "production": - ENV_FILE_NAME = ".env.production"; - break; - case "staging": - ENV_FILE_NAME = ".env.staging"; - break; - case "test": - ENV_FILE_NAME = ".env.test"; - break; - case "development": - default: - ENV_FILE_NAME = ".env"; - break; -} - -try { - dotenv.config({ path: process.cwd() + "/" + ENV_FILE_NAME }); -} catch (e) {} - -// CORS when consuming Medusa from admin -const ADMIN_CORS = - process.env.ADMIN_CORS || "http://localhost:7000,http://localhost:7001"; - -// CORS to avoid issues when consuming Medusa from a client -const STORE_CORS = process.env.STORE_CORS || "http://localhost:8000"; - -const DATABASE_URL = - process.env.DATABASE_URL || "postgres://localhost/medusa-starter-default"; - -const REDIS_URL = process.env.REDIS_URL || "redis://localhost:6379"; - -const plugins = [ - `medusa-fulfillment-manual`, - `medusa-payment-manual`, - { - resolve: `@medusajs/file-local`, - options: { - upload_dir: "uploads", - }, - }, - { - resolve: "@medusajs/admin", - /** @type {import('@medusajs/admin').PluginOptions} */ - options: { - autoRebuild: true, - develop: { - open: process.env.OPEN_BROWSER !== "false", - }, - }, - } -]; - -const modules = { - inventoryService: { - resolve: "@medusajs/inventory", - }, - stockLocationService: { - resolve: "@medusajs/stock-location", - }, - /*eventBus: { - resolve: "@medusajs/event-bus-redis", - options: { - redisUrl: REDIS_URL - } - }, - cacheService: { - resolve: "@medusajs/cache-redis", - options: { - redisUrl: REDIS_URL - } - },*/ -}; - -const featureFlags = { - product_categories: true, -}; - -/** @type {import('@medusajs/medusa').ConfigModule["projectConfig"]} */ -const projectConfig = { - jwtSecret: process.env.JWT_SECRET, - cookieSecret: process.env.COOKIE_SECRET, - store_cors: STORE_CORS, - database_url: DATABASE_URL, - admin_cors: ADMIN_CORS, - // Uncomment the following lines to enable REDIS - // redis_url: REDIS_URL -}; - -/** @type {import('@medusajs/medusa').ConfigModule} */ -module.exports = { - projectConfig, - plugins, - modules, - featureFlags -}; diff --git a/storeagentai/package.json b/storeagentai/package.json deleted file mode 100644 index 5659cd58..00000000 --- a/storeagentai/package.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "name": "medusa-starter-default", - "version": "0.0.1", - "description": "A starter for Medusa projects.", - "author": "Medusa (https://medusajs.com)", - "license": "MIT", - "keywords": [ - "sqlite", - "postgres", - "typescript", - "ecommerce", - "headless", - "medusa" - ], - "scripts": { - "clean": "cross-env ./node_modules/.bin/rimraf dist", - "build": "cross-env npm run clean && npm run build:server && npm run build:admin", - "build:server": "cross-env npm run clean && tsc -p tsconfig.server.json", - "build:admin": "cross-env medusa-admin build", - "watch": "cross-env tsc --watch", - "test": "cross-env jest", - "seed": "cross-env medusa seed -f ./data/seed.json", - "start": "cross-env npm run build && medusa start", - "start:custom": "cross-env npm run build && node --preserve-symlinks --trace-warnings index.js", - "dev": "cross-env npm run build:server && medusa develop" - }, - "dependencies": { - "@medusajs/admin": "7.1.11", - "@medusajs/cache-inmemory": "^1.8.9", - "@medusajs/cache-redis": "^1.8.9", - "@medusajs/event-bus-local": "^1.9.8", - "@medusajs/event-bus-redis": "^1.8.11", - "@medusajs/file-local": "^1.0.3", - "@medusajs/inventory": "^1.11.6", - "@medusajs/medusa": "1.20.2", - "@medusajs/stock-location": "^1.11.5", - "@tanstack/react-query": "4.22.0", - "body-parser": "^1.19.0", - "cors": "^2.8.5", - "dotenv": "16.3.1", - "express": "^4.17.2", - "medusa-fulfillment-manual": "^1.1.39", - "medusa-interfaces": "^1.3.8", - "medusa-payment-manual": "^1.0.24", - "medusa-payment-stripe": "^6.0.7", - "prism-react-renderer": "^2.0.4", - "typeorm": "^0.3.16" - }, - "devDependencies": { - "@babel/cli": "^7.14.3", - "@babel/core": "^7.14.3", - "@babel/preset-typescript": "^7.21.4", - "@medusajs/medusa-cli": "^1.3.21", - "@types/express": "^4.17.13", - "@types/jest": "^27.4.0", - "@types/node": "^17.0.8", - "babel-preset-medusa-package": "^1.1.19", - "cross-env": "^7.0.3", - "eslint": "^6.8.0", - "jest": "^27.3.1", - "rimraf": "^3.0.2", - "ts-jest": "^27.0.7", - "ts-loader": "^9.2.6", - "typescript": "^4.5.2" - }, - "jest": { - "globals": { - "ts-jest": { - "tsconfig": "tsconfig.spec.json" - } - }, - "moduleFileExtensions": [ - "js", - "json", - "ts" - ], - "testPathIgnorePatterns": [ - "/node_modules/", - "/node_modules/" - ], - "rootDir": "src", - "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|js)$", - "transform": { - ".ts": "ts-jest" - }, - "collectCoverageFrom": [ - "**/*.(t|j)s" - ], - "coverageDirectory": "./coverage", - "testEnvironment": "node" - }, - "overrides": { - "@medusajs/admin-ui": { - "@medusajs/ui-preset": "^1.1.2" - } - }, - "resolutions": { - "@medusajs/ui-preset": "^1.1.2" - } -} diff --git a/storeagentai/src/admin/components/onboarding-flow/default/orders/order-detail.tsx b/storeagentai/src/admin/components/onboarding-flow/default/orders/order-detail.tsx deleted file mode 100644 index 2c596dce..00000000 --- a/storeagentai/src/admin/components/onboarding-flow/default/orders/order-detail.tsx +++ /dev/null @@ -1,136 +0,0 @@ -import React from "react"; -import { - ComputerDesktopSolid, - CurrencyDollarSolid, - NextJs -} from "@medusajs/icons"; -import { IconBadge, Heading, Text } from "@medusajs/ui"; - -const OrderDetailDefault = () => { - return ( - <> - - You finished the setup guide 🎉 You now have your first order. Feel free - to play around with the order management functionalities, such as - capturing payment, creating fulfillments, and more. - - - Start developing with Medusa - - - Medusa is a completely customizable commerce solution. We've curated - some essential guides to kickstart your development with Medusa. - - -
    - You can find more useful guides in{" "} - - our documentation - - . If you like Medusa, please{" "} - - star us on GitHub - - . -
    - - ); -}; - -export default OrderDetailDefault; diff --git a/storeagentai/src/admin/components/onboarding-flow/default/orders/orders-list.tsx b/storeagentai/src/admin/components/onboarding-flow/default/orders/orders-list.tsx deleted file mode 100644 index c7007d6d..00000000 --- a/storeagentai/src/admin/components/onboarding-flow/default/orders/orders-list.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import React from "react"; -import { - useAdminProduct, - useAdminCreateDraftOrder, - useMedusa -} from "medusa-react"; -import { StepContentProps } from "../../../../widgets/onboarding-flow/onboarding-flow"; -import { Button, Text } from "@medusajs/ui"; -import prepareRegions from "../../../../utils/prepare-region"; -import prepareShippingOptions from "../../../../utils/prepare-shipping-options"; - -const OrdersListDefault = ({ onNext, isComplete, data }: StepContentProps) => { - const { product } = useAdminProduct(data.product_id); - const { mutateAsync: createDraftOrder, isLoading } = - useAdminCreateDraftOrder(); - const { client } = useMedusa(); - - const createOrder = async () => { - const variant = product.variants[0] ?? null; - try { - // check if there is a shipping option and a region - // and if not, create demo ones - const regions = await prepareRegions(client) - const shipping_options = await prepareShippingOptions(client, regions[0]) - - const { draft_order } = await createDraftOrder({ - email: "customer@medusajs.com", - items: [ - variant - ? { - quantity: 1, - variant_id: variant?.id, - } - : { - quantity: 1, - title: product.title, - unit_price: 50, - }, - ], - shipping_methods: [ - { - option_id: shipping_options[0].id, - }, - ], - region_id: regions[0].id, - }); - - const { order } = await client.admin.draftOrders.markPaid(draft_order.id); - - onNext(order); - } catch (e) { - console.error(e); - } - }; - return ( - <> -
    - - The last step is to create a sample order using the product you just created. You can then view your order’s details, process its payment, fulfillment, inventory, and more. - - - By clicking the “Create a Sample Order” button, we’ll generate an order using the product you created and default configurations. - -
    -
    - {!isComplete && ( - - )} -
    - - ); -}; - -export default OrdersListDefault; diff --git a/storeagentai/src/admin/components/onboarding-flow/default/products/product-detail.tsx b/storeagentai/src/admin/components/onboarding-flow/default/products/product-detail.tsx deleted file mode 100644 index f20041e8..00000000 --- a/storeagentai/src/admin/components/onboarding-flow/default/products/product-detail.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import React, { useEffect, useMemo } from "react" -import { - useAdminPublishableApiKeys, - useAdminCreatePublishableApiKey -} from "medusa-react" -import { StepContentProps } from "../../../../widgets/onboarding-flow/onboarding-flow" -import { Button, CodeBlock, Text } from "@medusajs/ui" - -const ProductDetailDefault = ({ onNext, isComplete, data }: StepContentProps) => { - const { publishable_api_keys: keys, isLoading, refetch } = useAdminPublishableApiKeys({ - offset: 0, - limit: 1, - }); - const createPublishableApiKey = useAdminCreatePublishableApiKey() - - const api_key = useMemo(() => keys?.[0]?.id || "", [keys]) - const backendUrl = process.env.MEDUSA_BACKEND_URL === "/" || process.env.MEDUSA_ADMIN_BACKEND_URL === "/" ? - location.origin : - process.env.MEDUSA_BACKEND_URL || process.env.MEDUSA_ADMIN_BACKEND_URL || "http://localhost:9000" - - useEffect(() => { - if (!isLoading && !keys?.length) { - createPublishableApiKey.mutate({ - "title": "Development" - }, { - onSuccess: () => { - refetch() - } - }) - } - }, [isLoading, keys]) - - return ( -
    -
    - On this page, you can view your product's details and edit them. - - You can preview your product using Medusa's Store APIs. You can copy any - of the following code snippets to try it out. - -
    -
    - {!isLoading && ( - {\n // ...\n const productService = await initializeProductModule()\n const products = await productService.list({\n id: "${data?.product_id}",\n })\n\n console.log(products[0])\n}`, - }, - ]} className="my-6"> - - - - )} -
    -
    - - - - {!isComplete && ( - - )} -
    -
    - ); -}; - -export default ProductDetailDefault; diff --git a/storeagentai/src/admin/components/onboarding-flow/default/products/products-list.tsx b/storeagentai/src/admin/components/onboarding-flow/default/products/products-list.tsx deleted file mode 100644 index 7f059c83..00000000 --- a/storeagentai/src/admin/components/onboarding-flow/default/products/products-list.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import React, { useMemo } from "react"; -import { - useAdminCreateProduct, - useAdminCreateCollection, - useMedusa -} from "medusa-react"; -import { StepContentProps } from "../../../../widgets/onboarding-flow/onboarding-flow"; -import { Button, Text } from "@medusajs/ui"; -import getSampleProducts from "../../../../utils/sample-products"; -import prepareRegions from "../../../../utils/prepare-region"; - -const ProductsListDefault = ({ onNext, isComplete }: StepContentProps) => { - const { mutateAsync: createCollection, isLoading: collectionLoading } = - useAdminCreateCollection(); - const { mutateAsync: createProduct, isLoading: productLoading } = - useAdminCreateProduct(); - const { client } = useMedusa() - - const isLoading = useMemo(() => - collectionLoading || productLoading, - [collectionLoading, productLoading] - ); - - const createSample = async () => { - try { - const { collection } = await createCollection({ - title: "Merch", - handle: "merch", - }); - - const regions = await prepareRegions(client) - - const sampleProducts = getSampleProducts({ - regions, - collection_id: collection.id - }) - const { product } = await createProduct(sampleProducts[0]); - onNext(product); - } catch (e) { - console.error(e); - } - }; - - return ( -
    - - Create a product and set its general details such as title and - description, its price, options, variants, images, and more. You'll then - use the product to create a sample order. - - - You can create a product by clicking the "New Product" button below. - Alternatively, if you're not ready to create your own product, we can - create a sample one for you. - - {!isComplete && ( -
    - -
    - )} -
    - ); -}; - -export default ProductsListDefault; diff --git a/storeagentai/src/admin/components/onboarding-flow/nextjs/orders/order-detail.tsx b/storeagentai/src/admin/components/onboarding-flow/nextjs/orders/order-detail.tsx deleted file mode 100644 index 2d623911..00000000 --- a/storeagentai/src/admin/components/onboarding-flow/nextjs/orders/order-detail.tsx +++ /dev/null @@ -1,138 +0,0 @@ -import React from "react"; -import { CurrencyDollarSolid, NextJs, ComputerDesktopSolid } from "@medusajs/icons"; -import { IconBadge, Heading, Text } from "@medusajs/ui"; - -const OrderDetailNextjs = () => { - const queryParams = `?ref=onboarding&type=${ - process.env.MEDUSA_ADMIN_ONBOARDING_TYPE || "nextjs" - }`; - return ( - <> - - You finished the setup guide 🎉. You now have a complete ecommerce store - with a backend, admin, and a Next.js storefront. Feel free to play - around with each of these components to experience all commerce features - that Medusa provides. - - - Continue Building your Ecommerce Store - - - Your ecommerce store provides all basic ecommerce features you need to - start selling. You can add more functionalities, add plugins for - third-party integrations, and customize the storefront’s look and feel - to support your use case. - - -
    - You can find more useful guides in{" "} - - our documentation - - . If you like Medusa, please{" "} - - star us on GitHub - - . -
    - - ); -}; - -export default OrderDetailNextjs; diff --git a/storeagentai/src/admin/components/onboarding-flow/nextjs/orders/orders-list.tsx b/storeagentai/src/admin/components/onboarding-flow/nextjs/orders/orders-list.tsx deleted file mode 100644 index 9fa51582..00000000 --- a/storeagentai/src/admin/components/onboarding-flow/nextjs/orders/orders-list.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import React, { useState, useEffect } from "react"; -import { - useAdminProduct, - useCreateCart, - useMedusa -} from "medusa-react"; -import { StepContentProps } from "../../../../widgets/onboarding-flow/onboarding-flow"; -import { Button, Text } from "@medusajs/ui"; -import prepareRegions from "../../../../utils/prepare-region"; -import prepareShippingOptions from "../../../../utils/prepare-shipping-options"; - -const OrdersListNextjs = ({ isComplete, data }: StepContentProps) => { - const { product } = useAdminProduct(data.product_id); - const { mutateAsync: createCart, isLoading: cartIsLoading } = useCreateCart() - const { client } = useMedusa() - const [cartId, setCartId] = useState(null) - - const prepareNextjsCheckout = async () => { - const variant = product.variants[0] ?? null; - try { - const regions = await prepareRegions(client) - await prepareShippingOptions(client, regions[0]) - const { cart } = await createCart({ - region_id: regions[0]?.id, - items: [ - { - variant_id: variant?.id, - quantity: 1 - } - ] - }) - - setCartId(cart?.id) - } catch (e) { - console.error(e); - } - } - - useEffect(() => { - if (!cartId && product) { - prepareNextjsCheckout() - } - }, [cartId, product]) - - return ( - <> -
    - - The last step is to create a sample order using one of your products. You can then view your order’s details, process its payment, fulfillment, inventory, and more. - - - You can use the button below to experience hand-first the checkout flow in the Next.js storefront. After placing the order in the storefront, you’ll be directed back here to view the order’s details. - -
    -
    - {!isComplete && ( - - - - )} -
    - - ); -}; - -export default OrdersListNextjs diff --git a/storeagentai/src/admin/components/onboarding-flow/nextjs/products/product-detail.tsx b/storeagentai/src/admin/components/onboarding-flow/nextjs/products/product-detail.tsx deleted file mode 100644 index 2231d1f0..00000000 --- a/storeagentai/src/admin/components/onboarding-flow/nextjs/products/product-detail.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { useAdminProduct } from "medusa-react"; -import { StepContentProps } from "../../../../widgets/onboarding-flow/onboarding-flow"; -import { Button, Text } from "@medusajs/ui"; - -const ProductDetailNextjs = ({ onNext, isComplete, data }: StepContentProps) => { - const { product, isLoading: productIsLoading } = useAdminProduct(data?.product_id) - return ( -
    -
    - - We have now created a few sample products in your Medusa store. You can scroll down to see what the Product Detail view looks like in the Admin dashboard. - This is also the view you use to edit existing products. - - - To view the products in your store, you can visit the Next.js Storefront that was installed with create-medusa-app. - - - The Next.js Storefront Starter is a template that helps you start building an ecommerce store with Medusa. - You control the code for the storefront and you can customize it further to fit your specific needs. - - - Click the button below to view the products in your Next.js Storefront. - - - Having trouble? Click{" "} - - here - . - -
    -
    - - - - {!isComplete && ( - - )} -
    -
    - ); -}; - -export default ProductDetailNextjs diff --git a/storeagentai/src/admin/components/onboarding-flow/nextjs/products/products-list.tsx b/storeagentai/src/admin/components/onboarding-flow/nextjs/products/products-list.tsx deleted file mode 100644 index 34b96cae..00000000 --- a/storeagentai/src/admin/components/onboarding-flow/nextjs/products/products-list.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import React from "react"; -import { - useAdminCreateProduct, - useAdminCreateCollection, - useMedusa -} from "medusa-react"; -import { StepContentProps } from "../../../../widgets/onboarding-flow/onboarding-flow"; -import { Button, Text } from "@medusajs/ui"; -import { AdminPostProductsReq, Product } from "@medusajs/medusa"; -import getSampleProducts from "../../../../utils/sample-products"; -import prepareRegions from "../../../../utils/prepare-region"; - -const ProductsListNextjs = ({ onNext, isComplete }: StepContentProps) => { - const { mutateAsync: createCollection, isLoading: collectionLoading } = - useAdminCreateCollection(); - const { mutateAsync: createProduct, isLoading: productLoading } = - useAdminCreateProduct(); - const { client } = useMedusa() - - const isLoading = collectionLoading || productLoading; - - const createSample = async () => { - try { - const { collection } = await createCollection({ - title: "Merch", - handle: "merch", - }); - - const regions = await prepareRegions(client) - - const tryCreateProduct = async (sampleProduct: AdminPostProductsReq): Promise => { - try { - return (await createProduct(sampleProduct)).product - } catch { - // ignore if product already exists - return null - } - } - - let product: Product - const sampleProducts = getSampleProducts({ - regions, - collection_id: collection.id - }) - await Promise.all( - sampleProducts.map(async (sampleProduct, index) => { - const createdProduct = await tryCreateProduct(sampleProduct) - if (index === 0 && createProduct) { - product = createdProduct - } - }) - ) - onNext(product); - } catch (e) { - console.error(e); - } - }; - - return ( -
    - - Products in Medusa represent the products you sell. You can set their general details including a - title and description. Each product has options and variants, and you can set a price for each variant. - - - Click the button below to create sample products. - - {!isComplete && ( -
    - -
    - )} -
    - ); -}; - -export default ProductsListNextjs; diff --git a/storeagentai/src/admin/components/shared/accordion.tsx b/storeagentai/src/admin/components/shared/accordion.tsx deleted file mode 100644 index ed38d0c0..00000000 --- a/storeagentai/src/admin/components/shared/accordion.tsx +++ /dev/null @@ -1,123 +0,0 @@ -import * as AccordionPrimitive from "@radix-ui/react-accordion"; -import React from "react"; -import { CheckCircleSolid, CircleMiniSolid } from "@medusajs/icons"; -import { Heading, Text, clx } from "@medusajs/ui"; -import ActiveCircleDottedLine from "./icons/active-circle-dotted-line"; - -type AccordionItemProps = AccordionPrimitive.AccordionItemProps & { - title: string; - subtitle?: string; - description?: string; - required?: boolean; - tooltip?: string; - forceMountContent?: true; - headingSize?: "small" | "medium" | "large"; - customTrigger?: React.ReactNode; - complete?: boolean; - active?: boolean; - triggerable?: boolean; -}; - -const Accordion: React.FC< - | (AccordionPrimitive.AccordionSingleProps & - React.RefAttributes) - | (AccordionPrimitive.AccordionMultipleProps & - React.RefAttributes) -> & { - Item: React.FC; -} = ({ children, ...props }) => { - return ( - {children} - ); -}; - -const Item: React.FC = ({ - title, - subtitle, - description, - required, - tooltip, - children, - className, - complete, - headingSize = "large", - customTrigger = undefined, - forceMountContent = undefined, - active, - triggerable, - ...props -}) => { - return ( - - -
    -
    -
    -
    - {complete ? ( - - ) : ( - <> - {active && ( - - )} - {!active && ( - - )} - - )} -
    - - {title} - -
    - - {customTrigger || } - -
    - {subtitle && ( - - {subtitle} - - )} -
    -
    - -
    - {description && {description}} -
    {children}
    -
    -
    -
    - ); -}; - -Accordion.Item = Item; - -const MorphingTrigger = () => { - return ( -
    -
    - - -
    -
    - ); -}; - -export default Accordion; diff --git a/storeagentai/src/admin/components/shared/card.tsx b/storeagentai/src/admin/components/shared/card.tsx deleted file mode 100644 index 6d181697..00000000 --- a/storeagentai/src/admin/components/shared/card.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Text, clx } from "@medusajs/ui" - -type CardProps = { - icon?: React.ReactNode - children?: React.ReactNode - className?: string -} - -const Card = ({ - icon, - children, - className -}: CardProps) => { - return ( -
    - {icon} - {children} -
    - ) -} - -export default Card \ No newline at end of file diff --git a/storeagentai/src/admin/components/shared/icons/active-circle-dotted-line.tsx b/storeagentai/src/admin/components/shared/icons/active-circle-dotted-line.tsx deleted file mode 100644 index bab68883..00000000 --- a/storeagentai/src/admin/components/shared/icons/active-circle-dotted-line.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; -import IconProps from "../../../types/icon-type"; - -const ActiveCircleDottedLine: React.FC = ({ - size = "24", - color = "currentColor", - ...attributes -}) => { - return ( - - - - - - - - - - - - - - - - - - - - - - - - - ); -}; - -export default ActiveCircleDottedLine; diff --git a/storeagentai/src/admin/components/shared/icons/get-started.tsx b/storeagentai/src/admin/components/shared/icons/get-started.tsx deleted file mode 100644 index 850b22f7..00000000 --- a/storeagentai/src/admin/components/shared/icons/get-started.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from "react"; -import IconProps from "../../../types/icon-type"; - -const GetStarted: React.FC = ({ - size = "40", - color = "currentColor", - ...attributes -}) => { - return ( - - - - - - - - - - - - ); -}; - -export default GetStarted; diff --git a/storeagentai/src/admin/types/icon-type.ts b/storeagentai/src/admin/types/icon-type.ts deleted file mode 100644 index 782681a4..00000000 --- a/storeagentai/src/admin/types/icon-type.ts +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react" - -type IconProps = { - color?: string - size?: string | number -} & React.SVGAttributes - -export default IconProps diff --git a/storeagentai/src/admin/utils/prepare-region.ts b/storeagentai/src/admin/utils/prepare-region.ts deleted file mode 100644 index 69019125..00000000 --- a/storeagentai/src/admin/utils/prepare-region.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Store } from "@medusajs/medusa" -import type Medusa from "@medusajs/medusa-js" -import { ExtendedStoreDTO } from "@medusajs/medusa/dist/types/store" - -export default async function prepareRegions (client: Medusa) { - let { regions } = await client.admin.regions.list() - if (!regions.length) { - let { store } = await client.admin.store.retrieve() - if (!store.currencies) { - store = (await client.admin.store.update({ - currencies: ["eur"] - })).store as ExtendedStoreDTO - } - - regions = [(await client.admin.regions.create(getSampleRegion(store))).region] - } - - return regions -} - -function getSampleRegion (store: Store) { - return { - name: "EU", - currency_code: store.currencies[0].code, - tax_rate: 0, - payment_providers: [ - "manual" - ], - fulfillment_providers: [ - "manual" - ], - countries: [ - "gb", - "de", - "dk", - "se", - "fr", - "es", - "it" - ] - } -} \ No newline at end of file diff --git a/storeagentai/src/admin/utils/prepare-shipping-options.ts b/storeagentai/src/admin/utils/prepare-shipping-options.ts deleted file mode 100644 index 8ee4729c..00000000 --- a/storeagentai/src/admin/utils/prepare-shipping-options.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Region } from "@medusajs/medusa"; -import type Medusa from "@medusajs/medusa-js" - -export default async function prepareShippingOptions (client: Medusa, region: Region) { - let { shipping_options } = await client.admin.shippingOptions.list({ - region_id: region.id - }) - if (!shipping_options.length) { - shipping_options = [(await client.admin.shippingOptions.create({ - "name": "PostFake Standard", - "region_id": region.id, - "provider_id": "manual", - "data": { - "id": "manual-fulfillment" - }, - // @ts-ignore - "price_type": "flat_rate", - "amount": 1000 - })).shipping_option] - } - - return shipping_options -} \ No newline at end of file diff --git a/storeagentai/src/admin/utils/sample-products.ts b/storeagentai/src/admin/utils/sample-products.ts deleted file mode 100644 index edbe5594..00000000 --- a/storeagentai/src/admin/utils/sample-products.ts +++ /dev/null @@ -1,666 +0,0 @@ -import { AdminPostProductsReq, Region } from "@medusajs/medusa" - -type SampleProductsOptions = { - regions: Region[] - collection_id?: string -} - -// can't use the ProductStatus imported -// from the core within admin cusotmizations -enum ProductStatus { - PUBLISHED = "published" -} - -export default function getSampleProducts ({ - regions, - collection_id -}: SampleProductsOptions): AdminPostProductsReq[] { - return [ - { - title: "Medusa T-Shirt", - status: ProductStatus.PUBLISHED, - collection_id, - discountable: true, - subtitle: null, - description: "Reimagine the feeling of a classic T-shirt. With our cotton T-shirts, everyday essentials no longer have to be ordinary.", - handle: "medusa-t-shirt", - is_giftcard: false, - weight: 400, - images: [ - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/tee-black-front.png", - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/tee-black-back.png", - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/tee-white-front.png", - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/tee-white-back.png" - ], - options: [ - { - title: "Size", - }, - { - title: "Color", - } - ], - variants: [ - { - title: "S / Black", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 2200 - } - }), - options: [ - { - value: "S" - }, - { - value: "Black" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "S / White", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 2200 - } - }), - options: [ - { - value: "S" - }, - { - value: "White" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "M / Black", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 2200 - } - }), - options: [ - { - value: "M" - }, - { - value: "Black" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "M / White", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 2200 - } - }), - options: [ - { - value: "M" - }, - { - value: "White" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "L / Black", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 2200 - } - }), - options: [ - { - value: "L" - }, - { - value: "Black" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "L / White", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 2200 - } - }), - options: [ - { - value: "L" - }, - { - value: "White" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "XL / Black", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 2200 - } - }), - options: [ - { - value: "XL" - }, - { - value: "Black" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "XL / White", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 2200 - } - }), - options: [ - { - value: "XL" - }, - { - value: "White" - } - ], - inventory_quantity: 100, - manage_inventory: true - } - ] - }, - { - title: "Medusa Sweatshirt", - status: ProductStatus.PUBLISHED, - discountable: true, - collection_id, - subtitle: null, - description: "Reimagine the feeling of a classic sweatshirt. With our cotton sweatshirt, everyday essentials no longer have to be ordinary.", - handle: "sweatshirt", - is_giftcard: false, - weight: 400, - images: [ - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/sweatshirt-vintage-front.png", - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/sweatshirt-vintage-back.png" - ], - options: [ - { - title: "Size", - } - ], - variants: [ - { - title: "S", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 3350 - } - }), - options: [ - { - value: "S" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "M", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 3350 - } - }), - options: [ - { - value: "M" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "L", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 3350 - } - }), - options: [ - { - value: "L" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "XL", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 3350 - } - }), - options: [ - { - value: "XL" - } - ], - inventory_quantity: 100, - manage_inventory: true - } - ] - }, - { - title: "Medusa Sweatpants", - status: ProductStatus.PUBLISHED, - discountable: true, - collection_id, - subtitle: null, - description: "Reimagine the feeling of classic sweatpants. With our cotton sweatpants, everyday essentials no longer have to be ordinary.", - handle: "sweatpants", - is_giftcard: false, - weight: 400, - images: [ - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/sweatpants-gray-front.png", - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/sweatpants-gray-back.png" - ], - options: [ - { - title: "Size", - } - ], - variants: [ - { - title: "S", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 3350 - } - }), - options: [ - { - value: "S" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "M", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 3350 - } - }), - options: [ - { - value: "M" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "L", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 3350 - } - }), - options: [ - { - value: "L" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "XL", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 3350 - } - }), - options: [ - { - value: "XL" - } - ], - inventory_quantity: 100, - manage_inventory: true - } - ] - }, - { - title: "Medusa Shorts", - status: ProductStatus.PUBLISHED, - discountable: true, - collection_id, - subtitle: null, - description: "Reimagine the feeling of classic shorts. With our cotton shorts, everyday essentials no longer have to be ordinary.", - handle: "shorts", - is_giftcard: false, - weight: 400, - images: [ - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/shorts-vintage-front.png", - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/shorts-vintage-back.png" - ], - options: [ - { - title: "Size", - } - ], - variants: [ - { - title: "S", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 2850 - } - }), - options: [ - { - value: "S" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "M", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 2850 - } - }), - options: [ - { - value: "M" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "L", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 2850 - } - }), - options: [ - { - value: "L" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "XL", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 2850 - } - }), - options: [ - { - value: "XL" - } - ], - inventory_quantity: 100, - manage_inventory: true - } - ] - }, - { - title: "Medusa Hoodie", - status: ProductStatus.PUBLISHED, - discountable: true, - collection_id, - subtitle: null, - description: "Reimagine the feeling of a classic hoodie. With our cotton hoodie, everyday essentials no longer have to be ordinary.", - handle: "hoodie", - is_giftcard: false, - weight: 400, - images: [ - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/black_hoodie_front.png", - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/black_hoodie_back.png" - ], - options: [ - { - title: "Size", - } - ], - variants: [ - { - title: "S", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 4150 - } - }), - options: [ - { - value: "S" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "M", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 4150 - } - }), - options: [ - { - value: "M" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "L", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 4150 - } - }), - options: [ - { - value: "L" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "XL", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 4150 - } - }), - options: [ - { - value: "XL" - } - ], - inventory_quantity: 100, - manage_inventory: true - } - ] - }, - { - title: "Medusa Longsleeve", - status: ProductStatus.PUBLISHED, - discountable: true, - collection_id, - subtitle: null, - description: "Reimagine the feeling of a classic longsleeve. With our cotton longsleeve, everyday essentials no longer have to be ordinary.", - handle: "longsleeve", - is_giftcard: false, - weight: 400, - images: [ - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/ls-black-front.png", - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/ls-black-back.png" - ], - options: [ - { - title: "Size", - } - ], - variants: [ - { - title: "S", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 4150 - } - }), - options: [ - { - value: "S" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "M", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 4150 - } - }), - options: [ - { - value: "M" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "L", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 4150 - } - }), - options: [ - { - value: "L" - } - ], - inventory_quantity: 100, - manage_inventory: true - }, - { - title: "XL", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 4150 - } - }), - options: [ - { - value: "XL" - } - ], - inventory_quantity: 100, - manage_inventory: true - } - ] - }, - { - title: "Medusa Coffee Mug", - status: ProductStatus.PUBLISHED, - discountable: true, - collection_id, - subtitle: null, - description: "Every programmer's best friend.", - handle: "coffee-mug", - is_giftcard: false, - weight: 400, - images: [ - "https://medusa-public-images.s3.eu-west-1.amazonaws.com/coffee-mug.png" - ], - options: [ - { - title: "Size", - } - ], - variants: [ - { - title: "One Size", - prices: regions.map((region) => { - return { - currency_code: region.currency_code, - amount: 1200 - } - }), - options: [ - { - value: "One Size" - } - ], - inventory_quantity: 100, - manage_inventory: true - } - ] - } - ] -} \ No newline at end of file diff --git a/storeagentai/src/admin/widgets/onboarding-flow/onboarding-flow.tsx b/storeagentai/src/admin/widgets/onboarding-flow/onboarding-flow.tsx deleted file mode 100644 index e2aa08f7..00000000 --- a/storeagentai/src/admin/widgets/onboarding-flow/onboarding-flow.tsx +++ /dev/null @@ -1,502 +0,0 @@ -import { OrderDetailsWidgetProps, ProductDetailsWidgetProps, WidgetConfig, WidgetProps } from "@medusajs/admin"; -import { useAdminCustomPost, useAdminCustomQuery, useMedusa } from "medusa-react"; -import React, { useEffect, useState, useMemo, useCallback } from "react"; -import { useNavigate, useSearchParams, useLocation } from "react-router-dom"; -import { OnboardingState } from "../../../models/onboarding"; -import { - AdminOnboardingUpdateStateReq, - OnboardingStateRes, - UpdateOnboardingStateInput, -} from "../../../types/onboarding"; -import OrderDetailDefault from "../../components/onboarding-flow/default/orders/order-detail"; -import OrdersListDefault from "../../components/onboarding-flow/default/orders/orders-list"; -import ProductDetailDefault from "../../components/onboarding-flow/default/products/product-detail"; -import ProductsListDefault from "../../components/onboarding-flow/default/products/products-list"; -import { Button, Container, Heading, Text, clx } from "@medusajs/ui"; -import Accordion from "../../components/shared/accordion"; -import GetStarted from "../../components/shared/icons/get-started"; -import { Order, Product } from "@medusajs/medusa"; -import ProductsListNextjs from "../../components/onboarding-flow/nextjs/products/products-list"; -import ProductDetailNextjs from "../../components/onboarding-flow/nextjs/products/product-detail"; -import OrdersListNextjs from "../../components/onboarding-flow/nextjs/orders/orders-list"; -import OrderDetailNextjs from "../../components/onboarding-flow/nextjs/orders/order-detail"; - -type STEP_ID = - | "create_product" - | "preview_product" - | "create_order" - | "setup_finished" - | "create_product_nextjs" - | "preview_product_nextjs" - | "create_order_nextjs" - | "setup_finished_nextjs" - -type OnboardingWidgetProps = WidgetProps | ProductDetailsWidgetProps | OrderDetailsWidgetProps - -export type StepContentProps = OnboardingWidgetProps & { - onNext?: Function; - isComplete?: boolean; - data?: OnboardingState; -}; - -type Step = { - id: STEP_ID; - title: string; - component: React.FC; - onNext?: Function; -}; - -const QUERY_KEY = ["onboarding_state"]; - -const OnboardingFlow = (props: OnboardingWidgetProps) => { - // create custom hooks for custom endpoints - const { data, isLoading } = useAdminCustomQuery< - undefined, - OnboardingStateRes - >("/onboarding", QUERY_KEY); - const { mutate } = useAdminCustomPost< - AdminOnboardingUpdateStateReq, - OnboardingStateRes - >("/onboarding", QUERY_KEY); - - const navigate = useNavigate(); - const location = useLocation(); - // will be used if onboarding step - // is passed as a path parameter - const { client } = useMedusa(); - - // get current step from custom endpoint - const currentStep: STEP_ID | undefined = useMemo(() => { - return data?.status - ?.current_step as STEP_ID - }, [data]); - - // initialize some state - const [openStep, setOpenStep] = useState(currentStep); - const [completed, setCompleted] = useState(false); - - // this method is used to move from one step to the next - const setStepComplete = ({ - step_id, - extraData, - onComplete, - }: { - step_id: STEP_ID; - extraData?: UpdateOnboardingStateInput; - onComplete?: () => void; - }) => { - const next = steps[findStepIndex(step_id) + 1]; - mutate({ current_step: next.id, ...extraData }, { - onSuccess: onComplete - }); - }; - - // this is useful if you want to change the current step - // using a path parameter. It can only be changed if the passed - // step in the path parameter is the next step. - const [ searchParams ] = useSearchParams() - - // the steps are set based on the - // onboarding type - const steps: Step[] = useMemo(() => { - { - switch(process.env.MEDUSA_ADMIN_ONBOARDING_TYPE) { - case 'nextjs': - return [ - { - id: "create_product_nextjs", - title: "Create Products", - component: ProductsListNextjs, - onNext: (product: Product) => { - setStepComplete({ - step_id: "create_product_nextjs", - extraData: { product_id: product.id }, - onComplete: () => { - if (!location.pathname.startsWith(`/a/products/${product.id}`)) { - navigate(`/a/products/${product.id}`) - } - }, - }); - }, - }, - { - id: "preview_product_nextjs", - title: "Preview Product in your Next.js Storefront", - component: ProductDetailNextjs, - onNext: () => { - setStepComplete({ - step_id: "preview_product_nextjs", - onComplete: () => navigate(`/a/orders`), - }); - }, - }, - { - id: "create_order_nextjs", - title: "Create an Order using your Next.js Storefront", - component: OrdersListNextjs, - onNext: (order: Order) => { - setStepComplete({ - step_id: "create_order_nextjs", - onComplete: () => { - if (!location.pathname.startsWith(`/a/orders/${order.id}`)) { - navigate(`/a/orders/${order.id}`) - } - }, - }); - }, - }, - { - id: "setup_finished_nextjs", - title: "Setup Finished: Continue Building your Ecommerce Store", - component: OrderDetailNextjs, - }, - ] - default: - return [ - { - id: "create_product", - title: "Create Product", - component: ProductsListDefault, - onNext: (product: Product) => { - setStepComplete({ - step_id: "create_product", - extraData: { product_id: product.id }, - onComplete: () => { - if (!location.pathname.startsWith(`/a/products/${product.id}`)) { - navigate(`/a/products/${product.id}`) - } - }, - }); - }, - }, - { - id: "preview_product", - title: "Preview Product", - component: ProductDetailDefault, - onNext: () => { - setStepComplete({ - step_id: "preview_product", - onComplete: () => navigate(`/a/orders`), - }); - }, - }, - { - id: "create_order", - title: "Create an Order", - component: OrdersListDefault, - onNext: (order: Order) => { - setStepComplete({ - step_id: "create_order", - onComplete: () => { - if (!location.pathname.startsWith(`/a/orders/${order.id}`)) { - navigate(`/a/orders/${order.id}`) - } - }, - }); - }, - }, - { - id: "setup_finished", - title: "Setup Finished: Start developing with Medusa", - component: OrderDetailDefault, - }, - ] - } - } - }, [location.pathname]) - - // used to retrieve the index of a step by its ID - const findStepIndex = useCallback((step_id: STEP_ID) => { - return steps.findIndex((step) => step.id === step_id) - }, [steps]) - - // used to check if a step is completed - const isStepComplete = useCallback((step_id: STEP_ID) => { - return findStepIndex(currentStep) > findStepIndex(step_id) - }, [findStepIndex, currentStep]); - - // this is used to retrieve the data necessary - // to move to the next onboarding step - const getOnboardingParamStepData = useCallback(async (onboardingStep: string, data?: { - orderId?: string, - productId?: string, - }) => { - switch (onboardingStep) { - case "setup_finished_nextjs": - case "setup_finished": - if (!data?.orderId && "order" in props) { - return props.order - } - const orderId = data?.orderId || searchParams.get("order_id") - if (orderId) { - return (await client.admin.orders.retrieve(orderId)).order - } - - throw new Error ("Required `order_id` parameter was not passed as a parameter") - case "preview_product_nextjs": - case "preview_product": - if (!data?.productId && "product" in props) { - return props.product - } - const productId = data?.productId || searchParams.get("product_id") - if (productId) { - return (await client.admin.products.retrieve(productId)).product - } - - throw new Error ("Required `product_id` parameter was not passed as a parameter") - default: - return undefined - } - }, [searchParams, props]) - - const isProductCreateStep = useMemo(() => { - return currentStep === "create_product" || - currentStep === "create_product_nextjs" - }, [currentStep]) - - const isOrderCreateStep = useMemo(() => { - return currentStep === "create_order" || - currentStep === "create_order_nextjs" - }, [currentStep]) - - // used to change the open step when the current - // step is retrieved from custom endpoints - useEffect(() => { - setOpenStep(currentStep); - - if (findStepIndex(currentStep) === steps.length - 1) setCompleted(true); - }, [currentStep, findStepIndex]); - - // used to check if the user created a product and has entered its details page - // the step is changed to the next one - useEffect(() => { - if (location.pathname.startsWith("/a/products/prod_") && isProductCreateStep && "product" in props) { - // change to the preview product step - const currentStepIndex = findStepIndex(currentStep) - steps[currentStepIndex].onNext?.(props.product) - } - }, [location.pathname, isProductCreateStep]) - - // used to check if the user created an order and has entered its details page - // the step is changed to the next one. - useEffect(() => { - if (location.pathname.startsWith("/a/orders/order_") && isOrderCreateStep && "order" in props) { - // change to the preview product step - const currentStepIndex = findStepIndex(currentStep) - steps[currentStepIndex].onNext?.(props.order) - } - }, [location.pathname, isOrderCreateStep]) - - // used to check if the `onboarding_step` path - // parameter is passed and, if so, moves to that step - // only if it's the next step and its necessary data is passed - useEffect(() => { - const onboardingStep = searchParams.get("onboarding_step") as STEP_ID - const onboardingStepIndex = findStepIndex(onboardingStep) - if (onboardingStep && onboardingStepIndex !== -1 && onboardingStep !== openStep) { - // change current step to the onboarding step - const openStepIndex = findStepIndex(openStep) - - if (onboardingStepIndex !== openStepIndex + 1) { - // can only go forward one step - return - } - - // retrieve necessary data and trigger the next function - getOnboardingParamStepData(onboardingStep) - .then((data) => { - steps[openStepIndex].onNext?.(data) - }) - .catch((e) => console.error(e)) - } - }, [searchParams, openStep, getOnboardingParamStepData]) - - if ( - !isLoading && - data?.status?.is_complete && - !localStorage.getItem("override_onboarding_finish") - ) - return null; - - // a method that will be triggered when - // the setup is started - const onStart = () => { - mutate({ current_step: steps[0].id }); - navigate(`/a/products`); - }; - - // a method that will be triggered when - // the setup is completed - const onComplete = () => { - setCompleted(true); - }; - - // a method that will be triggered when - // the setup is closed - const onHide = () => { - mutate({ is_complete: true }); - }; - - // used to get text for get started header - const getStartedText = () => { - switch(process.env.MEDUSA_ADMIN_ONBOARDING_TYPE) { - case "nextjs": - return "Learn the basics of Medusa by creating your first order using the Next.js storefront." - default: - return "Learn the basics of Medusa by creating your first order." - } - } - - return ( - <> - - setOpenStep(value as STEP_ID)} - > -
    -
    - -
    - {!completed ? ( - <> -
    - Get started - - {getStartedText()} - -
    -
    - {!!currentStep ? ( - <> - {currentStep === steps[steps.length - 1].id ? ( - - ) : ( - - )} - - ) : ( - <> - - - - )} -
    - - ) : ( - <> -
    - - Thank you for completing the setup guide! - - - This whole experience was built using our new{" "} - widgets feature. -
    You can find out more details and build your own by - following{" "} - - our guide - - . -
    -
    -
    - -
    - - )} -
    - { -
    - {(!completed ? steps : steps.slice(-1)).map((step) => { - const isComplete = isStepComplete(step.id); - const isCurrent = currentStep === step.id; - return ( - , - })} - > -
    - -
    -
    - ); - })} -
    - } -
    -
    - - ); -}; - -export const config: WidgetConfig = { - zone: [ - "product.list.before", - "product.details.before", - "order.list.before", - "order.details.before", - ], -}; - -export default OnboardingFlow; diff --git a/storeagentai/src/api/README.md b/storeagentai/src/api/README.md deleted file mode 100644 index 5b91e506..00000000 --- a/storeagentai/src/api/README.md +++ /dev/null @@ -1,179 +0,0 @@ -# Custom API Routes - -You may define custom API Routes by putting files in the `/api` directory that export functions returning an express router or a collection of express routers. -Medusa supports adding custom API Routes using a file based approach. This means that you can add files in the `/api` directory and the files path will be used as the API Route path. For example, if you add a file called `/api/store/custom/route.ts` it will be available on the `/store/custom` API Route. - -```ts -import type { MedusaRequest, MedusaResponse } from "@medusajs/medusa"; - -export async function GET(req: MedusaRequest, res: MedusaResponse) { - res.json({ - message: "Hello world!", - }); -} -``` - -## Supported HTTP methods - -The file based routing supports the following HTTP methods: - -- GET -- POST -- PUT -- PATCH -- DELETE -- OPTIONS -- HEAD - -You can define a handler for each of these methods by exporting a function with the name of the method in the paths `route.ts` file. For example, if you want to define a handler for the `GET`, `POST`, and `PUT` methods, you can do so by exporting functions with the names `GET`, `POST`, and `PUT`: - -```ts -import type { MedusaRequest, MedusaResponse } from "@medusajs/medusa"; - -export async function GET(req: MedusaRequest, res: MedusaResponse) { - // Handle GET requests -} - -export async function POST(req: MedusaRequest, res: MedusaResponse) { - // Handle POST requests -} - -export async function PUT(req: MedusaRequest, res: MedusaResponse) { - // Handle PUT requests -} -``` - -## Parameters - -You can define parameters in the path of your route by using wrapping the parameter name in square brackets. For example, if you want to define a route that takes a `productId` parameter, you can do so by creating a file called `/api/products/[productId]/route.ts`: - -```ts -import type { - MedusaRequest, - MedusaResponse, - ProductService, -} from "@medusajs/medusa"; - -export async function GET(req: MedusaRequest, res: MedusaResponse) { - const { productId } = req.params; - - const productService: ProductService = req.scope.resolve("productService"); - - const product = await productService.retrieve(productId); - - res.json({ - product, - }); -} -``` - -If you want to define a route that takes multiple parameters, you can do so by adding multiple parameters in the path. It is important that each parameter is given a unique name. For example, if you want to define a route that takes both a `productId` and a `variantId` parameter, you can do so by creating a file called `/api/products/[productId]/variants/[variantId]/route.ts`. Duplicate parameter names are not allowed, and will result in an error. - -## Using the container - -A global container is available on `req.scope` to allow you to use any of the registered services from the core, installed plugins or your local project: - -```ts -import type { - MedusaRequest, - MedusaResponse, - ProductService, -} from "@medusajs/medusa"; - -export async function GET(req: MedusaRequest, res: MedusaResponse) { - const productService: ProductService = req.scope.resolve("productService"); - - const products = await productService.list(); - - res.json({ - products, - }); -} -``` - -## Middleware - -You can apply middleware to your routes by creating a file called `/api/middlewares.ts`. This file should export a configuration object with what middleware you want to apply to which routes. For example, if you want to apply a custom middleware function to the `/store/custom` route, you can do so by adding the following to your `/api/middlewares.ts` file: - -```ts -import type { - MiddlewaresConfig, - MedusaRequest, - MedusaResponse, - MedusaNextFunction, -} from "@medusajs/medusa"; - -async function logger( - req: MedusaRequest, - res: MedusaResponse, - next: MedusaNextFunction -) { - console.log("Request received"); - next(); -} - -export const config: MiddlewaresConfig = { - routes: [ - { - matcher: "/store/custom", - middlewares: [logger], - }, - ], -}; -``` - -The `matcher` property can be either a string or a regular expression. The `middlewares` property accepts an array of middleware functions. - -You might only want to apply middleware to certain HTTP methods. You can do so by adding a `method` property to the route configuration object: - -```ts -export const config: MiddlewaresConfig = { - routes: [ - { - matcher: "/store/custom", - method: "GET", - middlewares: [logger], - }, - ], -}; -``` - -The `method` property can be either a HTTP method or an array of HTTP methods. By default the middlewares will apply to all HTTP methods for the given `matcher`. - -### Default middleware - -Some middleware functions are applied per default: - -#### Global middleware - -JSON parsing is applied to all routes. This means that you can access the request body as `req.body` and it will be parsed as JSON, if the request has a `Content-Type` header of `application/json`. - -If you want to use a different parser for a specific route, such as `urlencoded`, you can do so by adding the following export to your `route.ts` file: - -```ts -import { urlencoded } from "express"; - -export const config: MiddlewaresConfig = { - routes: [ - { - method: "POST", - matcher: "/store/custom", - middlewares: [urlencoded()], - }, - ], -}; -``` - -#### Store middleware - -For all `/store` routes, the appropriate CORS settings are applied. The STORE_CORS value can be configured in your `medusa-config.js` file. - -#### Admin middleware - -For all `/admin` routes, the appropriate CORS settings are applied. The ADMIN_CORS value can be configured in your `medusa-config.js` file. - -All `/admin` routes also have admin authentication applied per default. If you want to disable this for a specific route, you can do so by adding the following export to your `route.ts` file: - -```ts -export const AUTHENTICATE = false; -``` diff --git a/storeagentai/src/api/admin/custom/route.ts b/storeagentai/src/api/admin/custom/route.ts deleted file mode 100644 index 708bcb48..00000000 --- a/storeagentai/src/api/admin/custom/route.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { MedusaRequest, MedusaResponse } from "@medusajs/medusa"; - -export async function GET( - req: MedusaRequest, - res: MedusaResponse -): Promise { - res.sendStatus(200); -} diff --git a/storeagentai/src/api/admin/onboarding/route.ts b/storeagentai/src/api/admin/onboarding/route.ts deleted file mode 100644 index 9a5d9907..00000000 --- a/storeagentai/src/api/admin/onboarding/route.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { MedusaRequest, MedusaResponse } from "@medusajs/medusa"; -import { EntityManager } from "typeorm"; - -import OnboardingService from "../../../services/onboarding"; - -export async function GET(req: MedusaRequest, res: MedusaResponse) { - const onboardingService: OnboardingService = - req.scope.resolve("onboardingService"); - - const status = await onboardingService.retrieve(); - - res.status(200).json({ status }); -} - -export async function POST(req: MedusaRequest, res: MedusaResponse) { - const onboardingService: OnboardingService = - req.scope.resolve("onboardingService"); - const manager: EntityManager = req.scope.resolve("manager"); - - const status = await manager.transaction(async (transactionManager) => { - return await onboardingService - .withTransaction(transactionManager) - .update(req.body); - }); - - res.status(200).json({ status }); -} diff --git a/storeagentai/src/api/store/custom/route.ts b/storeagentai/src/api/store/custom/route.ts deleted file mode 100644 index 708bcb48..00000000 --- a/storeagentai/src/api/store/custom/route.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { MedusaRequest, MedusaResponse } from "@medusajs/medusa"; - -export async function GET( - req: MedusaRequest, - res: MedusaResponse -): Promise { - res.sendStatus(200); -} diff --git a/storeagentai/src/jobs/README.md b/storeagentai/src/jobs/README.md deleted file mode 100644 index 45917c51..00000000 --- a/storeagentai/src/jobs/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# Custom scheduled jobs - -You may define custom scheduled jobs (cron jobs) by creating files in the `/jobs` directory. - -```ts -import { - ProductService, - ScheduledJobArgs, - ScheduledJobConfig, -} from "@medusajs/medusa"; - -export default async function myCustomJob({ container }: ScheduledJobArgs) { - const productService: ProductService = container.resolve("productService"); - - const products = await productService.listAndCount(); - - // Do something with the products -} - -export const config: ScheduledJobConfig = { - name: "daily-product-report", - schedule: "0 0 * * *", // Every day at midnight -}; -``` - -A scheduled job is defined in two parts a `handler` and a `config`. The `handler` is a function which is invoked when the job is scheduled. The `config` is an object which defines the name of the job, the schedule, and an optional data object. - -The `handler` is a function which takes one parameter, an `object` of type `ScheduledJobArgs` with the following properties: - -- `container` - a `MedusaContainer` instance which can be used to resolve services. -- `data` - an `object` containing data passed to the job when it was scheduled. This object is passed in the `config` object. -- `pluginOptions` - an `object` containing plugin options, if the job is defined in a plugin. diff --git a/storeagentai/src/loaders/README.md b/storeagentai/src/loaders/README.md deleted file mode 100644 index a5dcfd26..00000000 --- a/storeagentai/src/loaders/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Custom loader - -The loader allows you have access to the Medusa service container. This allows you to access the database and the services registered on the container. -you can register custom registrations in the container or run custom code on startup. - -```ts -// src/loaders/my-loader.ts - -import { AwilixContainer } from 'awilix' - -/** - * - * @param container The container in which the registrations are made - * @param config The options of the plugin or the entire config object - */ -export default (container: AwilixContainer, config: Record): void | Promise => { - /* Implement your own loader. */ -} -``` \ No newline at end of file diff --git a/storeagentai/src/migrations/1685715079776-CreateOnboarding.ts b/storeagentai/src/migrations/1685715079776-CreateOnboarding.ts deleted file mode 100644 index 05e0972d..00000000 --- a/storeagentai/src/migrations/1685715079776-CreateOnboarding.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { generateEntityId } from "@medusajs/utils"; -import { MigrationInterface, QueryRunner } from "typeorm"; - -export class CreateOnboarding1685715079776 implements MigrationInterface { - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query( - `CREATE TABLE "onboarding_state" ("id" character varying NOT NULL, "created_at" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updated_at" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "current_step" character varying NULL, "is_complete" boolean)` - ); - - await queryRunner.query( - `INSERT INTO "onboarding_state" ("id", "current_step", "is_complete") VALUES ('${generateEntityId( - "", - "onboarding" - )}' , NULL, false)` - ); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(`DROP TABLE "onboarding_state"`); - } -} diff --git a/storeagentai/src/migrations/1686062614694-AddOnboardingProduct.ts b/storeagentai/src/migrations/1686062614694-AddOnboardingProduct.ts deleted file mode 100644 index 66706f28..00000000 --- a/storeagentai/src/migrations/1686062614694-AddOnboardingProduct.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; - -export class AddOnboardingProduct1686062614694 implements MigrationInterface { - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query( - `ALTER TABLE "onboarding_state" ADD COLUMN "product_id" character varying NULL` - ); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query( - `ALTER TABLE "onboarding_state" DROP COLUMN "product_id"` - ); - } -} diff --git a/storeagentai/src/migrations/1690996567455-CorrectOnboardingFields.ts b/storeagentai/src/migrations/1690996567455-CorrectOnboardingFields.ts deleted file mode 100644 index bc145c15..00000000 --- a/storeagentai/src/migrations/1690996567455-CorrectOnboardingFields.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; - -export class CorrectOnboardingFields1690996567455 implements MigrationInterface { - name = 'CorrectOnboardingFields1690996567455' - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE "onboarding_state" ADD CONSTRAINT "PK_891b72628471aada55d7b8c9410" PRIMARY KEY ("id")`); - await queryRunner.query(`ALTER TABLE "onboarding_state" ALTER COLUMN "is_complete" SET NOT NULL`); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE "onboarding_state" ALTER COLUMN "is_complete" DROP NOT NULL`); - await queryRunner.query(`ALTER TABLE "onboarding_state" DROP CONSTRAINT "PK_891b72628471aada55d7b8c9410"`); - } - -} diff --git a/storeagentai/src/migrations/1709007806066-AddEthereumCurrency.ts b/storeagentai/src/migrations/1709007806066-AddEthereumCurrency.ts deleted file mode 100644 index 5ac3b5e6..00000000 --- a/storeagentai/src/migrations/1709007806066-AddEthereumCurrency.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; - -export class AddEthereumCurrency1709007806066 implements MigrationInterface { - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query( - `INSERT INTO currency (code, symbol, symbol_native, name) VALUES ('eth', 'ETH', 'Ξ', 'Ethereum')` - ); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query( - `DELETE FROM currency WHERE code = 'eth'` - ); - } - -} diff --git a/storeagentai/src/migrations/README.md b/storeagentai/src/migrations/README.md deleted file mode 100644 index 6964714e..00000000 --- a/storeagentai/src/migrations/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Custom migrations - -You may define custom models (entities) that will be registered on the global container by creating files in the `src/models` directory that export an instance of `BaseEntity`. -In that case you also need to provide a migration in order to create the table in the database. - -## Example - -### 1. Create the migration - -See [How to Create Migrations](https://docs.medusajs.com/advanced/backend/migrations/) in the documentation. - -```ts -// src/migration/my-migration.ts - -import { MigrationInterface, QueryRunner } from "typeorm" - -export class MyMigration1617703530229 implements MigrationInterface { - name = "myMigration1617703530229" - - public async up(queryRunner: QueryRunner): Promise { - // write you migration here - } - - public async down(queryRunner: QueryRunner): Promise { - // write you migration here - } -} - -``` \ No newline at end of file diff --git a/storeagentai/src/models/README.md b/storeagentai/src/models/README.md deleted file mode 100644 index 30872429..00000000 --- a/storeagentai/src/models/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Custom models - -You may define custom models (entities) that will be registered on the global container by creating files in the `src/models` directory that export an instance of `BaseEntity`. - -## Example - -### 1. Create the Entity - -```ts -// src/models/post.ts - -import { BeforeInsert, Column, Entity, PrimaryColumn } from "typeorm"; -import { generateEntityId } from "@medusajs/utils"; -import { BaseEntity } from "@medusajs/medusa"; - -@Entity() -export class Post extends BaseEntity { - @Column({type: 'varchar'}) - title: string | null; - - @BeforeInsert() - private beforeInsert(): void { - this.id = generateEntityId(this.id, "post") - } -} -``` - -### 2. Create the Migration - -You also need to create a Migration to create the new table in the database. See [How to Create Migrations](https://docs.medusajs.com/advanced/backend/migrations/) in the documentation. - -### 3. Create a Repository -Entities data can be easily accessed and modified using [TypeORM Repositories](https://typeorm.io/working-with-repository). To create a repository, create a file in `src/repositories`. For example, here’s a repository `PostRepository` for the `Post` entity: - -```ts -// src/repositories/post.ts - -import { EntityRepository, Repository } from "typeorm" - -import { Post } from "../models/post" - -@EntityRepository(Post) -export class PostRepository extends Repository { } -``` - -See more about defining and accesing your custom [Entities](https://docs.medusajs.com/advanced/backend/entities/overview) in the documentation. \ No newline at end of file diff --git a/storeagentai/src/models/onboarding.ts b/storeagentai/src/models/onboarding.ts deleted file mode 100644 index af7893f8..00000000 --- a/storeagentai/src/models/onboarding.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { BaseEntity } from "@medusajs/medusa"; -import { Column, Entity } from "typeorm"; - -@Entity() -export class OnboardingState extends BaseEntity { - @Column({ nullable: true }) - current_step: string; - - @Column() - is_complete: boolean; - - @Column({ nullable: true }) - product_id: string; -} diff --git a/storeagentai/src/repositories/onboarding.ts b/storeagentai/src/repositories/onboarding.ts deleted file mode 100644 index 5ff61248..00000000 --- a/storeagentai/src/repositories/onboarding.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { dataSource } from "@medusajs/medusa/dist/loaders/database"; -import { OnboardingState } from "../models/onboarding"; - -const OnboardingRepository = dataSource.getRepository(OnboardingState); - -export default OnboardingRepository; diff --git a/storeagentai/src/services/README.md b/storeagentai/src/services/README.md deleted file mode 100644 index 941ac352..00000000 --- a/storeagentai/src/services/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# Custom services - -You may define custom services that will be registered on the global container by creating files in the `/services` directory that export an instance of `BaseService`. - -```ts -// src/services/my-custom.ts - -import { Lifetime } from "awilix" -import { TransactionBaseService } from "@medusajs/medusa"; -import { IEventBusService } from "@medusajs/types"; - -export default class MyCustomService extends TransactionBaseService { - static LIFE_TIME = Lifetime.SCOPED - protected readonly eventBusService_: IEventBusService - - constructor( - { eventBusService }: { eventBusService: IEventBusService }, - options: Record - ) { - // @ts-ignore - super(...arguments) - - this.eventBusService_ = eventBusService - } -} - -``` - -The first argument to the `constructor` is the global giving you access to easy dependency injection. The container holds all registered services from the core, installed plugins and from other files in the `/services` directory. The registration name is a camelCased version of the file name with the type appended i.e.: `my-custom.js` is registered as `myCustomService`, `custom-thing.js` is registered as `customThingService`. - -You may use the services you define here in custom endpoints by resolving the services defined. - -```js -import { Router } from "express" - -export default () => { - const router = Router() - - router.get("/hello-product", async (req, res) => { - const myService = req.scope.resolve("myCustomService") - - res.json({ - message: await myService.getProductMessage() - }) - }) - - return router; -} -``` diff --git a/storeagentai/src/services/__tests__/test-service.spec.ts b/storeagentai/src/services/__tests__/test-service.spec.ts deleted file mode 100644 index 82ef916f..00000000 --- a/storeagentai/src/services/__tests__/test-service.spec.ts +++ /dev/null @@ -1,5 +0,0 @@ -describe('MyService', () => { - it('should do this', async () => { - expect(true).toBe(true) - }) -}) diff --git a/storeagentai/src/services/onboarding.ts b/storeagentai/src/services/onboarding.ts deleted file mode 100644 index 921fdb85..00000000 --- a/storeagentai/src/services/onboarding.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { TransactionBaseService } from "@medusajs/medusa"; -import OnboardingRepository from "../repositories/onboarding"; -import { OnboardingState } from "../models/onboarding"; -import { EntityManager, IsNull, Not } from "typeorm"; -import { UpdateOnboardingStateInput } from "../types/onboarding"; - -type InjectedDependencies = { - manager: EntityManager; - onboardingRepository: typeof OnboardingRepository; -}; - -class OnboardingService extends TransactionBaseService { - protected onboardingRepository_: typeof OnboardingRepository; - - constructor({ onboardingRepository }: InjectedDependencies) { - super(arguments[0]); - - this.onboardingRepository_ = onboardingRepository; - } - - async retrieve(): Promise { - const onboardingRepo = this.activeManager_.withRepository( - this.onboardingRepository_ - ); - - const status = await onboardingRepo.findOne({ - where: { id: Not(IsNull()) }, - }); - - return status; - } - - async update(data: UpdateOnboardingStateInput): Promise { - return await this.atomicPhase_( - async (transactionManager: EntityManager) => { - const onboardingRepository = transactionManager.withRepository( - this.onboardingRepository_ - ); - - const status = await this.retrieve(); - - for (const [key, value] of Object.entries(data)) { - status[key] = value; - } - - return await onboardingRepository.save(status); - } - ); - } -} - -export default OnboardingService; diff --git a/storeagentai/src/subscribers/README.md b/storeagentai/src/subscribers/README.md deleted file mode 100644 index 1e4333fb..00000000 --- a/storeagentai/src/subscribers/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# Custom subscribers - -You may define custom eventhandlers, `subscribers` by creating files in the `/subscribers` directory. - -```ts -import MyCustomService from "../services/my-custom"; -import { - OrderService, - SubscriberArgs, - SubscriberConfig, -} from "@medusajs/medusa"; - -type OrderPlacedEvent = { - id: string; - no_notification: boolean; -}; - -export default async function orderPlacedHandler({ - data, - eventName, - container, -}: SubscriberArgs) { - const orderService: OrderService = container.resolve(OrderService); - - const order = await orderService.retrieve(data.id, { - relations: ["items", "items.variant", "items.variant.product"], - }); - - // Do something with the order -} - -export const config: SubscriberConfig = { - event: OrderService.Events.PLACED, -}; -``` - -A subscriber is defined in two parts a `handler` and a `config`. The `handler` is a function which is invoked when an event is emitted. The `config` is an object which defines which event(s) the subscriber should subscribe to. - -The `handler` is a function which takes one parameter, an `object` of type `SubscriberArgs` with the following properties: - -- `data` - an `object` of type `T` containing information about the event. -- `eventName` - a `string` containing the name of the event. -- `container` - a `MedusaContainer` instance which can be used to resolve services. -- `pluginOptions` - an `object` containing plugin options, if the subscriber is defined in a plugin. diff --git a/storeagentai/src/types/onboarding.ts b/storeagentai/src/types/onboarding.ts deleted file mode 100644 index d96d6ce1..00000000 --- a/storeagentai/src/types/onboarding.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { OnboardingState } from "../models/onboarding"; - -export type UpdateOnboardingStateInput = { - current_step?: string; - is_complete?: boolean; - product_id?: string; -}; - -export interface AdminOnboardingUpdateStateReq {} - -export type OnboardingStateRes = { - status: OnboardingState; -}; diff --git a/storeagentai/tsconfig.admin.json b/storeagentai/tsconfig.admin.json deleted file mode 100644 index b109ee6f..00000000 --- a/storeagentai/tsconfig.admin.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "module": "esnext" - }, - "include": ["src/admin"], - "exclude": ["**/*.spec.js"] -} diff --git a/storeagentai/tsconfig.json b/storeagentai/tsconfig.json deleted file mode 100644 index 05ae5139..00000000 --- a/storeagentai/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "compilerOptions": { - "target": "es2019", - "allowJs": true, - "esModuleInterop": true, - "module": "commonjs", - "moduleResolution": "node", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "skipLibCheck": true, - "skipDefaultLibCheck": true, - "declaration": true, - "sourceMap": false, - "outDir": "./dist", - "rootDir": "./src", - "baseUrl": ".", - "jsx": "react-jsx", - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "checkJs": false - }, - "include": ["src/"], - "exclude": [ - "**/__tests__", - "**/__fixtures__", - "node_modules", - "build", - ".cache" - ] -} diff --git a/storeagentai/tsconfig.server.json b/storeagentai/tsconfig.server.json deleted file mode 100644 index 94a32ac5..00000000 --- a/storeagentai/tsconfig.server.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - /* Emit a single file with source maps instead of having a separate file. */ - "inlineSourceMap": true - }, - "exclude": ["src/admin", "**/*.spec.js"] -} diff --git a/storeagentai/tsconfig.spec.json b/storeagentai/tsconfig.spec.json deleted file mode 100644 index 68764811..00000000 --- a/storeagentai/tsconfig.spec.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src"], - "exclude": ["dist", "node_modules"] -} From d0b5fda1629798f4eb1da7f5779e12e59fb56a38 Mon Sep 17 00:00:00 2001 From: netpoe Date: Mon, 8 Apr 2024 09:59:05 -0600 Subject: [PATCH 19/57] feat: Lease721 theming --- .../chat/dropbox-chat/DropboxChat.module.scss | 6 +- .../dropbox-chat/DropboxChat.module.scss.d.ts | 1 + .../context/theme/ThemeContextController.tsx | 4 +- app/src/theme/globals.scss | 1 + app/src/theme/variants/_lease-721.scss | 137 ++++++++++++++++++ app/src/ui/dropzone/_mixins.scss | 2 +- .../MessageTextType.module.scss.d.ts | 3 + app/src/ui/fileagent/navbar/Navbar.tsx | 6 +- app/src/ui/fileagent/navbar/_variables.scss | 2 +- app/src/ui/icons/Lease721Logo.tsx | 17 +++ .../ui/theme-selector/ThemeSelector.types.ts | 2 +- 11 files changed, 170 insertions(+), 11 deletions(-) create mode 100644 app/src/theme/variants/_lease-721.scss create mode 100644 app/src/ui/icons/Lease721Logo.tsx diff --git a/app/src/app/chat/dropbox-chat/DropboxChat.module.scss b/app/src/app/chat/dropbox-chat/DropboxChat.module.scss index 1540d681..302b60c2 100644 --- a/app/src/app/chat/dropbox-chat/DropboxChat.module.scss +++ b/app/src/app/chat/dropbox-chat/DropboxChat.module.scss @@ -12,7 +12,7 @@ position: relative; display: block; height: 100vh; - padding-top: $navbar-height * 1.5; + padding-top: $navbar-height; padding-left: $navbar-height * 1.5; background-color: var(--color-background); @@ -35,7 +35,7 @@ padding: $space-default; padding-bottom: $space-l; padding-left: $navbar-height; - background-color: white; + background-color: var(--color-secondary); } &--actions { @@ -97,7 +97,7 @@ padding-top: $navbar-height; padding-bottom: 280px; overflow-y: scroll; - background-color: white; + background-color: var(--color-secondary); &--item { border-bottom: 1px solid var(--color-horizontal-line-background); diff --git a/app/src/app/chat/dropbox-chat/DropboxChat.module.scss.d.ts b/app/src/app/chat/dropbox-chat/DropboxChat.module.scss.d.ts index 4818f6d0..d9342509 100644 --- a/app/src/app/chat/dropbox-chat/DropboxChat.module.scss.d.ts +++ b/app/src/app/chat/dropbox-chat/DropboxChat.module.scss.d.ts @@ -7,6 +7,7 @@ export type Styles = { "dropbox-chat__textarea--card": string; "dropbox-chat__textarea--card-actions": string; "dropbox-chat__textarea--card-actions-button": string; + "dropbox-chat__textarea--card-content": string; "dropbox-chat__textarea--card-field": string; "z-depth-0": string; "z-depth-1": string; diff --git a/app/src/context/theme/ThemeContextController.tsx b/app/src/context/theme/ThemeContextController.tsx index 1ae52fff..5c32baed 100644 --- a/app/src/context/theme/ThemeContextController.tsx +++ b/app/src/context/theme/ThemeContextController.tsx @@ -7,10 +7,10 @@ import { LocalStorageKeys } from "hooks/useLocalStorage/useLocalStorage.types"; import { ThemeContext } from "./ThemeContext"; import { ThemeContextControllerProps } from "./ThemeContext.types"; -const themes: Theme[] = ["fileagent", "fileagent-dark", "yipiti-light", "yipiti-dark"]; +const themes: Theme[] = ["fileagent", "fileagent-dark", "yipiti-light", "yipiti-dark", "lease-721"]; export const ThemeContextController = ({ children }: ThemeContextControllerProps) => { - const [theme, setTheme] = useState("yipiti-light"); + const [theme, setTheme] = useState("lease-721"); const localStorage = useLocalStorage(); diff --git a/app/src/theme/globals.scss b/app/src/theme/globals.scss index f56fcfae..1136900f 100644 --- a/app/src/theme/globals.scss +++ b/app/src/theme/globals.scss @@ -54,3 +54,4 @@ code { @import "src/theme/variants/fileagent"; @import "src/theme/variants/fileagent-dark"; @import "src/theme/variants/yipiti-light"; +@import "src/theme/variants/lease-721"; diff --git a/app/src/theme/variants/_lease-721.scss b/app/src/theme/variants/_lease-721.scss new file mode 100644 index 00000000..ed6f01aa --- /dev/null +++ b/app/src/theme/variants/_lease-721.scss @@ -0,0 +1,137 @@ +body[data-theme="lease-721"] { + // Status colors + --color-status-info: #5356fc; + --color-status-info-light: rgba(83, 86, 252, 0.7); + --color-status-info-lighter: rgba(83, 86, 252, 0.4); + --color-status-success: #3dd598; + --color-status-success-light: #d6fff5; + --color-status-success-lighter: #e6fff9; + --color-status-warning: rgb(255, 215, 75); + --color-status-warning-light: #fffdb8; + --color-status-warning-lighter: #fffeeb; + --color-status-critical: #bd2d00; + --color-status-critical-light: #ffe2e0; + --color-status-critical-lighter: #fff5f5; + --color-status-unknown: #f4f6f8; + + //Gray dark + --color-white: #fff; + --color-black: #161b1c; + --color-dark-11: #222529; + --color-dark-10: #2c3035; + --color-dark-9: #2c3035; + --color-dark-8: #40404a; + --color-dark-7: #5b5b65; + --color-dark-6: #70707c; + --color-dark-5: #8a8a98; + --color-dark-4: #a9a9b7; + --color-dark-3: #d0d0da; + --color-dark-2: #f5f5ff; + --color-dark-1: #ffffff; + + // Brand + --color-primary: #fff; + --color-primary-shade-mid: #f0f0f0; + --color-primary-shade-low: #c1c1c1; + --color-secondary: #242463; + --color-secondary-shade-mid: #1e1e51; + --color-secondary-shade-low: #141437; + + // Background + --color-background: #0e0c1c; + --color-background-contrast: #000; + + // Sidebar + --color-sidebar-item: var(--color-white); + --color-sidebar-divider: var(--color-dark-8); + + // Navbar + --color-navbar-logo: var(--color-primary); + --color-navbar-background: #0e0c1c; + + // Button + --color-button-primary: var(--color-primary); + --color-button-primary-text: var(--color-background); + --color-button-primary-hover: var(--color-primary); + --color-button-primary-hover-text: var(--color-background); + --color-button-primary-disabled: var(--color-dark-5); + --color-button-secondary: var(--color-white); + --color-button-secondary-text: var(--color-white); + --color-button-secondary-hover: var(--color-dark-10); + --color-button-secondary-hover-text: var(--color-white); + --color-button-status-critical: var(--color-status-critical); + --color-button-status-critical-text: var(--color-status-critical); + --color-button-status-critical-hover: var(--color-status-critical); + --color-button-status-critical-hover-text: var(--color-white); + + // Button outlined + --color-button-outlined-info: #ffd74b; + --color-button-outlined-info-text: #ffd74b; + --color-button-outlined-disabled: #5b5b65; + --color-button-outlined-disabled-text: #8a8a98; + + //Theme Selector + --color-theme-button-light: #ffffff00; + --color-theme-button-dark: #ffffff40; + --color-theme-button-divider: var(--color-background-contrast); + + // Typography + --color-typography-headline-1: var(--color-white); + --color-typography-headline-2: var(--color-white); + --color-typography-headline-3: var(--color-white); + --color-typography-headline-4: var(--color-white); + --color-typography-headline-5: var(--color-white); + --color-typography-headline-6: var(--color-white); + --color-typography-text: var(--color-white); + --color-typography-text-bold: var(--color-white); + --color-typography-subtitle: var(--color-dark-5); + --color-typography-button-label: var(--color-white); + --color-typography-mini-button-label: var(--color-white); + --color-typography-description: var(--color-dark-9); + --color-typography-mini-description: var(--color-dark-8); + --color-typography-link: var(--color-primary); + + // Tab + --color-tab-navigation-border: var(--color-dark-7); + --color-tab-item-default: var(--color-dark-7); + --color-tab-item-active: var(--color-white); + + // Market Card + --color-market-card-background: var(--color-background); + --color-market-card-background-contrast: var(--color-background); + --color-market-card-title: #fff; + --color-market-card-stat: #b1b1b1; + + // Market Fees Card + --color-market-fees-card-background: #ffd74b; + --color-market-fees-card-text: #fff; + + // Horizontal Line + --color-horizontal-line-background: var(--color-background-contrast); + + // Data Visualization colors + --color-value-increase: #00d3a1; + --color-value-increase-bright: #00bb8e; + --color-value-decrease: #ff7c35; + --color-value-decrease-bright: #e76823; + + // Forms + --color-input-text: var(--color-background); + --color-input-text-disabled: var(--color-typography-description); + --color-input-background: white; + --color-input-background-disabled: var(--color-background-contrast); + --color-input-border: var(--color-black); + --color-input-label: rgba(255, 255, 255, 0.7); + --color-input-placeholder: var(--color-typography-description); + + // Dropzone + --color-dropzone-border: var(--color-typography-description); + --color-dropzone-border-hover: var(--color-primary); + + // Chat Sidebar + --color-chat-sidebar-background: var(--color-background-contrast); + --color-chat-sidebar-background-hover: var(--color-background); + + // Table + --color-table-background: var(--color-background-contrast); +} diff --git a/app/src/ui/dropzone/_mixins.scss b/app/src/ui/dropzone/_mixins.scss index d40ab43c..3784530c 100644 --- a/app/src/ui/dropzone/_mixins.scss +++ b/app/src/ui/dropzone/_mixins.scss @@ -16,7 +16,7 @@ } &--assistant { - color: var(--color-secondary); + color: var(--color-primary); } } } diff --git a/app/src/ui/dropzone/message-text-type/MessageTextType.module.scss.d.ts b/app/src/ui/dropzone/message-text-type/MessageTextType.module.scss.d.ts index 42923256..5d03de4c 100644 --- a/app/src/ui/dropzone/message-text-type/MessageTextType.module.scss.d.ts +++ b/app/src/ui/dropzone/message-text-type/MessageTextType.module.scss.d.ts @@ -6,6 +6,9 @@ export type Styles = { "message-text-type__loading-spinner": string; "message-text-type__options": string; "message-text-type__options--dropbox-button": string; + "message-text-type__role-text": string; + "message-text-type__role-text--assistant": string; + "message-text-type__role-text--user": string; "message-text-type__static-options": string; "z-depth-0": string; "z-depth-1": string; diff --git a/app/src/ui/fileagent/navbar/Navbar.tsx b/app/src/ui/fileagent/navbar/Navbar.tsx index 8d1516f8..e3137964 100644 --- a/app/src/ui/fileagent/navbar/Navbar.tsx +++ b/app/src/ui/fileagent/navbar/Navbar.tsx @@ -2,8 +2,8 @@ import clsx from "clsx"; import { Typography } from "ui/typography/Typography"; import { Grid } from "ui/grid/Grid"; -import { FileAgentLogo } from "ui/icons/FileAgentLogo"; import { useThemeContext } from "context/theme/useThemeContext"; +import { Lease721Logo } from "ui/icons/Lease721Logo"; import { NavbarProps } from "./Navbar.types"; import styles from "./Navbar.module.scss"; @@ -20,12 +20,12 @@ export const Navbar: React.FC = ({ className }) => {
    - +
    - +
    diff --git a/app/src/ui/fileagent/navbar/_variables.scss b/app/src/ui/fileagent/navbar/_variables.scss index c213c03c..0882ff7b 100644 --- a/app/src/ui/fileagent/navbar/_variables.scss +++ b/app/src/ui/fileagent/navbar/_variables.scss @@ -1,4 +1,4 @@ -$navbar-height: 56px; +$navbar-height: 70px; $navbar-height-mobile: 42px; $navbar-logo-width: 124px; $navbar-logo-width-mobile: 89px; diff --git a/app/src/ui/icons/Lease721Logo.tsx b/app/src/ui/icons/Lease721Logo.tsx new file mode 100644 index 00000000..30a103a0 --- /dev/null +++ b/app/src/ui/icons/Lease721Logo.tsx @@ -0,0 +1,17 @@ +import { Theme } from "ui/theme-selector/ThemeSelector.types"; + +export const Lease721Logo = ({ className, theme }: { className?: string; theme: Theme }) => ( + + + +); diff --git a/app/src/ui/theme-selector/ThemeSelector.types.ts b/app/src/ui/theme-selector/ThemeSelector.types.ts index 3a05df34..855e0534 100644 --- a/app/src/ui/theme-selector/ThemeSelector.types.ts +++ b/app/src/ui/theme-selector/ThemeSelector.types.ts @@ -6,4 +6,4 @@ export type ThemeSelectorProps = { fixed?: boolean; }; -export type Theme = "fileagent" | "fileagent-dark" | "yipiti-light" | "yipiti-dark"; +export type Theme = "fileagent" | "fileagent-dark" | "yipiti-light" | "yipiti-dark" | "lease-721"; From bb07eb442e55f6432c746bd9ff516f9ebfe066fd Mon Sep 17 00:00:00 2001 From: netpoe Date: Mon, 8 Apr 2024 10:30:31 -0600 Subject: [PATCH 20/57] feat(WalletSelector): EVMWalletSelectorContextController --- app/package.json | 6 + .../EvmWalletSelectorContext.tsx | 5 + .../EvmWalletSelectorContext.types.ts | 7 + .../EvmWalletSelectorContextController.tsx | 50 + .../useEvmWalletSelectorContext.tsx | 13 + app/src/layouts/chat-layout/ChatLayout.tsx | 43 +- app/src/pages/index.tsx | 2 +- app/src/ui/fileagent/navbar/Navbar.tsx | 5 +- .../WalletSelector.module.scss | 6 +- app/src/ui/wallet-selector/WalletSelector.tsx | 86 +- .../wallet-selector/WalletSelectorMobile.tsx | 36 +- app/yarn.lock | 2328 ++++++++++++++++- 12 files changed, 2427 insertions(+), 160 deletions(-) create mode 100644 app/src/context/evm/wallet-selector/EvmWalletSelectorContext.tsx create mode 100644 app/src/context/evm/wallet-selector/EvmWalletSelectorContext.types.ts create mode 100644 app/src/context/evm/wallet-selector/EvmWalletSelectorContextController.tsx create mode 100644 app/src/context/evm/wallet-selector/useEvmWalletSelectorContext.tsx diff --git a/app/package.json b/app/package.json index 516cd83b..d5b91e51 100644 --- a/app/package.json +++ b/app/package.json @@ -39,7 +39,10 @@ "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.0", "@supabase/supabase-js": "^2.33.1", + "@tanstack/react-query": "^5.29.0", "@types/js-cookie": "^3.0.3", + "@web3modal/siwe": "^4.1.5", + "@web3modal/wagmi": "^4.1.5", "ag-grid-community": "^27.3.0", "ag-grid-react": "^27.3.0", "axios": "^1.5.0", @@ -76,10 +79,13 @@ "react-transition-group": "^4.4.1", "replicate": "^0.12.3", "rxjs": "^7.8.1", + "siwe": "^2.1.4", "square": "^30.0.0", "tailwind-merge": "^1.14.0", "tailwindcss-animate": "^1.0.7", "uuid": "^9.0.0", + "viem": "^2.9.13", + "wagmi": "^2.5.19", "winston": "^3.9.0", "ws": "^8.13.0" }, diff --git a/app/src/context/evm/wallet-selector/EvmWalletSelectorContext.tsx b/app/src/context/evm/wallet-selector/EvmWalletSelectorContext.tsx new file mode 100644 index 00000000..6ee53c55 --- /dev/null +++ b/app/src/context/evm/wallet-selector/EvmWalletSelectorContext.tsx @@ -0,0 +1,5 @@ +import { createContext } from "react"; + +import { EvmWalletSelectorContextType } from "./EvmWalletSelectorContext.types"; + +export const EvmWalletSelectorContext = createContext(undefined); diff --git a/app/src/context/evm/wallet-selector/EvmWalletSelectorContext.types.ts b/app/src/context/evm/wallet-selector/EvmWalletSelectorContext.types.ts new file mode 100644 index 00000000..9c6efd87 --- /dev/null +++ b/app/src/context/evm/wallet-selector/EvmWalletSelectorContext.types.ts @@ -0,0 +1,7 @@ +import { ReactNode } from "react"; + +export type EvmWalletSelectorContextControllerProps = { + children: ReactNode; +}; + +export type EvmWalletSelectorContextType = unknown; diff --git a/app/src/context/evm/wallet-selector/EvmWalletSelectorContextController.tsx b/app/src/context/evm/wallet-selector/EvmWalletSelectorContextController.tsx new file mode 100644 index 00000000..3d08cbc3 --- /dev/null +++ b/app/src/context/evm/wallet-selector/EvmWalletSelectorContextController.tsx @@ -0,0 +1,50 @@ +import React from "react"; +import { defaultWagmiConfig } from "@web3modal/wagmi/react/config"; +import { createWeb3Modal } from "@web3modal/wagmi/react"; +import { WagmiProvider, cookieStorage, createStorage } from "wagmi"; +import { mainnet, sepolia } from "wagmi/chains"; + +import { EvmWalletSelectorContext } from "./EvmWalletSelectorContext"; +import { + EvmWalletSelectorContextControllerProps, + EvmWalletSelectorContextType, +} from "./EvmWalletSelectorContext.types"; + +const projectId = process.env.NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID; + +if (!projectId) { + throw new Error("No WalletConnect Project Id found"); +} + +const metadata = { + name: "Web3Modal", + description: "Web3Modal Example", + url: "https://web3modal.com", + icons: ["https://avatars.githubusercontent.com/u/37784886"], +}; + +const chains = [mainnet, sepolia] as const; +const wagmiConfig = defaultWagmiConfig({ + chains, + projectId, + metadata, + ssr: true, + storage: createStorage({ + storage: cookieStorage, + }), +}); + +createWeb3Modal({ + wagmiConfig, + projectId, +}); + +export const EvmWalletSelectorContextController = ({ children }: EvmWalletSelectorContextControllerProps) => { + const props: EvmWalletSelectorContextType = {}; + + return ( + + {children} + + ); +}; diff --git a/app/src/context/evm/wallet-selector/useEvmWalletSelectorContext.tsx b/app/src/context/evm/wallet-selector/useEvmWalletSelectorContext.tsx new file mode 100644 index 00000000..133648b9 --- /dev/null +++ b/app/src/context/evm/wallet-selector/useEvmWalletSelectorContext.tsx @@ -0,0 +1,13 @@ +import { useContext } from "react"; + +import { EvmWalletSelectorContext } from "./EvmWalletSelectorContext"; + +export const useEvmWalletSelectorContext = () => { + const context = useContext(EvmWalletSelectorContext); + + if (context === undefined) { + throw new Error("useEvmWalletSelectorContext must be used within a EvmWalletSelectorContext"); + } + + return context; +}; diff --git a/app/src/layouts/chat-layout/ChatLayout.tsx b/app/src/layouts/chat-layout/ChatLayout.tsx index 3186a314..85d2d0d6 100644 --- a/app/src/layouts/chat-layout/ChatLayout.tsx +++ b/app/src/layouts/chat-layout/ChatLayout.tsx @@ -12,6 +12,7 @@ import { AuthorizationContextController } from "context/authorization/Authorizat import { ThemeContextController } from "context/theme/ThemeContextController"; import { ChatSidebarContextController } from "context/chat-sidebar/ChatSidebarContextController"; import { Sheet } from "ui/shadcn/sheet/Sheet"; +import { EvmWalletSelectorContextController } from "context/evm/wallet-selector/EvmWalletSelectorContextController"; import { ChatLayoutProps } from "./ChatLayout.types"; import styles from "./ChatLayout.module.scss"; @@ -30,27 +31,29 @@ export const ChatLayout: React.FC = ({ children }) => { - - - - - - -
    ); -const Headline4: React.FC = ({ children, className, inline, ...props }) => ( -

    +const Headline4: React.FC = ({ children, className, inline, flat, ...props }) => ( +

    {children}

    ); diff --git a/app/src/ui/typography/_mixins.scss b/app/src/ui/typography/_mixins.scss index d879870d..3c538307 100644 --- a/app/src/ui/typography/_mixins.scss +++ b/app/src/ui/typography/_mixins.scss @@ -36,14 +36,12 @@ @mixin headline5 { @include font-properties($typography-headline-5); @include normalizeTypography; - margin-top: $space-default; margin-bottom: $space-default; color: var(--color-typography-headline-5); } @mixin headline6 { @include font-properties($typography-headline-6); @include normalizeTypography; - margin-top: $space-default; margin-bottom: $space-default; color: var(--color-typography-headline-6); } diff --git a/app/yarn.lock b/app/yarn.lock index 24db0b53..834dcc16 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -7,6 +7,11 @@ resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + "@babel/code-frame@^7.0.0": version "7.24.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" @@ -1365,6 +1370,11 @@ dependencies: undici-types "~5.26.4" +"@types/node@18.15.13": + version "18.15.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" + integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== + "@types/node@^14.14.35": version "14.18.63" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.63.tgz#1788fa8da838dbb5f9ea994b834278205db6ca2b" @@ -1911,6 +1921,11 @@ acorn@^8.11.3: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== + ag-grid-community@^27.3.0: version "27.3.0" resolved "https://registry.yarnpkg.com/ag-grid-community/-/ag-grid-community-27.3.0.tgz#b1e94a58026aaf2f0cd7920e35833325b5e762c7" @@ -3519,6 +3534,19 @@ ethereum-cryptography@^2.0.0: "@scure/bip32" "1.3.3" "@scure/bip39" "1.2.2" +ethers@^6.12.0: + version "6.12.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.12.0.tgz#b0c2ce207ae5a3b5125be966e32ffea7c1f2481a" + integrity sha512-zL5NlOTjML239gIvtVJuaSk0N9GQLi1Hom3ZWUszE5lDTQE/IVB62mrPkQ2W1bGcZwVGSLaetQbWNQSvI4rGDQ== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "18.15.13" + aes-js "4.0.0-beta.5" + tslib "2.4.0" + ws "8.5.0" + eventemitter2@^6.4.5, eventemitter2@^6.4.7: version "6.4.9" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125" @@ -7476,6 +7504,11 @@ tslib@1.14.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" @@ -8034,6 +8067,11 @@ ws@8.13.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== +ws@8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + ws@^7.5.1: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" From 320781c73d5ab543a014dfa998268fbe9060e795 Mon Sep 17 00:00:00 2001 From: netpoe Date: Tue, 23 Apr 2024 23:39:02 -0600 Subject: [PATCH 50/57] feat: setTokenForSale WIP --- app/public/favicon.ico | Bin 3362 -> 393 bytes .../LarsKristoHellheads.tsx | 5 - .../details-modal/DetailsModal.tsx | 9 + hardhat/contracts/LarsKristoHellheads.sol | 69 +- .../contracts/LarsKristoHellheads__flat.sol | 1750 ----------------- hardhat/test/LarsKristoHellheads.ts | 68 +- 6 files changed, 135 insertions(+), 1766 deletions(-) delete mode 100644 hardhat/contracts/LarsKristoHellheads__flat.sol diff --git a/app/public/favicon.ico b/app/public/favicon.ico index abdee92745186fa5836c506a6ad52ec1e4e0b064..50a7bcc83335eeb5c0c985976db82b72f07a20e4 100644 GIT binary patch literal 393 zcmV;40e1e0P)_f~Rk;l^J!R|4BB-Is0~uYnU+2{Ki2k3z={2T8f-U|8f5g;C(3hNm nsB(^}(cz@QwI@(06h`m^z&V3e`d4y300000NkvXXu0mjfD@&m4 literal 3362 zcmb`K3sh8f9>@Qrt$SKaPnKy1@HJaxf-ry#q+r1Cni-hkG0bpbW?*0jqeX!Q!%*-M z`G83Ak#=x3bK_*WS(|P%jyji_``hmwB&(Cjp2OvQ<_~x7 z{eS-7|NQ>{J22*fpXpPX_{zrL&)8(fm=Bl^q(D3`9#!KRoAiev+$ZpIILK4}UBt{* zA=ZZ|{s|(*lSE2iqQtpGYAO9&G51J~uh-<98IKI#GOF#Rg|kjk9NY=;D&`QW{NVO? zyD2${9Gc)8CnKLMn)17`_l&CeR%bV2d>oVjuTu0Pb5a12CXgs)9#Lutkv5dBXhOc& zC3|dcdy;I_hj1?9j|ZGeKf&$Ae2bag?lc)udKi&zKDjc&T|FsbJI^TR-8b3;c-7By zPH&v=2TpaM@S_)*N%s^{#sVTPf+*{0x|#X(KvRrV3%|!`j)4jnvc17GXPlG!Zs=77 zo*&ePUUTW@54iLT23%akfD2xiF>1hRk`HugBR*Ii^tk6}`okxUXM2KYh+W=mkC^Rs zBHB-Ci}Ve(NBPO@(f%^KJV0iTk;?3GL9)h3|6uKmDdVZs%&5cyo&k#)6_qe5ehySH zDy(2v427&tCTFuAcyOdc_1GLNnSUs1ZkbK)4+6?;vC=YITu_-UKDf-55K?AS%F67j zu(BrA{O6if3(M`QNVM|uCRKcSlTraxOZUelQI>Sq zaqJBB3HV;Spqz@;Px%-W>1ba}`d9CDF-S)lS}$ir;lkM;_ik73rBR-Af!GTF_}?4@WygA4P>1C^jPe^~jw8xV zAhIZl@)L;`X+Rp#;qOdfBC_TJE3PR3i;40|KpE~^23CNT2%OomSjGJpZ+b3h)Pi@={i5xk}Fm4gZ* za}`((UL?xd0P5(vq3+seNfjGk4$)7p3FhuN1|ni_Mh8Y-%})4cD03>DKh120J0H&B z%*AjoB_Z#2W-`A3_c~Au_eQXVD0@5c#_faW)YY$62WlTWr`~kOF+A%xb8K5`)C%63 zHb{#&_>DuEEf#p6fv*t!B6F^oc@0<#YTTJAXEVIpNHFaHJBduM5pQ_SaW<*8PU#i+ z`+x@}zdDBMkSAD0pzqX+oMxY3HTB_h2KjwtdA5)8mVgqlw2yM1?;~?1SOu#4C}({i zW!Lucrn;+xrg|r3?|`!b>;`*@jE!jDCO+$}Yo8}>Nr(K7``B@{oY_@z69r4QH);$N zc%#O=DX$omf^u)lUG7chmEZ-i&YN;-yno=Tr|$_jhPA4eRbJz^^^j=~yl;SgU_W@5 z1j9k#)^H$Qphmx;LiYiO)mBta}`(v)-u!@ zbD3UZy}D}g_A#xhHEGwg_IyXiw}}h~;Qc$=e_$_fB1eYZaV&Oo&aycf;D*{SMpZYrP%=**hS55Moa$1S{0j?IWpgOikT_v2sjS^Nj%d&p&!zYcGXHt zLq_6XAFP=8P5Sc3+EXed?a7s3HK+#b!3IgYrcTnX-Xv*H+6uNyI+7YB$6{ZKzpUMV zO33=>P-d=KAg%?^)HZO2`qNsjHbw4A8Hs;axNi1EZDn(RX3e+#TwQlRR}Z#!_h;+? z4PbY7zy9^^eqAHj*Zm*e-@fHJ+klWMW^RW6BX?%vPQ(2<_=2vcwp~6DzFjpEzyBn! zdrvA$mk%1Z@#J31;+lFL^^7%Td<%8;4!B)k)90&v z7rP7PZeu9*i(*@3oaguY`cH<|)L&80Z=$ZSrVQ_bgFvjW55ZA5k(v8x=Ckh1r2mpg z-$^e0SM;UwaDBwX^TyoGJ^a3YR;Wjda#evNYp-KyP5m-6<~s9MePy=7e+r0mjm&yv zhEvQ<`YyVh(st%AAshS>AB`UF{;ut6sfN`C8y>opw)2qiv&=(lYA7@6i$i^JpTYI> z%%XQt*D=_uX*s@s!7EV^{@>rHsicK9hA&OLlD_ZKk85f;Gbet|$n37K3nb_}05Xf- z^bWo=@#xu4v({3>V?Kq+;a71jG2OVLo5={G=u?hW* gjRRwDV()eWqMN|Uhy;d = ({ className
    {item.name}
    -
    - -
    diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx index d4311b6a..65fac76a 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx @@ -8,12 +8,14 @@ import { Grid } from "ui/grid/Grid"; import { Card } from "ui/card/Card"; import { Button } from "ui/button/Button"; import { useLarskristoHellheadsContext } from "context/evm/larskristo-hellheads/useLarskristoHellheadsContext"; +import currency from "providers/currency"; import { DetailsModalProps } from "./DetailsModal.types"; import styles from "./DetailsModal.module.scss"; export const DetailsModal: React.FC = ({ onClose, className, item }) => { const [owner, setOwner] = useState<`0x${string}`>(); + const [usdPrice, setUsdPrice] = useState("0.00"); const { contractAddress, contractValues, ownerOf } = useLarskristoHellheadsContext(); const { data: ensName } = useEnsName({ address: owner }); @@ -25,6 +27,13 @@ export const DetailsModal: React.FC = ({ onClose, className, })(); }, [item.id]); + useEffect(() => { + (async () => { + const currentPrice = await currency.getCoinCurrentPrice("ethereum", "usd"); + console.log(currentPrice); + })(); + }, [item.id]); + return ( uint256) private _tokenPrices; + string[] tokenURIs = [ "QmbbdDACM5nkGqRG3cSmk8hYL46XWFkT8zvkbnrbcbSqa1", "QmcYmjn38SgzALqpPbF9CZW8cYAsXfJ1mhtwbgLzduyhg8", @@ -228,13 +233,59 @@ contract LarsKristoHellheads is ERC721 { constructor(string memory name_, string memory symbol_) ERC721(name_, symbol_) { for (uint i = 0; i < tokenURIs.length; i++) { _safeMint(owner, i); + _tokenPrices[i] = 0.5 ether; // initial token price + } + } + + // function buyToken(uint256 tokenId) public { + // _requireTokenPriceSet(tokenId); + // } + + /** + * @dev Retrieves the price of a token. + * @param tokenId The ID of the token. + * @return The price of the token. + */ + function getTokenPrice(uint256 tokenId) public view returns (uint256) { + return _tokenPrices[tokenId]; + } + + /** + * @dev Sets the token for sale with the specified price. + * + * Requirements: + * - The caller must be the owner of the token. + * + * @param tokenId The ID of the token to set for sale. + * @param price The price at which to sell the token. + */ + function setTokenForSale(address _owner, uint256 tokenId, uint256 price) public { + if (price <= 0) { + revert ERC721InvalidPrice(price); } + + _checkAuthorized(_owner, _msgSender(), tokenId); + + _tokenPrices[tokenId] = price; } + /** + * @dev Returns the base URI for token metadata. + * @return The base URI string. + */ function _baseURI() internal view virtual override returns (string memory) { return "https://blockchainassetregistry.infura-ipfs.io/ipfs/"; } + /** + * @dev Returns the URI for a given token ID. + * + * Requirements: + * - The caller must own the token. + * + * @param tokenId The ID of the token. + * @return The URI for the given token ID. + */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireOwned(tokenId); @@ -243,4 +294,20 @@ contract LarsKristoHellheads is ERC721 { return bytes(baseURI).length > 0 ? string.concat(baseURI, tokenURIhash) : ""; } + + /** + * @dev Checks if the caller is the owner of the specified token. + * @param tokenId The ID of the token to check ownership for. + * @return The address of the token owner. + * @dev Throws an error if the caller is not the owner of the token. + */ + function _requireTokenOwner(uint256 tokenId) internal view returns (address) { + address _owner = _requireOwned(tokenId); + + if (_owner == address(0) || _owner != _msgSender()) { + revert ERC721IncorrectOwner(_msgSender(), tokenId, _owner); + } + + return _owner; + } } diff --git a/hardhat/contracts/LarsKristoHellheads__flat.sol b/hardhat/contracts/LarsKristoHellheads__flat.sol deleted file mode 100644 index d0f91284..00000000 --- a/hardhat/contracts/LarsKristoHellheads__flat.sol +++ /dev/null @@ -1,1750 +0,0 @@ -// Sources flattened with hardhat v2.20.1 https://hardhat.org - -// SPDX-License-Identifier: MIT - -// File @openzeppelin/contracts/interfaces/draft-IERC6093.sol@v5.0.1 - -// Original license: SPDX_License_Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol) -pragma solidity ^0.8.20; - -/** - * @dev Standard ERC20 Errors - * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens. - */ -interface IERC20Errors { - /** - * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. - * @param sender Address whose tokens are being transferred. - * @param balance Current balance for the interacting account. - * @param needed Minimum amount required to perform a transfer. - */ - error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); - - /** - * @dev Indicates a failure with the token `sender`. Used in transfers. - * @param sender Address whose tokens are being transferred. - */ - error ERC20InvalidSender(address sender); - - /** - * @dev Indicates a failure with the token `receiver`. Used in transfers. - * @param receiver Address to which tokens are being transferred. - */ - error ERC20InvalidReceiver(address receiver); - - /** - * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. - * @param spender Address that may be allowed to operate on tokens without being their owner. - * @param allowance Amount of tokens a `spender` is allowed to operate with. - * @param needed Minimum amount required to perform a transfer. - */ - error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); - - /** - * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. - * @param approver Address initiating an approval operation. - */ - error ERC20InvalidApprover(address approver); - - /** - * @dev Indicates a failure with the `spender` to be approved. Used in approvals. - * @param spender Address that may be allowed to operate on tokens without being their owner. - */ - error ERC20InvalidSpender(address spender); -} - -/** - * @dev Standard ERC721 Errors - * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens. - */ -interface IERC721Errors { - /** - * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. - * Used in balance queries. - * @param owner Address of the current owner of a token. - */ - error ERC721InvalidOwner(address owner); - - /** - * @dev Indicates a `tokenId` whose `owner` is the zero address. - * @param tokenId Identifier number of a token. - */ - error ERC721NonexistentToken(uint256 tokenId); - - /** - * @dev Indicates an error related to the ownership over a particular token. Used in transfers. - * @param sender Address whose tokens are being transferred. - * @param tokenId Identifier number of a token. - * @param owner Address of the current owner of a token. - */ - error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); - - /** - * @dev Indicates a failure with the token `sender`. Used in transfers. - * @param sender Address whose tokens are being transferred. - */ - error ERC721InvalidSender(address sender); - - /** - * @dev Indicates a failure with the token `receiver`. Used in transfers. - * @param receiver Address to which tokens are being transferred. - */ - error ERC721InvalidReceiver(address receiver); - - /** - * @dev Indicates a failure with the `operator`’s approval. Used in transfers. - * @param operator Address that may be allowed to operate on tokens without being their owner. - * @param tokenId Identifier number of a token. - */ - error ERC721InsufficientApproval(address operator, uint256 tokenId); - - /** - * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. - * @param approver Address initiating an approval operation. - */ - error ERC721InvalidApprover(address approver); - - /** - * @dev Indicates a failure with the `operator` to be approved. Used in approvals. - * @param operator Address that may be allowed to operate on tokens without being their owner. - */ - error ERC721InvalidOperator(address operator); -} - -/** - * @dev Standard ERC1155 Errors - * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens. - */ -interface IERC1155Errors { - /** - * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. - * @param sender Address whose tokens are being transferred. - * @param balance Current balance for the interacting account. - * @param needed Minimum amount required to perform a transfer. - * @param tokenId Identifier number of a token. - */ - error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); - - /** - * @dev Indicates a failure with the token `sender`. Used in transfers. - * @param sender Address whose tokens are being transferred. - */ - error ERC1155InvalidSender(address sender); - - /** - * @dev Indicates a failure with the token `receiver`. Used in transfers. - * @param receiver Address to which tokens are being transferred. - */ - error ERC1155InvalidReceiver(address receiver); - - /** - * @dev Indicates a failure with the `operator`’s approval. Used in transfers. - * @param operator Address that may be allowed to operate on tokens without being their owner. - * @param owner Address of the current owner of a token. - */ - error ERC1155MissingApprovalForAll(address operator, address owner); - - /** - * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. - * @param approver Address initiating an approval operation. - */ - error ERC1155InvalidApprover(address approver); - - /** - * @dev Indicates a failure with the `operator` to be approved. Used in approvals. - * @param operator Address that may be allowed to operate on tokens without being their owner. - */ - error ERC1155InvalidOperator(address operator); - - /** - * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. - * Used in batch transfers. - * @param idsLength Length of the array of token identifiers - * @param valuesLength Length of the array of token amounts - */ - error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); -} - - -// File @openzeppelin/contracts/utils/introspection/IERC165.sol@v5.0.1 - -// Original license: SPDX_License_Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) - -pragma solidity ^0.8.20; - -/** - * @dev Interface of the ERC165 standard, as defined in the - * https://eips.ethereum.org/EIPS/eip-165[EIP]. - * - * Implementers can declare support of contract interfaces, which can then be - * queried by others ({ERC165Checker}). - * - * For an implementation, see {ERC165}. - */ -interface IERC165 { - /** - * @dev Returns true if this contract implements the interface defined by - * `interfaceId`. See the corresponding - * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] - * to learn more about how these ids are created. - * - * This function call must use less than 30 000 gas. - */ - function supportsInterface(bytes4 interfaceId) external view returns (bool); -} - - -// File @openzeppelin/contracts/token/ERC721/IERC721.sol@v5.0.1 - -// Original license: SPDX_License_Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol) - -pragma solidity ^0.8.20; - -/** - * @dev Required interface of an ERC721 compliant contract. - */ -interface IERC721 is IERC165 { - /** - * @dev Emitted when `tokenId` token is transferred from `from` to `to`. - */ - event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); - - /** - * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. - */ - event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); - - /** - * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. - */ - event ApprovalForAll(address indexed owner, address indexed operator, bool approved); - - /** - * @dev Returns the number of tokens in ``owner``'s account. - */ - function balanceOf(address owner) external view returns (uint256 balance); - - /** - * @dev Returns the owner of the `tokenId` token. - * - * Requirements: - * - * - `tokenId` must exist. - */ - function ownerOf(uint256 tokenId) external view returns (address owner); - - /** - * @dev Safely transfers `tokenId` token from `from` to `to`. - * - * Requirements: - * - * - `from` cannot be the zero address. - * - `to` cannot be the zero address. - * - `tokenId` token must exist and be owned by `from`. - * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon - * a safe transfer. - * - * Emits a {Transfer} event. - */ - function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; - - /** - * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients - * are aware of the ERC721 protocol to prevent tokens from being forever locked. - * - * Requirements: - * - * - `from` cannot be the zero address. - * - `to` cannot be the zero address. - * - `tokenId` token must exist and be owned by `from`. - * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or - * {setApprovalForAll}. - * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon - * a safe transfer. - * - * Emits a {Transfer} event. - */ - function safeTransferFrom(address from, address to, uint256 tokenId) external; - - /** - * @dev Transfers `tokenId` token from `from` to `to`. - * - * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 - * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must - * understand this adds an external call which potentially creates a reentrancy vulnerability. - * - * Requirements: - * - * - `from` cannot be the zero address. - * - `to` cannot be the zero address. - * - `tokenId` token must be owned by `from`. - * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - * - * Emits a {Transfer} event. - */ - function transferFrom(address from, address to, uint256 tokenId) external; - - /** - * @dev Gives permission to `to` to transfer `tokenId` token to another account. - * The approval is cleared when the token is transferred. - * - * Only a single account can be approved at a time, so approving the zero address clears previous approvals. - * - * Requirements: - * - * - The caller must own the token or be an approved operator. - * - `tokenId` must exist. - * - * Emits an {Approval} event. - */ - function approve(address to, uint256 tokenId) external; - - /** - * @dev Approve or remove `operator` as an operator for the caller. - * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. - * - * Requirements: - * - * - The `operator` cannot be the address zero. - * - * Emits an {ApprovalForAll} event. - */ - function setApprovalForAll(address operator, bool approved) external; - - /** - * @dev Returns the account approved for `tokenId` token. - * - * Requirements: - * - * - `tokenId` must exist. - */ - function getApproved(uint256 tokenId) external view returns (address operator); - - /** - * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. - * - * See {setApprovalForAll} - */ - function isApprovedForAll(address owner, address operator) external view returns (bool); -} - - -// File @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol@v5.0.1 - -// Original license: SPDX_License_Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol) - -pragma solidity ^0.8.20; - -/** - * @title ERC-721 Non-Fungible Token Standard, optional metadata extension - * @dev See https://eips.ethereum.org/EIPS/eip-721 - */ -interface IERC721Metadata is IERC721 { - /** - * @dev Returns the token collection name. - */ - function name() external view returns (string memory); - - /** - * @dev Returns the token collection symbol. - */ - function symbol() external view returns (string memory); - - /** - * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. - */ - function tokenURI(uint256 tokenId) external view returns (string memory); -} - - -// File @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol@v5.0.1 - -// Original license: SPDX_License_Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721Receiver.sol) - -pragma solidity ^0.8.20; - -/** - * @title ERC721 token receiver interface - * @dev Interface for any contract that wants to support safeTransfers - * from ERC721 asset contracts. - */ -interface IERC721Receiver { - /** - * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} - * by `operator` from `from`, this function is called. - * - * It must return its Solidity selector to confirm the token transfer. - * If any other value is returned or the interface is not implemented by the recipient, the transfer will be - * reverted. - * - * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. - */ - function onERC721Received( - address operator, - address from, - uint256 tokenId, - bytes calldata data - ) external returns (bytes4); -} - - -// File @openzeppelin/contracts/utils/Context.sol@v5.0.1 - -// Original license: SPDX_License_Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) - -pragma solidity ^0.8.20; - -/** - * @dev Provides information about the current execution context, including the - * sender of the transaction and its data. While these are generally available - * via msg.sender and msg.data, they should not be accessed in such a direct - * manner, since when dealing with meta-transactions the account sending and - * paying for execution may not be the actual sender (as far as an application - * is concerned). - * - * This contract is only required for intermediate, library-like contracts. - */ -abstract contract Context { - function _msgSender() internal view virtual returns (address) { - return msg.sender; - } - - function _msgData() internal view virtual returns (bytes calldata) { - return msg.data; - } - - function _contextSuffixLength() internal view virtual returns (uint256) { - return 0; - } -} - - -// File @openzeppelin/contracts/utils/introspection/ERC165.sol@v5.0.1 - -// Original license: SPDX_License_Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol) - -pragma solidity ^0.8.20; - -/** - * @dev Implementation of the {IERC165} interface. - * - * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check - * for the additional interface id that will be supported. For example: - * - * ```solidity - * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { - * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); - * } - * ``` - */ -abstract contract ERC165 is IERC165 { - /** - * @dev See {IERC165-supportsInterface}. - */ - function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { - return interfaceId == type(IERC165).interfaceId; - } -} - - -// File @openzeppelin/contracts/utils/math/Math.sol@v5.0.1 - -// Original license: SPDX_License_Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol) - -pragma solidity ^0.8.20; - -/** - * @dev Standard math utilities missing in the Solidity language. - */ -library Math { - /** - * @dev Muldiv operation overflow. - */ - error MathOverflowedMulDiv(); - - enum Rounding { - Floor, // Toward negative infinity - Ceil, // Toward positive infinity - Trunc, // Toward zero - Expand // Away from zero - } - - /** - * @dev Returns the addition of two unsigned integers, with an overflow flag. - */ - function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { - unchecked { - uint256 c = a + b; - if (c < a) return (false, 0); - return (true, c); - } - } - - /** - * @dev Returns the subtraction of two unsigned integers, with an overflow flag. - */ - function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { - unchecked { - if (b > a) return (false, 0); - return (true, a - b); - } - } - - /** - * @dev Returns the multiplication of two unsigned integers, with an overflow flag. - */ - function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { - unchecked { - // Gas optimization: this is cheaper than requiring 'a' not being zero, but the - // benefit is lost if 'b' is also tested. - // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 - if (a == 0) return (true, 0); - uint256 c = a * b; - if (c / a != b) return (false, 0); - return (true, c); - } - } - - /** - * @dev Returns the division of two unsigned integers, with a division by zero flag. - */ - function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { - unchecked { - if (b == 0) return (false, 0); - return (true, a / b); - } - } - - /** - * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. - */ - function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { - unchecked { - if (b == 0) return (false, 0); - return (true, a % b); - } - } - - /** - * @dev Returns the largest of two numbers. - */ - function max(uint256 a, uint256 b) internal pure returns (uint256) { - return a > b ? a : b; - } - - /** - * @dev Returns the smallest of two numbers. - */ - function min(uint256 a, uint256 b) internal pure returns (uint256) { - return a < b ? a : b; - } - - /** - * @dev Returns the average of two numbers. The result is rounded towards - * zero. - */ - function average(uint256 a, uint256 b) internal pure returns (uint256) { - // (a + b) / 2 can overflow. - return (a & b) + (a ^ b) / 2; - } - - /** - * @dev Returns the ceiling of the division of two numbers. - * - * This differs from standard division with `/` in that it rounds towards infinity instead - * of rounding towards zero. - */ - function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { - if (b == 0) { - // Guarantee the same behavior as in a regular Solidity division. - return a / b; - } - - // (a + b - 1) / b can overflow on addition, so we distribute. - return a == 0 ? 0 : (a - 1) / b + 1; - } - - /** - * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or - * denominator == 0. - * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by - * Uniswap Labs also under MIT license. - */ - function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { - unchecked { - // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use - // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 - // variables such that product = prod1 * 2^256 + prod0. - uint256 prod0 = x * y; // Least significant 256 bits of the product - uint256 prod1; // Most significant 256 bits of the product - assembly { - let mm := mulmod(x, y, not(0)) - prod1 := sub(sub(mm, prod0), lt(mm, prod0)) - } - - // Handle non-overflow cases, 256 by 256 division. - if (prod1 == 0) { - // Solidity will revert if denominator == 0, unlike the div opcode on its own. - // The surrounding unchecked block does not change this fact. - // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. - return prod0 / denominator; - } - - // Make sure the result is less than 2^256. Also prevents denominator == 0. - if (denominator <= prod1) { - revert MathOverflowedMulDiv(); - } - - /////////////////////////////////////////////// - // 512 by 256 division. - /////////////////////////////////////////////// - - // Make division exact by subtracting the remainder from [prod1 prod0]. - uint256 remainder; - assembly { - // Compute remainder using mulmod. - remainder := mulmod(x, y, denominator) - - // Subtract 256 bit number from 512 bit number. - prod1 := sub(prod1, gt(remainder, prod0)) - prod0 := sub(prod0, remainder) - } - - // Factor powers of two out of denominator and compute largest power of two divisor of denominator. - // Always >= 1. See https://cs.stackexchange.com/q/138556/92363. - - uint256 twos = denominator & (0 - denominator); - assembly { - // Divide denominator by twos. - denominator := div(denominator, twos) - - // Divide [prod1 prod0] by twos. - prod0 := div(prod0, twos) - - // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. - twos := add(div(sub(0, twos), twos), 1) - } - - // Shift in bits from prod1 into prod0. - prod0 |= prod1 * twos; - - // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such - // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for - // four bits. That is, denominator * inv = 1 mod 2^4. - uint256 inverse = (3 * denominator) ^ 2; - - // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also - // works in modular arithmetic, doubling the correct bits in each step. - inverse *= 2 - denominator * inverse; // inverse mod 2^8 - inverse *= 2 - denominator * inverse; // inverse mod 2^16 - inverse *= 2 - denominator * inverse; // inverse mod 2^32 - inverse *= 2 - denominator * inverse; // inverse mod 2^64 - inverse *= 2 - denominator * inverse; // inverse mod 2^128 - inverse *= 2 - denominator * inverse; // inverse mod 2^256 - - // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. - // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is - // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 - // is no longer required. - result = prod0 * inverse; - return result; - } - } - - /** - * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. - */ - function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { - uint256 result = mulDiv(x, y, denominator); - if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) { - result += 1; - } - return result; - } - - /** - * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded - * towards zero. - * - * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). - */ - function sqrt(uint256 a) internal pure returns (uint256) { - if (a == 0) { - return 0; - } - - // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. - // - // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have - // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. - // - // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` - // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` - // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` - // - // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. - uint256 result = 1 << (log2(a) >> 1); - - // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, - // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at - // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision - // into the expected uint128 result. - unchecked { - result = (result + a / result) >> 1; - result = (result + a / result) >> 1; - result = (result + a / result) >> 1; - result = (result + a / result) >> 1; - result = (result + a / result) >> 1; - result = (result + a / result) >> 1; - result = (result + a / result) >> 1; - return min(result, a / result); - } - } - - /** - * @notice Calculates sqrt(a), following the selected rounding direction. - */ - function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { - unchecked { - uint256 result = sqrt(a); - return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0); - } - } - - /** - * @dev Return the log in base 2 of a positive value rounded towards zero. - * Returns 0 if given 0. - */ - function log2(uint256 value) internal pure returns (uint256) { - uint256 result = 0; - unchecked { - if (value >> 128 > 0) { - value >>= 128; - result += 128; - } - if (value >> 64 > 0) { - value >>= 64; - result += 64; - } - if (value >> 32 > 0) { - value >>= 32; - result += 32; - } - if (value >> 16 > 0) { - value >>= 16; - result += 16; - } - if (value >> 8 > 0) { - value >>= 8; - result += 8; - } - if (value >> 4 > 0) { - value >>= 4; - result += 4; - } - if (value >> 2 > 0) { - value >>= 2; - result += 2; - } - if (value >> 1 > 0) { - result += 1; - } - } - return result; - } - - /** - * @dev Return the log in base 2, following the selected rounding direction, of a positive value. - * Returns 0 if given 0. - */ - function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { - unchecked { - uint256 result = log2(value); - return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0); - } - } - - /** - * @dev Return the log in base 10 of a positive value rounded towards zero. - * Returns 0 if given 0. - */ - function log10(uint256 value) internal pure returns (uint256) { - uint256 result = 0; - unchecked { - if (value >= 10 ** 64) { - value /= 10 ** 64; - result += 64; - } - if (value >= 10 ** 32) { - value /= 10 ** 32; - result += 32; - } - if (value >= 10 ** 16) { - value /= 10 ** 16; - result += 16; - } - if (value >= 10 ** 8) { - value /= 10 ** 8; - result += 8; - } - if (value >= 10 ** 4) { - value /= 10 ** 4; - result += 4; - } - if (value >= 10 ** 2) { - value /= 10 ** 2; - result += 2; - } - if (value >= 10 ** 1) { - result += 1; - } - } - return result; - } - - /** - * @dev Return the log in base 10, following the selected rounding direction, of a positive value. - * Returns 0 if given 0. - */ - function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { - unchecked { - uint256 result = log10(value); - return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0); - } - } - - /** - * @dev Return the log in base 256 of a positive value rounded towards zero. - * Returns 0 if given 0. - * - * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. - */ - function log256(uint256 value) internal pure returns (uint256) { - uint256 result = 0; - unchecked { - if (value >> 128 > 0) { - value >>= 128; - result += 16; - } - if (value >> 64 > 0) { - value >>= 64; - result += 8; - } - if (value >> 32 > 0) { - value >>= 32; - result += 4; - } - if (value >> 16 > 0) { - value >>= 16; - result += 2; - } - if (value >> 8 > 0) { - result += 1; - } - } - return result; - } - - /** - * @dev Return the log in base 256, following the selected rounding direction, of a positive value. - * Returns 0 if given 0. - */ - function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { - unchecked { - uint256 result = log256(value); - return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0); - } - } - - /** - * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers. - */ - function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) { - return uint8(rounding) % 2 == 1; - } -} - - -// File @openzeppelin/contracts/utils/math/SignedMath.sol@v5.0.1 - -// Original license: SPDX_License_Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol) - -pragma solidity ^0.8.20; - -/** - * @dev Standard signed math utilities missing in the Solidity language. - */ -library SignedMath { - /** - * @dev Returns the largest of two signed numbers. - */ - function max(int256 a, int256 b) internal pure returns (int256) { - return a > b ? a : b; - } - - /** - * @dev Returns the smallest of two signed numbers. - */ - function min(int256 a, int256 b) internal pure returns (int256) { - return a < b ? a : b; - } - - /** - * @dev Returns the average of two signed numbers without overflow. - * The result is rounded towards zero. - */ - function average(int256 a, int256 b) internal pure returns (int256) { - // Formula from the book "Hacker's Delight" - int256 x = (a & b) + ((a ^ b) >> 1); - return x + (int256(uint256(x) >> 255) & (a ^ b)); - } - - /** - * @dev Returns the absolute unsigned value of a signed value. - */ - function abs(int256 n) internal pure returns (uint256) { - unchecked { - // must be unchecked in order to support `n = type(int256).min` - return uint256(n >= 0 ? n : -n); - } - } -} - - -// File @openzeppelin/contracts/utils/Strings.sol@v5.0.1 - -// Original license: SPDX_License_Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol) - -pragma solidity ^0.8.20; - - -/** - * @dev String operations. - */ -library Strings { - bytes16 private constant HEX_DIGITS = "0123456789abcdef"; - uint8 private constant ADDRESS_LENGTH = 20; - - /** - * @dev The `value` string doesn't fit in the specified `length`. - */ - error StringsInsufficientHexLength(uint256 value, uint256 length); - - /** - * @dev Converts a `uint256` to its ASCII `string` decimal representation. - */ - function toString(uint256 value) internal pure returns (string memory) { - unchecked { - uint256 length = Math.log10(value) + 1; - string memory buffer = new string(length); - uint256 ptr; - /// @solidity memory-safe-assembly - assembly { - ptr := add(buffer, add(32, length)) - } - while (true) { - ptr--; - /// @solidity memory-safe-assembly - assembly { - mstore8(ptr, byte(mod(value, 10), HEX_DIGITS)) - } - value /= 10; - if (value == 0) break; - } - return buffer; - } - } - - /** - * @dev Converts a `int256` to its ASCII `string` decimal representation. - */ - function toStringSigned(int256 value) internal pure returns (string memory) { - return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value))); - } - - /** - * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. - */ - function toHexString(uint256 value) internal pure returns (string memory) { - unchecked { - return toHexString(value, Math.log256(value) + 1); - } - } - - /** - * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. - */ - function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { - uint256 localValue = value; - bytes memory buffer = new bytes(2 * length + 2); - buffer[0] = "0"; - buffer[1] = "x"; - for (uint256 i = 2 * length + 1; i > 1; --i) { - buffer[i] = HEX_DIGITS[localValue & 0xf]; - localValue >>= 4; - } - if (localValue != 0) { - revert StringsInsufficientHexLength(value, length); - } - return string(buffer); - } - - /** - * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal - * representation. - */ - function toHexString(address addr) internal pure returns (string memory) { - return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH); - } - - /** - * @dev Returns true if the two strings are equal. - */ - function equal(string memory a, string memory b) internal pure returns (bool) { - return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b)); - } -} - - -// File @openzeppelin/contracts/token/ERC721/ERC721.sol@v5.0.1 - -// Original license: SPDX_License_Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/ERC721.sol) - -pragma solidity ^0.8.20; - - - - - - - -/** - * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including - * the Metadata extension, but not including the Enumerable extension, which is available separately as - * {ERC721Enumerable}. - */ -abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Errors { - using Strings for uint256; - - // Token name - string private _name; - - // Token symbol - string private _symbol; - - mapping(uint256 tokenId => address) private _owners; - - mapping(address owner => uint256) private _balances; - - mapping(uint256 tokenId => address) private _tokenApprovals; - - mapping(address owner => mapping(address operator => bool)) private _operatorApprovals; - - /** - * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. - */ - constructor(string memory name_, string memory symbol_) { - _name = name_; - _symbol = symbol_; - } - - /** - * @dev See {IERC165-supportsInterface}. - */ - function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { - return - interfaceId == type(IERC721).interfaceId || - interfaceId == type(IERC721Metadata).interfaceId || - super.supportsInterface(interfaceId); - } - - /** - * @dev See {IERC721-balanceOf}. - */ - function balanceOf(address owner) public view virtual returns (uint256) { - if (owner == address(0)) { - revert ERC721InvalidOwner(address(0)); - } - return _balances[owner]; - } - - /** - * @dev See {IERC721-ownerOf}. - */ - function ownerOf(uint256 tokenId) public view virtual returns (address) { - return _requireOwned(tokenId); - } - - /** - * @dev See {IERC721Metadata-name}. - */ - function name() public view virtual returns (string memory) { - return _name; - } - - /** - * @dev See {IERC721Metadata-symbol}. - */ - function symbol() public view virtual returns (string memory) { - return _symbol; - } - - /** - * @dev See {IERC721Metadata-tokenURI}. - */ - function tokenURI(uint256 tokenId) public view virtual returns (string memory) { - _requireOwned(tokenId); - - string memory baseURI = _baseURI(); - return bytes(baseURI).length > 0 ? string.concat(baseURI, tokenId.toString()) : ""; - } - - /** - * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each - * token will be the concatenation of the `baseURI` and the `tokenId`. Empty - * by default, can be overridden in child contracts. - */ - function _baseURI() internal view virtual returns (string memory) { - return ""; - } - - /** - * @dev See {IERC721-approve}. - */ - function approve(address to, uint256 tokenId) public virtual { - _approve(to, tokenId, _msgSender()); - } - - /** - * @dev See {IERC721-getApproved}. - */ - function getApproved(uint256 tokenId) public view virtual returns (address) { - _requireOwned(tokenId); - - return _getApproved(tokenId); - } - - /** - * @dev See {IERC721-setApprovalForAll}. - */ - function setApprovalForAll(address operator, bool approved) public virtual { - _setApprovalForAll(_msgSender(), operator, approved); - } - - /** - * @dev See {IERC721-isApprovedForAll}. - */ - function isApprovedForAll(address owner, address operator) public view virtual returns (bool) { - return _operatorApprovals[owner][operator]; - } - - /** - * @dev See {IERC721-transferFrom}. - */ - function transferFrom(address from, address to, uint256 tokenId) public virtual { - if (to == address(0)) { - revert ERC721InvalidReceiver(address(0)); - } - // Setting an "auth" arguments enables the `_isAuthorized` check which verifies that the token exists - // (from != 0). Therefore, it is not needed to verify that the return value is not 0 here. - address previousOwner = _update(to, tokenId, _msgSender()); - if (previousOwner != from) { - revert ERC721IncorrectOwner(from, tokenId, previousOwner); - } - } - - /** - * @dev See {IERC721-safeTransferFrom}. - */ - function safeTransferFrom(address from, address to, uint256 tokenId) public { - safeTransferFrom(from, to, tokenId, ""); - } - - /** - * @dev See {IERC721-safeTransferFrom}. - */ - function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual { - transferFrom(from, to, tokenId); - _checkOnERC721Received(from, to, tokenId, data); - } - - /** - * @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist - * - * IMPORTANT: Any overrides to this function that add ownership of tokens not tracked by the - * core ERC721 logic MUST be matched with the use of {_increaseBalance} to keep balances - * consistent with ownership. The invariant to preserve is that for any address `a` the value returned by - * `balanceOf(a)` must be equal to the number of tokens such that `_ownerOf(tokenId)` is `a`. - */ - function _ownerOf(uint256 tokenId) internal view virtual returns (address) { - return _owners[tokenId]; - } - - /** - * @dev Returns the approved address for `tokenId`. Returns 0 if `tokenId` is not minted. - */ - function _getApproved(uint256 tokenId) internal view virtual returns (address) { - return _tokenApprovals[tokenId]; - } - - /** - * @dev Returns whether `spender` is allowed to manage `owner`'s tokens, or `tokenId` in - * particular (ignoring whether it is owned by `owner`). - * - * WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this - * assumption. - */ - function _isAuthorized(address owner, address spender, uint256 tokenId) internal view virtual returns (bool) { - return - spender != address(0) && - (owner == spender || isApprovedForAll(owner, spender) || _getApproved(tokenId) == spender); - } - - /** - * @dev Checks if `spender` can operate on `tokenId`, assuming the provided `owner` is the actual owner. - * Reverts if `spender` does not have approval from the provided `owner` for the given token or for all its assets - * the `spender` for the specific `tokenId`. - * - * WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this - * assumption. - */ - function _checkAuthorized(address owner, address spender, uint256 tokenId) internal view virtual { - if (!_isAuthorized(owner, spender, tokenId)) { - if (owner == address(0)) { - revert ERC721NonexistentToken(tokenId); - } else { - revert ERC721InsufficientApproval(spender, tokenId); - } - } - } - - /** - * @dev Unsafe write access to the balances, used by extensions that "mint" tokens using an {ownerOf} override. - * - * NOTE: the value is limited to type(uint128).max. This protect against _balance overflow. It is unrealistic that - * a uint256 would ever overflow from increments when these increments are bounded to uint128 values. - * - * WARNING: Increasing an account's balance using this function tends to be paired with an override of the - * {_ownerOf} function to resolve the ownership of the corresponding tokens so that balances and ownership - * remain consistent with one another. - */ - function _increaseBalance(address account, uint128 value) internal virtual { - unchecked { - _balances[account] += value; - } - } - - /** - * @dev Transfers `tokenId` from its current owner to `to`, or alternatively mints (or burns) if the current owner - * (or `to`) is the zero address. Returns the owner of the `tokenId` before the update. - * - * The `auth` argument is optional. If the value passed is non 0, then this function will check that - * `auth` is either the owner of the token, or approved to operate on the token (by the owner). - * - * Emits a {Transfer} event. - * - * NOTE: If overriding this function in a way that tracks balances, see also {_increaseBalance}. - */ - function _update(address to, uint256 tokenId, address auth) internal virtual returns (address) { - address from = _ownerOf(tokenId); - - // Perform (optional) operator check - if (auth != address(0)) { - _checkAuthorized(from, auth, tokenId); - } - - // Execute the update - if (from != address(0)) { - // Clear approval. No need to re-authorize or emit the Approval event - _approve(address(0), tokenId, address(0), false); - - unchecked { - _balances[from] -= 1; - } - } - - if (to != address(0)) { - unchecked { - _balances[to] += 1; - } - } - - _owners[tokenId] = to; - - emit Transfer(from, to, tokenId); - - return from; - } - - /** - * @dev Mints `tokenId` and transfers it to `to`. - * - * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible - * - * Requirements: - * - * - `tokenId` must not exist. - * - `to` cannot be the zero address. - * - * Emits a {Transfer} event. - */ - function _mint(address to, uint256 tokenId) internal { - if (to == address(0)) { - revert ERC721InvalidReceiver(address(0)); - } - address previousOwner = _update(to, tokenId, address(0)); - if (previousOwner != address(0)) { - revert ERC721InvalidSender(address(0)); - } - } - - /** - * @dev Mints `tokenId`, transfers it to `to` and checks for `to` acceptance. - * - * Requirements: - * - * - `tokenId` must not exist. - * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. - * - * Emits a {Transfer} event. - */ - function _safeMint(address to, uint256 tokenId) internal { - _safeMint(to, tokenId, ""); - } - - /** - * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is - * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. - */ - function _safeMint(address to, uint256 tokenId, bytes memory data) internal virtual { - _mint(to, tokenId); - _checkOnERC721Received(address(0), to, tokenId, data); - } - - /** - * @dev Destroys `tokenId`. - * The approval is cleared when the token is burned. - * This is an internal function that does not check if the sender is authorized to operate on the token. - * - * Requirements: - * - * - `tokenId` must exist. - * - * Emits a {Transfer} event. - */ - function _burn(uint256 tokenId) internal { - address previousOwner = _update(address(0), tokenId, address(0)); - if (previousOwner == address(0)) { - revert ERC721NonexistentToken(tokenId); - } - } - - /** - * @dev Transfers `tokenId` from `from` to `to`. - * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. - * - * Requirements: - * - * - `to` cannot be the zero address. - * - `tokenId` token must be owned by `from`. - * - * Emits a {Transfer} event. - */ - function _transfer(address from, address to, uint256 tokenId) internal { - if (to == address(0)) { - revert ERC721InvalidReceiver(address(0)); - } - address previousOwner = _update(to, tokenId, address(0)); - if (previousOwner == address(0)) { - revert ERC721NonexistentToken(tokenId); - } else if (previousOwner != from) { - revert ERC721IncorrectOwner(from, tokenId, previousOwner); - } - } - - /** - * @dev Safely transfers `tokenId` token from `from` to `to`, checking that contract recipients - * are aware of the ERC721 standard to prevent tokens from being forever locked. - * - * `data` is additional data, it has no specified format and it is sent in call to `to`. - * - * This internal function is like {safeTransferFrom} in the sense that it invokes - * {IERC721Receiver-onERC721Received} on the receiver, and can be used to e.g. - * implement alternative mechanisms to perform token transfer, such as signature-based. - * - * Requirements: - * - * - `tokenId` token must exist and be owned by `from`. - * - `to` cannot be the zero address. - * - `from` cannot be the zero address. - * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. - * - * Emits a {Transfer} event. - */ - function _safeTransfer(address from, address to, uint256 tokenId) internal { - _safeTransfer(from, to, tokenId, ""); - } - - /** - * @dev Same as {xref-ERC721-_safeTransfer-address-address-uint256-}[`_safeTransfer`], with an additional `data` parameter which is - * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. - */ - function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual { - _transfer(from, to, tokenId); - _checkOnERC721Received(from, to, tokenId, data); - } - - /** - * @dev Approve `to` to operate on `tokenId` - * - * The `auth` argument is optional. If the value passed is non 0, then this function will check that `auth` is - * either the owner of the token, or approved to operate on all tokens held by this owner. - * - * Emits an {Approval} event. - * - * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. - */ - function _approve(address to, uint256 tokenId, address auth) internal { - _approve(to, tokenId, auth, true); - } - - /** - * @dev Variant of `_approve` with an optional flag to enable or disable the {Approval} event. The event is not - * emitted in the context of transfers. - */ - function _approve(address to, uint256 tokenId, address auth, bool emitEvent) internal virtual { - // Avoid reading the owner unless necessary - if (emitEvent || auth != address(0)) { - address owner = _requireOwned(tokenId); - - // We do not use _isAuthorized because single-token approvals should not be able to call approve - if (auth != address(0) && owner != auth && !isApprovedForAll(owner, auth)) { - revert ERC721InvalidApprover(auth); - } - - if (emitEvent) { - emit Approval(owner, to, tokenId); - } - } - - _tokenApprovals[tokenId] = to; - } - - /** - * @dev Approve `operator` to operate on all of `owner` tokens - * - * Requirements: - * - operator can't be the address zero. - * - * Emits an {ApprovalForAll} event. - */ - function _setApprovalForAll(address owner, address operator, bool approved) internal virtual { - if (operator == address(0)) { - revert ERC721InvalidOperator(operator); - } - _operatorApprovals[owner][operator] = approved; - emit ApprovalForAll(owner, operator, approved); - } - - /** - * @dev Reverts if the `tokenId` doesn't have a current owner (it hasn't been minted, or it has been burned). - * Returns the owner. - * - * Overrides to ownership logic should be done to {_ownerOf}. - */ - function _requireOwned(uint256 tokenId) internal view returns (address) { - address owner = _ownerOf(tokenId); - if (owner == address(0)) { - revert ERC721NonexistentToken(tokenId); - } - return owner; - } - - /** - * @dev Private function to invoke {IERC721Receiver-onERC721Received} on a target address. This will revert if the - * recipient doesn't accept the token transfer. The call is not executed if the target address is not a contract. - * - * @param from address representing the previous owner of the given token ID - * @param to target address that will receive the tokens - * @param tokenId uint256 ID of the token to be transferred - * @param data bytes optional data to send along with the call - */ - function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory data) private { - if (to.code.length > 0) { - try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { - if (retval != IERC721Receiver.onERC721Received.selector) { - revert ERC721InvalidReceiver(to); - } - } catch (bytes memory reason) { - if (reason.length == 0) { - revert ERC721InvalidReceiver(to); - } else { - /// @solidity memory-safe-assembly - assembly { - revert(add(32, reason), mload(reason)) - } - } - } - } - } -} - - -// File contracts/LarsKristoHellheads.sol - -// Original license: SPDX_License_Identifier: MIT -pragma solidity ^0.8.20; - -contract LarsKristoHellheads is ERC721 { - address public owner = 0x9921dc045D0890788Fb174A14D93bbC46D449363; // larskristo.eth - string[] tokenURIs = [ - "QmbbdDACM5nkGqRG3cSmk8hYL46XWFkT8zvkbnrbcbSqa1", - "QmcYmjn38SgzALqpPbF9CZW8cYAsXfJ1mhtwbgLzduyhg8", - "QmcbENcreBLSTcAAvLCjPBo49pVJNJtkbyzpb3ynhqJGBS", - "QmY5QA3UpM2SRLUnSsaW9QdhJWjUkYEMRTuSCHsEYnuEsp", - "QmSV5d7ZMFh4YwbSeu5z3dQEfmDpRypYDs38PxPfAA5t2F", - "QmSvgLvyJGhGTV6poQqDF7jzpPPwfTnud9zHifYTxBBacC", - "QmYaro69wvY7roAFWDFyCC5dh5kn17HN8qgWUZAuciA6h6", - "QmaDsufnz36gbmPYA6eYu1G5XpNwV8cwnx75oRhqaRYFqV", - "QmVQcamJetJUh8QZVZq5qFU3zYJTh9ACdSrZnztxCFwP19", - "QmWivRHkyCKKsvkMjVNBjyHQUbxtnhaog8hb6csA2XNehE", - "QmUbGMGEsj5JBcDfQrXz8qS3EjLUmxjJakz1nr1EwcuiBE", - "QmaZAeeNX5b9fxqVhggTTBGM2p67EBMUvXNxF2hsvgn4fz", - "QmQeFpmqBSb3bSypkMS9pFfPcma61vCGw7SLynDdTW29hA", - "QmY41UVGSxQFENpZ62HUGb2F9xP4fZHvgN68jG96bUyaDH", - "QmeqevWbhRpwvdMshsnKNcQ8EggYeybRcuhq9oo1L5tbha", - "Qme1bL83bGNSyWX4QPMKbj21HR6Mh8Pazqz2Uns2uXQvWW", - "QmTa3fkvUYdwpcX2kLXH8S28UzHzsLc9RYbxkmtX6oyBwE", - "QmWxSwMnmQxRdgeEqKjqwu821mN7V5PJ4Fctqb3Dou5tBD", - "QmNZak29mEDytCYzqA8kwGXeFVoLTASR9q3QpEgDLJefH8", - "QmeVkf6NWZjgghEDWPaBEJBHnNcTfwkAVa8pJiCNhdyE33", - "QmRxss3JisSBfZFe9KY5VFYmHCppRsapqvnbYw9uwxuvBb", - "QmaLrNsnbE1cTVaFvfohE764Gnvom1FVhLEaXxHu8awkjA", - "QmW1zoFiF6dMBizNqvuKZez3dyGm1Q3zmuw5RzDSG9mUW8", - "QmVjpYoFFQUvB99cKGkxAKdVAMsBeXNMx9CXMVBnx9GiAs", - "QmWDFcT37hCLprTfqv1PqPix5eapbpkjpLUSHbaQpVx6MZ", - "QmNakwy819jDbAMZkUwTTukoB4PD8YLFTPijDv1jTrwKUe", - "QmT4C7bdAWowfT1mDRdtYPaseTmpedh96ZUh6pA5QT1wut", - "QmYG5BVqoM54NLHA2dhLrN5jFv1ArMEa4qkKAURweMTNon", - "QmTfSNu43KVhjvGwf3tC1BfQD5fgaFeHnhaPoBp6VAqPXd", - "QmbKCT31PPjEFVr4k279bvwYv8eTZRXYwYK2cTkGXeKAc1", - "QmepCstMc2eoEQJTkteUzwLwWDP8TNcBY7A1bX87NdcuKW", - "QmXpCreF6b3uybT4x8dkXaJVtik2wRT5o4QFMeRZnphCVs", - "Qma42tY8ktp2ETqhEt4aiLN1QL7Gw59uRCmp5EUJrcexwR", - "QmUwdprTEHUNHzMTXcGZZcddAmyCSfxvmQ4A8HSCGsvAFB", - "QmdoQ814eFQnpdgX5dMW5pCkXaiLv694YdmLyboazKBKK9", - "QmVYuKVqfz4ie2xzTjLgMWaebAnQxXg2iQZ2Di6iVLbbz3", - "QmVaFakYPojEKAAEeuQDd2GB7GSkX6Q2qz9NbTSyCH1rfU", - "QmeHxSAoef1ySdGF8VGyTdUAo4ZhiZcY7GUb4hi5gahKH8", - "QmdtuHPG8rdCBc5iLtmmTZytxmqqnPySVU687w2A2X8PCe", - "QmRxkF5T5zmsyF5geyc1WeGxqXf1AztSTrTEVV4QwDAuTZ", - "QmXJF6t4gbspWBCgr254emvqqhpWi4XLaMtyMGSEezCoLf", - "QmcgrQXex9RAt7QFHYKMYtWqffjkc8QKFCPAZep3SZJ51B", - "QmVfREzqSaccNUMQAEN4N9WVzQxEDdAdxXimFmq8Ed59Sk", - "Qma6j1mcW2rpmUpfS7uscSkCJqdksAHkBA9BRVD3jAhVFS", - "QmdCYaTe5FxhfjSoEZaePZcA5FKjGXqHGo6aqYHpwS4hU9", - "QmPByuoc7CeBLd3J2RhJPTHBKTas6jNXm4BE2XHrF8ws1u", - "QmejTdfRQ9Xc1mHaGU5511auaHrHDZsKbsfJ2iD5EXJHCY", - "QmUsyRMFC15QHaNtqPuvnH7kSUhomzHgEZGrP882d6EaYz", - "QmSZ4X5REvSQ6tA8qtmxR7VwZpbmmLiGvbSRhTfhkzGRHH", - "QmNeYz18UWuZnxGuQnoynfEZdB9gojeB1x4h9FAL2gs8oW", - "QmXa2ZVm4Pmn5C4LCaWYeBYwzGCNzQwE2GyQHJfYE3gUPj", - "Qmbs7hoZWBn123wyQWmVyMnQ6jYY1EA8MmDqB4ZwAx28oc", - "Qma4QpXdgn5715Wwi4DWQqq1FdJ3ws9AeNBtvkZLcH5Udn", - "QmSVn4B6r4Ft6g8HFnW2zXryA3wv6SbdmxVqqMo2G1yjYA", - "QmRdjcSNVUmd8JakgbFpcVyCwsnjR3yN3VNpqL6VJJmFi6", - "QmYvEkTk1yRTh1inHPwamiFzQMcdZ2RCK1Rk5sGFbNsxNL", - "QmT5ncGe3vxB99EnHo5Meg4V5Yc18ZN6LozFGU86KTnWfB", - "QmbfU3ptmKhPxQRiroXeKt45ixYiBr6LEja5c1M2pkHwFq", - "QmSupanySvd5RuYPojZk2ZBqC6euygPDfTSu1Sb3wABj4o", - "QmNmz1LLUJgz3Yvrs4hyhjmE5yA7ZXWAcmFkrof7bGYhYV", - "QmdScjX8gGpi6RHkTgaDhmaKae2RF32KRhLwAYFEVCrx7B", - "QmZtwc8CYRjUdzMc11ZQiPo4X1FhgXDwu3CwbWdM551heF", - "Qmc4HVZCdsS5V6mrsTwr7wLAyDWYddQ16UnYmN2r2Y5GbM", - "QmeQ8GRvuBB2oo9qkerfYkLDFR94QoVcNjmFxJMQvPbhJA", - "QmQyMT81muL6bwCTqt68iafswfY1ZCJ94WesyNNHwqctLw", - "QmTMf4gSJvXKEnZLa2YJGYXUDYVpFKxoYArRVpyCvPGXk6", - "QmZk62dd6bvXtgib7B6ZcKf7vi3jCvAwQAqGjFCFy6A284", - "QmPnA6bqxXGmYSz8fzBMrQm8rzoZgrpvYsF1S5FApwPeud", - "QmPVLjY3hNfeHUUMGMuta9KzmoH7n8YrDhBkPq912fmgCe", - "QmaisZ7rACQWBmBZrY7RCXBHM9wfgC9LDtgMd3w3fT6kAJ", - "QmNSiR1QcYBUDkMKH9Fxj4aYX6mBZFWgFaqQAdoMDtxS8G", - "Qmbyxt9ExcKTXLaqmyp4QabvByPCcFkrgVmQYHJ3tgUqS7", - "QmZLJxxcN3xG8iZ2spsa879sy9vVHRRwK8Y2XhRDDo9xjv", - "QmPd7jVP4QQeuFNXTbUmPHhXPbab8uP82pn6qBBaVaS8GR", - "QmSzHG7fDKbb4a4ZrZawZGHbqydC31KPTBK3BNaTF1nWzg", - "QmV9k12oa3WJZQwPgmt5CNHwwqqXh4spjqhQEQPNG66Fjf", - "QmbY7qzZUf7M5beMff4L7yS6vqx5eD6cyZwPAQe1JsBmc1", - "QmbMSeNhBLcRqZJnzA2uiqGvS8jhiMPiuzM65ed4W5Ph6T", - "QmYTZjxx67kK5DvfgYo8t5dfiffcJcPcNAi7bKfaAgtLf4", - "QmR27mMTm1BSXhPiL6zMWvULsYTK5N1XyQ68WRf25axR2K", - "QmP7xmFwmRf7ERv8rKud81kjiXhtF1uoBcERjm97s1N5NC", - "QmYAL88eBSHxkPmASAQC1E4WLdJLb11sRb5y9YPwukqB5a", - "QmWecPEgDyuSTrjZRQS4qw7CCndgYX9JStbhTynivD7xJN", - "Qmd1YyKi16y3V6qxxb4f2esLvTm5w8XnfbQ8fHq76Hizn1", - "Qmad7PkFENYw5Qtf4qjSJv2iAVLYXYTTWZZGgGGp3MSLUe", - "QmUnkAtPJ1g2oFxYd2tmVigHAEn8Mw8Fcb3uzAqsAm7Fut", - "QmfEnMLjnWxiPMgxUpjrexTiu14MXPEb6SmLBxTdEjN1we", - "QmcopC9BjYXRsSvn2LfwrrBswptMwYm6xyzL9sbWhdkHV4", - "QmXDxh5qRaYiqTQvzPuDvV1sivV7zWPHrP1aB1yY2ygc8P", - "QmZeErxFCGT5kNDhK67fiZmQtv38BMvAj7nvz5sH9Bt9ow", - "QmRE1443hwhZSBwfPNhQmtoEWFUhiGLBpgw7TPcYmq6TFe", - "QmYmzeKaB3FzDjjCZA25wnJ8xWrP1FqWAEzTZ76Mbcp4CE", - "QmVkxtLhc9VV6xgP6PPwJrhPs6wrHZzTTCkTDvGAAsdaqu", - "QmNvbnktMAnAbD3FYax3f9Gan4ApVw16645jgqLtvhjc5k", - "QmVVBB8idfGtMovMUNbJa9sAKNPV3LLU25vVmafPzuVg2h", - "QmaVwqm3bpggyq49JjHiGSdS69VYgWwpiuLivWTu2bLx4W", - "QmRM1ftrxw4YLT7S9ucrJeQfCBuFzoLq6FcqA3JymBAoLo", - "QmQzKm9Fk8y5os7JFZ1MQ15V9ySAB6k1Tn47foV3mhf3dz", - "QmQEUoKAaVukYktrf5vCDsJVu5TYbLVNPqTxjzAFr2bc9B", - "QmeVbaL74ihFs8P983iTVtaoKKhVCKXHgZq744aT1tT9MB", - "QmUPJ88Dfs5v8ocrz1SaeJ5xFo4NYSJUr4K2ayeEkYjMNw", - "QmTmZSPDNSFztWBgX839niBcdeaUR7BAmqGaurV9WNif9D", - "QmeG7FMXqffE8FTzwsEkQuDaqyfP9YobMmBuY44cHrxXWM", - "QmXgzTFSGkJuxLaNRKPKtrpXsdEugsWLy58jzM817QkHVz", - "Qmc4fiLHP9MotXtk1T3Bi1TbQrhCX8U6Ji25HVq9QpmmQE", - "QmZY4GMWSaUS1E9yKGYqD5Y5SadzUwdWrds4LMxZD19yNX", - "QmSzH41S2G5izsjkWpR4DBpCs1b6z3UEbqFaJHF5iPUGMM", - "QmbgxFTX6EbSSULE2TtGKmgAtoEJJKx4PfydN9EzRzr8cW", - "QmVCrnV5zjys4gWxPVpPdtQL7oiHJhUa2cs2u7YieTtwQ1", - "QmRmDv2TCRLcjqba61EDgUCGcLyRvZgW1KxXJ2nvUTuVxj", - "QmZ9sXTradRXreYZjNWUSVkKWFHV5fBdzGTtxr1qum2deE", - "QmVjvzFDgkKKYDtz4AQaLRP1uEmzzRSWMt3NSxwHJaxuV7", - "QmVVcdqbNWfwGKAqvrMmFMMU9ixf5eBgGiB38V2DXeSzts", - "QmeXfArA7Dq7bxFudZ71YkiXrFaFX7nyYnBgh6UEh3szY2", - "QmQ9wcYHCFK8nuiV7m5Gk677qgvZNnjhoK18pcfwHxDmJc", - "QmbguL9A5TMrZke1wJfvhWUHy41B1FmrixKanENkCBCQxX", - "Qmd5HWFW8yo3b1qcRBykqMyVyNef2oas1tS8RXu4dvPRkA", - "QmZU9rawbSC698AbavHeB45PaTQaV7k1yotPA8FdW3k2oP", - "QmfEVdsPSk2uMADPDbeYrPVfJefN7rMZCsbucisVUV3fFh", - "QmRELXeoQdJPMh6byGywgQU4zLqLFRpVCNgqKdv91YExhj", - "QmcERoHHM3pRKTBBM2DikupJGgN1MQwPCQi9svXouKmF1S", - "QmPSXQ6D4ZZCKtiNfzjGyZxemTBbgmDWVT1dVsx3mgLirh", - "QmW1NRKdv4z4d8UyBtG77CJvR2Nuh8sT1xnfKNTZFWK8qx", - "QmReZDRvfJC4fpeb93qa9oh8RRRJMtgEhwdqUM4sKA7kXF", - "QmR3FFakcG5nKynW1h24GCcxDEbwhUZ4Zv3vhQBY1Aa3py", - "QmU2aQqUmqZdw9fQKT4oaEaeKrKnzk8T9SbYbG4H3FVDDD", - "QmXr7eEWJHvmPpkP64HqHMzo7mfEnGSWbY9bU5QNBnnSDv", - "QmVDZdaP5G2CZJbZUEhFE4ux17RSvTPoi8ntn9dMUZx6an", - "QmekpQsFQwZdqqPm49u67tRJSnP5ZYAfcnWtr6xyVytEVa", - "QmRteoxxNQt7F6xrbC4E2fiCWFZCM5QWH5MwB5DztVCiT5", - "QmddA33ELdYfA65k1VQfze7aRzkhmWuqQvgjs8XmmuErBe", - "QmUAYjkpdFwXgUeR3myJqaTF5ruBWPaa6FG9ACQw9T9V8F", - "QmaPCZYcwxHxmmf9DozoLyhyrwu1f55CoEiudqu4tJpsfR", - "QmUfvr4pUBmXKTRkWGk9TZqf1ZmZNtwCC5S6gCKwBh7P3X", - "QmY6Cwer8qFKahvDRPXs9t9y6AiiW4nvVVJjRVPwdQkvvm", - "QmTsgf9WHPNcTx6LCA5Yg52uVAxuPxoJRhEVjJWKBVQyhC", - "QmQbKmAZQLBNuUqfrmoBVBnB7PH5oxW6wAsu4JZ5Wp4eXh", - "QmT8gETJgxuEG1aZVdaGNAhbgEf38W44ikohSvEEudqhXf", - "QmZDk2bGeEFAitxM7wsiT9gBxyTGYjcV4WqMshcEQdhTVh", - "QmRHoDvdbMSUTMoY5nLKTtnrFUDeTzmgzyf9ywhDDWzgif", - "QmSKow46cd3MKB8EqSNxD578YPYu8Dpy7LbHVG1ZUDgcgB", - "Qmcge9n28RWZNNSoP7dxbcRjpavzMZWM9bDb4PHTaUj7bx", - "QmXmbxUTxQGUUTfx3Uj31hp7Jy3wbjZY4pnoCo1hWTs8d1", - "QmNfZxeZnLmGgVasC2MQQnVu2Co8Zh6EkVvxdb2UvSyd7m", - "QmamFye2g3CRLDWTabeG2HrZtV7ZAeSE4PzeQvYVzqr864", - "QmdLg1SKrfJF3uWq9gLiEEXC5FEm8zhkQ5VafS1fMH7riM", - "QmT9LUQym2LTeDWhxRrVhN4bFw7FRANVhLuTzU1Hkad8AH", - "QmePLbmWZjHgGptYHbKgfAP8Re6DYCfcgmB6GMQLrSTs3s", - "QmfVS3QxSmLvf7MEZWYjGmM7veYJYrJrYTywpJdLL9nMst", - "QmdF66fzTL9D1EVS2sw5kTsdpQ2e5C1CCCfWpZNMUraGqE", - "QmbatBDJv7bgBjr483SCvrorrCokZDPtMYwaf7UMVyoXGH", - "Qma59pWTgMJSJH41dwbQj7h1ZCTk3iLgpuRJNuQPyZjvPk", - "Qman6pYNE7AxyBywifKxT8vxta5hewVGq3Mi2RGW9zcKH3", - "QmeiGDGV9hWmqsCyughHf4DAmp7dMZ2ZwkdPLRAYf6VPYn", - "QmbmcrkRBqrpaQdvybiND6kvMHigMpxZahtYqDGyBPSMmf", - "QmcWnuzFybyEFFTEGPUSPd4GAFhboRJsyjcH6KqxtW9u5q", - "QmZTWVhe99Q3G27qLiURaz6id513mWFjDa5rq6eVEipLpY", - "QmdeEDUff6pA1777eCJpgtPnrwatwRSm2rm3e9EWQmPvwW", - "QmcvmUh2ZXu2JgdA59rxxCyHdqRT75hMUw2oUBcRB5iNHw", - "QmRRBd6d5jjrN9opXGYzKKBVL3kwcXUafeVUyiQop7Sbtp", - "QmUwDiXwRRi5kA5fgABMDk7gNQPzMCDbymRQuoGFwacW26", - "Qmajj875hZDA1gpqSNKHCEsGFsTfwU4uFVx6ZiCJHokfDk", - "QmTXKewsMdYS2jtHH86YDpzaSzrMSotrx64DeUH3WZFP6U", - "QmfZfk1bLDX2QtkXEEBGHyW8pg5LwqyWZmn6BhFJacUQDT", - "QmcRyaaV2HB6amgnAauRSseD2Z7GaThFzM6zdhJi8SKngd", - "QmXhAGobHY8GA6naGJsrVJtTnuTgqLPaiLRg4qcaKeMqop", - "QmQpW1uZQ1hQhDJGdcosu9RhYZW5u5eKSqAJkeo35AXLmQ", - "QmPy2dGJfea1PMfpapkCsX3yH1RdjfGsHXEcznfrjAQd5z", - "QmUfSEm3Ysw1kZtZAhtrVBNE5WQ9pv8pCRzt7M1xG1cXPo", - "QmYb3ikKsA2f9GCu2Z2EVwowTYoTFks24gghkmRupSNmSR", - "QmTMzxsHec6Lg8uKgMHYURduWFrwpAMReqWx3Zu1hkWY5r", - "QmfR9eyg1BHhewaHJx2ePpGKr4NhT7sKgSskEhJttasTfS", - "QmQtqDyqtxqC6qh1SQmUK7s5i16KJ8BSKs3gDiPvKRtdgB", - "QmP7NG6s64AR93EDRmbZ9eg96nbbhNNizKACAw47smW8Rk", - "QmWJkKkRH3jujYtY2rPt4EpzArFvF4s1Gu2He3twt8rEGf", - "QmYAPZzEhG6NyGAuvj17mRsARxNvs2iHUqyogCG18f2BdA", - "QmT5fmkBJhzkbsH5SDGEiKTCzDj8DLzXQczpnLoTUxCAbW", - "QmNQ22qNkThz1cSyPJzAZ46S3jLu71Rd6Qgpu3MXijsv4r", - "QmaXmZ9UWNkcFoMRVnf2mXTuTenVRyVzTSnZQXj2Q1Cin8", - "QmZjhXxn4aLzeuxsssRS7noaYF9rVpKyNURGENNdAjZQWQ", - "QmYg2hi7dGekgAUMwPP6W7aUZvQTMfFc6w19x3vgmkVwxU", - "QmaKNY6iE6PmqPMhAvgsjKajJuN7obDdu9meySFQvkZPUx", - "QmabkizqWiWSArJ8JQZ91zXewXqZ1SBoaYsgV64MSVc6Wf", - "QmSK3PvZumyr85CetrzPyaTxUeD4CbUcqqd2y3L7oexXu3", - "QmcPi1aKwFWStkaUqca1rTphNykpjHbK8j8xGxY9ST1E1L", - "QmUz1SyoRrtEcSur5HY26uziGcWKgaG9jMpmUz7Qn4DWUt", - "QmNdYb4bqm3QvpBFMf3UxqEEJMZrvz85VoRmG8jwC3K3KW", - "QmXni4yjpCKB4y4CJKGHNht24JN7kxoyJ7RAiuQNd9EiLB", - "QmXnnQLxNMQgVaRpHTaAVgvx7ZDLHE6gitMHMYP8RZEeji", - "QmaXkD35dsghGnif3LbWgWFA1WaV5qM5Q7DdU6wxxSN82x", - "QmRrL6PVrtzU3EgrevKn7TfMg5LeBvgoLT51sDo6Ww6ofY", - "QmUtEhZeye8tnJdKAgN1LxQGUp1zWCH9HPKivkcGMHhpxu", - "QmY9pcWTZHdtx8WUpqyZKjYXYywYxMsN61d8SZznFXkZvv", - "QmYbDZ2eKerK28dCDJn8KXAMuB7XLG1tTYM5GqPyuqbJsC", - "QmZSArCQGrfwb3x5sRTEwE5koDGtdcZnZpFJm25MH3QqPF", - "QmahYyDLFiV7HsJo42sKUTdBMPkrbKe414eHKLjktjUZXA", - "QmbqJ4wA46uBJ8ZjKtoDGFpRYWCdzbKfRg3f3SHeLx54jv", - "QmT9VoKDr2jGnxa9jepTkktbssLsZXWysHqBtz2EkxeJRr", - "QmP8DStwTc2AzJ5AekVJJBXrxWpwYMqjtiJr2F5YrvKUZp", - "QmX7SPe5nhbbkPdcFSeNyFta9PDe2cbBPsmbNnfb9SvTCT", - "Qmcva2zsj4XpqpYFsgEDCGickkwijfrSwECNRUPBggpzS5", - "QmWvgq9WpySsLLQEGkRa51sRQHiSSFndMhcvf3Lo3fNWHg", - "QmfQsqEqAotjEao76jqcJ4vWrUfZf2xyYpJDcnmf6GAGRH", - "QmXTcdnByABuNitK4XvDXET3P1gQashGEFT4wPc4xKhQUH", - "QmP3hJ2zBWTK4Ft9BXPLX3kL1dRmkQFoAP9GRVzY5FA786", - "QmcByJPRDjnzXy8C2M6CrYZH2hTJPJA2mVVRAuG1jGiuZq", - "Qmeo3zqRdmmJqc9VCSYbzaf1k6eyCrGddap3z8g5vBLV9S", - "QmXR4W8xcg39LJurDqBaaHkom7pdP6Wm5NnpjqCFPS2sy5", - "QmSRmKb1VniiNkXuGZhzKDfvj1PKZPTKAqfDgNpGuH8z6t", - "QmWTnrfhQC4CqCAKX8WnGdKmkpXje3zf3d8UhDi1Tv8nGn", - "QmXyVCVRwhy8CDCm8p4N1ZhVEaRz3uZ87nAT9RJDii3pbo", - "QmdbFDNEQXe39czCfpNfuyFN1as2QEJPQCGgRE9eQ2qajo", - "QmT4GoXaX5ZYXnCmkidBjTWwRL5spPfScQfecnJZdEDD1i", - "QmWvJsae9bUBdcQpCbrcX3hTTh3TMqTRMHy1qiZsevynP4", - "QmUK8NWeCrEHzDAZzhRv9UtN3S93PHktAtLQEgPKJcXYAk", - "QmQutJnFVacdvgaoZYriSKy8FGqc7CPtYCvgnNnqXFkMgM", - "QmbdpFqJY5NhihXwFQkDZAJd4jvgUP8YZkAeqyaJkjNuPn" - ]; - - constructor(string memory name_, string memory symbol_) ERC721(name_, symbol_) { - for (uint i = 0; i < tokenURIs.length; i++) { - _safeMint(owner, i); - } - } - - function _baseURI() internal view virtual override returns (string memory) { - return "https://blockchainassetregistry.infura-ipfs.io/ipfs/"; - } - - function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { - _requireOwned(tokenId); - - string memory baseURI = _baseURI(); - string memory tokenURIhash = tokenURIs[tokenId]; - - return bytes(baseURI).length > 0 ? string.concat(baseURI, tokenURIhash) : ""; - } -} diff --git a/hardhat/test/LarsKristoHellheads.ts b/hardhat/test/LarsKristoHellheads.ts index 94b456cd..2e38988d 100644 --- a/hardhat/test/LarsKristoHellheads.ts +++ b/hardhat/test/LarsKristoHellheads.ts @@ -13,7 +13,6 @@ const MARKET_CREATOR_ACCOUNT_ID = "creator.eth"; const ASSET_ACCOUNT_ID = "0x5FbDB2315678afecb367f032d93F642f64180aa3"; const TENANT_ACCOUNT_ID = "0x41231dadda96380c114e75e0da8a2b207d9232c2"; -const OWNER_ACCOUNT_ID = "0x9921dc045D0890788Fb174A14D93bbC46D449363"; const TOKEN_NAME = "larskristo: hellheads"; const TOKEN_SYMBOL = "LKHH"; @@ -37,7 +36,9 @@ async function createERC721Contract() { describe("Lease", function () { it("Initialize: call constructor", async function () { - const [, , signer, tenant] = await ethers.getSigners(); + const [owner, , signer] = await ethers.getSigners(); + + // console.log({ owner: owner.address, signer: signer.address }); const ERC721 = await createERC721Contract(); @@ -52,20 +53,67 @@ describe("Lease", function () { expect(name).to.equal(TOKEN_NAME); expect(symbol).to.equal(TOKEN_SYMBOL); - console.log({ ownerOf0, ownerOf1, ownerOf2, ownerOf3 }); - - expect(ownerOf0).to.equal(OWNER_ACCOUNT_ID); - expect(ownerOf1).to.equal(OWNER_ACCOUNT_ID); - expect(ownerOf2).to.equal(OWNER_ACCOUNT_ID); - expect(ownerOf3).to.equal(OWNER_ACCOUNT_ID); + // console.log({ ownerOf0, ownerOf1, ownerOf2, ownerOf3 }); - const NFTAddress = await ERC721.getAddress(); + expect(ownerOf0).to.equal(owner.address); + expect(ownerOf1).to.equal(owner.address); + expect(ownerOf2).to.equal(owner.address); + expect(ownerOf3).to.equal(owner.address); const token0 = await ERC721.tokenURI(0); const token1 = await ERC721.tokenURI(1); const token2 = await ERC721.tokenURI(2); const token3 = await ERC721.tokenURI(3); - console.log({ token0, token1, token2, token3 }); + // console.log({ token0, token1, token2, token3 }); + + // check for token price + const price = await ERC721.getTokenPrice(0); + expect(ethers.formatEther(price)).to.equal("0.5"); + + // check approval for all + await expect(ERC721.connect(owner).setApprovalForAll(signer.address, true)) + .to.emit(ERC721, "ApprovalForAll") + .withArgs(owner.address, signer.address, true); + + const isApprovedForAll = await ERC721.isApprovedForAll(owner.address, signer.address); + expect(isApprovedForAll).to.be.true; + }); + + it("getTokenPrice", async function () { + const ERC721 = await createERC721Contract(); + + const price = await ERC721.getTokenPrice(0); + + // console.log({ price: ethers.formatEther(price) }); + + expect(ethers.formatEther(price)).to.equal("0.5"); + }); + + it("setTokenForSale", async function () { + const [owner, , signer, someoneElse] = await ethers.getSigners(); + + const ERC721 = await createERC721Contract(); + + await ERC721.connect(owner).setApprovalForAll(signer.address, true); + + await ERC721.connect(signer).setTokenForSale(owner.address, 0, BigInt(ethers.parseEther("0.6"))); + + const price1 = await ERC721.getTokenPrice(0); + + console.log({ price1: ethers.formatEther(price1) }); + + expect(ethers.formatEther(price1)).to.equal("0.6"); + + await ERC721.connect(owner).setTokenForSale(owner.address, 1, BigInt(ethers.parseEther("0.6"))); + + const price2 = await ERC721.getTokenPrice(0); + + console.log({ price2: ethers.formatEther(price2) }); + + expect(ethers.formatEther(price2)).to.equal("0.6"); + + await expect(ERC721.connect(someoneElse).setTokenForSale(owner.address, 2, BigInt(ethers.parseEther("0.6")))).to.be + .reverted; }); }); From c7fe002a3334c9621f73f3e2d337b6c53311974d Mon Sep 17 00:00:00 2001 From: netpoe Date: Wed, 24 Apr 2024 01:06:52 -0600 Subject: [PATCH 51/57] feat: buyToken --- hardhat/contracts/LarsKristoHellheads.sol | 98 +++++++++++++++--- hardhat/test/LarsKristoHellheads.ts | 121 ++++++++++++++++++---- 2 files changed, 187 insertions(+), 32 deletions(-) diff --git a/hardhat/contracts/LarsKristoHellheads.sol b/hardhat/contracts/LarsKristoHellheads.sol index a99f14c0..e7a118c3 100644 --- a/hardhat/contracts/LarsKristoHellheads.sol +++ b/hardhat/contracts/LarsKristoHellheads.sol @@ -1,14 +1,27 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; +import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Royalty.sol"; -contract LarsKristoHellheads is ERC721 { +contract LarsKristoHellheads is ERC721Royalty { error ERC721InvalidPrice(uint256 price); + error ERC721InvalidPurchaseAmount(uint256 tokenId, uint256 price, uint256 balance); - address public owner = 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266; // larskristo.eth + event Purchase( + address indexed from, + address indexed to, + uint256 indexed tokenId, + uint256 price, + uint256 royaltyAmount, + uint256 transactionFee, + uint256 amount + ); + + address public author = 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266; // larskristo.eth + address public operator = 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC; // svpervnder.eth mapping(uint256 tokenId => uint256) private _tokenPrices; + uint256 private _transactionFraction = 3; string[] tokenURIs = [ "QmbbdDACM5nkGqRG3cSmk8hYL46XWFkT8zvkbnrbcbSqa1", @@ -232,14 +245,44 @@ contract LarsKristoHellheads is ERC721 { constructor(string memory name_, string memory symbol_) ERC721(name_, symbol_) { for (uint i = 0; i < tokenURIs.length; i++) { - _safeMint(owner, i); + _safeMint(author, i); _tokenPrices[i] = 0.5 ether; // initial token price } + + _setDefaultRoyalty(author, 10); // 10% royalty } - // function buyToken(uint256 tokenId) public { - // _requireTokenPriceSet(tokenId); - // } + function buyToken(uint256 tokenId) public payable returns (uint256, uint256, uint256) { + uint256 price = _requireTokenPriceSet(tokenId); + uint256 balance = msg.value; + + if (balance != price) { + revert ERC721InvalidPurchaseAmount(tokenId, price, balance); + } + + // pay royalties to author + (address royaltyReceiver, uint256 royaltyAmount) = royaltyInfo(tokenId, price); + payable(royaltyReceiver).transfer(royaltyAmount); + + // charge the transaction fee + uint256 transactionFee = getTransactionFee(tokenId); + payable(operator).transfer(transactionFee); + + // transfer the token to the new owner + address previousOwner = ownerOf(tokenId); + _safeTransfer(previousOwner, _msgSender(), tokenId); + + // transfer the payment to the previous owner + uint256 priceMinusRoyalty = balance - royaltyAmount - transactionFee; + payable(previousOwner).transfer(priceMinusRoyalty); + + emit Purchase(previousOwner, _msgSender(), tokenId, price, royaltyAmount, transactionFee, priceMinusRoyalty); + + // reset the token price + _tokenPrices[tokenId] = 0; + + return (tokenId, price, balance); + } /** * @dev Retrieves the price of a token. @@ -247,9 +290,24 @@ contract LarsKristoHellheads is ERC721 { * @return The price of the token. */ function getTokenPrice(uint256 tokenId) public view returns (uint256) { + _requireTokenPriceSet(tokenId); + return _tokenPrices[tokenId]; } + /** + * @dev Retrieves the transaction fee for a given token ID. + * @param tokenId The ID of the token. + * @return The transaction fee amount. + */ + function getTransactionFee(uint256 tokenId) public view returns (uint256) { + uint256 _price = _requireTokenPriceSet(tokenId); + + uint256 _transactionFee = (_price * _transactionFraction) / _feeDenominator(); + + return _transactionFee; + } + /** * @dev Sets the token for sale with the specified price. * @@ -259,12 +317,12 @@ contract LarsKristoHellheads is ERC721 { * @param tokenId The ID of the token to set for sale. * @param price The price at which to sell the token. */ - function setTokenForSale(address _owner, uint256 tokenId, uint256 price) public { - if (price <= 0) { - revert ERC721InvalidPrice(price); - } + function setTokenForSale(uint256 tokenId, uint256 price) public { + _requireTokenPriceSet(tokenId); - _checkAuthorized(_owner, _msgSender(), tokenId); + address owner = ownerOf(tokenId); + + _checkAuthorized(owner, _msgSender(), tokenId); _tokenPrices[tokenId] = price; } @@ -310,4 +368,20 @@ contract LarsKristoHellheads is ERC721 { return _owner; } + + /** + * @dev Checks if the token price is set for a given token ID. + * @param tokenId The ID of the token to check the price for. + * @return The price of the token. + * @dev Throws an error if the token price is not set. + */ + function _requireTokenPriceSet(uint256 tokenId) internal view returns (uint256) { + uint256 _price = _tokenPrices[tokenId]; + + if (_price <= 0) { + revert ERC721InvalidPrice(_price); + } + + return _price; + } } diff --git a/hardhat/test/LarsKristoHellheads.ts b/hardhat/test/LarsKristoHellheads.ts index 2e38988d..6b18033a 100644 --- a/hardhat/test/LarsKristoHellheads.ts +++ b/hardhat/test/LarsKristoHellheads.ts @@ -36,7 +36,7 @@ async function createERC721Contract() { describe("Lease", function () { it("Initialize: call constructor", async function () { - const [owner, , signer] = await ethers.getSigners(); + const [author, , operator] = await ethers.getSigners(); // console.log({ owner: owner.address, signer: signer.address }); @@ -55,15 +55,15 @@ describe("Lease", function () { // console.log({ ownerOf0, ownerOf1, ownerOf2, ownerOf3 }); - expect(ownerOf0).to.equal(owner.address); - expect(ownerOf1).to.equal(owner.address); - expect(ownerOf2).to.equal(owner.address); - expect(ownerOf3).to.equal(owner.address); + expect(ownerOf0).to.equal(author.address); + expect(ownerOf1).to.equal(author.address); + expect(ownerOf2).to.equal(author.address); + expect(ownerOf3).to.equal(author.address); - const token0 = await ERC721.tokenURI(0); - const token1 = await ERC721.tokenURI(1); - const token2 = await ERC721.tokenURI(2); - const token3 = await ERC721.tokenURI(3); + // const token0 = await ERC721.tokenURI(0); + // const token1 = await ERC721.tokenURI(1); + // const token2 = await ERC721.tokenURI(2); + // const token3 = await ERC721.tokenURI(3); // console.log({ token0, token1, token2, token3 }); @@ -72,11 +72,11 @@ describe("Lease", function () { expect(ethers.formatEther(price)).to.equal("0.5"); // check approval for all - await expect(ERC721.connect(owner).setApprovalForAll(signer.address, true)) + await expect(ERC721.connect(author).setApprovalForAll(operator.address, true)) .to.emit(ERC721, "ApprovalForAll") - .withArgs(owner.address, signer.address, true); + .withArgs(author.address, operator.address, true); - const isApprovedForAll = await ERC721.isApprovedForAll(owner.address, signer.address); + const isApprovedForAll = await ERC721.isApprovedForAll(author.address, operator.address); expect(isApprovedForAll).to.be.true; }); @@ -90,30 +90,111 @@ describe("Lease", function () { expect(ethers.formatEther(price)).to.equal("0.5"); }); + it("royaltyInfo", async function () { + const [author] = await ethers.getSigners(); + + const ERC721 = await createERC721Contract(); + + const price = await ERC721.getTokenPrice(0); + + const royaltyInfo = await ERC721.royaltyInfo(0, price); + + // console.log({ price: ethers.formatEther(price), royaltyInfo }); + + const [receiver, royaltyAmount] = royaltyInfo; + + expect(ethers.formatEther(royaltyAmount)).to.equal("0.0005"); + expect(receiver).to.equal(author.address); + }); + it("setTokenForSale", async function () { - const [owner, , signer, someoneElse] = await ethers.getSigners(); + const [author, , operator, someoneElse] = await ethers.getSigners(); const ERC721 = await createERC721Contract(); - await ERC721.connect(owner).setApprovalForAll(signer.address, true); + await ERC721.connect(author).setApprovalForAll(operator.address, true); - await ERC721.connect(signer).setTokenForSale(owner.address, 0, BigInt(ethers.parseEther("0.6"))); + await ERC721.connect(operator).setTokenForSale(0, BigInt(ethers.parseEther("0.6"))); const price1 = await ERC721.getTokenPrice(0); - console.log({ price1: ethers.formatEther(price1) }); + // console.log({ price1: ethers.formatEther(price1) }); expect(ethers.formatEther(price1)).to.equal("0.6"); - await ERC721.connect(owner).setTokenForSale(owner.address, 1, BigInt(ethers.parseEther("0.6"))); + await ERC721.connect(author).setTokenForSale(1, BigInt(ethers.parseEther("0.6"))); const price2 = await ERC721.getTokenPrice(0); - console.log({ price2: ethers.formatEther(price2) }); + // console.log({ price2: ethers.formatEther(price2) }); expect(ethers.formatEther(price2)).to.equal("0.6"); - await expect(ERC721.connect(someoneElse).setTokenForSale(owner.address, 2, BigInt(ethers.parseEther("0.6")))).to.be - .reverted; + await expect(ERC721.connect(someoneElse).setTokenForSale(2, BigInt(ethers.parseEther("0.6")))).to.be.reverted; + }); + + it("buyToken", async function () { + const [author, , operator, buyer] = await ethers.getSigners(); + + let authorBalance = await ethers.provider.getBalance(author.address); + let operatorBalance = await ethers.provider.getBalance(operator.address); + let buyerBalance = await ethers.provider.getBalance(buyer.address); + + console.log({ + authorBalance: ethers.formatEther(authorBalance), + operatorBalance: ethers.formatEther(operatorBalance), + buyerBalance: ethers.formatEther(buyerBalance), + }); + + const ERC721 = await createERC721Contract(); + + await ERC721.connect(author).setApprovalForAll(operator.address, true); + + await ERC721.connect(operator).setTokenForSale(0, BigInt(ethers.parseEther("1"))); + + authorBalance = await ethers.provider.getBalance(author.address); + operatorBalance = await ethers.provider.getBalance(operator.address); + buyerBalance = await ethers.provider.getBalance(buyer.address); + + console.log({ + authorBalance: ethers.formatEther(authorBalance), + operatorBalance: ethers.formatEther(operatorBalance), + buyerBalance: ethers.formatEther(buyerBalance), + }); + + ERC721.on("Transfer", (from, to, tokenId) => { + // console.log({ from, to, tokenId }); + expect(from).to.equal(author.address); + expect(to).to.equal(buyer.address); + expect(tokenId).to.equal(0); + }); + + await expect(ERC721.connect(buyer).buyToken(0, { value: ethers.parseEther("1") })) + .to.emit(ERC721, "Purchase") + .withArgs( + author.address, + buyer.address, + BigInt(0), + ethers.parseEther("1"), + ethers.parseEther("0.001"), + ethers.parseEther("0.0003"), + ethers.parseEther("0.9987"), + ); + + const ownerOf0 = await ERC721.ownerOf(0); + + // console.log({ ownerOf0 }); + + expect(ownerOf0).to.equal(buyer.address); + + authorBalance = await ethers.provider.getBalance(author.address); + operatorBalance = await ethers.provider.getBalance(operator.address); + buyerBalance = await ethers.provider.getBalance(buyer.address); + + console.log({ + authorBalance: ethers.formatEther(authorBalance), + operatorBalance: ethers.formatEther(operatorBalance), + buyerBalance: ethers.formatEther(buyerBalance), + }); }); }); From 0687866d880c036127920619407d85d5eb3a2627 Mon Sep 17 00:00:00 2001 From: netpoe Date: Wed, 24 Apr 2024 01:24:07 -0600 Subject: [PATCH 52/57] test: buyToken fail cases --- hardhat/contracts/LarsKristoHellheads.sol | 20 +++---- hardhat/test/LarsKristoHellheads.ts | 64 ++++++++++++++--------- 2 files changed, 50 insertions(+), 34 deletions(-) diff --git a/hardhat/contracts/LarsKristoHellheads.sol b/hardhat/contracts/LarsKristoHellheads.sol index e7a118c3..653558ce 100644 --- a/hardhat/contracts/LarsKristoHellheads.sol +++ b/hardhat/contracts/LarsKristoHellheads.sol @@ -17,6 +17,8 @@ contract LarsKristoHellheads is ERC721Royalty { uint256 amount ); + event SetTokenForSale(address indexed owner, uint256 indexed tokenId, uint256 price); + address public author = 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266; // larskristo.eth address public operator = 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC; // svpervnder.eth @@ -318,21 +320,13 @@ contract LarsKristoHellheads is ERC721Royalty { * @param price The price at which to sell the token. */ function setTokenForSale(uint256 tokenId, uint256 price) public { - _requireTokenPriceSet(tokenId); - address owner = ownerOf(tokenId); _checkAuthorized(owner, _msgSender(), tokenId); _tokenPrices[tokenId] = price; - } - /** - * @dev Returns the base URI for token metadata. - * @return The base URI string. - */ - function _baseURI() internal view virtual override returns (string memory) { - return "https://blockchainassetregistry.infura-ipfs.io/ipfs/"; + emit SetTokenForSale(owner, tokenId, price); } /** @@ -353,6 +347,14 @@ contract LarsKristoHellheads is ERC721Royalty { return bytes(baseURI).length > 0 ? string.concat(baseURI, tokenURIhash) : ""; } + /** + * @dev Returns the base URI for token metadata. + * @return The base URI string. + */ + function _baseURI() internal view virtual override returns (string memory) { + return "https://blockchainassetregistry.infura-ipfs.io/ipfs/"; + } + /** * @dev Checks if the caller is the owner of the specified token. * @param tokenId The ID of the token to check ownership for. diff --git a/hardhat/test/LarsKristoHellheads.ts b/hardhat/test/LarsKristoHellheads.ts index 6b18033a..9fef3305 100644 --- a/hardhat/test/LarsKristoHellheads.ts +++ b/hardhat/test/LarsKristoHellheads.ts @@ -134,17 +134,17 @@ describe("Lease", function () { }); it("buyToken", async function () { - const [author, , operator, buyer] = await ethers.getSigners(); + const [author, someoneElse, operator, buyer] = await ethers.getSigners(); - let authorBalance = await ethers.provider.getBalance(author.address); - let operatorBalance = await ethers.provider.getBalance(operator.address); - let buyerBalance = await ethers.provider.getBalance(buyer.address); + // let authorBalance = await ethers.provider.getBalance(author.address); + // let operatorBalance = await ethers.provider.getBalance(operator.address); + // let buyerBalance = await ethers.provider.getBalance(buyer.address); - console.log({ - authorBalance: ethers.formatEther(authorBalance), - operatorBalance: ethers.formatEther(operatorBalance), - buyerBalance: ethers.formatEther(buyerBalance), - }); + // console.log({ + // authorBalance: ethers.formatEther(authorBalance), + // operatorBalance: ethers.formatEther(operatorBalance), + // buyerBalance: ethers.formatEther(buyerBalance), + // }); const ERC721 = await createERC721Contract(); @@ -152,15 +152,15 @@ describe("Lease", function () { await ERC721.connect(operator).setTokenForSale(0, BigInt(ethers.parseEther("1"))); - authorBalance = await ethers.provider.getBalance(author.address); - operatorBalance = await ethers.provider.getBalance(operator.address); - buyerBalance = await ethers.provider.getBalance(buyer.address); + // authorBalance = await ethers.provider.getBalance(author.address); + // operatorBalance = await ethers.provider.getBalance(operator.address); + // buyerBalance = await ethers.provider.getBalance(buyer.address); - console.log({ - authorBalance: ethers.formatEther(authorBalance), - operatorBalance: ethers.formatEther(operatorBalance), - buyerBalance: ethers.formatEther(buyerBalance), - }); + // console.log({ + // authorBalance: ethers.formatEther(authorBalance), + // operatorBalance: ethers.formatEther(operatorBalance), + // buyerBalance: ethers.formatEther(buyerBalance), + // }); ERC721.on("Transfer", (from, to, tokenId) => { // console.log({ from, to, tokenId }); @@ -187,14 +187,28 @@ describe("Lease", function () { expect(ownerOf0).to.equal(buyer.address); - authorBalance = await ethers.provider.getBalance(author.address); - operatorBalance = await ethers.provider.getBalance(operator.address); - buyerBalance = await ethers.provider.getBalance(buyer.address); + // authorBalance = await ethers.provider.getBalance(author.address); + // operatorBalance = await ethers.provider.getBalance(operator.address); + // buyerBalance = await ethers.provider.getBalance(buyer.address); - console.log({ - authorBalance: ethers.formatEther(authorBalance), - operatorBalance: ethers.formatEther(operatorBalance), - buyerBalance: ethers.formatEther(buyerBalance), - }); + // console.log({ + // authorBalance: ethers.formatEther(authorBalance), + // operatorBalance: ethers.formatEther(operatorBalance), + // buyerBalance: ethers.formatEther(buyerBalance), + // }); + + // only the buyer should set prices now + await expect(ERC721.connect(author).setTokenForSale(0, BigInt(ethers.parseEther("2")))).to.be.reverted; + await expect(ERC721.connect(operator).setTokenForSale(0, BigInt(ethers.parseEther("2")))).to.be.reverted; + + await expect(ERC721.connect(buyer).setTokenForSale(0, BigInt(ethers.parseEther("2")))) + .to.emit(ERC721, "SetTokenForSale") + .withArgs(buyer.address, 0, BigInt(ethers.parseEther("2"))); + + const newPrice = await ERC721.getTokenPrice(0); + expect(ethers.formatEther(newPrice)).to.equal("2.0"); + + // too poor to buy + await expect(ERC721.connect(someoneElse).buyToken(0, { value: BigInt(ethers.parseEther("1")) })).to.be.reverted; }); }); From 9a51077b0e36ec3e4691356bb44b930cefbebdc7 Mon Sep 17 00:00:00 2001 From: netpoe Date: Thu, 25 Apr 2024 16:18:28 -0600 Subject: [PATCH 53/57] feat: token price, royalty & purchase --- app/public/icons/icomoon.eot | Bin 431360 -> 428840 bytes app/public/icons/icomoon.svg | 17 +- app/public/icons/icomoon.ttf | Bin 431196 -> 428676 bytes app/public/icons/icomoon.woff | Bin 431272 -> 428752 bytes .../LarskristoHellheadsContext.types.ts | 23 +- .../LarskristoHellheadsContextController.tsx | 106 +++++- .../EvmWalletSelectorContext.types.ts | 7 +- .../EvmWalletSelectorContextController.tsx | 13 +- .../LarsKristoHellheads.ts | 132 +++++++- .../LarsKristoHellheads__factory.ts | 301 +++++++++++++++++- app/src/theme/_icons.scss | 8 +- app/src/ui/fileagent/navbar/Navbar.tsx | 5 +- app/src/ui/icon/Icon.module.scss | 46 +-- app/src/ui/icon/Icon.module.scss.d.ts | 13 +- app/src/ui/modal/Modal.module.scss | 2 +- app/src/ui/notifications/Notifications.tsx | 4 +- .../LarsKristoHellheads.module.scss | 13 +- .../LarsKristoHellheads.tsx | 5 +- .../details-modal/DetailsModal.module.scss | 8 + .../DetailsModal.module.scss.d.ts | 2 + .../details-modal/DetailsModal.tsx | 89 ++++-- app/src/ui/theme-selector/ThemeSelector.tsx | 2 +- hardhat/contracts/LarsKristoHellheads.sol | 4 +- hardhat/test/LarsKristoHellheads.ts | 8 +- 24 files changed, 680 insertions(+), 128 deletions(-) diff --git a/app/public/icons/icomoon.eot b/app/public/icons/icomoon.eot index e58c947983e93b1511f56f8e3c1334f9249dc107..e2143c6749f207856111a520f1d4853c6d19ef7f 100644 GIT binary patch delta 18324 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 CA_s#2 delta 23430 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 MRm_*>;I+vA1OBVajQ{`u diff --git a/app/public/icons/icomoon.svg b/app/public/icons/icomoon.svg index b53d4f06..301c10eb 100644 --- a/app/public/icons/icomoon.svg +++ b/app/public/icons/icomoon.svg @@ -7,7 +7,6 @@ - @@ -81,7 +80,7 @@ - + @@ -291,7 +290,7 @@ - + @@ -1010,14 +1009,6 @@ - - - - - - - - - - + + \ No newline at end of file diff --git a/app/public/icons/icomoon.ttf b/app/public/icons/icomoon.ttf index 771a2e599912bb9f67310039dae89776198ab972..bd863c23ea92f2270b5d2c2050f8b9e8f528119d 100644 GIT binary patch delta 18211 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 delta 23478 zcmb7s3xG~l_xIX+pM9R0XYONe#u#QW!!#G>?l#7?Y22^LEyUxJTPj5|@=8LI!C_t$ zNhL`}P9e!FO2#col1dViq!ME0`|Wd{^UT!$@_pa1XYaMw+H0-7_S$P-&N(xCY3%9O zVoQh-Q2@;(K~1~&&d3ajaMeZ4PNbm^j2|}XQU?1s5sL#nXwU9ZRaw-4&XWbPs_(1n z#7gj1=BWN*#6TNTqm~opHMfYWDgT$c67UifR<&C@Cw5aXrBHKpBvFryh{{UH%+1M8 zYLLL9qas{-Vlqq0&SSZmfI?V8W>jQ^4qSFF=ftbR|_r?+gtM z%LuDH7Z%3iPzVj(DK0A9?P#{yqHAjr#w3W{2{8&0lW=GM4vUi24Q(2VUy8wwgqWCw z%E>lCLX7IaAXim|xGBb#?qXlM?DDG8)%-(W*&{AG3bP-&++-+(MBuAb7aQ{Bf@wk!TV=DG)sAh|rgerqmXgf>GG zgSe0=OlUaRE*whA;~>|YJgG#VFQ1c=zyt%uhP%oYpCM`Um9{&?>hde;tC-cNg-y!@ zI;uKdnx6eVsKRp|P{dPmhrlxEsi5*x`KH~?vhrmuKKFBFSq;#E_L*KQdCE6*XvS+r zRvi*6#A?jiXlh2C=|P%rEV{#DjjJs+tvvAVe=*^KK8uScDn)tc5Pv1GPbp`&%h&f? z%3U6CE<-Qd-DfC?m&JSKX9m2X^qDs(jEf31UOgnsQRc+`*C5|xjozVQaa>~rf-4W) zWQwx%(#Su=cvPJA++$Ugr;omeLHR6*Xj(pF%#RMAu@Azg7})X+;~(O#US1s%C-t@r z@es_ZtayELCs;)J#NzUHj|NpM+wZZ%iZE$vZ62UZgAUM8nzO8fR=fOxC%Q0^i`HAF zf6YZB6c(4*ou5?+Znp0F)42>YwY*?XvasB#tbFXVV;HQFB|PxVQ}bSSRGqcpFJE!t zpGxesMIPp+GN?tAL7vjh%M(hgUI{CWTYS~2j;FSDx_VSg#qf%FnFvGAS#c@^UN>@~ZJLEhTDH zdSuDN<)P~vdR>IdTfCac!>q|hG>S^-Sz2L})i0g6Dy)3<>-V$plU6?-po#PZ3t@=q zjY@m2YFggrjZfgFRwv7Y-|~Q^U7ohNo3DK6?P(}0i&A;F@_xSh4O_3nx>@CGx53XU z%5&fQO=T%NKULZFU0QEq7N~#3v5F$oPq4LZtR+QQB%MJy3eyz=g2Fh8#y~(UX<{#)zA=F+VmX@Eo{wPyZrL@jbCGj_SyC{!l-v9p%_5Uk8#H?x9|id<%=0G7jC z+2C{#oMr{GixFOcYEx4xreU-Su4HTuVYSWWL9E9VgY-vD(6;19(s4Ox@$FXdqMP0TQOfY^~#@V{;8XN-s%Q8>J zvjLD~11;(^wN#kP5?FyU2dK$BmB@Oj7-FV3WbY{N^Qg#STx!HFdA-U!mBjA##tt*L zF{XQ?Xv4lnM6_1lGGkL)_OuUZ(T*Jr@nWbJ#Znq|Foq74O^xFA z?1ftYz)&|DqOi@3dL7tqHS*@!4lL4gV&hgvcEuh5k9nmN8>@!b8jT@EY`wQ^y6<7( zEYLrblH6;PWOrdZ|C{Rku572n{Z?0|;+Q4YoYuWs z2lG-7%L{BwaW6KVJ|ZIwKYp8Jjjw&c_U_Q**H~J8kCv)##jwdXjza0Oq_Ipz}e?N?0Qn;w7X8SY12OC}VXAyT_>Y6#Lu~ zjLCWBDb^7I!``2nE&jzm;;w8!2hlZs4rXJ32a_K25%avYadkfC`K@Qz6no~bFsICA z9J;A#yuzIEEQ@x+OxZkkx3a+5`3%8Z8MfPVY&+%`mOk`1coAdXaaqjNYUhE(Omjjh z8*Eb_TEc>?l5u7!Hp=#<&13Fb=8V{c0je<1tc808snAe?(@1^HhE~Q)mt~R>v5qaUz0hN>U&o@9 z{Vg}x^NJO@m4AB7TkF}EKI0iZzL9l}KVM^;tnEmdx#4y86m#K(2igbC%r{s&FPAKH z+D0~<1=9#%1SVlJgzXTu_o<*duys!w zPh>PZ$n(vZuNZzR%-GZDgW~!%+oAI9->^4qUoJDperNHvW778TZBtv;9r6P!fK(f^ z_D2@2?796SyU1Om(76?&)ZB0xk;^;5R+&-1Ftyz_&tGM=uv@l9rSdmljJl51N$vj4 z0XNvQ))~h212Yr-S$d$#NLs;vyj_c z8*?Ay74}qHrtvBze3{Olv<`)4lt2H%@u6#OUWUG?HLuiM9K^eT5$3INHkkj3MyEpf z`^=S(UMX|04&#yBg`F09P-bqg#Rp)X*?t)t&D$t545-chnTunU{uE36*jO&GLo+AT z;gLd3P}Ghv=Ed{tj&IGW$JN%wD_~!Jjy;sUy&`jRB2V!4p&|bcCF~WZC3CgMw?^FP zmBLp$qklbx`*xsaR4VVS`aCv`j}+Dda;z!;%pTc|=7vnAqmuaorpNXyo@PTU0A0!E za6}uo(d4-t=UoM@K!>O0@xczxW1h+9-lb(q3yzbIO|{WH-;$54hI+N;*xO`O-L^K2 z!EN{txDm>*rq!)Byr(^s-P-bc%6Jpn^C`|8HZFDGYeVfBh$t07_t3pG(%9UI#~52X z^2?3^*LUJ-pJmTfy@*G#nvD{%m3+_$E#le6(0llgmMMyhIs8qns*AhurFJQ$JMU?i zX7uF4m4Pi4&-dom_QnEE_2ub4OmP1i7(RfzoX8P8h#$3kb#^fCrh*U}d(7PX`3DkR zygq_A6Y6Ygri|t*>}7u67`T;HcjiHkiwlJ10=nhTiyO_?P0=B!0XYen5OUL9A%m$YRyPXn4&FfD=nyWd*ir2;S zX2EP;WX~sK-qZX`YifGt@VeHC+??|ae@>lUD$J;7`J;B-!g=r^i*DC^Uc$mu&?%#Q z>Pt^jDP5yVqrNEz8uc3p&3yAY-bD@et>^h&%14u4;OZ=k7KSmWl)s|7V5BeMxO*`- zEWvmNT5-IL5~u*{#lp3`p>cI7Uv7u@GIQZFt}8QJbF$3fYPqw4L(6%t4{(?9e(Ku9 zBJ-@`XM8~M8g3m+EX=I6+={ceUgmAkBLv`?>v?bE`B(U5tA8`r^Y%*XJ+JcZ;EmlF zN5p-d$18TApK7k($nTZ%Jjxye<)&ul7T!dL4zM>%lteA4J2vh{NG4X?7filGHT+0) zG<&^^K3iwiGTg(AG2A2Tp{WEi8FacC#pdhAZ#%XWW{xo0O| zuR09b*c|MF?Hpj<2i!i#!V%2G54p8{5fxa*Quc5xP-w!kjQIcXQ&yRwtE!W$>;vd)yO3fKx^9R+KUOL0; zYT_|y;{INReGklnJ)m*u9KYyVi6GcaEH!rhz~6M?4o~a{F!?;cX<;hFQgiZ;-fo*y zF7T)9>2T{Jmv-m)Pu$-M=0@<(V5hFM)V8JaXRb~xmLC}te&LmYb{R*a6v{Ss|H1Q& zx32QO4v8BVkHIxbXrLm>H#%M8`~Hq-rw|>D`+wtOoYseaQv+-Z+w?oH^p?#nfAB;{ z3-i=<-pL0f-Kf^jTy~Q$^kGu|;w^l@*xP)#4>)#*&+!36sw|(hCyJYi13t_tF0T22 zW15I|Lg*D;RQc9tKk=upK0sXIZp*zrR7j(Z-SOfn_+>8_heGCRfTiV*(Qfdn|;cehjthnR@PQ{56K44qC zIO7A#>I*kk47<&SM60_tu(qL?#}U|+qN*#jM#&#%yi{B0=7wZ}DQ0iyu@!AB)U~c! z@yQ%;mzW0jHgGCcJdRBgE>O9e@B`AtCZFiwrb6w}#-deIqgST*0ryHO%xp9ZvP2!_ z?E|uf6%s(mtL@j6jmUR{Tas8xLj7%JC zJv32WKP8%rx`{@P8*J|`tgu_zLwN61mz(Q*iDw*qW*?!0d4M(W1%1Vf0us;k7uJ=u zGS0LC0*7ipXt#c#=*e6Hv)}+bU{nqgJp(L&KR{8GwrsGdZKMtnU5(v?MMjW~xuY=D z!NEl36JH9K#Kis>(aJMYjPwD=MvC{mfX7(u5uZ31bNDD> z#bOny%(0^dHUij4nX|@b}vb0t`N_KoJgH^eKp z6(+nX9#%@8-6X69f52wZQCPNLTW&jc@jF62oH1vau)h_sap!4n+m5Bul00XpP)`@^ zIDTxGn5Vi0n`N29cMFdXIP{@-+Ip^J_WO^TPO;bvufi_t&_|-RHOsAAhw%MY6SZP_ z%o!isQ?%?8jG5IVb^0j&)HbiXLfoq~AC8M;NU>u9KcYxInB$6c%Tb{=v9>m`$CUzV zSGD$Yao%o_WiC7+I;pLpbxUyS3q_*#bi==&p=){Ri=ZeZ<27>7w{iQ%=lrop1#_e0M@au8NCZ2wRG7*MxPZ zSDF|6E}l^Fz6@sEbzS7x(#qh7w{AeTW%#7O#8JC+>yGHH{IMI;-jT{sFkhDGc4-e< zlLvCA`D-Osph3CPty%X}#eo{0!@;S{0l^wJ>#nMUW_qZ0SaGVXrAeIB@K8*hJKfP* zUyKo4stPwfo*1pY%{R;36szsGf)Dhc7N;%4K&U$&M9_H6@~4IMw4>ZL4q;{qYCVaX zy7tP1expryLnS}A>Y^E&q&?__uzAUvddg(pYN9=(uH#ia%%=`Gw$H<3sg~v^soEel z>`Cd`eAVWbc+=dLp?&4FU)D_fMd9aUY1S<4l%qYY=IAZ-V^_ZBQoY;PQu|ZU>}suD zw9mpD3bjw{v7ORRd)VQ1r9Jq9?m$PYXUdP7nV!3~XPM{!F3%l5sZe2@RpO zirMRXYkSnQ9dm3ytymQd6zZCv_1DH*_vY;eXx}J{B@WgeQ+e6_S}d5_UcY^))<$*V z)-bKT>UzOQt&J11W{uYBsk*ffYCm&V2wMDtS+{Hg4CfU+V3KCJq*9}Ja&@`IBbrd| zsp{KJ(GENGQIBiiJLSr$)inBa&AL}r^hqz?N|JZ7@>id|gYk29s!JW`fvrX%OPq4~C0msV6; zCVds0$jc}3MK~gOZ&;%pR{6AbUYAE-I<2qnZ~AN6FA5+3hW3yUxJES>Z_=I?)|R^r z(pr5 zhbH43iKjtt@6sllJ>Q4FD8CrKOZ!eO<%HD%T@ zVF7?9X6$}#Jv1o5v%V(gzK^ve7DffUOfrAxsr488&qNu%`BeHgM`FCY(*k z|1dXvrd3o!Gd|avaUX8m7usSdZ8z(7N{g}qv>JO_%k%+j&uHrDF35lh|4v&CK+UT% zbKCdY49K;C7C&ewd_dHXTBQ$&y{KIQa2Vn1x*7bFwu^;Zm&doQDcle@C?=-fuUT4* z5p=Is+YI?xdsi(rD}{&u$2@dJn`$pS9-Ek)Vsr~E#X4DO>rJAh0ZfXyxO~ST28g4ngq-JrI_CEHL-i`!w`5OyRk-h@H zF&K|QcK<5dnq4*7RI!*LhA%XIb04S^E4<@Q*w7o|}8I6MEH9VfP)H36PA0d1tZm$0INyHFl-%4Z5?MS$I4Bc)SU^|-F7alWlwgiHn1MH$X2O1rSqHCio$-6MB;4-$Lsk;N>?>Swu4)5!R_qf9sM?krbZH&$iF zrOxv6kXX!7F#Q{!@4CqC)&oeq2Bmrf6~m05?~yS^dXbDUPIQ%P(Q%0P7&E$|XKEj= zW_`cz5-~af)8!k!%qZw7Kl1GY-M!$RKB&028aZVz)oe~5Ok*E3tDj=x;KufsjjV^; z7Ui=0WR0C=w}G;6HRXmuaB-)dacZ!<=?f#LhNxyvP+2@wj_0niu+4ChVdxLYuPv0? z@LzgBeyV(Q+erD7%GZuU?zQORF;Xq5%IIdd2jx3Vlw&&S<0YQwsgh@c90Jd>&2nI( z{1NT9Op*hz;#j9Eyi6EF?P#3xrCoD)jF~f8hN?TjeF$!e)W-OBifm^rdRRW;drE3Q zEbl|Z?8oI@9+6-9fBX2o2v zeDHRFh4X<~Q*~aXijBtk`ErFTmeyeEr5bY61Nc7I-3Xw8;v?))wk(&&yiv)Vw?e90B0F3a{9BEeuY8v=a-}@rYFu?jydq|sxvS)(&i2Y< zY*{T|bsXqL1RmcJr7t~AE9~eVzDBlpJZr#OIngN}dKsE~8^^wam|SCFc+_fYTwO13 zdMU2FD(`Zr<6oCMobs6svbR&t-6-#MBD-2%9#ISJQ`2Omx%o{*6^GL%InXJ0+gz>N zvbU?tXSP)9ma?_FJmno}IBmmCYo1%P=g_;DNi{k@lBO6v9?|+6M`ml%Ft^L=HINf% zvO*3tB6rFgH6Dwg5zQe(;qEgZdmpQ-_td2Nf<`pcYGx*X0Pps8rg(R?68awbZ>N6! zf2>8+$oxp|at8DINAid83OEvur1s?%UhG1U$=D~;jM)8ZiL*xCJhWeCIgIpAq&nSu z9X9t<`HAIr{GhasRfuxUjKm6g3vE@|Ogw}!u!4eN&Ny7HQ2bF9^{`v2;CQp^n0y~R zu`VE%cKS>vSa%`D*yHj=cGz%#u9gjZhq~o+`2&ukL}u9+@@LEOAm#yM;g@h_Z1NRg zwmT(9Ir`%L-3%6JFIBY(4Vf|VRTgDbotBeroBjP2Uq5rr*K(b=bv4Sw+rP)GGqBO_ zJ9$T4bQtZ<%5Us&XC!?uvB5X^Ie8YELJ5y?>71-o$I(ka$RE8AZ15h1dTqtHb6&Rc z$}ad(zUB3E^_E4tapW^Rx{A9Xhj|Bd)&*J5nF)%bjZJanqI|*2!gI+NClY`170*-` z%Pu>U(&+TFe8b!9dUbLA75QonCGymZ9*vEezsM(R)ZT3iPQ5DM^l~_JRjSv!w*4v_ zs2G0gniMKO^P5!1Qy2j&^dE>z-jPKVypH&&R@12niL?Hc-{Bd!2e*niv){mCS^=lR ztCeQAo3a^mAY;xgIRf|Bz$vRr|7C3_urAzhbh<4+gdFS_!7cdC-+}v$ zoJu*|hhAM-0}Wu9@l%y_8(&vppMqb3Mp~83bhQLC+-<&-t|zD-Se(s%Os`!HP2qYZ z3-RJ82uH&r>Sv6bArp)pLjM?V>scK#=4twK)ytXGzxDxK*T46g>XNRnvQ9;o;THPo z*li=A8&QFJnvoHppR?u}pfEeorv&L8?b766y{#&pH@Ai8cm)C_1EoBpNtj+~)u)8( z*lZ|@dA0QWnCpmTO}s`Jp^vvlr%X&WhD7R1MH?(3*CX{c%!QH_%2r3~%di%x>9^2q zQCnZig4mWzp{|c=nPy7ht&@1^<*QoqaJB!QF^p_DOVrq z;Il0JGYGlBml*@{^dKX*l|Irqn5X+2^NaLJII`h!xN-)5(Y(@Je}TC+!x+kI=d^@r ztYux{5?cc&AlBSg00pelhC3Cv(-gwO2ZA@2cYpRY_Fu z=56TiK`(UR~vo`k7q^z=eD)EYjpb`s2*sD~~ke>To^7`1k#KjQPu8xJymqW+v+A{-bK( zFkRggdbJ13Ti(Sa%eXQ^|F{I+u^XQ$;0h_2sV`qLbMuNA-{-POz$%s`lv&vKfD;lr5BsOV;R>nsa|V5#bo z8d%K~t;jvWd5~N46UR!hfN4@{c;<0uc1UXNsIZ&*O$D7k?2k{tQ*PlxZXeGTwuhZLbwC%K?j?kBMmd@kco|hb* zmk^!jV#y66qZ9ISnz@)|n8+-bWz?JoA}TX48J`l#0+yE?%v{l~yku8&iOT^Sc=4{} zcov<9H<4XniC+;>3d(T_MX1BfF5TN!wRdIb=73vdG)NjK(r8pR($zOhNy)CLXfVyq z%X3BNMrLIvCEMIfAj1-vlnjw*(g0sM zv`7?jEV(XEtW2%L;`lRhag|?&1q6mQZypvH5Y~KJXQQ)T^gUWKXS5)huLo-RCAaU$AT3`D)brVZ=1c41 zBAGYPSh0)gI-XU`4-5+n%nAq#3%JwB&#$?^f1zKPpQZ=uL1AG*VL>wkJ7xscPj}@@ znXhU2Gc!5{=DX7C+sFiv27y##NA4aQl^YZt(>ke9O2~u>Arl{eFz~^^Nt&+tmB;|S zx1L@vv%6by(DH*^_zB7n)?F?=xD{&V*Gt#)-Q6>TL9PeLk5to%lY$@G7B!|*NRvj5 zT1Q6*=LQGohK1!;x?*#p1M6hO_<5ppV*O$=>IAZ@S(y8T7hS3@i{s)s(($ERG`2@g za68+X29@A7#)pWc@{?@qGq+?tBAVf=w`jmF0Y7pn#}tlRggK596%FTr!^vEP3pkn2 zH-&?7DB+H_*E*DNs${Xw9p`qtOKz_T327G=#{UWqZWkKb?o7c`1)-f5-5q*I74BZt zDKw>F!xj+{?sfsOwL7JyW`(k#%(T?IYu65J=Z=hM(Xe5Y(9kA|B+}h3uy*acQ`0g- zD}T#MP3u%UHlUq5LXo6|vW@RFeJ29);@qr{R|E?}p~R9=*~pg8-?Nlycjs=0wT3$--&=w^?f2vfEUGDT!#BTFU-kG#utSJtX>I%B)%pLVOID=WgFHY zGQzSK;;l6&bHWs5UT#a4X_>q(OJLJOqM|}r^8T&?0Ri;_7U)vy3-n;!FIWZyblo2o z-m-CW`jxcCja!D{r&V&}v|rL1C$|g_tNfDv5E&X0RopcoJ|KVvJl94B`MH9n#Q{}a z&!;6Pw@{5*Bqyix=$g=v>f1wX)T?%jIIJ0U@OcaNG;J60IwiG|5<{3h%D%5BE#2{% z$inQj^bQgD>5!h5ot>W6u~tMxt&VBwL+@Ey?9NV2EesFu(VPe5_XrO!Oij%S5W6F4 zbx2Fg&Pq#fA5p7TMEmr#tn9S34z(igyc8J7{c6`P&dA7a-o1PC?2L@!+O_>SLNiH{ zRUhHe_zpzw?zo$LNL8|=WJEFqL)-sQh=9j>-P0Qzy*`<%+#lq26cp+^PisUn)R&*R zne|}*%;@NBH3;g9PmE2HOA+abpeXsDNcih1DJlJsTIJ;QiLV>%miTc8*NyL!lhf*d zL4EIbkCQsL46-F4j#vgGervGM;^&fit2{0ThADHU_A zxe2N6u}UJ+3e=2uyYp;BAGdpqLWD#_z$5e$xWtEIJGG)&)kY7-=WDjb>%qsB=SE_q z;B$|pyI2mqx&R-!*tXA53yx@-nS(lvg0jCW9p4!>O=<>&TAZw5Y^tlR2H3U1$3J=T ztR9wzl4eb#B5fH_)_C$STemKFqM&u_E|Vj9kdB`q9yz&7*66H(q0!NyOsd}l0sbBT z6zk{D{rzjZ`{{l{=(rb^0a6bO48k|S!7dva>;GSoCBTYTZ8;(1y85T5XADlyNb~PH zKExf!$Hat%#>9k%#f;&B?vU|a{nIki2WOmxd^W{9y~C9G6D@C# zuwq4~6*;n%`NIAO#Q%STbEhq_U>>W2SatuU*Z z)?{?&9jpGI&3QkYyyPGH1pE*5h+mA-s&0wr@f~|(0Pq>LGFcHJp5>t&%#yL)wH!{F z&iWtSj5n5UnNu7R8X8}3SV6&@w(U{oztq-;5v2uYvm27Uq68*)=wCimp`qb&6Moyo^@g)b-aFtKH&O!m2^qISNA^-je=%GJ1^Bqx<5}p9Udz0g{1I~D2Io_ zk9ixJMO7#Ivf~u=iTj}la{o4pC^j(oke9fddTHIPTQoVJw zv#J&9pGk44H{Ri(1gWyhzxYQ|b*j12-Jx+5b8!F6Yl?F^!Yq;g3Z=;76qwvq_kuM! zsIoI;s{Bu!qqW1?N26F~m5f3YM~c%_c^1f-a`dBK{0gr(ILa#88Z4Q^BOmo@;8V;3I0Pi)4*sogk;1R<61h?VDJRc%{PsOH%ZzYpNT~ zz1>zOQAs(MQ+70Va;J-4*cdWKPl!~+4uO*oQ2OOHQ8J*eZ!$ZiYLY%<<18Pt=4PFo z8rHTrKISD^iCl#ll{=~_D_90plAdo{Lo?s(QOYDBIZCPAiENH0s%{FBW#f##ekkJ4 zrudRVD}y*e&dF81lCJVG=%6Yix3rs$TqTFb?i}Mv(K=TAQTyymfThnrH^DLWig z?vz!(9a!b6L$OFT4Dh%1ipFUJ8tlnYp_1yBQ&s{UBBxH}s;*|e13Ps!6;<@AQx0FH zP)((5zPOe2MncL}2FYlojPOrBT~Sw44{LPtScq!za1#}IRI8eka5P|*94%B{sL1O@ zPDRlXpvqQKsJlv>{v@C}4@q%V$&vj}-5h$wPK5!Loc^l(pGmn>%l{^M`MZ6BEFXz( zuK3nWjvh|#$p0s7tr33@2Z|)t%TARQTh&d6Ma^8PT@!Xxz}xmd%Q+%dUhYjb>rmD$ zCN5>#=#m{?o(_#;CNIp?1XSi#^-3>?u4Wk*=cLjaB-NLixoWFum97)KIK{)uFWqA3 z2z7+0_0*|z1U5#UupBF_W>8S}u)ESs6`dfjS}BoEkZ`y-xn(-V?S9L-6sVdi&Paa? zO*Jj9%F0n{)~OykNwHVGRm%Tw=?L(OM;kTM@yoJ;%9SE2cghM@gpS^dxg$i;Z1yHa zr^-%Vv)-XsIMu!;E=xnCQHcLrvJ?<~Db7nv!ur;lq}We7>ioq{O0ze)(9r&gK!(Eu zPP;@`5oM0R$jdP%bJ2x&5v+F-=?5X-zaj43Uc;ZbnobmanJ5f@yea$wQ3T+~e59>J z(d&q6$HBi)S7#9RA;|0gPE@Z4I<VcA@Mj)DPCK|gE;qqIeiG7GBLBQlxqDRnv%3Pwy2N6wsoal)QL^D1ndI~aT zBRviLT(m2h2W{qWC3+6&c`$ncj2CwxDuohDL1Y{!TJaKARWMnNd<~RZ`x?=;V4E0yR&Kcc-6MElV8lShaS7Q+7y z2V!%DhR4w0cn_k_4`MetiRfe;(U)6^PK_q|Y8=t&RzzP9!eIx@zk|TYIpAyW68#SNdLYrCbBS&g5#2=l+Ynv}xau7KcpF=ehbp6q z$s%I9>hAMZI{Nxx~3BAwvkv5DA02{vEF{fO8N{X)^{(le!mmDZxFG8U^HkF zu_4*Sh87VU20;&i;mAT_9+XGlCN}mZVhXu0OG< z$fsQHW=`^to zBZ$4Rk=UD{dGi9Xw@|+s!nc4&Ip#mx3MSh?@ZKO|JEjwRe-g1>TZw%Lf<0icw?DCu zz;qv&@4rFp6DW58N_@J6SOw}1p?nzhNAi(&5<8Yn?6bYZPDBv<;$31V4-z}&N9?N} z#J&dZ3_9}dN@8a(6FXP3h}ik##4e!nCkVSzMC@uDvEP~!`vc`afxij();MB+LCM=- zcn7pqdvVCWOeiuXlrZNdhVwfI-q`;!S1~Piaj2t|H>8FA;Bwn}lYkiD!aIc75VG*~D`<63++o z=Ez$@P%E@4C?wt{m3Se_h-$n;9MWFm9ZwR!JD+$_AL94SB;NUB;@yT4@3ED5Z?x?j zNG1GUG`?A(73-M=xpZ7cQ1& z_>vpMm!i=!FkVi?SF|F&ayjvrrW0QSp)aG+Ixv0(<@KO_4fz`38DqzeIc&6xiK|_=gafX{!>e(z@DAKfOtza)nE#~p}&Qbha! zn0*T22Vtf|dx;-`LdVeH7#e(r^6^Q;KSzE7Ouv{({3L{Y358ExC4L$V&(tS=wvhNa zLPFgS>xiF6`f(%ii%p4Nf^wH3>t~d&yhQvL;7YExBK|87*MRs94S)NV`0wZNQhXrs zKl>BE0cCDM`@dEazoQYaT!bsJRwQ^Jb~kt^t=A{v*N{X2^56&(Aw5Wh0beVdM8vx! zq85;d8AKvB4r?~r)V)BW-a!%xr%5z8P9-8~1c}CtNu+=<6$EL>GYavh)oc=(lkh46 z1m-|MZWj{yD7W+@QP6=zo698H-X_rzsR;Pu*GP2UN}|g_5?z;*=mvZbDADsIiQXef z^Z~E_Q1HHuBnCkEpr%N3OGpfc@F749g|;KmaHNK`mxN~tiBT&_j6wZ_H%LrOB{3-w zX(x$?iby<+@}p?`7=%3jEs1F-Njw4iCkK%zL7SNuNX$Nm{l;7p^Pu>G9(a)iw9g+Q zu>|dw9>ehqt1_M)I5^pUcvE?L* ztusk%dzZv}7f9@YLc5^!2T=G!BC%%yzIjEyuLFtwn@N0p1fPmb$DbT4#5*s`NgRd} zN1)heU7+Z3FoRQxFVLHlK%N5PE2OVc{$?+Uv%vq5O5(z05XzCVGi59>m+G?Un1?^%cR}+IBA3WmykB(2x<4D zVi<&uc!ac3TS*%W!trP{aRF%$LFmKdNP85x$BIas3c4rqNqe$CX(e+>dulUj|5{1f z(-8K|BGR6{LD~Y~7ozTkE~J%)lD2dZUI~dIZABbuD~FP{x({hDeM{QQC20K0IbbHqfu~6h4kS4Q>HfVWhv$=gAdcjS%OpJ~ zNsdO{SkR4YMRGjaO}I^RV#x)P4?*DM=_DUU{>V_0Q^4S{`XnDmJ{8(Nfx0JAesVd< z88IYF`jecwk>pcQb{3SMjq=ksNY3d&@)@*y<`I(E+{(ElkkIDYoh0W)AdN%XO>#bX z%zu~Uff4;1`2&Dc~hwwiJw(fr$Z}agOA2 z)Rj#l`ES&(98Gc+>Q*lz`6BW)3rM~U8SA=`d}S}mSHb7C9waw}l6+${#(yI!H=**a znIt#Elv{u(hh|$}Be|^u$#;q5d$UPyKZhe5;P-zgiCG{&%qO|$B+0!H_)%k$`yxp0 z2kpnGKY+SVkss_svI6PQW|BuB^ypTS#~vs7*-Ipk7b0Q*FHamHd2%<&FCQU!>RXbh zBak5c41|0O;_r~o_9yv$KFM=&B!8$+^1L6?B$7WiL;}+bCrMshPV!P8l0Sta9VB`A zagsknF+@#y1s(V$o8(pCu3jd24f$`7^E(y_c^$xYF!^&O$s03C-bCFkFurw!QN zyO87^2)qNhayiMWp}0huOFDavbiS8#oPBkz2kA1KbUluA*KX3?`J@MQAw3YZL7)r1 zOnPWz(!&6U10Mmph(&lL9GOab)DhBS#*rTDM|z!gq}MGZz20Wh6C0A=@FeL;r%7+p zf%LmjpEil~jCV=TB+|2fCq3r^>3MTWZ(g7D7N~F4hxFDEhS03HMcx65bb?|Kx&YU^hoH?`H=V|vI--{c3y%r1% z3j+cGTGB6vX|M$!p zbLOH!2W&cE2r>2|r6Ormm3Uy~U;jb@?);t-K{_V1L%b^*Me#oZweS4?;-42U6m9K7 zP%wG%i!Voh(q;BP0tBflN!*KU6qJp

    2Cb^8boM4PRt)_LOC(`MoZ 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 V!+%tLS|9r6^_q*pQna1q{{V3{{(}Gj delta 23404 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

    >@chljNh3B!^rgS#q4@aMX=7l zay;@U2a=os0#7#}IT86JNc#-xo<;fDr6i|@lPv8+a@snQ&q3Jf5Pk;AGjEWb)q~`0 z^qc)8Nd&iY&JZN@d43zoxxq-Ikam!K0W@CtkmS66p!FgUUtC3UegG1Lm=A$o>Wu`1 z1t9ct3na8J1mQBki$H8K2rU5-18v4xl1ounK9=OaQNMgR$yZRfVgbolk-t8VrlBKmG4a>xdE!&h=vMCwrLH?%^gX8NF+a+L2}Dk z9N7SWe2pYlf&4U+(!mWR4}t07O(c&@ zB>ClQB#-7IA^w-g4v{>*gXA|)l00#m`n5Q0HgyXFHI!*D+Ghrl$SAp-%?3lLEDu}B(Ea>1AMMw zqmb7DTnCZAmXo|OjpR+#-2&lThe-YnBDZr%-T}iqfUB00tR9GWN9K^u){xG3k&d&k zuHjEM%T&_!NYY(9NcYMl-MbskCJ*x^VBt%<}< K)9-nGC;LBBhqpig diff --git a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts index 4dd55d20..3d928a28 100644 --- a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts +++ b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts @@ -1,5 +1,7 @@ import { ReactNode } from "react"; +import { ZeroXAddress } from "../wallet-selector/EvmWalletSelectorContext.types"; + export type LarskristoHellheadsContextControllerProps = { children: ReactNode; }; @@ -13,10 +15,29 @@ export type LarskristoHellheadsContractValues = { symbol: string; }; +export type TokenPrice = { + rawValue: bigint; + formattedValue: string; + exchangeRate: number; + exchangeRateFormatted: string; +}; + +export type Royalty = { + rawValue: bigint; + percentage: number; + percentageFormatted: string; +}; + export type LarskristoHellheadsContextType = { contractValues?: LarskristoHellheadsContractValues; contractAddress?: string; actions: LarskristoHellheadsContextActions; + owner?: ZeroXAddress; + tokenPrice?: TokenPrice; + royalty?: Royalty; fetchContractValues: (address: string) => Promise; - ownerOf: (tokenId: number) => Promise<`0x${string}`>; + ownerOf: (tokenId: number) => Promise; + getTokenPrice: (tokenId: number) => Promise; + royaltyInfo: (tokenId: number) => Promise; + buyToken: (tokenId: number) => Promise; }; diff --git a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx index 637d0407..4bfc265e 100644 --- a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx +++ b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx @@ -1,8 +1,13 @@ import React, { useEffect, useState } from "react"; -import { getContract } from "viem"; +import { Client, getContract } from "viem"; +import { useAccount, useWriteContract } from "wagmi"; +import { getClient } from "@wagmi/core"; +import { ethers } from "ethers"; import { LarsKristoHellheads__factory } from "providers/evm/contracts/larskristohellheads/LarsKristoHellheads__factory"; -import evm from "providers/evm"; +import { useEvmWalletSelectorContext } from "../wallet-selector/useEvmWalletSelectorContext"; +import currency from "providers/currency"; +import { ZeroXAddress } from "../wallet-selector/EvmWalletSelectorContext.types"; import { LarskristoHellheadsContext } from "./LarskristoHellheadsContext"; import { @@ -10,36 +15,109 @@ import { LarskristoHellheadsContextControllerProps, LarskristoHellheadsContextType, LarskristoHellheadsContractValues, + Royalty, + TokenPrice, } from "./LarskristoHellheadsContext.types"; -const SEPOLIA_TESTNET_ADDRESS = "0x5D003EBE7348d6D3aC1a397619ED2016711d7615"; +const SEPOLIA_TESTNET_ADDRESS = "0x2abbf9c29606b4c752944942aa9952ac2cdf552b"; const ETHEREUM_MAINNET_ADDRESS = "0x5D003EBE7348d6D3aC1a397619ED2016711d7615"; export const LarskristoHellheadsContextController = ({ children }: LarskristoHellheadsContextControllerProps) => { const [contractAddress, setContractAddress] = useState(); const [contractValues, setContractValues] = useState(); + const [owner, setOwner] = useState<`0x${string}`>(); + const [tokenPrice, setTokenPrice] = useState(); + const [royalty, setRoyaltyInfo] = useState(); const [actions, setActions] = useState({ fetchContractValues: { isLoading: false, }, }); - const ownerOf = async (tokenId: number) => { + const { address: connectedAccountAddress, chainId } = useAccount(); + const { wagmiConfig } = useEvmWalletSelectorContext(); + const { error: writeContractError, writeContract } = useWriteContract(); + + if (writeContractError) { + console.error(writeContractError); + } + + const client = getClient(wagmiConfig, { chainId }) as Client; + + const buyToken = async (tokenId: number) => { + try { + await writeContract({ + address: contractAddress as ZeroXAddress, + abi: LarsKristoHellheads__factory.abi, + functionName: "buyToken" as "buyToken", + args: [BigInt(tokenId)], + account: connectedAccountAddress as ZeroXAddress, + value: tokenPrice?.rawValue!, + }); + } catch (error) { + console.error(error); + } + }; + + const getTokenPrice = async (tokenId: number) => { + try { + const contract = getContract({ + address: contractAddress as ZeroXAddress, + abi: LarsKristoHellheads__factory.abi, + client, + }); + + const rawValue = await contract.read.getTokenPrice([BigInt(tokenId)]); + const formattedValue = ethers.formatEther(rawValue); + const exchangeRate = await currency.getCoinCurrentPrice("ethereum", "usd"); + const exchangeRateFormatted = currency.formatFiatCurrency(Number(formattedValue) * exchangeRate); + + setTokenPrice({ + rawValue, + formattedValue, + exchangeRate, + exchangeRateFormatted, + }); + } catch (error) { + console.error(error); + } + }; + + const royaltyInfo = async (tokenId: number) => { try { const contract = getContract({ - address: contractAddress as `0x{string}`, + address: contractAddress as ZeroXAddress, abi: LarsKristoHellheads__factory.abi, - client: evm.client, + client, }); - const owner = await contract.read.ownerOf([BigInt(tokenId)]); + const [, rawValue] = await contract.read.royaltyInfo([BigInt(tokenId), tokenPrice!.rawValue]); + const percentage = Number(ethers.formatEther(rawValue)) / Number(ethers.formatEther(tokenPrice!.rawValue)); - return owner; + setRoyaltyInfo({ + rawValue, + percentage, + percentageFormatted: `${(percentage * 100).toFixed(2)}%`, + }); } catch (error) { console.error(error); } + }; + + const ownerOf = async (tokenId: number) => { + try { + const contract = getContract({ + address: contractAddress as ZeroXAddress, + abi: LarsKristoHellheads__factory.abi, + client, + }); - return "0x"; + const result = await contract.read.ownerOf([BigInt(tokenId)]); + + setOwner(result); + } catch (error) { + console.error(error); + } }; const fetchContractValues = async (address: string) => { @@ -52,9 +130,9 @@ export const LarskristoHellheadsContextController = ({ children }: LarskristoHel try { const contract = getContract({ - address: address as `0x{string}`, + address: address as ZeroXAddress, abi: LarsKristoHellheads__factory.abi, - client: evm.client, + client, }); const [name, symbol] = await Promise.all([contract.read.name(), contract.read.symbol()]); @@ -93,6 +171,12 @@ export const LarskristoHellheadsContextController = ({ children }: LarskristoHel actions, contractAddress, ownerOf, + owner, + buyToken, + getTokenPrice, + tokenPrice, + royaltyInfo, + royalty, }; return {children}; diff --git a/app/src/context/evm/wallet-selector/EvmWalletSelectorContext.types.ts b/app/src/context/evm/wallet-selector/EvmWalletSelectorContext.types.ts index 9c6efd87..37eb6c7d 100644 --- a/app/src/context/evm/wallet-selector/EvmWalletSelectorContext.types.ts +++ b/app/src/context/evm/wallet-selector/EvmWalletSelectorContext.types.ts @@ -1,7 +1,12 @@ +import { Config } from "@wagmi/core"; import { ReactNode } from "react"; +export type ZeroXAddress = `0x${string}`; + export type EvmWalletSelectorContextControllerProps = { children: ReactNode; }; -export type EvmWalletSelectorContextType = unknown; +export type EvmWalletSelectorContextType = { + wagmiConfig: Config; +}; diff --git a/app/src/context/evm/wallet-selector/EvmWalletSelectorContextController.tsx b/app/src/context/evm/wallet-selector/EvmWalletSelectorContextController.tsx index c7c772dc..7bcfb154 100644 --- a/app/src/context/evm/wallet-selector/EvmWalletSelectorContextController.tsx +++ b/app/src/context/evm/wallet-selector/EvmWalletSelectorContextController.tsx @@ -1,9 +1,10 @@ import React, { useState } from "react"; import { defaultWagmiConfig } from "@web3modal/wagmi/react/config"; import { createWeb3Modal } from "@web3modal/wagmi/react"; -import { WagmiProvider, cookieStorage, createStorage } from "wagmi"; +import { WagmiProvider, cookieStorage, createStorage, http } from "wagmi"; import { mainnet, sepolia } from "wagmi/chains"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { createConfig } from "@wagmi/core"; import { EvmWalletSelectorContext } from "./EvmWalletSelectorContext"; import { @@ -43,7 +44,15 @@ createWeb3Modal({ export const EvmWalletSelectorContextController = ({ children }: EvmWalletSelectorContextControllerProps) => { const [queryClient] = useState(() => new QueryClient()); - const props: EvmWalletSelectorContextType = {}; + const props: EvmWalletSelectorContextType = { + wagmiConfig: createConfig({ + chains, + transports: { + [mainnet.id]: http(), + [sepolia.id]: http(), + }, + }), + }; return ( diff --git a/app/src/providers/evm/contracts/larskristohellheads/LarsKristoHellheads.ts b/app/src/providers/evm/contracts/larskristohellheads/LarsKristoHellheads.ts index 586d7739..f9b0dbaf 100644 --- a/app/src/providers/evm/contracts/larskristohellheads/LarsKristoHellheads.ts +++ b/app/src/providers/evm/contracts/larskristohellheads/LarsKristoHellheads.ts @@ -27,30 +27,43 @@ export interface LarsKristoHellheadsInterface extends Interface { getFunction( nameOrSignature: | "approve" + | "author" | "balanceOf" + | "buyToken" | "getApproved" + | "getTokenPrice" + | "getTransactionFee" | "isApprovedForAll" | "name" - | "owner" + | "operator" | "ownerOf" + | "royaltyInfo" | "safeTransferFrom(address,address,uint256)" | "safeTransferFrom(address,address,uint256,bytes)" | "setApprovalForAll" + | "setTokenForSale" | "supportsInterface" | "symbol" | "tokenURI" | "transferFrom", ): FunctionFragment; - getEvent(nameOrSignatureOrTopic: "Approval" | "ApprovalForAll" | "Transfer"): EventFragment; + getEvent( + nameOrSignatureOrTopic: "Approval" | "ApprovalForAll" | "Purchase" | "SetTokenForSale" | "Transfer", + ): EventFragment; encodeFunctionData(functionFragment: "approve", values: [AddressLike, BigNumberish]): string; + encodeFunctionData(functionFragment: "author", values?: undefined): string; encodeFunctionData(functionFragment: "balanceOf", values: [AddressLike]): string; + encodeFunctionData(functionFragment: "buyToken", values: [BigNumberish]): string; encodeFunctionData(functionFragment: "getApproved", values: [BigNumberish]): string; + encodeFunctionData(functionFragment: "getTokenPrice", values: [BigNumberish]): string; + encodeFunctionData(functionFragment: "getTransactionFee", values: [BigNumberish]): string; encodeFunctionData(functionFragment: "isApprovedForAll", values: [AddressLike, AddressLike]): string; encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: "operator", values?: undefined): string; encodeFunctionData(functionFragment: "ownerOf", values: [BigNumberish]): string; + encodeFunctionData(functionFragment: "royaltyInfo", values: [BigNumberish, BigNumberish]): string; encodeFunctionData( functionFragment: "safeTransferFrom(address,address,uint256)", values: [AddressLike, AddressLike, BigNumberish], @@ -60,21 +73,28 @@ export interface LarsKristoHellheadsInterface extends Interface { values: [AddressLike, AddressLike, BigNumberish, BytesLike], ): string; encodeFunctionData(functionFragment: "setApprovalForAll", values: [AddressLike, boolean]): string; + encodeFunctionData(functionFragment: "setTokenForSale", values: [BigNumberish, BigNumberish]): string; encodeFunctionData(functionFragment: "supportsInterface", values: [BytesLike]): string; encodeFunctionData(functionFragment: "symbol", values?: undefined): string; encodeFunctionData(functionFragment: "tokenURI", values: [BigNumberish]): string; encodeFunctionData(functionFragment: "transferFrom", values: [AddressLike, AddressLike, BigNumberish]): string; decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "author", data: BytesLike): Result; decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "buyToken", data: BytesLike): Result; decodeFunctionResult(functionFragment: "getApproved", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTokenPrice", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTransactionFee", data: BytesLike): Result; decodeFunctionResult(functionFragment: "isApprovedForAll", data: BytesLike): Result; decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "operator", data: BytesLike): Result; decodeFunctionResult(functionFragment: "ownerOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "royaltyInfo", data: BytesLike): Result; decodeFunctionResult(functionFragment: "safeTransferFrom(address,address,uint256)", data: BytesLike): Result; decodeFunctionResult(functionFragment: "safeTransferFrom(address,address,uint256,bytes)", data: BytesLike): Result; decodeFunctionResult(functionFragment: "setApprovalForAll", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setTokenForSale", data: BytesLike): Result; decodeFunctionResult(functionFragment: "supportsInterface", data: BytesLike): Result; decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; decodeFunctionResult(functionFragment: "tokenURI", data: BytesLike): Result; @@ -109,6 +129,54 @@ export namespace ApprovalForAllEvent { export type LogDescription = TypedLogDescription; } +export namespace PurchaseEvent { + export type InputTuple = [ + from: AddressLike, + to: AddressLike, + tokenId: BigNumberish, + price: BigNumberish, + royaltyAmount: BigNumberish, + transactionFee: BigNumberish, + amount: BigNumberish, + ]; + export type OutputTuple = [ + from: string, + to: string, + tokenId: bigint, + price: bigint, + royaltyAmount: bigint, + transactionFee: bigint, + amount: bigint, + ]; + export interface OutputObject { + from: string; + to: string; + tokenId: bigint; + price: bigint; + royaltyAmount: bigint; + transactionFee: bigint; + amount: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace SetTokenForSaleEvent { + export type InputTuple = [owner: AddressLike, tokenId: BigNumberish, price: BigNumberish]; + export type OutputTuple = [owner: string, tokenId: bigint, price: bigint]; + export interface OutputObject { + owner: string; + tokenId: bigint; + price: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + export namespace TransferEvent { export type InputTuple = [from: AddressLike, to: AddressLike, tokenId: BigNumberish]; export type OutputTuple = [from: string, to: string, tokenId: bigint]; @@ -158,18 +226,28 @@ export interface LarsKristoHellheads extends BaseContract { approve: TypedContractMethod<[to: AddressLike, tokenId: BigNumberish], [void], "nonpayable">; + author: TypedContractMethod<[], [string], "view">; + balanceOf: TypedContractMethod<[owner: AddressLike], [bigint], "view">; + buyToken: TypedContractMethod<[tokenId: BigNumberish], [[bigint, bigint, bigint]], "payable">; + getApproved: TypedContractMethod<[tokenId: BigNumberish], [string], "view">; + getTokenPrice: TypedContractMethod<[tokenId: BigNumberish], [bigint], "view">; + + getTransactionFee: TypedContractMethod<[tokenId: BigNumberish], [bigint], "view">; + isApprovedForAll: TypedContractMethod<[owner: AddressLike, operator: AddressLike], [boolean], "view">; name: TypedContractMethod<[], [string], "view">; - owner: TypedContractMethod<[], [string], "view">; + operator: TypedContractMethod<[], [string], "view">; ownerOf: TypedContractMethod<[tokenId: BigNumberish], [string], "view">; + royaltyInfo: TypedContractMethod<[tokenId: BigNumberish, salePrice: BigNumberish], [[string, bigint]], "view">; + "safeTransferFrom(address,address,uint256)": TypedContractMethod< [from: AddressLike, to: AddressLike, tokenId: BigNumberish], [void], @@ -184,6 +262,8 @@ export interface LarsKristoHellheads extends BaseContract { setApprovalForAll: TypedContractMethod<[operator: AddressLike, approved: boolean], [void], "nonpayable">; + setTokenForSale: TypedContractMethod<[tokenId: BigNumberish, price: BigNumberish], [void], "nonpayable">; + supportsInterface: TypedContractMethod<[interfaceId: BytesLike], [boolean], "view">; symbol: TypedContractMethod<[], [string], "view">; @@ -197,14 +277,23 @@ export interface LarsKristoHellheads extends BaseContract { getFunction( nameOrSignature: "approve", ): TypedContractMethod<[to: AddressLike, tokenId: BigNumberish], [void], "nonpayable">; + getFunction(nameOrSignature: "author"): TypedContractMethod<[], [string], "view">; getFunction(nameOrSignature: "balanceOf"): TypedContractMethod<[owner: AddressLike], [bigint], "view">; + getFunction( + nameOrSignature: "buyToken", + ): TypedContractMethod<[tokenId: BigNumberish], [[bigint, bigint, bigint]], "payable">; getFunction(nameOrSignature: "getApproved"): TypedContractMethod<[tokenId: BigNumberish], [string], "view">; + getFunction(nameOrSignature: "getTokenPrice"): TypedContractMethod<[tokenId: BigNumberish], [bigint], "view">; + getFunction(nameOrSignature: "getTransactionFee"): TypedContractMethod<[tokenId: BigNumberish], [bigint], "view">; getFunction( nameOrSignature: "isApprovedForAll", ): TypedContractMethod<[owner: AddressLike, operator: AddressLike], [boolean], "view">; getFunction(nameOrSignature: "name"): TypedContractMethod<[], [string], "view">; - getFunction(nameOrSignature: "owner"): TypedContractMethod<[], [string], "view">; + getFunction(nameOrSignature: "operator"): TypedContractMethod<[], [string], "view">; getFunction(nameOrSignature: "ownerOf"): TypedContractMethod<[tokenId: BigNumberish], [string], "view">; + getFunction( + nameOrSignature: "royaltyInfo", + ): TypedContractMethod<[tokenId: BigNumberish, salePrice: BigNumberish], [[string, bigint]], "view">; getFunction( nameOrSignature: "safeTransferFrom(address,address,uint256)", ): TypedContractMethod<[from: AddressLike, to: AddressLike, tokenId: BigNumberish], [void], "nonpayable">; @@ -218,6 +307,9 @@ export interface LarsKristoHellheads extends BaseContract { getFunction( nameOrSignature: "setApprovalForAll", ): TypedContractMethod<[operator: AddressLike, approved: boolean], [void], "nonpayable">; + getFunction( + nameOrSignature: "setTokenForSale", + ): TypedContractMethod<[tokenId: BigNumberish, price: BigNumberish], [void], "nonpayable">; getFunction(nameOrSignature: "supportsInterface"): TypedContractMethod<[interfaceId: BytesLike], [boolean], "view">; getFunction(nameOrSignature: "symbol"): TypedContractMethod<[], [string], "view">; getFunction(nameOrSignature: "tokenURI"): TypedContractMethod<[tokenId: BigNumberish], [string], "view">; @@ -235,6 +327,16 @@ export interface LarsKristoHellheads extends BaseContract { ApprovalForAllEvent.OutputTuple, ApprovalForAllEvent.OutputObject >; + getEvent( + key: "Purchase", + ): TypedContractEvent; + getEvent( + key: "SetTokenForSale", + ): TypedContractEvent< + SetTokenForSaleEvent.InputTuple, + SetTokenForSaleEvent.OutputTuple, + SetTokenForSaleEvent.OutputObject + >; getEvent( key: "Transfer", ): TypedContractEvent; @@ -258,6 +360,24 @@ export interface LarsKristoHellheads extends BaseContract { ApprovalForAllEvent.OutputObject >; + "Purchase(address,address,uint256,uint256,uint256,uint256,uint256)": TypedContractEvent< + PurchaseEvent.InputTuple, + PurchaseEvent.OutputTuple, + PurchaseEvent.OutputObject + >; + Purchase: TypedContractEvent; + + "SetTokenForSale(address,uint256,uint256)": TypedContractEvent< + SetTokenForSaleEvent.InputTuple, + SetTokenForSaleEvent.OutputTuple, + SetTokenForSaleEvent.OutputObject + >; + SetTokenForSale: TypedContractEvent< + SetTokenForSaleEvent.InputTuple, + SetTokenForSaleEvent.OutputTuple, + SetTokenForSaleEvent.OutputObject + >; + "Transfer(address,address,uint256)": TypedContractEvent< TransferEvent.InputTuple, TransferEvent.OutputTuple, diff --git a/app/src/providers/evm/contracts/larskristohellheads/LarsKristoHellheads__factory.ts b/app/src/providers/evm/contracts/larskristohellheads/LarsKristoHellheads__factory.ts index d266956a..13741345 100644 --- a/app/src/providers/evm/contracts/larskristohellheads/LarsKristoHellheads__factory.ts +++ b/app/src/providers/evm/contracts/larskristohellheads/LarsKristoHellheads__factory.ts @@ -23,6 +23,70 @@ const _abi = [ stateMutability: "nonpayable", type: "constructor", }, + { + inputs: [ + { + internalType: "uint256", + name: "numerator", + type: "uint256", + }, + { + internalType: "uint256", + name: "denominator", + type: "uint256", + }, + ], + name: "ERC2981InvalidDefaultRoyalty", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "receiver", + type: "address", + }, + ], + name: "ERC2981InvalidDefaultRoyaltyReceiver", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + { + internalType: "uint256", + name: "numerator", + type: "uint256", + }, + { + internalType: "uint256", + name: "denominator", + type: "uint256", + }, + ], + name: "ERC2981InvalidTokenRoyalty", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + { + internalType: "address", + name: "receiver", + type: "address", + }, + ], + name: "ERC2981InvalidTokenRoyaltyReceiver", + type: "error", + }, { inputs: [ { @@ -93,6 +157,38 @@ const _abi = [ name: "ERC721InvalidOwner", type: "error", }, + { + inputs: [ + { + internalType: "uint256", + name: "price", + type: "uint256", + }, + ], + name: "ERC721InvalidPrice", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + { + internalType: "uint256", + name: "price", + type: "uint256", + }, + { + internalType: "uint256", + name: "balance", + type: "uint256", + }, + ], + name: "ERC721InvalidPurchaseAmount", + type: "error", + }, { inputs: [ { @@ -176,6 +272,80 @@ const _abi = [ name: "ApprovalForAll", type: "event", }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "price", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "royaltyAmount", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "transactionFee", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "Purchase", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "price", + type: "uint256", + }, + ], + name: "SetTokenForSale", + type: "event", + }, { anonymous: false, inputs: [ @@ -219,6 +389,19 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [], + name: "author", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -238,6 +421,35 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "buyToken", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "payable", + type: "function", + }, { inputs: [ { @@ -257,6 +469,44 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "getTokenPrice", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "getTransactionFee", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -296,7 +546,7 @@ const _abi = [ }, { inputs: [], - name: "owner", + name: "operator", outputs: [ { internalType: "address", @@ -326,6 +576,35 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + { + internalType: "uint256", + name: "salePrice", + type: "uint256", + }, + ], + name: "royaltyInfo", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -395,6 +674,24 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + { + internalType: "uint256", + name: "price", + type: "uint256", + }, + ], + name: "setTokenForSale", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, { inputs: [ { @@ -472,7 +769,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052739921dc045d0890788fb174a14d93bbc46d449363600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180611b2001604052806040518060600160405280602e815260200162004d17602e913981526020016040518060600160405280602e815260200162005c5d602e913981526020016040518060600160405280602e81526020016200707d602e913981526020016040518060600160405280602e815260200162005eb3602e913981526020016040518060600160405280602e815260200162006445602e913981526020016040518060600160405280602e8152602001620061ef602e913981526020016040518060600160405280602e815260200162005755602e913981526020016040518060600160405280602e815260200162006867602e913981526020016040518060600160405280602e815260200162006b75602e913981526020016040518060600160405280602e815260200162005f99602e913981526020016040518060600160405280602e8152602001620061c1602e913981526020016040518060600160405280602e815260200162005ce7602e913981526020016040518060600160405280602e815260200162006a33602e913981526020016040518060600160405280602e8152602001620060db602e913981526020016040518060600160405280602e815260200162006587602e913981526020016040518060600160405280602e8152602001620066c9602e913981526020016040518060600160405280602e815260200162006e83602e913981526020016040518060600160405280602e815260200162006abd602e913981526020016040518060600160405280602e815260200162005b1b602e913981526020016040518060600160405280602e815260200162005e57602e913981526020016040518060600160405280602e815260200162004c8d602e913981526020016040518060600160405280602e815260200162005a07602e913981526020016040518060600160405280602e815260200162006bff602e913981526020016040518060600160405280602e815260200162006473602e913981526020016040518060600160405280602e8152602001620067af602e913981526020016040518060600160405280602e815260200162006331602e913981526020016040518060600160405280602e815260200162006109602e913981526020016040518060600160405280602e815260200162005a63602e913981526020016040518060600160405280602e8152602001620056f9602e913981526020016040518060600160405280602e8152602001620058c5602e913981526020016040518060600160405280602e815260200162005ba5602e913981526020016040518060600160405280602e8152602001620050af602e913981526020016040518060600160405280602e815260200162004aef602e913981526020016040518060600160405280602e8152602001620065b5602e913981526020016040518060600160405280602e815260200162004a37602e913981526020016040518060600160405280602e815260200162006611602e913981526020016040518060600160405280602e815260200162006c89602e913981526020016040518060600160405280602e815260200162004b4b602e913981526020016040518060600160405280602e815260200162005b49602e913981526020016040518060600160405280602e815260200162006e27602e913981526020016040518060600160405280602e815260200162005f3d602e913981526020016040518060600160405280602e815260200162005419602e913981526020016040518060600160405280602e8152602001620054ff602e913981526020016040518060600160405280602e81526020016200521f602e913981526020016040518060600160405280602e815260200162006d6f602e913981526020016040518060600160405280602e8152602001620060ad602e913981526020016040518060600160405280602e81526020016200652b602e913981526020016040518060600160405280602e8152602001620068c3602e913981526020016040518060600160405280602e815260200162007021602e913981526020016040518060600160405280602e815260200162006a61602e913981526020016040518060600160405280602e815260200162006193602e913981526020016040518060600160405280602e815260200162004dcf602e913981526020016040518060600160405280602e815260200162004fc9602e913981526020016040518060600160405280602e815260200162005e29602e913981526020016040518060600160405280602e81526020016200697b602e913981526020016040518060600160405280602e8152602001620052a9602e913981526020016040518060600160405280602e815260200162005641602e913981526020016040518060600160405280602e815260200162004a09602e913981526020016040518060600160405280602e81526020016200524d602e913981526020016040518060600160405280602e815260200162005447602e913981526020016040518060600160405280602e815260200162005b77602e913981526020016040518060600160405280602e815260200162006dcb602e913981526020016040518060600160405280602e815260200162006b47602e913981526020016040518060600160405280602e815260200162005139602e913981526020016040518060600160405280602e815260200162004f6d602e913981526020016040518060600160405280602e815260200162005333602e913981526020016040518060600160405280602e815260200162004e87602e913981526020016040518060600160405280602e815260200162004ba7602e913981526020016040518060600160405280602e815260200162004e2b602e913981526020016040518060600160405280602e8152602001620050dd602e913981526020016040518060600160405280602e8152602001620058f3602e913981526020016040518060600160405280602e815260200162006fc5602e913981526020016040518060600160405280602e815260200162005053602e913981526020016040518060600160405280602e815260200162005025602e913981526020016040518060600160405280602e8152602001620053bd602e913981526020016040518060600160405280602e81526020016200597d602e913981526020016040518060600160405280602e815260200162006279602e913981526020016040518060600160405280602e815260200162006f0d602e913981526020016040518060600160405280602e815260200162006f3b602e913981526020016040518060600160405280602e81526020016200607f602e913981526020016040518060600160405280602e8152602001620064cf602e913981526020016040518060600160405280602e815260200162004b1d602e913981526020016040518060600160405280602e815260200162005613602e913981526020016040518060600160405280602e815260200162006d9d602e913981526020016040518060600160405280602e815260200162006c5b602e913981526020016040518060600160405280602e81526020016200624b602e913981526020016040518060600160405280602e81526020016200555b602e913981526020016040518060600160405280602e81526020016200666d602e913981526020016040518060600160405280602e81526020016200510b602e913981526020016040518060600160405280602e815260200162005361602e913981526020016040518060600160405280602e815260200162006839602e913981526020016040518060600160405280602e8152602001620063e9602e913981526020016040518060600160405280602e8152602001620067dd602e913981526020016040518060600160405280602e81526020016200691f602e913981526020016040518060600160405280602e8152602001620051f1602e913981526020016040518060600160405280602e8152602001620052d7602e913981526020016040518060600160405280602e815260200162006bd1602e913981526020016040518060600160405280602e815260200162005ff5602e913981526020016040518060600160405280602e8152602001620051c3602e913981526020016040518060600160405280602e815260200162005c2f602e913981526020016040518060600160405280602e8152602001620057b1602e913981526020016040518060600160405280602e815260200162005ee1602e913981526020016040518060600160405280602e8152602001620055e5602e913981526020016040518060600160405280602e815260200162005783602e913981526020016040518060600160405280602e81526020016200663f602e913981526020016040518060600160405280602e815260200162006023602e913981526020016040518060600160405280602e815260200162005d43602e913981526020016040518060600160405280602e8152602001620064fd602e913981526020016040518060600160405280602e815260200162006f97602e913981526020016040518060600160405280602e8152602001620057df602e913981526020016040518060600160405280602e815260200162005869602e913981526020016040518060600160405280602e815260200162004c31602e913981526020016040518060600160405280602e815260200162005f6b602e913981526020016040518060600160405280602e81526020016200621d602e913981526020016040518060600160405280602e815260200162005dcd602e913981526020016040518060600160405280602e815260200162006559602e913981526020016040518060600160405280602e815260200162006edf602e913981526020016040518060600160405280602e815260200162004ce9602e913981526020016040518060600160405280602e815260200162006137602e913981526020016040518060600160405280602e815260200162005475602e913981526020016040518060600160405280602e815260200162004f3f602e913981526020016040518060600160405280602e8152602001620053eb602e913981526020016040518060600160405280602e81526020016200569d602e913981526020016040518060600160405280602e815260200162005cb9602e913981526020016040518060600160405280602e81526020016200538f602e913981526020016040518060600160405280602e81526020016200694d602e913981526020016040518060600160405280602e815260200162006a8f602e913981526020016040518060600160405280602e815260200162005589602e913981526020016040518060600160405280602e815260200162006ba3602e913981526020016040518060600160405280602e815260200162006d41602e913981526020016040518060600160405280602e81526020016200635f602e913981526020016040518060600160405280602e815260200162006303602e913981526020016040518060600160405280602e81526020016200594f602e913981526020016040518060600160405280602e81526020016200680b602e913981526020016040518060600160405280602e815260200162005d15602e913981526020016040518060600160405280602e81526020016200704f602e913981526020016040518060600160405280602e815260200162004f11602e913981526020016040518060600160405280602e8152602001620069d7602e913981526020016040518060600160405280602e815260200162006725602e913981526020016040518060600160405280602e81526020016200552d602e913981526020016040518060600160405280602e815260200162006417602e913981526020016040518060600160405280602e815260200162005a35602e913981526020016040518060600160405280602e815260200162005195602e913981526020016040518060600160405280602e815260200162006ce5602e913981526020016040518060600160405280602e815260200162005c01602e913981526020016040518060600160405280602e815260200162006f69602e913981526020016040518060600160405280602e815260200162006aeb602e913981526020016040518060600160405280602e8152602001620065e3602e913981526020016040518060600160405280602e815260200162005167602e913981526020016040518060600160405280602e8152602001620059d9602e913981526020016040518060600160405280602e8152602001620066f7602e913981526020016040518060600160405280602e815260200162006753602e913981526020016040518060600160405280602e8152602001620068f1602e913981526020016040518060600160405280602e8152602001620070ab602e913981526020016040518060600160405280602e815260200162006cb7602e913981526020016040518060600160405280602e8152602001620054a3602e913981526020016040518060600160405280602e815260200162005dfb602e913981526020016040518060600160405280602e8152602001620063bb602e913981526020016040518060600160405280602e815260200162005081602e913981526020016040518060600160405280602e815260200162005d9f602e913981526020016040518060600160405280602e815260200162005d71602e913981526020016040518060600160405280602e815260200162006895602e913981526020016040518060600160405280602e815260200162004f9b602e913981526020016040518060600160405280602e815260200162005aed602e913981526020016040518060600160405280602e815260200162006d13602e913981526020016040518060600160405280602e815260200162004a65602e913981526020016040518060600160405280602e815260200162006a05602e913981526020016040518060600160405280602e815260200162005f0f602e913981526020016040518060600160405280602e815260200162006eb1602e913981526020016040518060600160405280602e81526020016200638d602e913981526020016040518060600160405280602e81526020016200527b602e913981526020016040518060600160405280602e815260200162005897602e913981526020016040518060600160405280602e815260200162005bd3602e913981526020016040518060600160405280602e81526020016200566f602e913981526020016040518060600160405280602e81526020016200583b602e913981526020016040518060600160405280602e8152602001620055b7602e913981526020016040518060600160405280602e815260200162005a91602e913981526020016040518060600160405280602e815260200162005e85602e913981526020016040518060600160405280602e81526020016200669b602e913981526020016040518060600160405280602e8152602001620059ab602e913981526020016040518060600160405280602e815260200162004c5f602e913981526020016040518060600160405280602e81526020016200580d602e913981526020016040518060600160405280602e815260200162005305602e913981526020016040518060600160405280602e815260200162005c8b602e913981526020016040518060600160405280602e815260200162004ee3602e913981526020016040518060600160405280602e815260200162006e55602e913981526020016040518060600160405280602e815260200162004d73602e913981526020016040518060600160405280602e815260200162006781602e913981526020016040518060600160405280602e8152602001620054d1602e913981526020016040518060600160405280602e815260200162006ff3602e913981526020016040518060600160405280602e815260200162006b19602e913981526020016040518060600160405280602e8152602001620056cb602e913981526020016040518060600160405280602e815260200162006051602e913981526020016040518060600160405280602e815260200162004ff7602e913981526020016040518060600160405280602e8152602001620064a1602e913981526020016040518060600160405280602e8152602001620062a7602e913981526020016040518060600160405280602e815260200162004ac1602e913981526020016040518060600160405280602e815260200162005921602e913981526020016040518060600160405280602e815260200162006165602e913981526020016040518060600160405280602e815260200162004a93602e913981526020016040518060600160405280602e815260200162004bd5602e913981526020016040518060600160405280602e815260200162004b79602e913981526020016040518060600160405280602e815260200162004cbb602e913981526020016040518060600160405280602e8152602001620062d5602e913981526020016040518060600160405280602e815260200162004da1602e913981526020016040518060600160405280602e815260200162006c2d602e913981526020016040518060600160405280602e8152602001620069a9602e913981526020016040518060600160405280602e815260200162005abf602e913981526020016040518060600160405280602e815260200162005727602e913981526020016040518060600160405280602e815260200162004e59602e913981526020016040518060600160405280602e815260200162006df9602e913981526020016040518060600160405280602e815260200162004c03602e913981526020016040518060600160405280602e815260200162004d45602e913981526020016040518060600160405280602e815260200162005fc7602e913981526020016040518060600160405280602e815260200162004dfd602e913981526020016040518060600160405280602e8152602001620049db602e913981526020016040518060600160405280602e815260200162004eb5602e913981525060079060d962001abc929190620025fc565b5034801562001aca57600080fd5b50604051620070d9380380620070d9833981810160405281019062001af091906200287c565b8181816000908162001b03919062002b4c565b50806001908162001b15919062002b4c565b50505060005b60078054905081101562001b6b5762001b5d600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168262001b7460201b60201c565b808060010191505062001b1b565b50505062002e30565b62001b9682826040518060200160405280600081525062001b9a60201b60201c565b5050565b62001bac838362001bc660201b60201c565b62001bc1600084848462001ccd60201b60201c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001c3b5760006040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040162001c32919062002c78565b60405180910390fd5b600062001c518383600062001e9b60201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462001cc85760006040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040162001cbf919062002c78565b60405180910390fd5b505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b111562001e95578273ffffffffffffffffffffffffffffffffffffffff1663150b7a0262001d1a620020d060201b60201c565b8685856040518563ffffffff1660e01b815260040162001d3e949392919062002d03565b6020604051808303816000875af192505050801562001d7d57506040513d601f19601f8201168201806040525081019062001d7a919062002db4565b60015b62001e07573d806000811462001db0576040519150601f19603f3d011682016040523d82523d6000602084013e62001db5565b606091505b50600081510362001dff57836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040162001df6919062002c78565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161462001e9357836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040162001e8a919062002c78565b60405180910390fd5b505b50505050565b60008062001eaf84620020d860201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462001efa5762001ef98184866200211560201b60201c565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462001f945762001f45600085600080620021e760201b60201c565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161462002018576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b600033905090565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b62002128838383620023c460201b60201c565b620021e257600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620021a157806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040162002198919062002de6565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401620021d992919062002e03565b60405180910390fd5b505050565b8080620022215750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156200236c5760006200223a846200249860201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620022a657508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015620022c25750620022c081846200252b60201b60201c565b155b156200230757826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401620022fe919062002c78565b60405180910390fd5b81156200236a57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156200248f57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806200244757506200244684846200252b60201b60201c565b5b806200248e57508273ffffffffffffffffffffffffffffffffffffffff166200247683620025bf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b600080620024ac83620020d860201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200252257826040517f7e27328900000000000000000000000000000000000000000000000000000000815260040162002519919062002de6565b60405180910390fd5b80915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82805482825590600052602060002090810192821562002649579160200282015b828111156200264857825182908162002637919062002b4c565b50916020019190600101906200261d565b5b5090506200265891906200265c565b5090565b5b8082111562002680576000818162002676919062002684565b506001016200265d565b5090565b50805462002692906200293b565b6000825580601f10620026a65750620026c7565b601f016020900490600052602060002090810190620026c69190620026ca565b5b50565b5b80821115620026e5576000816000905550600101620026cb565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620027528262002707565b810181811067ffffffffffffffff8211171562002774576200277362002718565b5b80604052505050565b600062002789620026e9565b905062002797828262002747565b919050565b600067ffffffffffffffff821115620027ba57620027b962002718565b5b620027c58262002707565b9050602081019050919050565b60005b83811015620027f2578082015181840152602081019050620027d5565b60008484015250505050565b6000620028156200280f846200279c565b6200277d565b90508281526020810184848401111562002834576200283362002702565b5b62002841848285620027d2565b509392505050565b600082601f830112620028615762002860620026fd565b5b815162002873848260208601620027fe565b91505092915050565b60008060408385031215620028965762002895620026f3565b5b600083015167ffffffffffffffff811115620028b757620028b6620026f8565b5b620028c58582860162002849565b925050602083015167ffffffffffffffff811115620028e957620028e8620026f8565b5b620028f78582860162002849565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200295457607f821691505b6020821081036200296a57620029696200290c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620029d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262002995565b620029e0868362002995565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062002a2d62002a2762002a2184620029f8565b62002a02565b620029f8565b9050919050565b6000819050919050565b62002a498362002a0c565b62002a6162002a588262002a34565b848454620029a2565b825550505050565b600090565b62002a7862002a69565b62002a8581848462002a3e565b505050565b5b8181101562002aad5762002aa160008262002a6e565b60018101905062002a8b565b5050565b601f82111562002afc5762002ac68162002970565b62002ad18462002985565b8101602085101562002ae1578190505b62002af962002af08562002985565b83018262002a8a565b50505b505050565b600082821c905092915050565b600062002b216000198460080262002b01565b1980831691505092915050565b600062002b3c838362002b0e565b9150826002028217905092915050565b62002b578262002901565b67ffffffffffffffff81111562002b735762002b7262002718565b5b62002b7f82546200293b565b62002b8c82828562002ab1565b600060209050601f83116001811462002bc4576000841562002baf578287015190505b62002bbb858262002b2e565b86555062002c2b565b601f19841662002bd48662002970565b60005b8281101562002bfe5784890151825560018201915060208501945060208101905062002bd7565b8683101562002c1e578489015162002c1a601f89168262002b0e565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062002c608262002c33565b9050919050565b62002c728162002c53565b82525050565b600060208201905062002c8f600083018462002c67565b92915050565b62002ca081620029f8565b82525050565b600081519050919050565b600082825260208201905092915050565b600062002ccf8262002ca6565b62002cdb818562002cb1565b935062002ced818560208601620027d2565b62002cf88162002707565b840191505092915050565b600060808201905062002d1a600083018762002c67565b62002d29602083018662002c67565b62002d38604083018562002c95565b818103606083015262002d4c818462002cc2565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62002d8e8162002d57565b811462002d9a57600080fd5b50565b60008151905062002dae8162002d83565b92915050565b60006020828403121562002dcd5762002dcc620026f3565b5b600062002ddd8482850162002d9d565b91505092915050565b600060208201905062002dfd600083018462002c95565b92915050565b600060408201905062002e1a600083018562002c67565b62002e29602083018462002c95565b9392505050565b611b9b8062002e406000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063a22cb46511610066578063a22cb4651461025d578063b88d4fde14610279578063c87b56dd14610295578063e985e9c5146102c5576100ea565b806370a08231146101f15780638da5cb5b1461022157806395d89b411461023f576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a55780636352211e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b610109600480360381019061010491906113b1565b6102f5565b60405161011691906113f9565b60405180910390f35b6101276103d7565b60405161013491906114a4565b60405180910390f35b610157600480360381019061015291906114fc565b610469565b604051610164919061156a565b60405180910390f35b610187600480360381019061018291906115b1565b610485565b005b6101a3600480360381019061019e91906115f1565b61049b565b005b6101bf60048036038101906101ba91906115f1565b61059d565b005b6101db60048036038101906101d691906114fc565b6105bd565b6040516101e8919061156a565b60405180910390f35b61020b60048036038101906102069190611644565b6105cf565b6040516102189190611680565b60405180910390f35b610229610689565b604051610236919061156a565b60405180910390f35b6102476106af565b60405161025491906114a4565b60405180910390f35b610277600480360381019061027291906116c7565b610741565b005b610293600480360381019061028e919061183c565b610757565b005b6102af60048036038101906102aa91906114fc565b610774565b6040516102bc91906114a4565b60405180910390f35b6102df60048036038101906102da91906118bf565b610881565b6040516102ec91906113f9565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103c057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103d057506103cf82610915565b5b9050919050565b6060600080546103e69061192e565b80601f01602080910402602001604051908101604052809291908181526020018280546104129061192e565b801561045f5780601f106104345761010080835404028352916020019161045f565b820191906000526020600020905b81548152906001019060200180831161044257829003601f168201915b5050505050905090565b60006104748261097f565b5061047e82610a07565b9050919050565b6104978282610492610a44565b610a4c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361050d5760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610504919061156a565b60405180910390fd5b6000610521838361051c610a44565b610a5e565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610597578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161058e9392919061195f565b60405180910390fd5b50505050565b6105b883838360405180602001604052806000815250610757565b505050565b60006105c88261097f565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106425760006040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610639919061156a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600180546106be9061192e565b80601f01602080910402602001604051908101604052809291908181526020018280546106ea9061192e565b80156107375780601f1061070c57610100808354040283529160200191610737565b820191906000526020600020905b81548152906001019060200180831161071a57829003601f168201915b5050505050905090565b61075361074c610a44565b8383610c78565b5050565b61076284848461049b565b61076e84848484610de7565b50505050565b606061077f8261097f565b50600061078a610f9e565b90506000600784815481106107a2576107a1611996565b5b9060005260206000200180546107b79061192e565b80601f01602080910402602001604051908101604052809291908181526020018280546107e39061192e565b80156108305780601f1061080557610100808354040283529160200191610830565b820191906000526020600020905b81548152906001019060200180831161081357829003601f168201915b5050505050905060008251116108555760405180602001604052806000815250610878565b8181604051602001610868929190611a01565b6040516020818303038152906040525b92505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008061098b83610fbe565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109fe57826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016109f59190611680565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b610a598383836001610ffb565b505050565b600080610a6a84610fbe565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610aac57610aab8184866111c0565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b3d57610aee600085600080610ffb565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610bc0576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ce957816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610ce0919061156a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610dda91906113f9565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115610f98578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02610e2b610a44565b8685856040518563ffffffff1660e01b8152600401610e4d9493929190611a7a565b6020604051808303816000875af1925050508015610e8957506040513d601f19601f82011682018060405250810190610e869190611adb565b60015b610f0d573d8060008114610eb9576040519150601f19603f3d011682016040523d82523d6000602084013e610ebe565b606091505b506000815103610f0557836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610efc919061156a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f9657836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610f8d919061156a565b60405180910390fd5b505b50505050565b6060604051806060016040528060348152602001611b3260349139905090565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806110345750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156111685760006110448461097f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156110af57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156110c257506110c08184610881565b155b1561110457826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016110fb919061156a565b60405180910390fd5b811561116657838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6111cb838383611284565b61127f57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361124057806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016112379190611680565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611276929190611b08565b60405180910390fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561133c57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806112fd57506112fc8484610881565b5b8061133b57508273ffffffffffffffffffffffffffffffffffffffff1661132383610a07565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61138e81611359565b811461139957600080fd5b50565b6000813590506113ab81611385565b92915050565b6000602082840312156113c7576113c661134f565b5b60006113d58482850161139c565b91505092915050565b60008115159050919050565b6113f3816113de565b82525050565b600060208201905061140e60008301846113ea565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561144e578082015181840152602081019050611433565b60008484015250505050565b6000601f19601f8301169050919050565b600061147682611414565b611480818561141f565b9350611490818560208601611430565b6114998161145a565b840191505092915050565b600060208201905081810360008301526114be818461146b565b905092915050565b6000819050919050565b6114d9816114c6565b81146114e457600080fd5b50565b6000813590506114f6816114d0565b92915050565b6000602082840312156115125761151161134f565b5b6000611520848285016114e7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061155482611529565b9050919050565b61156481611549565b82525050565b600060208201905061157f600083018461155b565b92915050565b61158e81611549565b811461159957600080fd5b50565b6000813590506115ab81611585565b92915050565b600080604083850312156115c8576115c761134f565b5b60006115d68582860161159c565b92505060206115e7858286016114e7565b9150509250929050565b60008060006060848603121561160a5761160961134f565b5b60006116188682870161159c565b93505060206116298682870161159c565b925050604061163a868287016114e7565b9150509250925092565b60006020828403121561165a5761165961134f565b5b60006116688482850161159c565b91505092915050565b61167a816114c6565b82525050565b60006020820190506116956000830184611671565b92915050565b6116a4816113de565b81146116af57600080fd5b50565b6000813590506116c18161169b565b92915050565b600080604083850312156116de576116dd61134f565b5b60006116ec8582860161159c565b92505060206116fd858286016116b2565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6117498261145a565b810181811067ffffffffffffffff8211171561176857611767611711565b5b80604052505050565b600061177b611345565b90506117878282611740565b919050565b600067ffffffffffffffff8211156117a7576117a6611711565b5b6117b08261145a565b9050602081019050919050565b82818337600083830152505050565b60006117df6117da8461178c565b611771565b9050828152602081018484840111156117fb576117fa61170c565b5b6118068482856117bd565b509392505050565b600082601f83011261182357611822611707565b5b81356118338482602086016117cc565b91505092915050565b600080600080608085870312156118565761185561134f565b5b60006118648782880161159c565b94505060206118758782880161159c565b9350506040611886878288016114e7565b925050606085013567ffffffffffffffff8111156118a7576118a6611354565b5b6118b38782880161180e565b91505092959194509250565b600080604083850312156118d6576118d561134f565b5b60006118e48582860161159c565b92505060206118f58582860161159c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061194657607f821691505b602082108103611959576119586118ff565b5b50919050565b6000606082019050611974600083018661155b565b6119816020830185611671565b61198e604083018461155b565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b60006119db82611414565b6119e581856119c5565b93506119f5818560208601611430565b80840191505092915050565b6000611a0d82856119d0565b9150611a1982846119d0565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000611a4c82611a25565b611a568185611a30565b9350611a66818560208601611430565b611a6f8161145a565b840191505092915050565b6000608082019050611a8f600083018761155b565b611a9c602083018661155b565b611aa96040830185611671565b8181036060830152611abb8184611a41565b905095945050505050565b600081519050611ad581611385565b92915050565b600060208284031215611af157611af061134f565b5b6000611aff84828501611ac6565b91505092915050565b6000604082019050611b1d600083018561155b565b611b2a6020830184611671565b939250505056fe68747470733a2f2f626c6f636b636861696e617373657472656769737472792e696e667572612d697066732e696f2f697066732fa26469706673582212203ffc51b95cb41cd3dac1b5a726f08eed26491b4dc87a61b7c5fd6ba03bfd8ca264736f6c63430008180033516d5175744a6e46566163647667616f5a597269534b79384647716337435074594376676e4e6e7158466b4d674d516d6266553370746d4b685078515269726f58654b743435697859694272364c456a613563314d32706b48774671516d646f513831346546516e7064675835644d573570436b5861694c7636393459646d4c79626f617a4b424b4b39516d586841476f624859384741366e61474a7372564a74546e755467714c5061694c5267347163614b654d716f70516d5837535065356e6862626b5064634653654e79467461395044653263624250736d624e6e6662395376544354516d62714a347741343675424a385a6a4b746f4447467052595743647a624b6652673366335348654c7835346a76516d6134327459386b7470324554716845743461694c4e31514c37477735397552436d703545554a726365787752516d59414c383865425348786b506d4153415143314534574c644a4c623131735262357939595077756b71423561516d65487853416f656631795364474638564779546455416f345a68695a635937475562346869356761684b4838516d577667713957707953734c4c5145476b5261353173525148695353466e644d68637666334c6f33664e574867516d506e413662717858476d59537a38667a424d72516d38727a6f5a677270765973463153354641707750657564516d637661327a736a3458707170594673674544434769636b6b77696a6672537745434e525550426767707a5335516d646246444e455158653339637a4366704e667579464e3161733251454a505143476752453965513271616a6f516d566a767a4644676b4b4b5944747a344151614c52503175456d7a7a5253574d74334e537877484a6178755637516d5967326869376447656b6741554d77505036573761555a7651544d66466336773139783376676d6b56777855516d52787373334a69735342665a4665394b59355646596d484370705273617071766e6259773975777875764262516d665173714571416f746a45616f37366a71634a3476577255665a6632787959704a44636e6d66364741475248516d5a5539726177625343363938416261764865423435506154516156376b31796f74504138466457336b326f50516d6262644441434d356e6b477152473363536d6b3868594c34365857466b54387a766b626e7262636253716131516d5434476f586158355a59586e436d6b6964426a545777524c35737050665363516665636e4a5a644544443169516d4e6459623462716d3351767042464d663355787145454a4d5a72767a3835566f526d47386a7743334b334b57516d5033684a327a4257544b344674394258504c58336b4c3164526d6b51466f4150394752567a59354641373836516d627337686f5a57426e313233777951576d56794d6e51366a5959314541384d6d447142345a77417832386f63516d554b384e5765437245487a44415a7a6852763955744e3353393350486b7441744c514567504b4a635859416b516d50564c6a5933684e66654855554d474d757461394b7a6d6f48376e3859724468426b5071393132666d674365516d57546e726668514334437143414b5838576e47644b6d6b70586a65337a6633643855684469315476386e476e516d5a6b3632646436627658746769623742365a634b66377669336a43764177514171476a464346793641323834516d62647046714a59354e686968587746516b445a414a64346a7667555038595a6b41657179614a6b6a4e75506e516d63506931614b77465753746b615571636131725470684e796b706a48624b386a38784778593953543145314c516d51624b6d415a514c424e75557166726d6f4256426e42375048356f78573677417375344a5a35577034655868516d6345526f48484d3370524b5442424d3244696b75704a47674e314d517750435169397376586f754b6d463153516d51794d5438316d754c36627743547174363869616673776659315a434a3934576573794e4e48777163744c77516d54584b6577734d645953326a74484838365944707a61537a724d536f74727836344465554833575a46503655516d613451705864676e353731355777693444575171713146644a3377733941654e4274766b5a4c63483555646e516d5962445a32654b65724b32386443444a6e384b58414d754237584c47317454594d35477150797571624a7343516d5064376a56503451516575464e585462556d50486858506261623875503832706e3671424261566153384752516d5a4c4a7878634e33784738695a32737073613837397379397656485252774b38593258685244446f39786a76516d63766d5568325a5875324a6764413539727878437948647152543735684d5577326f554263524235694e4877516d58704372654636623375796254347838646b58614a5674696b32775254356f3451464d65525a6e7068435673516d6169735a377241435157426d425a72593752435842484d3977666743394c4474674d643377336654366b414a516d58447868357152615969715451767a50754476563173697656377a5750487250316142317959327967633850516d655138475276754242326f6f39716b657266596b4c4446523934516f56634e6a6d46784a4d51765062684a41516d665653335178536d4c7666374d455a57596a476d4d377665594a59724a7259547977704a644c4c396e4d7374516d586d62785554785147555554667833556a33316870374a793377626a5a5934706e6f436f3168575473386431516d5145556f4b416156756b596b74726635764344734a5675355459624c564e507154786a7a4146723262633942516d565642423869646647744d6f764d554e624a613973414b4e5056334c4c55323576566d6166507a7556673268516d61366a316d63573272706d5570665337757363536b434a71646b7341486b42413942525644336a4168564653516d537570616e7953766435527559506f6a5a6b325a4271433665757967504466545375315362337741426a346f516d544d7a7873486563364c6738754b674d4859555264755746727770414d5265715778335a7531686b57593572516d5976456b546b317952546831696e485077616d69467a514d63645a3252434b31526b35734746624e73784e4c516d615677716d3362706767797134394a6a486947536453363956596757777069754c697657547532624c783457516d61626b697a715769575341724a384a515a39317a58657758715a3153426f615973675636344d535663365766516d544d663467534a76584b456e5a4c6132594a4759585544595670464b786f5941725256707943765047586b36516d5a6545727846434754356b4e44684b363766695a6d5174763338424d76416a376e767a357348394274396f77516d52334646616b6347356e4b796e5731683234474363784445627768555a345a76337668514259314161337079516d537a48473766444b62623461345a725a61775a4748627179644333314b5054424b33424e615446316e577a67516d505358513644345a5a434b74694e667a6a47795a78656d544262676d445756543164567378336d674c697268516d636772515865783952417437514648594b4d5974577166666a6b6338514b464350415a657033535a4a353142516d4e6d7a314c4c554a677a3359767273346879686a6d45357941375a585741636d466b726f6637624759685956516d52454c58656f51644a504d68366279477977675155347a4c714c46527056434e67714b64763931594578686a516d63576e757a4679627945464654454750555350643447414668626f524a73796a6348364b7178745739753571516d586e6e514c784e4d5167566152704854614156677678375a444c4845366769744d484d595038525a45656a69516d566652457a71536163634e554d5141454e344e3957567a517845446441647858696d466d713845643539536b516d52486f447664624d5355544d6f59356e4c4b54746e7246554465547a6d677a7966397977684444577a676966516d66456e4d4c6a6e577869504d677855706a72657854697531344d5850456236536d4c42785464456a4e317765516d56445a646150354732435a4a625a5545684645347578313752537654506f69386e746e39644d555a7836616e516d5941505a7a456847364e79474175766a31376d52734152784e76733269485571796f67434731386632426441516d654737464d58716666453846547a7773456b517544617179665039596f624d6d42755934346348727858574d516d5765635045674479755354726a5a5251533471773743436e64675958394a5374626854796e69764437784a4e516d54356e634765337678423939456e486f354d6567345635596331385a4e364c6f7a46475538364b546e576642516d50374e4736733634415239334544526d625a39656739366e6262684e4e697a4b414341773437736d5738526b516d57314e524b6476347a34643855794274473737434a7652324e756838735431786e664b4e545a46574b387178516d557445685a65796538746e4a644b41674e314c7851475570317a5743483948504b69766b63474d4868707875516d5466534e7534334b56686a764777663374433142665144356667614665486e6861506f427036564171505864516d53526d4b6231566e69694e6b5875475a687a4b4466766a31504b5a50544b41716644674e70477548387a3674516d5961726f363977765937726f4146574446794343356468356b6e3137484e38716757555a4175636941366836516d58677a544653476b4a75784c614e524b504b74727058736445756773574c7935386a7a4d383137516b48567a516d55504a38384466733576386f63727a315361654a3578466f344e59534a5572344b32617965456b596a4d4e77516d526d4476325443524c636a7162613631454467554347634c7952765a6757314b78584a326e7655547556786a516d614b4e5936694536506d71504d68417667736a4b616a4a754e376f62446475396d6579534651766b5a505578516d574a6b4b6b5248336a756a597459327250743445707a41724676463473314775324865337477743872454766516d5a3973585472616452587265595a6a4e575553566b4b57464856356642647a47547478723171756d32646545516d66523965796731424868657761484a7832655070474b72344e685437734b6753736b45684a74746173546653516d624b4354333150506a45465672346b32373962767759763865545a52585977594b3263546b4758654b416331516d4e536952315163594255446b4d4b483946786a34615958366d425a4657674661715141646f4d447478533847516d5439566f4b4472326a476e7861396a6570546b6b746273734c735a58577973487142747a32456b78654a5272516d6150435a5963777848786d6d6639446f7a6f4c79687972777531663535436f45697564717534744a70736652516d56396b31326f6133574a5a517750676d7435434e487777717158683473706a7168514551504e473636466a66516d5a6a6858786e34614c7a6575787373735253376e6f615946397256704b794e555247454e4e64416a5a515751516d64463636667a544c394431455653327377356b547364705132653543314343436657705a4e4d557261477145516d614c724e736e624531635456614676666f6845373634476e766f6d314656684c4561587848753861776b6a41516d636765396e323852575a4e4e536f503764786263526a7061767a4d5a574d396244623450485461556a376278516d5947354256716f4d35344e4c48413264684c724e356a46763141724d456134716b4b41555277654d544e6f6e516d5435666d6b424a687a6b6273483553444745694b54437a446a38444c7a5851637a706e4c6f54557843416257516d585234573878636733394c4a75724471426161486b6f6d3770645036576d354e6e706a714346505332737935516d665a666b31624c44583251746b5845454247487957387067354c777179575a6d6e364268464a616355514454516d4e5a616b32396d4544797443597a7141386b7747586546566f4c5441535239713351704567444c4a65664838516d64747548504738726443426335694c746d6d545a7974786d71716e5079535655363837773241325838504365516d6453636a5838674770693652486b54676144686d614b616532524633324b52684c7741594645564372783742516d65704373744d6332656f45514a546b7465557a774c7757445038544e634259374131625838374e6463754b57516d517471447971747871433671683153516d554b3773356931364b4a3842534b733367446950764b5274646742516d616d46796532673343524c445754616265473248725a7456375a4165534534507a65517659567a7172383634516d655662614c373469684673385039383369545674616f4b4b6856434b5848675a713734346154317454394d42516d63596d6a6e333853677a414c717050624639435a57386359417358664a316d68747762674c7a647579686738516d534b3350765a756d79723835436574727a507961547855654434436255637171643279334c376f6578587533516d52655a445276664a43346670656239337161396f68385252524a4d74674568776471554d34734b41376b5846516d615a4165654e5835623966787156686767545442474d3270363745424d5576584e784632687376676e34667a516d5936437765723871464b6168764452505873397439793641696957346e7656564a6a5256507764516b76766d516d537a48343153324735697a736a6b5770523444427043733162367a335545627146614a484635695055474d4d516d557744695877525269356b4135666741424d446b37674e51507a4d434462796d5251756f4746776163573236516d525242643664356a6a724e396f705847597a4b4b42564c336b7763585561666556557969516f703753627470516d51397763594843464b386e756956376d35476b3637377167765a4e6e6a686f4b3138706366774878446d4a63516d5a545756686539395133473237714c695552617a3669643531336d57466a44613572713665564569704c7059516d53566e3442367234467436673848466e57327a58727941337776365362646d785671714d6f324731796a5941516d65566b66364e575a6a676768454457506142454a42486e4e635466776b41566138704a69434e686479453333516d4e513232714e6b54687a31635379504a7a415a343653336a4c75373152643651677075334d58696a73763472516d593551413355704d3253524c556e53736157395164684a576a556b59454d5254755343487345596e75457370516d546d5a5350444e53467a74574267583833396e69426364656155523742416d71476175725639574e69663944516d50793264474a66656131504d667061706b4373583379483152646a664773485845637a6e66726a415164357a516d584a46367434676273705742436772323534656d7671716870576934584c614d74794d475345657a436f4c66516d5656636471624e576677474b417176724d6d464d4d55396978663565426747694233385632445865537a7473516d57697652486b79434b4b73766b4d6a564e426a794851556278746e68616f673868623663734132584e656845516d57764a73616539625542646351704362726358336854546833544d7154524d48793171695a736576796e5034516d517a4b6d39466b3879356f73374a465a314d513135563979534142366b31546e3437666f56336d686633647a516d5a5934474d5753615553314539794b475971443559355361647a55776457726473344c4d785a443139794e58516d5939706357545a486474783857557071795a4b6a595859797759784d734e36316438535a7a6e46586b5a7676516d5232376d4d546d314253586850694c367a4d5776554c7359544b354e3158795136385752663235617852324b516d504279756f63374365424c64334a3252684a505448424b546173366a4e586d34424532584872463877733175516d59343155564753785146454e705a363248554762324639785034665a4876674e36386a473936625579614448516d54344337626441576f776654316d445264745950617365546d7065646839365a556836704135515431777574516d664556647350536b32754d41445044626559725056664a65664e37724d5a4373627563697356555633664668516d503844537477546332417a4a3541656b564a4a42587278577077594d716a74694a723246355972764b555a70516d5861325a566d34506d6e3543344c43615759654259777a47434e7a51774532477951484a665945336755506a516d5562474d4745736a354a426344665172587a38715333456a4c556d786a4a616b7a316e723145776375694245516d5376674c76794a476847545636706f51714446376a7a7050507766546e7564397a4869665954784242616343516d6558664172413744713762784675645a3731596b69587246614658376e79596e4267683655456833737a5932516d556e6b4174504a3167326f4678596432746d5669674841456e384d773846636233757a417173416d37467574516d625937717a5a5566374d3562654d6666344c377953367671783565443663795a7750415165314a73426d6331516d61685979444c4669563748734a6f3432734b555464424d506b72624b6534313465484b4c6a6b746a555a5841516d585463646e42794142754e69744b345876445845543350316751617368474546543477506334784b68515548516d5541596a6b706446775867556552336d794a7161544635727542575061613646473941435177395439563846516d4e616b77793831396a4462414d5a6b55775454756b6f4234504438594c465450696a4476316a5472774b5565516d6464413333454c6459664136356b315651667a653761527a6b686d5775715176676a7338586d6d7545724265516d596233696b4b7341326639474375325a324556776f7754596f54466b7332346767686b6d527570534e6d5352516d646545445566663670413137373765434a706774506e727761747752536d32726d3365394557516d50767757516d596d7a654b614233467a446a6a435a413235776e4a38785772503146715741457a545a37364d626370344345516d534b6f7734366364334d4b42384571534e78443537385950597538447079374c62485647315a554467636742516d53563564375a4d466834597762536575357a33645145666d4470527970594473333850785066414135743246516d566a70596f4646515576423939634b476b78414b6456414d734265584e4d783943584d56426e783947694173516d5a53417243514772667762337835735254457745356b6f44477464635a6e5a70464a6d32354d483351715046516d5037786d46776d52663745527638724b756438316b6a695868744631756f426345526a6d393773314e354e43516d6267784654583645625353554c45325474474b6d6741746f454a4a4b7834506679644e39457a527a72386357516d656a5464665251395863316d4861475535353131617561487248445a734b6273664a3269443545584a484359516d6267754c394135544d725a6b6531774a6676685755487934314231466d7269784b616e454e6b434243517858516d6571657657626852707776644d7368736e4b4e635138456767596579625263756871396f6f314c3574626861516d5577647072544548554e487a4d545863475a5a636464416d7943536678766d51344138485343477376414642516d65504c626d575a6a48674770745948624b67664150385265364459436663676d4236474d514c725354733373516d5659754b5671667a34696532787a546a4c674d57616562416e517858673269515a3244693669564c62627a33516d633466694c4850394d6f7458746b315433426931546251726843583855364a6932354856713951706d6d5145516d636f704339426a5958527353766e324c6677727242737770744d77596d3678797a4c3973625768646b485634516d61586d5a3955574e6b63466f4d52566e66326d58547554656e565279567a54536e5a51586a32513143696e38516d6531624c383362474e537957583451504d4b626a32314852364d683850617a717a32556e7332755851765757516d62617442444a76376267426a72343833534376726f7272436f6b5a4450744d5977616637554d56796f584748516d5a446b326247654546416974784d377773695439674278795447596a63563457714d73686345516468545668516d613539705754674d4a534a483431647762516a3768315a43546b33694c677075524a4e755150795a6a76506b516d586e6934796a70434b42347934434a4b47484e687432344a4e376b786f794a3752416975514e643945694c42516d5744466354333768434c7072546671763150715069783565617062706b6a704c555348626151705678364d5a516d566b78744c686339565636786750365050774a72685073367772485a7a5454436b5444764741417364617175516d55667672347055426d584b54526b57476b39545a7166315a6d5a4e7477434335533667434b77426837503358516d5245313434336877685a53427766504e68516d746f455746556869474c4270677737545063596d7136544665516d61447375666e7a333667626d5059413665597531473558704e77563863776e7837356f526871615259467156516d616a6a383735685a444131677071534e4b48434573474673546677553475465678365a69434a486f6b66446b516d557379524d464331355148614e74715075766e48376b5355686f6d7a4867455a47725038383264364561597a516d616e3670594e453741787942797769664b7854387678746135686577564771334d6932524757397a634b4833516d4e76626e6b744d416e416244334659617833663947616e344170567731363634356a67714c7476686a63356b516d5532615171556d715a64773966514b54346f614561654b724b6e7a6b38543953625962473448334656444444516d52646a63534e56556d64384a616b676246706356794377736e6a5233794e33564e70714c36564a4a6d466936516d656f337a7152646d6d4a71633956435359627a6166316b36657943724764646170337a38673576424c563953516d54386745544a677875454731615a566461474e4168626745663338573434696b6f6853764545756471685866516d51705731755a5131685168444a4764636f7375395268595a57357535654b5371414a6b656f333541584c6d51516d516546706d7142536233625379706b4d533970466650636d6136317643477737534c796e4464545732396841516d4e65597a31385557755a6e784775516e6f796e66455a644239676f6a6542317834683946414c326773386f57516d5872376545574a48766d50706b5036344871484d7a6f376d66456e475357625939625535514e426e6e534476516d577853774d6e6d51785264676545714b6a7177753832316d4e375635504a34466374716233446f7535744244516d54394c5551796d324c546544576878527256684e34624677374652414e56684c75547a5531486b6164384148516d52724c36505672747a553345677265764b6e3754664d67354c654276676f4c54353173446f365777366f6659516d633448565a436473533556366d727354777237774c41794457596464513136556e596d4e327232593547624d516d565163616d4a65744a556838515a565a7135714655337a594a54683941436453725a6e7a7478434677503139516d656b7051734651775a647171506d343975363774524a536e50355a594166636e577472367879567974455661516d524d31667472787734594c543753397563724a655166434275467a6f4c713646637141334a796d42416f4c6f516d57317a6f46694636644d42697a4e7176754b5a657a336479476d3151337a6d757735527a445347396d555738516d6342794a5052446a6e7a58793843324d364372595a483268544a504a41326d565652417547316a4769755a71516d616437506b46454e59773551746634716a534a76326941564c5958595454575a5a4767474770334d534c5565516d566146616b59506f6a454b41414565755144643247423747536b58365132717a394e62545379434831726655516d626d63726b5242717270615164767962694e44366b764d4869674d70785a61687459714447794250534d6d66516d4e665a78655a6e4c6d476756617343324d51516e567532436f385a6836456b5676786462325576537964376d516d63527961615632484236616d676e4161755253736544325a3747615468467a4d367a64684a6938534b6e6764516d5274656f78784e51743746367872624334453266694357465a434d35515748354d774235447a745643695435516d64435961546535467868666a536f455a6165505a634135464b6a47587148476f366171594870775334685539516d643159794b693136793356367178786234663265734c76546d357738586e66625138664871373648697a6e31516d5a747763384359526a55647a4d6331315a5169506f345831466867584477753343776257644d353531686546516d587956435652776879384344436d3870344e315a68564561527a33755a38376e415439524a4469693370626f516d52786b463554357a6d7379463567657963315765477871586631417a7453547254455656345177444175545a516d557a3153796f52727445635375723548593236757a694763574b676147396a4d706d557a37516e3444575574516d546133666b7655596477706358326b4c584838533238557a487a734c6339525962786b6d7458366f79427745516d556653456d33597377316b5a745a4168747256424e45355751397076387043527a74374d317847316358506f516d64354857465738796f33623171635242796b714d7956794e6566326f61733174533852587534647650526b41516d624d53654e68424c6352715a4a6e7a4132756971477653386a68694d5069757a4d3635656434573550683654516d59545a6a787836376b4b3544766667596f3874356466696666634a6350634e416937624b66614167744c6634516d644c6731534b72664a463375577139674c69454558433546456d387a686b51355661665331664d483772694d516d5643726e56357a6a797334675778505670506474514c376f69484a6855613263733275375969655474775131516d62797874394578634b54584c61716d797034516162764279504363466b7267566d5159484a33746755715337516d61586b44333564736768476e6966334c6257675746413157615635714d35513744645536777878534e383278516d535a34583552457653513674413871746d78523756775a70626d6d4c694776625352685466686b7a47524848516d54736766395748504e635478364c43413559673532755641787550786f4a526845566a4a574b425651796843516d6362454e637265424c5354634141764c436a50426f343970564a4e4a746b62797a706233796e68714a474253516d6569474447563968576d7173437975676848663444416d7037644d5a325a776b64504c52415966365650596e"; + "0x608060405273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733c44cdddb6a900fa2b585dd299e03d12fa4293bc600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600b5560405180611b2001604052806040518060600160405280602e815260200162005bea602e913981526020016040518060600160405280602e815260200162006b30602e913981526020016040518060600160405280602e815260200162007f50602e913981526020016040518060600160405280602e815260200162006d86602e913981526020016040518060600160405280602e815260200162007318602e913981526020016040518060600160405280602e8152602001620070c2602e913981526020016040518060600160405280602e815260200162006628602e913981526020016040518060600160405280602e81526020016200773a602e913981526020016040518060600160405280602e815260200162007a48602e913981526020016040518060600160405280602e815260200162006e6c602e913981526020016040518060600160405280602e815260200162007094602e913981526020016040518060600160405280602e815260200162006bba602e913981526020016040518060600160405280602e815260200162007906602e913981526020016040518060600160405280602e815260200162006fae602e913981526020016040518060600160405280602e81526020016200745a602e913981526020016040518060600160405280602e81526020016200759c602e913981526020016040518060600160405280602e815260200162007d56602e913981526020016040518060600160405280602e815260200162007990602e913981526020016040518060600160405280602e8152602001620069ee602e913981526020016040518060600160405280602e815260200162006d2a602e913981526020016040518060600160405280602e815260200162005b60602e913981526020016040518060600160405280602e8152602001620068da602e913981526020016040518060600160405280602e815260200162007ad2602e913981526020016040518060600160405280602e815260200162007346602e913981526020016040518060600160405280602e815260200162007682602e913981526020016040518060600160405280602e815260200162007204602e913981526020016040518060600160405280602e815260200162006fdc602e913981526020016040518060600160405280602e815260200162006936602e913981526020016040518060600160405280602e8152602001620065cc602e913981526020016040518060600160405280602e815260200162006798602e913981526020016040518060600160405280602e815260200162006a78602e913981526020016040518060600160405280602e815260200162005f82602e913981526020016040518060600160405280602e8152602001620059c2602e913981526020016040518060600160405280602e815260200162007488602e913981526020016040518060600160405280602e81526020016200590a602e913981526020016040518060600160405280602e8152602001620074e4602e913981526020016040518060600160405280602e815260200162007b5c602e913981526020016040518060600160405280602e815260200162005a1e602e913981526020016040518060600160405280602e815260200162006a1c602e913981526020016040518060600160405280602e815260200162007cfa602e913981526020016040518060600160405280602e815260200162006e10602e913981526020016040518060600160405280602e8152602001620062ec602e913981526020016040518060600160405280602e8152602001620063d2602e913981526020016040518060600160405280602e8152602001620060f2602e913981526020016040518060600160405280602e815260200162007c42602e913981526020016040518060600160405280602e815260200162006f80602e913981526020016040518060600160405280602e8152602001620073fe602e913981526020016040518060600160405280602e815260200162007796602e913981526020016040518060600160405280602e815260200162007ef4602e913981526020016040518060600160405280602e815260200162007934602e913981526020016040518060600160405280602e815260200162007066602e913981526020016040518060600160405280602e815260200162005ca2602e913981526020016040518060600160405280602e815260200162005e9c602e913981526020016040518060600160405280602e815260200162006cfc602e913981526020016040518060600160405280602e81526020016200784e602e913981526020016040518060600160405280602e81526020016200617c602e913981526020016040518060600160405280602e815260200162006514602e913981526020016040518060600160405280602e8152602001620058dc602e913981526020016040518060600160405280602e815260200162006120602e913981526020016040518060600160405280602e81526020016200631a602e913981526020016040518060600160405280602e815260200162006a4a602e913981526020016040518060600160405280602e815260200162007c9e602e913981526020016040518060600160405280602e815260200162007a1a602e913981526020016040518060600160405280602e81526020016200600c602e913981526020016040518060600160405280602e815260200162005e40602e913981526020016040518060600160405280602e815260200162006206602e913981526020016040518060600160405280602e815260200162005d5a602e913981526020016040518060600160405280602e815260200162005a7a602e913981526020016040518060600160405280602e815260200162005cfe602e913981526020016040518060600160405280602e815260200162005fb0602e913981526020016040518060600160405280602e8152602001620067c6602e913981526020016040518060600160405280602e815260200162007e98602e913981526020016040518060600160405280602e815260200162005f26602e913981526020016040518060600160405280602e815260200162005ef8602e913981526020016040518060600160405280602e815260200162006290602e913981526020016040518060600160405280602e815260200162006850602e913981526020016040518060600160405280602e81526020016200714c602e913981526020016040518060600160405280602e815260200162007de0602e913981526020016040518060600160405280602e815260200162007e0e602e913981526020016040518060600160405280602e815260200162006f52602e913981526020016040518060600160405280602e8152602001620073a2602e913981526020016040518060600160405280602e8152602001620059f0602e913981526020016040518060600160405280602e8152602001620064e6602e913981526020016040518060600160405280602e815260200162007c70602e913981526020016040518060600160405280602e815260200162007b2e602e913981526020016040518060600160405280602e81526020016200711e602e913981526020016040518060600160405280602e81526020016200642e602e913981526020016040518060600160405280602e815260200162007540602e913981526020016040518060600160405280602e815260200162005fde602e913981526020016040518060600160405280602e815260200162006234602e913981526020016040518060600160405280602e81526020016200770c602e913981526020016040518060600160405280602e8152602001620072bc602e913981526020016040518060600160405280602e8152602001620076b0602e913981526020016040518060600160405280602e8152602001620077f2602e913981526020016040518060600160405280602e8152602001620060c4602e913981526020016040518060600160405280602e8152602001620061aa602e913981526020016040518060600160405280602e815260200162007aa4602e913981526020016040518060600160405280602e815260200162006ec8602e913981526020016040518060600160405280602e815260200162006096602e913981526020016040518060600160405280602e815260200162006b02602e913981526020016040518060600160405280602e815260200162006684602e913981526020016040518060600160405280602e815260200162006db4602e913981526020016040518060600160405280602e8152602001620064b8602e913981526020016040518060600160405280602e815260200162006656602e913981526020016040518060600160405280602e815260200162007512602e913981526020016040518060600160405280602e815260200162006ef6602e913981526020016040518060600160405280602e815260200162006c16602e913981526020016040518060600160405280602e8152602001620073d0602e913981526020016040518060600160405280602e815260200162007e6a602e913981526020016040518060600160405280602e8152602001620066b2602e913981526020016040518060600160405280602e81526020016200673c602e913981526020016040518060600160405280602e815260200162005b04602e913981526020016040518060600160405280602e815260200162006e3e602e913981526020016040518060600160405280602e8152602001620070f0602e913981526020016040518060600160405280602e815260200162006ca0602e913981526020016040518060600160405280602e81526020016200742c602e913981526020016040518060600160405280602e815260200162007db2602e913981526020016040518060600160405280602e815260200162005bbc602e913981526020016040518060600160405280602e81526020016200700a602e913981526020016040518060600160405280602e815260200162006348602e913981526020016040518060600160405280602e815260200162005e12602e913981526020016040518060600160405280602e8152602001620062be602e913981526020016040518060600160405280602e815260200162006570602e913981526020016040518060600160405280602e815260200162006b8c602e913981526020016040518060600160405280602e815260200162006262602e913981526020016040518060600160405280602e815260200162007820602e913981526020016040518060600160405280602e815260200162007962602e913981526020016040518060600160405280602e81526020016200645c602e913981526020016040518060600160405280602e815260200162007a76602e913981526020016040518060600160405280602e815260200162007c14602e913981526020016040518060600160405280602e815260200162007232602e913981526020016040518060600160405280602e8152602001620071d6602e913981526020016040518060600160405280602e815260200162006822602e913981526020016040518060600160405280602e8152602001620076de602e913981526020016040518060600160405280602e815260200162006be8602e913981526020016040518060600160405280602e815260200162007f22602e913981526020016040518060600160405280602e815260200162005de4602e913981526020016040518060600160405280602e8152602001620078aa602e913981526020016040518060600160405280602e8152602001620075f8602e913981526020016040518060600160405280602e815260200162006400602e913981526020016040518060600160405280602e8152602001620072ea602e913981526020016040518060600160405280602e815260200162006908602e913981526020016040518060600160405280602e815260200162006068602e913981526020016040518060600160405280602e815260200162007bb8602e913981526020016040518060600160405280602e815260200162006ad4602e913981526020016040518060600160405280602e815260200162007e3c602e913981526020016040518060600160405280602e8152602001620079be602e913981526020016040518060600160405280602e8152602001620074b6602e913981526020016040518060600160405280602e81526020016200603a602e913981526020016040518060600160405280602e8152602001620068ac602e913981526020016040518060600160405280602e8152602001620075ca602e913981526020016040518060600160405280602e815260200162007626602e913981526020016040518060600160405280602e8152602001620077c4602e913981526020016040518060600160405280602e815260200162007f7e602e913981526020016040518060600160405280602e815260200162007b8a602e913981526020016040518060600160405280602e815260200162006376602e913981526020016040518060600160405280602e815260200162006cce602e913981526020016040518060600160405280602e81526020016200728e602e913981526020016040518060600160405280602e815260200162005f54602e913981526020016040518060600160405280602e815260200162006c72602e913981526020016040518060600160405280602e815260200162006c44602e913981526020016040518060600160405280602e815260200162007768602e913981526020016040518060600160405280602e815260200162005e6e602e913981526020016040518060600160405280602e8152602001620069c0602e913981526020016040518060600160405280602e815260200162007be6602e913981526020016040518060600160405280602e815260200162005938602e913981526020016040518060600160405280602e8152602001620078d8602e913981526020016040518060600160405280602e815260200162006de2602e913981526020016040518060600160405280602e815260200162007d84602e913981526020016040518060600160405280602e815260200162007260602e913981526020016040518060600160405280602e81526020016200614e602e913981526020016040518060600160405280602e81526020016200676a602e913981526020016040518060600160405280602e815260200162006aa6602e913981526020016040518060600160405280602e815260200162006542602e913981526020016040518060600160405280602e81526020016200670e602e913981526020016040518060600160405280602e81526020016200648a602e913981526020016040518060600160405280602e815260200162006964602e913981526020016040518060600160405280602e815260200162006d58602e913981526020016040518060600160405280602e81526020016200756e602e913981526020016040518060600160405280602e81526020016200687e602e913981526020016040518060600160405280602e815260200162005b32602e913981526020016040518060600160405280602e8152602001620066e0602e913981526020016040518060600160405280602e8152602001620061d8602e913981526020016040518060600160405280602e815260200162006b5e602e913981526020016040518060600160405280602e815260200162005db6602e913981526020016040518060600160405280602e815260200162007d28602e913981526020016040518060600160405280602e815260200162005c46602e913981526020016040518060600160405280602e815260200162007654602e913981526020016040518060600160405280602e8152602001620063a4602e913981526020016040518060600160405280602e815260200162007ec6602e913981526020016040518060600160405280602e8152602001620079ec602e913981526020016040518060600160405280602e81526020016200659e602e913981526020016040518060600160405280602e815260200162006f24602e913981526020016040518060600160405280602e815260200162005eca602e913981526020016040518060600160405280602e815260200162007374602e913981526020016040518060600160405280602e81526020016200717a602e913981526020016040518060600160405280602e815260200162005994602e913981526020016040518060600160405280602e8152602001620067f4602e913981526020016040518060600160405280602e815260200162007038602e913981526020016040518060600160405280602e815260200162005966602e913981526020016040518060600160405280602e815260200162005aa8602e913981526020016040518060600160405280602e815260200162005a4c602e913981526020016040518060600160405280602e815260200162005b8e602e913981526020016040518060600160405280602e8152602001620071a8602e913981526020016040518060600160405280602e815260200162005c74602e913981526020016040518060600160405280602e815260200162007b00602e913981526020016040518060600160405280602e81526020016200787c602e913981526020016040518060600160405280602e815260200162006992602e913981526020016040518060600160405280602e8152602001620065fa602e913981526020016040518060600160405280602e815260200162005d2c602e913981526020016040518060600160405280602e815260200162007ccc602e913981526020016040518060600160405280602e815260200162005ad6602e913981526020016040518060600160405280602e815260200162005c18602e913981526020016040518060600160405280602e815260200162006e9a602e913981526020016040518060600160405280602e815260200162005cd0602e913981526020016040518060600160405280602e8152602001620058ae602e913981526020016040518060600160405280602e815260200162005d88602e9139815250600c9060d962001b1692919062002864565b5034801562001b2457600080fd5b5060405162007fac38038062007fac833981810160405281019062001b4a919062002ae4565b8181816002908162001b5d919062002db4565b50806003908162001b6f919062002db4565b50505060005b600c8054905081101562001be55762001bb7600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168262001c2360201b60201c565b6706f05b59d3b20000600a600083815260200190815260200160002081905550808060010191505062001b75565b5062001c1b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a62001c4960201b60201c565b505062003116565b62001c4582826040518060200160405280600081525062001df860201b60201c565b5050565b600062001c5b62001e2460201b60201c565b6bffffffffffffffffffffffff16905080826bffffffffffffffffffffffff16111562001cc35781816040517f6f483d0900000000000000000000000000000000000000000000000000000000815260040162001cba92919062002efd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362001d385760006040517fb6d9900a00000000000000000000000000000000000000000000000000000000815260040162001d2f919062002f6f565b60405180910390fd5b60405180604001604052808473ffffffffffffffffffffffffffffffffffffffff168152602001836bffffffffffffffffffffffff168152506000808201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b62001e0a838362001e2e60201b60201c565b62001e1f600084848462001f3560201b60201c565b505050565b6000612710905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001ea35760006040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040162001e9a919062002f6f565b60405180910390fd5b600062001eb9838360006200210360201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462001f305760006040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040162001f27919062002f6f565b60405180910390fd5b505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115620020fd578273ffffffffffffffffffffffffffffffffffffffff1663150b7a0262001f826200233860201b60201c565b8685856040518563ffffffff1660e01b815260040162001fa6949392919062002fe9565b6020604051808303816000875af192505050801562001fe557506040513d601f19601f8201168201806040525081019062001fe291906200309a565b60015b6200206f573d806000811462002018576040519150601f19603f3d011682016040523d82523d6000602084013e6200201d565b606091505b5060008151036200206757836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016200205e919062002f6f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614620020fb57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401620020f2919062002f6f565b60405180910390fd5b505b50505050565b60008062002117846200234060201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146200216257620021618184866200237d60201b60201c565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614620021fc57620021ad6000856000806200244f60201b60201c565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161462002280576001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846004600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b600033905090565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b620023908383836200262c60201b60201c565b6200244a57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200240957806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401620024009190620030cc565b60405180910390fd5b81816040517f177e802f00000000000000000000000000000000000000000000000000000000815260040162002441929190620030e9565b60405180910390fd5b505050565b8080620024895750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15620025d4576000620024a2846200270060201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156200250e57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156200252a57506200252881846200279360201b60201c565b155b156200256f57826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040162002566919062002f6f565b60405180910390fd5b8115620025d257838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836006600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620026f757508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480620026af5750620026ae84846200279360201b60201c565b5b80620026f657508273ffffffffffffffffffffffffffffffffffffffff16620026de836200282760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b60008062002714836200234060201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200278a57826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401620027819190620030cc565b60405180910390fd5b80915050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b828054828255906000526020600020908101928215620028b1579160200282015b82811115620028b05782518290816200289f919062002db4565b509160200191906001019062002885565b5b509050620028c09190620028c4565b5090565b5b80821115620028e85760008181620028de9190620028ec565b50600101620028c5565b5090565b508054620028fa9062002ba3565b6000825580601f106200290e57506200292f565b601f0160209004906000526020600020908101906200292e919062002932565b5b50565b5b808211156200294d57600081600090555060010162002933565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620029ba826200296f565b810181811067ffffffffffffffff82111715620029dc57620029db62002980565b5b80604052505050565b6000620029f162002951565b9050620029ff8282620029af565b919050565b600067ffffffffffffffff82111562002a225762002a2162002980565b5b62002a2d826200296f565b9050602081019050919050565b60005b8381101562002a5a57808201518184015260208101905062002a3d565b60008484015250505050565b600062002a7d62002a778462002a04565b620029e5565b90508281526020810184848401111562002a9c5762002a9b6200296a565b5b62002aa984828562002a3a565b509392505050565b600082601f83011262002ac95762002ac862002965565b5b815162002adb84826020860162002a66565b91505092915050565b6000806040838503121562002afe5762002afd6200295b565b5b600083015167ffffffffffffffff81111562002b1f5762002b1e62002960565b5b62002b2d8582860162002ab1565b925050602083015167ffffffffffffffff81111562002b515762002b5062002960565b5b62002b5f8582860162002ab1565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062002bbc57607f821691505b60208210810362002bd25762002bd162002b74565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262002c3c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262002bfd565b62002c48868362002bfd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062002c9562002c8f62002c898462002c60565b62002c6a565b62002c60565b9050919050565b6000819050919050565b62002cb18362002c74565b62002cc962002cc08262002c9c565b84845462002c0a565b825550505050565b600090565b62002ce062002cd1565b62002ced81848462002ca6565b505050565b5b8181101562002d155762002d0960008262002cd6565b60018101905062002cf3565b5050565b601f82111562002d645762002d2e8162002bd8565b62002d398462002bed565b8101602085101562002d49578190505b62002d6162002d588562002bed565b83018262002cf2565b50505b505050565b600082821c905092915050565b600062002d896000198460080262002d69565b1980831691505092915050565b600062002da4838362002d76565b9150826002028217905092915050565b62002dbf8262002b69565b67ffffffffffffffff81111562002ddb5762002dda62002980565b5b62002de7825462002ba3565b62002df482828562002d19565b600060209050601f83116001811462002e2c576000841562002e17578287015190505b62002e23858262002d96565b86555062002e93565b601f19841662002e3c8662002bd8565b60005b8281101562002e665784890151825560018201915060208501945060208101905062002e3f565b8683101562002e86578489015162002e82601f89168262002d76565b8355505b6001600288020188555050505b505050505050565b60006bffffffffffffffffffffffff82169050919050565b600062002ed462002ece62002ec88462002e9b565b62002c6a565b62002c60565b9050919050565b62002ee68162002eb3565b82525050565b62002ef78162002c60565b82525050565b600060408201905062002f14600083018562002edb565b62002f23602083018462002eec565b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062002f578262002f2a565b9050919050565b62002f698162002f4a565b82525050565b600060208201905062002f86600083018462002f5e565b92915050565b600081519050919050565b600082825260208201905092915050565b600062002fb58262002f8c565b62002fc1818562002f97565b935062002fd381856020860162002a3a565b62002fde816200296f565b840191505092915050565b600060808201905062003000600083018762002f5e565b6200300f602083018662002f5e565b6200301e604083018562002eec565b818103606083015262003032818462002fa8565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62003074816200303d565b81146200308057600080fd5b50565b600081519050620030948162003069565b92915050565b600060208284031215620030b357620030b26200295b565b5b6000620030c38482850162003083565b91505092915050565b6000602082019050620030e3600083018462002eec565b92915050565b600060408201905062003100600083018562002f5e565b6200310f602083018462002eec565b9392505050565b61278880620031266000396000f3fe60806040526004361061011f5760003560e01c806370a08231116100a0578063c457fb3711610064578063c457fb3714610401578063c87b56dd1461043e578063cb233ce21461047b578063dfc7d488146104a4578063e985e9c5146104e15761011f565b806370a082311461031c57806395d89b4114610359578063a22cb46514610384578063a6c3e6b9146103ad578063b88d4fde146103d85761011f565b80632a55205a116100e75780632a55205a1461021b5780632d296bf11461025957806342842e0e1461028b578063570ca735146102b45780636352211e146102df5761011f565b806301ffc9a71461012457806306fdde0314610161578063081812fc1461018c578063095ea7b3146101c957806323b872dd146101f2575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190611ddd565b61051e565b6040516101589190611e25565b60405180910390f35b34801561016d57600080fd5b50610176610530565b6040516101839190611ed0565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae9190611f28565b6105c2565b6040516101c09190611f96565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190611fdd565b6105de565b005b3480156101fe57600080fd5b506102196004803603810190610214919061201d565b6105f4565b005b34801561022757600080fd5b50610242600480360381019061023d9190612070565b6106f6565b6040516102509291906120bf565b60405180910390f35b610273600480360381019061026e9190611f28565b6108e0565b604051610282939291906120e8565b60405180910390f35b34801561029757600080fd5b506102b260048036038101906102ad919061201d565b610b30565b005b3480156102c057600080fd5b506102c9610b50565b6040516102d69190611f96565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190611f28565b610b76565b6040516103139190611f96565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e919061211f565b610b88565b604051610350919061214c565b60405180910390f35b34801561036557600080fd5b5061036e610c42565b60405161037b9190611ed0565b60405180910390f35b34801561039057600080fd5b506103ab60048036038101906103a69190612193565b610cd4565b005b3480156103b957600080fd5b506103c2610cea565b6040516103cf9190611f96565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190612308565b610d10565b005b34801561040d57600080fd5b5061042860048036038101906104239190611f28565b610d2d565b604051610435919061214c565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190611f28565b610d54565b6040516104729190611ed0565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d9190612070565b610e61565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190611f28565b610eec565b6040516104d8919061214c565b60405180910390f35b3480156104ed57600080fd5b506105086004803603810190610503919061238b565b610f36565b6040516105159190611e25565b60405180910390f35b600061052982610fca565b9050919050565b60606002805461053f906123fa565b80601f016020809104026020016040519081016040528092919081815260200182805461056b906123fa565b80156105b85780601f1061058d576101008083540402835291602001916105b8565b820191906000526020600020905b81548152906001019060200180831161059b57829003601f168201915b5050505050905090565b60006105cd826110ac565b506105d782611134565b9050919050565b6105f082826105eb611171565b611179565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106665760006040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161065d9190611f96565b60405180910390fd5b600061067a8383610675611171565b61118b565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106f0578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016106e79392919061242b565b60405180910390fd5b50505050565b6000806000600160008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff160361088b5760006040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b60006108956113a5565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866108c19190612491565b6108cb9190612502565b90508160000151819350935050509250929050565b6000806000806108ef856113af565b9050600034905081811461093e578582826040517f38c94f7e000000000000000000000000000000000000000000000000000000008152600401610935939291906120e8565b60405180910390fd5b60008061094b88856106f6565b915091508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610995573d6000803e3d6000fd5b5060006109a189610eec565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a0b573d6000803e3d6000fd5b506000610a178a610b76565b9050610a2b81610a25611171565b8c611416565b6000828487610a3a9190612533565b610a449190612533565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a8c573d6000803e3d6000fd5b508a610a96611171565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f5216af4b5d77e628c79c761c6ec5b27c74a19c908f57d257509980d206fdd1d58a888887604051610af89493929190612567565b60405180910390a46000600a60008d8152602001908152602001600020819055508a8787995099509950505050505050509193909250565b610b4b83838360405180602001604052806000815250610d10565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610b81826110ac565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bfb5760006040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610bf29190611f96565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060038054610c51906123fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7d906123fa565b8015610cca5780601f10610c9f57610100808354040283529160200191610cca565b820191906000526020600020905b815481529060010190602001808311610cad57829003601f168201915b5050505050905090565b610ce6610cdf611171565b8383611436565b5050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d1b8484846105f4565b610d27848484846115a5565b50505050565b6000610d38826113af565b50600a6000838152602001908152602001600020549050919050565b6060610d5f826110ac565b506000610d6a61175c565b90506000600c8481548110610d8257610d816125ac565b5b906000526020600020018054610d97906123fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc3906123fa565b8015610e105780601f10610de557610100808354040283529160200191610e10565b820191906000526020600020905b815481529060010190602001808311610df357829003601f168201915b505050505090506000825111610e355760405180602001604052806000815250610e58565b8181604051602001610e48929190612617565b6040516020818303038152906040525b92505050919050565b6000610e6c83610b76565b9050610e8081610e7a611171565b8561177c565b81600a600085815260200190815260200160002081905550828173ffffffffffffffffffffffffffffffffffffffff167fedf4c4bb98a20f944375347e8333813f83701cba069c20311ef1ef6b7d85bb8684604051610edf919061214c565b60405180910390a3505050565b600080610ef8836113af565b90506000610f046113a5565b6bffffffffffffffffffffffff16600b5483610f209190612491565b610f2a9190612502565b90508092505050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061109557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806110a557506110a482611840565b5b9050919050565b6000806110b8836118ba565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361112b57826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611122919061214c565b60405180910390fd5b80915050919050565b60006006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b61118683838360016118f7565b505050565b600080611197846118ba565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146111d9576111d881848661177c565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461126a5761121b6000856000806118f7565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146112ed576001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846004600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b6000612710905090565b600080600a60008481526020019081526020016000205490506000811161140d57806040517fe37a1fdd000000000000000000000000000000000000000000000000000000008152600401611404919061214c565b60405180910390fd5b80915050919050565b61143183838360405180602001604052806000815250611abc565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114a757816040517f5b08ba1800000000000000000000000000000000000000000000000000000000815260040161149e9190611f96565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115989190611e25565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611756578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026115e9611171565b8685856040518563ffffffff1660e01b815260040161160b9493929190612690565b6020604051808303816000875af192505050801561164757506040513d601f19601f8201168201806040525081019061164491906126f1565b60015b6116cb573d8060008114611677576040519150601f19603f3d011682016040523d82523d6000602084013e61167c565b606091505b5060008151036116c357836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016116ba9190611f96565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461175457836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161174b9190611f96565b60405180910390fd5b505b50505050565b606060405180606001604052806034815260200161271f60349139905090565b611787838383611ad9565b61183b57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117fc57806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016117f3919061214c565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016118329291906120bf565b60405180910390fd5b505050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806118b357506118b282611b9a565b5b9050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806119305750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611a64576000611940846110ac565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119ab57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156119be57506119bc8184610f36565b155b15611a0057826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016119f79190611f96565b60405180910390fd5b8115611a6257838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836006600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611ac7848484611c04565b611ad3848484846115a5565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611b9157508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b525750611b518484610f36565b5b80611b9057508273ffffffffffffffffffffffffffffffffffffffff16611b7883611134565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c765760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611c6d9190611f96565b60405180910390fd5b6000611c848383600061118b565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cf757816040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611cee919061214c565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611d6b578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401611d629392919061242b565b60405180910390fd5b50505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611dba81611d85565b8114611dc557600080fd5b50565b600081359050611dd781611db1565b92915050565b600060208284031215611df357611df2611d7b565b5b6000611e0184828501611dc8565b91505092915050565b60008115159050919050565b611e1f81611e0a565b82525050565b6000602082019050611e3a6000830184611e16565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611e7a578082015181840152602081019050611e5f565b60008484015250505050565b6000601f19601f8301169050919050565b6000611ea282611e40565b611eac8185611e4b565b9350611ebc818560208601611e5c565b611ec581611e86565b840191505092915050565b60006020820190508181036000830152611eea8184611e97565b905092915050565b6000819050919050565b611f0581611ef2565b8114611f1057600080fd5b50565b600081359050611f2281611efc565b92915050565b600060208284031215611f3e57611f3d611d7b565b5b6000611f4c84828501611f13565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f8082611f55565b9050919050565b611f9081611f75565b82525050565b6000602082019050611fab6000830184611f87565b92915050565b611fba81611f75565b8114611fc557600080fd5b50565b600081359050611fd781611fb1565b92915050565b60008060408385031215611ff457611ff3611d7b565b5b600061200285828601611fc8565b925050602061201385828601611f13565b9150509250929050565b60008060006060848603121561203657612035611d7b565b5b600061204486828701611fc8565b935050602061205586828701611fc8565b925050604061206686828701611f13565b9150509250925092565b6000806040838503121561208757612086611d7b565b5b600061209585828601611f13565b92505060206120a685828601611f13565b9150509250929050565b6120b981611ef2565b82525050565b60006040820190506120d46000830185611f87565b6120e160208301846120b0565b9392505050565b60006060820190506120fd60008301866120b0565b61210a60208301856120b0565b61211760408301846120b0565b949350505050565b60006020828403121561213557612134611d7b565b5b600061214384828501611fc8565b91505092915050565b600060208201905061216160008301846120b0565b92915050565b61217081611e0a565b811461217b57600080fd5b50565b60008135905061218d81612167565b92915050565b600080604083850312156121aa576121a9611d7b565b5b60006121b885828601611fc8565b92505060206121c98582860161217e565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61221582611e86565b810181811067ffffffffffffffff82111715612234576122336121dd565b5b80604052505050565b6000612247611d71565b9050612253828261220c565b919050565b600067ffffffffffffffff821115612273576122726121dd565b5b61227c82611e86565b9050602081019050919050565b82818337600083830152505050565b60006122ab6122a684612258565b61223d565b9050828152602081018484840111156122c7576122c66121d8565b5b6122d2848285612289565b509392505050565b600082601f8301126122ef576122ee6121d3565b5b81356122ff848260208601612298565b91505092915050565b6000806000806080858703121561232257612321611d7b565b5b600061233087828801611fc8565b945050602061234187828801611fc8565b935050604061235287828801611f13565b925050606085013567ffffffffffffffff81111561237357612372611d80565b5b61237f878288016122da565b91505092959194509250565b600080604083850312156123a2576123a1611d7b565b5b60006123b085828601611fc8565b92505060206123c185828601611fc8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061241257607f821691505b602082108103612425576124246123cb565b5b50919050565b60006060820190506124406000830186611f87565b61244d60208301856120b0565b61245a6040830184611f87565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061249c82611ef2565b91506124a783611ef2565b92508282026124b581611ef2565b915082820484148315176124cc576124cb612462565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061250d82611ef2565b915061251883611ef2565b925082612528576125276124d3565b5b828204905092915050565b600061253e82611ef2565b915061254983611ef2565b925082820390508181111561256157612560612462565b5b92915050565b600060808201905061257c60008301876120b0565b61258960208301866120b0565b61259660408301856120b0565b6125a360608301846120b0565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b60006125f182611e40565b6125fb81856125db565b935061260b818560208601611e5c565b80840191505092915050565b600061262382856125e6565b915061262f82846125e6565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b60006126628261263b565b61266c8185612646565b935061267c818560208601611e5c565b61268581611e86565b840191505092915050565b60006080820190506126a56000830187611f87565b6126b26020830186611f87565b6126bf60408301856120b0565b81810360608301526126d18184612657565b905095945050505050565b6000815190506126eb81611db1565b92915050565b60006020828403121561270757612706611d7b565b5b6000612715848285016126dc565b9150509291505056fe68747470733a2f2f626c6f636b636861696e617373657472656769737472792e696e667572612d697066732e696f2f697066732fa2646970667358221220cfb9f61506b33358758fc8f7e96cfd737ef0e03bb5b24ee2d56d527616e006ca64736f6c63430008180033516d5175744a6e46566163647667616f5a597269534b79384647716337435074594376676e4e6e7158466b4d674d516d6266553370746d4b685078515269726f58654b743435697859694272364c456a613563314d32706b48774671516d646f513831346546516e7064675835644d573570436b5861694c7636393459646d4c79626f617a4b424b4b39516d586841476f624859384741366e61474a7372564a74546e755467714c5061694c5267347163614b654d716f70516d5837535065356e6862626b5064634653654e79467461395044653263624250736d624e6e6662395376544354516d62714a347741343675424a385a6a4b746f4447467052595743647a624b6652673366335348654c7835346a76516d6134327459386b7470324554716845743461694c4e31514c37477735397552436d703545554a726365787752516d59414c383865425348786b506d4153415143314534574c644a4c623131735262357939595077756b71423561516d65487853416f656631795364474638564779546455416f345a68695a635937475562346869356761684b4838516d577667713957707953734c4c5145476b5261353173525148695353466e644d68637666334c6f33664e574867516d506e413662717858476d59537a38667a424d72516d38727a6f5a677270765973463153354641707750657564516d637661327a736a3458707170594673674544434769636b6b77696a6672537745434e525550426767707a5335516d646246444e455158653339637a4366704e667579464e3161733251454a505143476752453965513271616a6f516d566a767a4644676b4b4b5944747a344151614c52503175456d7a7a5253574d74334e537877484a6178755637516d5967326869376447656b6741554d77505036573761555a7651544d66466336773139783376676d6b56777855516d52787373334a69735342665a4665394b59355646596d484370705273617071766e6259773975777875764262516d665173714571416f746a45616f37366a71634a3476577255665a6632787959704a44636e6d66364741475248516d5a5539726177625343363938416261764865423435506154516156376b31796f74504138466457336b326f50516d6262644441434d356e6b477152473363536d6b3868594c34365857466b54387a766b626e7262636253716131516d5434476f586158355a59586e436d6b6964426a545777524c35737050665363516665636e4a5a644544443169516d4e6459623462716d3351767042464d663355787145454a4d5a72767a3835566f526d47386a7743334b334b57516d5033684a327a4257544b344674394258504c58336b4c3164526d6b51466f4150394752567a59354641373836516d627337686f5a57426e313233777951576d56794d6e51366a5959314541384d6d447142345a77417832386f63516d554b384e5765437245487a44415a7a6852763955744e3353393350486b7441744c514567504b4a635859416b516d50564c6a5933684e66654855554d474d757461394b7a6d6f48376e3859724468426b5071393132666d674365516d57546e726668514334437143414b5838576e47644b6d6b70586a65337a6633643855684469315476386e476e516d5a6b3632646436627658746769623742365a634b66377669336a43764177514171476a464346793641323834516d62647046714a59354e686968587746516b445a414a64346a7667555038595a6b41657179614a6b6a4e75506e516d63506931614b77465753746b615571636131725470684e796b706a48624b386a38784778593953543145314c516d51624b6d415a514c424e75557166726d6f4256426e42375048356f78573677417375344a5a35577034655868516d6345526f48484d3370524b5442424d3244696b75704a47674e314d517750435169397376586f754b6d463153516d51794d5438316d754c36627743547174363869616673776659315a434a3934576573794e4e48777163744c77516d54584b6577734d645953326a74484838365944707a61537a724d536f74727836344465554833575a46503655516d613451705864676e353731355777693444575171713146644a3377733941654e4274766b5a4c63483555646e516d5962445a32654b65724b32386443444a6e384b58414d754237584c47317454594d35477150797571624a7343516d5064376a56503451516575464e585462556d50486858506261623875503832706e3671424261566153384752516d5a4c4a7878634e33784738695a32737073613837397379397656485252774b38593258685244446f39786a76516d63766d5568325a5875324a6764413539727878437948647152543735684d5577326f554263524235694e4877516d58704372654636623375796254347838646b58614a5674696b32775254356f3451464d65525a6e7068435673516d6169735a377241435157426d425a72593752435842484d3977666743394c4474674d643377336654366b414a516d58447868357152615969715451767a50754476563173697656377a5750487250316142317959327967633850516d655138475276754242326f6f39716b657266596b4c4446523934516f56634e6a6d46784a4d51765062684a41516d665653335178536d4c7666374d455a57596a476d4d377665594a59724a7259547977704a644c4c396e4d7374516d586d62785554785147555554667833556a33316870374a793377626a5a5934706e6f436f3168575473386431516d5145556f4b416156756b596b74726635764344734a5675355459624c564e507154786a7a4146723262633942516d565642423869646647744d6f764d554e624a613973414b4e5056334c4c55323576566d6166507a7556673268516d61366a316d63573272706d5570665337757363536b434a71646b7341486b42413942525644336a4168564653516d537570616e7953766435527559506f6a5a6b325a4271433665757967504466545375315362337741426a346f516d544d7a7873486563364c6738754b674d4859555264755746727770414d5265715778335a7531686b57593572516d5976456b546b317952546831696e485077616d69467a514d63645a3252434b31526b35734746624e73784e4c516d615677716d3362706767797134394a6a486947536453363956596757777069754c697657547532624c783457516d61626b697a715769575341724a384a515a39317a58657758715a3153426f615973675636344d535663365766516d544d663467534a76584b456e5a4c6132594a4759585544595670464b786f5941725256707943765047586b36516d5a6545727846434754356b4e44684b363766695a6d5174763338424d76416a376e767a357348394274396f77516d52334646616b6347356e4b796e5731683234474363784445627768555a345a76337668514259314161337079516d537a48473766444b62623461345a725a61775a4748627179644333314b5054424b33424e615446316e577a67516d505358513644345a5a434b74694e667a6a47795a78656d544262676d445756543164567378336d674c697268516d636772515865783952417437514648594b4d5974577166666a6b6338514b464350415a657033535a4a353142516d4e6d7a314c4c554a677a3359767273346879686a6d45357941375a585741636d466b726f6637624759685956516d52454c58656f51644a504d68366279477977675155347a4c714c46527056434e67714b64763931594578686a516d63576e757a4679627945464654454750555350643447414668626f524a73796a6348364b7178745739753571516d586e6e514c784e4d5167566152704854614156677678375a444c4845366769744d484d595038525a45656a69516d566652457a71536163634e554d5141454e344e3957567a517845446441647858696d466d713845643539536b516d52486f447664624d5355544d6f59356e4c4b54746e7246554465547a6d677a7966397977684444577a676966516d66456e4d4c6a6e577869504d677855706a72657854697531344d5850456236536d4c42785464456a4e317765516d56445a646150354732435a4a625a5545684645347578313752537654506f69386e746e39644d555a7836616e516d5941505a7a456847364e79474175766a31376d52734152784e76733269485571796f67434731386632426441516d654737464d58716666453846547a7773456b517544617179665039596f624d6d42755934346348727858574d516d5765635045674479755354726a5a5251533471773743436e64675958394a5374626854796e69764437784a4e516d54356e634765337678423939456e486f354d6567345635596331385a4e364c6f7a46475538364b546e576642516d50374e4736733634415239334544526d625a39656739366e6262684e4e697a4b414341773437736d5738526b516d57314e524b6476347a34643855794274473737434a7652324e756838735431786e664b4e545a46574b387178516d557445685a65796538746e4a644b41674e314c7851475570317a5743483948504b69766b63474d4868707875516d5466534e7534334b56686a764777663374433142665144356667614665486e6861506f427036564171505864516d53526d4b6231566e69694e6b5875475a687a4b4466766a31504b5a50544b41716644674e70477548387a3674516d5961726f363977765937726f4146574446794343356468356b6e3137484e38716757555a4175636941366836516d58677a544653476b4a75784c614e524b504b74727058736445756773574c7935386a7a4d383137516b48567a516d55504a38384466733576386f63727a315361654a3578466f344e59534a5572344b32617965456b596a4d4e77516d526d4476325443524c636a7162613631454467554347634c7952765a6757314b78584a326e7655547556786a516d614b4e5936694536506d71504d68417667736a4b616a4a754e376f62446475396d6579534651766b5a505578516d574a6b4b6b5248336a756a597459327250743445707a41724676463473314775324865337477743872454766516d5a3973585472616452587265595a6a4e575553566b4b57464856356642647a47547478723171756d32646545516d66523965796731424868657761484a7832655070474b72344e685437734b6753736b45684a74746173546653516d624b4354333150506a45465672346b32373962767759763865545a52585977594b3263546b4758654b416331516d4e536952315163594255446b4d4b483946786a34615958366d425a4657674661715141646f4d447478533847516d5439566f4b4472326a476e7861396a6570546b6b746273734c735a58577973487142747a32456b78654a5272516d6150435a5963777848786d6d6639446f7a6f4c79687972777531663535436f45697564717534744a70736652516d56396b31326f6133574a5a517750676d7435434e487777717158683473706a7168514551504e473636466a66516d5a6a6858786e34614c7a6575787373735253376e6f615946397256704b794e555247454e4e64416a5a515751516d64463636667a544c394431455653327377356b547364705132653543314343436657705a4e4d557261477145516d614c724e736e624531635456614676666f6845373634476e766f6d314656684c4561587848753861776b6a41516d636765396e323852575a4e4e536f503764786263526a7061767a4d5a574d396244623450485461556a376278516d5947354256716f4d35344e4c48413264684c724e356a46763141724d456134716b4b41555277654d544e6f6e516d5435666d6b424a687a6b6273483553444745694b54437a446a38444c7a5851637a706e4c6f54557843416257516d585234573878636733394c4a75724471426161486b6f6d3770645036576d354e6e706a714346505332737935516d665a666b31624c44583251746b5845454247487957387067354c777179575a6d6e364268464a616355514454516d4e5a616b32396d4544797443597a7141386b7747586546566f4c5441535239713351704567444c4a65664838516d64747548504738726443426335694c746d6d545a7974786d71716e5079535655363837773241325838504365516d6453636a5838674770693652486b54676144686d614b616532524633324b52684c7741594645564372783742516d65704373744d6332656f45514a546b7465557a774c7757445038544e634259374131625838374e6463754b57516d517471447971747871433671683153516d554b3773356931364b4a3842534b733367446950764b5274646742516d616d46796532673343524c445754616265473248725a7456375a4165534534507a65517659567a7172383634516d655662614c373469684673385039383369545674616f4b4b6856434b5848675a713734346154317454394d42516d63596d6a6e333853677a414c717050624639435a57386359417358664a316d68747762674c7a647579686738516d534b3350765a756d79723835436574727a507961547855654434436255637171643279334c376f6578587533516d52655a445276664a43346670656239337161396f68385252524a4d74674568776471554d34734b41376b5846516d615a4165654e5835623966787156686767545442474d3270363745424d5576584e784632687376676e34667a516d5936437765723871464b6168764452505873397439793641696957346e7656564a6a5256507764516b76766d516d537a48343153324735697a736a6b5770523444427043733162367a335545627146614a484635695055474d4d516d557744695877525269356b4135666741424d446b37674e51507a4d434462796d5251756f4746776163573236516d525242643664356a6a724e396f705847597a4b4b42564c336b7763585561666556557969516f703753627470516d51397763594843464b386e756956376d35476b3637377167765a4e6e6a686f4b3138706366774878446d4a63516d5a545756686539395133473237714c695552617a3669643531336d57466a44613572713665564569704c7059516d53566e3442367234467436673848466e57327a58727941337776365362646d785671714d6f324731796a5941516d65566b66364e575a6a676768454457506142454a42486e4e635466776b41566138704a69434e686479453333516d4e513232714e6b54687a31635379504a7a415a343653336a4c75373152643651677075334d58696a73763472516d593551413355704d3253524c556e53736157395164684a576a556b59454d5254755343487345596e75457370516d546d5a5350444e53467a74574267583833396e69426364656155523742416d71476175725639574e69663944516d50793264474a66656131504d667061706b4373583379483152646a664773485845637a6e66726a415164357a516d584a46367434676273705742436772323534656d7671716870576934584c614d74794d475345657a436f4c66516d5656636471624e576677474b417176724d6d464d4d55396978663565426747694233385632445865537a7473516d57697652486b79434b4b73766b4d6a564e426a794851556278746e68616f673868623663734132584e656845516d57764a73616539625542646351704362726358336854546833544d7154524d48793171695a736576796e5034516d517a4b6d39466b3879356f73374a465a314d513135563979534142366b31546e3437666f56336d686633647a516d5a5934474d5753615553314539794b475971443559355361647a55776457726473344c4d785a443139794e58516d5939706357545a486474783857557071795a4b6a595859797759784d734e36316438535a7a6e46586b5a7676516d5232376d4d546d314253586850694c367a4d5776554c7359544b354e3158795136385752663235617852324b516d504279756f63374365424c64334a3252684a505448424b546173366a4e586d34424532584872463877733175516d59343155564753785146454e705a363248554762324639785034665a4876674e36386a473936625579614448516d54344337626441576f776654316d445264745950617365546d7065646839365a556836704135515431777574516d664556647350536b32754d41445044626559725056664a65664e37724d5a4373627563697356555633664668516d503844537477546332417a4a3541656b564a4a42587278577077594d716a74694a723246355972764b555a70516d5861325a566d34506d6e3543344c43615759654259777a47434e7a51774532477951484a665945336755506a516d5562474d4745736a354a426344665172587a38715333456a4c556d786a4a616b7a316e723145776375694245516d5376674c76794a476847545636706f51714446376a7a7050507766546e7564397a4869665954784242616343516d6558664172413744713762784675645a3731596b69587246614658376e79596e4267683655456833737a5932516d556e6b4174504a3167326f4678596432746d5669674841456e384d773846636233757a417173416d37467574516d625937717a5a5566374d3562654d6666344c377953367671783565443663795a7750415165314a73426d6331516d61685979444c4669563748734a6f3432734b555464424d506b72624b6534313465484b4c6a6b746a555a5841516d585463646e42794142754e69744b345876445845543350316751617368474546543477506334784b68515548516d5541596a6b706446775867556552336d794a7161544635727542575061613646473941435177395439563846516d4e616b77793831396a4462414d5a6b55775454756b6f4234504438594c465450696a4476316a5472774b5565516d6464413333454c6459664136356b315651667a653761527a6b686d5775715176676a7338586d6d7545724265516d596233696b4b7341326639474375325a324556776f7754596f54466b7332346767686b6d527570534e6d5352516d646545445566663670413137373765434a706774506e727761747752536d32726d3365394557516d50767757516d596d7a654b614233467a446a6a435a413235776e4a38785772503146715741457a545a37364d626370344345516d534b6f7734366364334d4b42384571534e78443537385950597538447079374c62485647315a554467636742516d53563564375a4d466834597762536575357a33645145666d4470527970594473333850785066414135743246516d566a70596f4646515576423939634b476b78414b6456414d734265584e4d783943584d56426e783947694173516d5a53417243514772667762337835735254457745356b6f44477464635a6e5a70464a6d32354d483351715046516d5037786d46776d52663745527638724b756438316b6a695868744631756f426345526a6d393773314e354e43516d6267784654583645625353554c45325474474b6d6741746f454a4a4b7834506679644e39457a527a72386357516d656a5464665251395863316d4861475535353131617561487248445a734b6273664a3269443545584a484359516d6267754c394135544d725a6b6531774a6676685755487934314231466d7269784b616e454e6b434243517858516d6571657657626852707776644d7368736e4b4e635138456767596579625263756871396f6f314c3574626861516d5577647072544548554e487a4d545863475a5a636464416d7943536678766d51344138485343477376414642516d65504c626d575a6a48674770745948624b67664150385265364459436663676d4236474d514c725354733373516d5659754b5671667a34696532787a546a4c674d57616562416e517858673269515a3244693669564c62627a33516d633466694c4850394d6f7458746b315433426931546251726843583855364a6932354856713951706d6d5145516d636f704339426a5958527353766e324c6677727242737770744d77596d3678797a4c3973625768646b485634516d61586d5a3955574e6b63466f4d52566e66326d58547554656e565279567a54536e5a51586a32513143696e38516d6531624c383362474e537957583451504d4b626a32314852364d683850617a717a32556e7332755851765757516d62617442444a76376267426a72343833534376726f7272436f6b5a4450744d5977616637554d56796f584748516d5a446b326247654546416974784d377773695439674278795447596a63563457714d73686345516468545668516d613539705754674d4a534a483431647762516a3768315a43546b33694c677075524a4e755150795a6a76506b516d586e6934796a70434b42347934434a4b47484e687432344a4e376b786f794a3752416975514e643945694c42516d5744466354333768434c7072546671763150715069783565617062706b6a704c555348626151705678364d5a516d566b78744c686339565636786750365050774a72685073367772485a7a5454436b5444764741417364617175516d55667672347055426d584b54526b57476b39545a7166315a6d5a4e7477434335533667434b77426837503358516d5245313434336877685a53427766504e68516d746f455746556869474c4270677737545063596d7136544665516d61447375666e7a333667626d5059413665597531473558704e77563863776e7837356f526871615259467156516d616a6a383735685a444131677071534e4b48434573474673546677553475465678365a69434a486f6b66446b516d557379524d464331355148614e74715075766e48376b5355686f6d7a4867455a47725038383264364561597a516d616e3670594e453741787942797769664b7854387678746135686577564771334d6932524757397a634b4833516d4e76626e6b744d416e416244334659617833663947616e344170567731363634356a67714c7476686a63356b516d5532615171556d715a64773966514b54346f614561654b724b6e7a6b38543953625962473448334656444444516d52646a63534e56556d64384a616b676246706356794377736e6a5233794e33564e70714c36564a4a6d466936516d656f337a7152646d6d4a71633956435359627a6166316b36657943724764646170337a38673576424c563953516d54386745544a677875454731615a566461474e4168626745663338573434696b6f6853764545756471685866516d51705731755a5131685168444a4764636f7375395268595a57357535654b5371414a6b656f333541584c6d51516d516546706d7142536233625379706b4d533970466650636d6136317643477737534c796e4464545732396841516d4e65597a31385557755a6e784775516e6f796e66455a644239676f6a6542317834683946414c326773386f57516d5872376545574a48766d50706b5036344871484d7a6f376d66456e475357625939625535514e426e6e534476516d577853774d6e6d51785264676545714b6a7177753832316d4e375635504a34466374716233446f7535744244516d54394c5551796d324c546544576878527256684e34624677374652414e56684c75547a5531486b6164384148516d52724c36505672747a553345677265764b6e3754664d67354c654276676f4c54353173446f365777366f6659516d633448565a436473533556366d727354777237774c41794457596464513136556e596d4e327232593547624d516d565163616d4a65744a556838515a565a7135714655337a594a54683941436453725a6e7a7478434677503139516d656b7051734651775a647171506d343975363774524a536e50355a594166636e577472367879567974455661516d524d31667472787734594c543753397563724a655166434275467a6f4c713646637141334a796d42416f4c6f516d57317a6f46694636644d42697a4e7176754b5a657a336479476d3151337a6d757735527a445347396d555738516d6342794a5052446a6e7a58793843324d364372595a483268544a504a41326d565652417547316a4769755a71516d616437506b46454e59773551746634716a534a76326941564c5958595454575a5a4767474770334d534c5565516d566146616b59506f6a454b41414565755144643247423747536b58365132717a394e62545379434831726655516d626d63726b5242717270615164767962694e44366b764d4869674d70785a61687459714447794250534d6d66516d4e665a78655a6e4c6d476756617343324d51516e567532436f385a6836456b5676786462325576537964376d516d63527961615632484236616d676e4161755253736544325a3747615468467a4d367a64684a6938534b6e6764516d5274656f78784e51743746367872624334453266694357465a434d35515748354d774235447a745643695435516d64435961546535467868666a536f455a6165505a634135464b6a47587148476f366171594870775334685539516d643159794b693136793356367178786234663265734c76546d357738586e66625138664871373648697a6e31516d5a747763384359526a55647a4d6331315a5169506f345831466867584477753343776257644d353531686546516d587956435652776879384344436d3870344e315a68564561527a33755a38376e415439524a4469693370626f516d52786b463554357a6d7379463567657963315765477871586631417a7453547254455656345177444175545a516d557a3153796f52727445635375723548593236757a694763574b676147396a4d706d557a37516e3444575574516d546133666b7655596477706358326b4c584838533238557a487a734c6339525962786b6d7458366f79427745516d556653456d33597377316b5a745a4168747256424e45355751397076387043527a74374d317847316358506f516d64354857465738796f33623171635242796b714d7956794e6566326f61733174533852587534647650526b41516d624d53654e68424c6352715a4a6e7a4132756971477653386a68694d5069757a4d3635656434573550683654516d59545a6a787836376b4b3544766667596f3874356466696666634a6350634e416937624b66614167744c6634516d644c6731534b72664a463375577139674c69454558433546456d387a686b51355661665331664d483772694d516d5643726e56357a6a797334675778505670506474514c376f69484a6855613263733275375969655474775131516d62797874394578634b54584c61716d797034516162764279504363466b7267566d5159484a33746755715337516d61586b44333564736768476e6966334c6257675746413157615635714d35513744645536777878534e383278516d535a34583552457653513674413871746d78523756775a70626d6d4c694776625352685466686b7a47524848516d54736766395748504e635478364c43413559673532755641787550786f4a526845566a4a574b425651796843516d6362454e637265424c5354634141764c436a50426f343970564a4e4a746b62797a706233796e68714a474253516d6569474447563968576d7173437975676848663444416d7037644d5a325a776b64504c52415966365650596e"; type LarsKristoHellheadsConstructorParams = [signer?: Signer] | ConstructorParameters; diff --git a/app/src/theme/_icons.scss b/app/src/theme/_icons.scss index 3a4417d5..40c534d5 100644 --- a/app/src/theme/_icons.scss +++ b/app/src/theme/_icons.scss @@ -2,10 +2,10 @@ font-weight: normal; font-family: "icomoon"; font-style: normal; - src: url("/icons/icomoon.eot?keanfb"); - src: url("/icons/icomoon.eot?keanfb#iefix") format("embedded-opentype"), - url("/icons/icomoon.ttf?keanfb") format("truetype"), url("/icons/icomoon.woff?keanfb") format("woff"), - url("/icons/icomoon.svg?keanfb#icomoon") format("svg"); + src: url("/icons/icomoon.eot?7hcd9t"); + src: url("/icons/icomoon.eot?7hcd9t#iefix") format("embedded-opentype"), + url("/icons/icomoon.ttf?7hcd9t") format("truetype"), url("/icons/icomoon.woff?7hcd9t") format("woff"), + url("/icons/icomoon.svg?7hcd9t#icomoon") format("svg"); font-display: block; } diff --git a/app/src/ui/fileagent/navbar/Navbar.tsx b/app/src/ui/fileagent/navbar/Navbar.tsx index b80f5ea0..21ce1796 100644 --- a/app/src/ui/fileagent/navbar/Navbar.tsx +++ b/app/src/ui/fileagent/navbar/Navbar.tsx @@ -2,6 +2,7 @@ import clsx from "clsx"; import { Typography } from "ui/typography/Typography"; import { Grid } from "ui/grid/Grid"; +import { WalletSelector } from "ui/wallet-selector/WalletSelector"; import { NavbarProps } from "./Navbar.types"; import styles from "./Navbar.module.scss"; @@ -31,7 +32,9 @@ export const Navbar: React.FC = ({ className }) => (

    -
    {/* */}
    +
    + +
    diff --git a/app/src/ui/icon/Icon.module.scss b/app/src/ui/icon/Icon.module.scss index 5c4300fa..856eb516 100644 --- a/app/src/ui/icon/Icon.module.scss +++ b/app/src/ui/icon/Icon.module.scss @@ -4,10 +4,14 @@ display: inline-block; } -.icon-near:before { +.icon-tiktok:before { content: "\e9ea"; } +.icon-instagram:before { + content: "\e9eb"; +} + .icon-home:before { content: "\e600"; } @@ -4015,43 +4019,3 @@ .icon-ellipsis:before { content: "\e9e9"; } - -.icon-bell:before { - content: "\e9eb"; -} - -.icon-search:before { - content: "\e9ec"; -} - -.icon-logout:before { - content: "\e9ed"; -} - -.icon-profile-2:before { - content: "\e9ee"; -} - -.icon-bets:before { - content: "\e9ef"; -} - -.icon-sports:before { - content: "\e9f0"; -} - -.icon-dashboard:before { - content: "\e9f1"; -} - -.icon-moon-2:before { - content: "\e9f2"; -} - -.icon-pulse-menu:before { - content: "\e9f3"; -} - -.icon-pulse-menu-2:before { - content: "\e9"; -} diff --git a/app/src/ui/icon/Icon.module.scss.d.ts b/app/src/ui/icon/Icon.module.scss.d.ts index 95e4d5ad..ae5e8b21 100644 --- a/app/src/ui/icon/Icon.module.scss.d.ts +++ b/app/src/ui/icon/Icon.module.scss.d.ts @@ -98,9 +98,7 @@ export type Styles = { "icon-battery-power": string; "icon-beaker": string; "icon-bed": string; - "icon-bell": string; "icon-bench-press": string; - "icon-bets": string; "icon-bicycle": string; "icon-bicycle2": string; "icon-binoculars": string; @@ -307,7 +305,6 @@ export type Styles = { "icon-crown": string; "icon-cube": string; "icon-dagger": string; - "icon-dashboard": string; "icon-database": string; "icon-database-add": string; "icon-database-check": string; @@ -547,6 +544,7 @@ export type Styles = { "icon-inbox2": string; "icon-indent-decrease": string; "icon-indent-increase": string; + "icon-instagram": string; "icon-intersect": string; "icon-italic": string; "icon-joystick": string; @@ -592,7 +590,6 @@ export type Styles = { "icon-loading3": string; "icon-location": string; "icon-lock": string; - "icon-logout": string; "icon-lollipop": string; "icon-lotus": string; "icon-loudspeaker": string; @@ -633,7 +630,6 @@ export type Styles = { "icon-minus": string; "icon-minus-square": string; "icon-moon": string; - "icon-moon-2": string; "icon-mouse": string; "icon-mouse-both": string; "icon-mouse-left": string; @@ -646,7 +642,6 @@ export type Styles = { "icon-mustache-glasses": string; "icon-mustache2": string; "icon-mute": string; - "icon-near": string; "icon-network": string; "icon-network-lock": string; "icon-neutral": string; @@ -742,11 +737,8 @@ export type Styles = { "icon-previous-circle": string; "icon-printer": string; "icon-profile": string; - "icon-profile-2": string; "icon-prohibited": string; "icon-pulse": string; - "icon-pulse-menu": string; - "icon-pulse-menu-2": string; "icon-pushpin": string; "icon-pushpin2": string; "icon-puzzle": string; @@ -801,7 +793,6 @@ export type Styles = { "icon-scissors": string; "icon-screen": string; "icon-screwdriver": string; - "icon-search": string; "icon-select": string; "icon-select2": string; "icon-self-timer": string; @@ -863,7 +854,6 @@ export type Styles = { "icon-speed-medium": string; "icon-speed-slow": string; "icon-spell-check": string; - "icon-sports": string; "icon-spotlights": string; "icon-spray": string; "icon-square": string; @@ -926,6 +916,7 @@ export type Styles = { "icon-thumbs-up3": string; "icon-ticket": string; "icon-tie": string; + "icon-tiktok": string; "icon-time-lapse": string; "icon-time-lapse2": string; "icon-timer": string; diff --git a/app/src/ui/modal/Modal.module.scss b/app/src/ui/modal/Modal.module.scss index 029f2920..2cd72ed7 100644 --- a/app/src/ui/modal/Modal.module.scss +++ b/app/src/ui/modal/Modal.module.scss @@ -31,7 +31,7 @@ left: 0; width: 100%; height: 100%; - background: rgba(var(--color-back), $opacity-mid); + background: rgba(0, 0, 0, $opacity-mid); } button.modal__close-button { diff --git a/app/src/ui/notifications/Notifications.tsx b/app/src/ui/notifications/Notifications.tsx index 4a391509..4f918fba 100644 --- a/app/src/ui/notifications/Notifications.tsx +++ b/app/src/ui/notifications/Notifications.tsx @@ -22,7 +22,7 @@ export const Notifications: React.FC = ({ className }) => { <> ) : (
    - + No new notifications
    ); @@ -34,7 +34,7 @@ export const Notifications: React.FC = ({ className }) => { placement="bottom-end" listboxClassName={styles.notifications__list} size="l" - trigger={} + trigger={} >
    diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.module.scss b/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.module.scss index e4339b58..230f8940 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.module.scss +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.module.scss @@ -20,6 +20,18 @@ display: block; margin-bottom: $space-default; + &:hover { + [class*="icon-"] { + color: var(--color-primary); + transform: scale(1.5); + transition: transform 0.1s ease-in-out; + } + } + + [class*="icon-"] { + transition: transform 0.1s ease-in-out; + } + &--img { padding: $space-xs; @@ -58,7 +70,6 @@ color: var(--color-typography-description); &:hover { - color: var(--color-primary); cursor: pointer; } } diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.tsx b/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.tsx index 6ef19390..d5b2838c 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.tsx +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.tsx @@ -41,8 +41,9 @@ export const LarsKristoHellheads: React.FC = ({ className 31/150 Sold - Larskristo Hellheads is the latest from its #darkart creations. Featuring an astonishing{" "} - {metadata.length} items series of digital handcraft mastery. Own one of this limited art today. + In 2022, Larskristo ventured deeper into the abyss, exploring the unsettling terrain of AI dark art. + This foray birthed HellheadS—a chilling fusion of the ordinary and the grotesque. Here, everyday + objects metamorphosed into eerie spectacles, blurring the lines between reality and nightmare. diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss index 882accd3..2f7b05d0 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss @@ -43,6 +43,14 @@ display: flex; justify-content: space-between; + &--connect-wallet { + margin-bottom: $space-default; + } + + &--buy-now { + display: block; + } + &--price { margin-top: 0; color: var(--color-typography-text); diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts index 6bdbaede..34dcb747 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts @@ -6,6 +6,8 @@ export type Styles = { "details-modal__header--row": string; "details-modal__img-container": string; "details-modal__price-block": string; + "details-modal__price-block--buy-now": string; + "details-modal__price-block--connect-wallet": string; "details-modal__price-block--owner-pill": string; "details-modal__price-block--price": string; "details-modal__price-card": string; diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx index 65fac76a..ae7492ea 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx @@ -1,6 +1,7 @@ import clsx from "clsx"; -import { useEffect, useState } from "react"; -import { useEnsName } from "wagmi"; +import { useEffect } from "react"; +import { useAccount, useEnsName } from "wagmi"; +import { useWeb3Modal } from "@web3modal/wagmi/react"; import { Modal } from "ui/modal/Modal"; import { Typography } from "ui/typography/Typography"; @@ -8,31 +9,43 @@ import { Grid } from "ui/grid/Grid"; import { Card } from "ui/card/Card"; import { Button } from "ui/button/Button"; import { useLarskristoHellheadsContext } from "context/evm/larskristo-hellheads/useLarskristoHellheadsContext"; -import currency from "providers/currency"; +import { Icon } from "ui/icon/Icon"; import { DetailsModalProps } from "./DetailsModal.types"; import styles from "./DetailsModal.module.scss"; export const DetailsModal: React.FC = ({ onClose, className, item }) => { - const [owner, setOwner] = useState<`0x${string}`>(); - const [usdPrice, setUsdPrice] = useState("0.00"); + const larskristohellheads = useLarskristoHellheadsContext(); + const { data: ensName } = useEnsName({ address: larskristohellheads.owner }); + const { open } = useWeb3Modal(); + const { isConnected } = useAccount(); - const { contractAddress, contractValues, ownerOf } = useLarskristoHellheadsContext(); - const { data: ensName } = useEnsName({ address: owner }); + const handleOnDisplayWidgetClick = () => { + if (isConnected) { + open({ view: "Account" }); + } else { + open(); + } + }; + + const handleOnBuyNowClick = () => { + larskristohellheads.buyToken(item.id!); + }; useEffect(() => { (async () => { - const o = await ownerOf(item.id!); - setOwner(o); + await larskristohellheads.ownerOf(item.id!); + await larskristohellheads.getTokenPrice(item.id!); })(); }, [item.id]); useEffect(() => { + if (!larskristohellheads.tokenPrice?.rawValue) return; + (async () => { - const currentPrice = await currency.getCoinCurrentPrice("ethereum", "usd"); - console.log(currentPrice); + await larskristohellheads.royaltyInfo(item.id!); })(); - }, [item.id]); + }, [larskristohellheads.tokenPrice?.rawValue]); return ( = ({ onClose, className,
    - {contractValues?.name}, {contractValues?.symbol} + {larskristohellheads.contractValues?.name}, {larskristohellheads.contractValues?.symbol} @@ -75,24 +88,56 @@ export const DetailsModal: React.FC = ({ onClose, className,
    Price - 1.5 ETH | $3,000 + {larskristohellheads.tokenPrice?.formattedValue}{" "} + ETH | {larskristohellheads.tokenPrice?.exchangeRateFormatted}
    - Owned by: {ensName || owner} + Owned by:{" "} + {ensName || larskristohellheads.owner}
    -
    - + {!isConnected && ( +
    + +
    + )} +
    +
    About The Author - {item.description} + + Larskristo's artistic journey began with a quiet intensity, delving into the shadows where emotions + lie in their rawest form. His early works were haunting glimpses into the human soul, capturing the + delicate balance between vulnerability and resilience. + + + In 2022, Larskristo ventured deeper into the abyss, exploring the unsettling terrain of AI dark art. + This foray birthed HellheadS—a chilling fusion of the ordinary and the grotesque. Here, everyday + objects metamorphosed into eerie spectacles, blurring the lines between reality and nightmare. + + + + + + + + + + + + + @@ -100,11 +145,11 @@ export const DetailsModal: React.FC = ({ onClose, className, Details
    Contract Address - {contractAddress} + {larskristohellheads.contractAddress}
    Token ID - {item.id!} + #{item.id!}
    Token Standard @@ -112,11 +157,11 @@ export const DetailsModal: React.FC = ({ onClose, className,
    Owner - {ensName || owner} + {ensName || larskristohellheads.owner}
    Royalty - 1% + {larskristohellheads.royalty?.percentageFormatted}
    Chain diff --git a/app/src/ui/theme-selector/ThemeSelector.tsx b/app/src/ui/theme-selector/ThemeSelector.tsx index 4fa566ef..d778cff3 100644 --- a/app/src/ui/theme-selector/ThemeSelector.tsx +++ b/app/src/ui/theme-selector/ThemeSelector.tsx @@ -20,7 +20,7 @@ export const ThemeSelector: React.FC = ({ className, fixed } aria-label="Change theme" tabIndex={0} > - +
    ); }; diff --git a/hardhat/contracts/LarsKristoHellheads.sol b/hardhat/contracts/LarsKristoHellheads.sol index 653558ce..8e9cd8ad 100644 --- a/hardhat/contracts/LarsKristoHellheads.sol +++ b/hardhat/contracts/LarsKristoHellheads.sol @@ -23,7 +23,7 @@ contract LarsKristoHellheads is ERC721Royalty { address public operator = 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC; // svpervnder.eth mapping(uint256 tokenId => uint256) private _tokenPrices; - uint256 private _transactionFraction = 3; + uint256 private _transactionFraction = 300; // 3% string[] tokenURIs = [ "QmbbdDACM5nkGqRG3cSmk8hYL46XWFkT8zvkbnrbcbSqa1", @@ -251,7 +251,7 @@ contract LarsKristoHellheads is ERC721Royalty { _tokenPrices[i] = 0.5 ether; // initial token price } - _setDefaultRoyalty(author, 10); // 10% royalty + _setDefaultRoyalty(author, 1000); // 10% royalty } function buyToken(uint256 tokenId) public payable returns (uint256, uint256, uint256) { diff --git a/hardhat/test/LarsKristoHellheads.ts b/hardhat/test/LarsKristoHellheads.ts index 9fef3305..5e3d43f8 100644 --- a/hardhat/test/LarsKristoHellheads.ts +++ b/hardhat/test/LarsKristoHellheads.ts @@ -103,7 +103,7 @@ describe("Lease", function () { const [receiver, royaltyAmount] = royaltyInfo; - expect(ethers.formatEther(royaltyAmount)).to.equal("0.0005"); + expect(ethers.formatEther(royaltyAmount)).to.equal("0.05"); expect(receiver).to.equal(author.address); }); @@ -176,9 +176,9 @@ describe("Lease", function () { buyer.address, BigInt(0), ethers.parseEther("1"), - ethers.parseEther("0.001"), - ethers.parseEther("0.0003"), - ethers.parseEther("0.9987"), + ethers.parseEther("0.1"), + ethers.parseEther("0.03"), + ethers.parseEther("0.87"), ); const ownerOf0 = await ERC721.ownerOf(0); From 963ad2c5c0e20c3d28881133fcac7108eeaa4020 Mon Sep 17 00:00:00 2001 From: netpoe Date: Fri, 26 Apr 2024 11:03:39 -0600 Subject: [PATCH 54/57] feat: GridItem & buyToken states --- .../LarskristoHellheadsContext.types.ts | 1 + .../LarskristoHellheadsContextController.tsx | 26 +++++++- app/src/providers/evm/index.ts | 4 ++ .../LarsKristoHellheads.module.scss | 59 ------------------ .../LarsKristoHellheads.module.scss.d.ts | 6 -- .../LarsKristoHellheads.tsx | 32 +--------- .../details-modal/DetailsModal.module.scss | 7 +++ .../DetailsModal.module.scss.d.ts | 1 + .../details-modal/DetailsModal.tsx | 55 +++++++++++------ .../grid-item/GridItem.module.scss | 60 +++++++++++++++++++ .../grid-item/GridItem.module.scss.d.ts | 21 +++++++ .../grid-item/GridItem.test.tsx | 13 ++++ .../grid-item/GridItem.tsx | 52 ++++++++++++++++ .../grid-item/GridItem.types.ts | 11 ++++ 14 files changed, 233 insertions(+), 115 deletions(-) create mode 100644 app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.module.scss create mode 100644 app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.module.scss.d.ts create mode 100644 app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.test.tsx create mode 100644 app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.tsx create mode 100644 app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.types.ts diff --git a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts index 3d928a28..b72332bf 100644 --- a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts +++ b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts @@ -8,6 +8,7 @@ export type LarskristoHellheadsContextControllerProps = { export type LarskristoHellheadsContextActions = { fetchContractValues: { isLoading: boolean }; + buyToken: { isPending: boolean; isConfirmed: boolean; transactionHash?: string }; }; export type LarskristoHellheadsContractValues = { diff --git a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx index 4bfc265e..b8d75dda 100644 --- a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx +++ b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useState } from "react"; import { Client, getContract } from "viem"; -import { useAccount, useWriteContract } from "wagmi"; +import { useAccount, useWaitForTransactionReceipt, useWriteContract } from "wagmi"; import { getClient } from "@wagmi/core"; import { ethers } from "ethers"; @@ -32,11 +32,33 @@ export const LarskristoHellheadsContextController = ({ children }: LarskristoHel fetchContractValues: { isLoading: false, }, + buyToken: { + isPending: false, + isConfirmed: false, + }, }); const { address: connectedAccountAddress, chainId } = useAccount(); const { wagmiConfig } = useEvmWalletSelectorContext(); - const { error: writeContractError, writeContract } = useWriteContract(); + const { data: hash, error: writeContractError, writeContract, isPending } = useWriteContract(); + const { + isLoading: isConfirming, + isSuccess: isConfirmed, + data, + } = useWaitForTransactionReceipt({ + hash, + }); + + useEffect(() => { + setActions((prev) => ({ + ...prev, + buyToken: { + isPending: isPending || isConfirming, + isConfirmed, + transactionHash: data?.transactionHash, + }, + })); + }, [isPending, isConfirming, isConfirmed, data]); if (writeContractError) { console.error(writeContractError); diff --git a/app/src/providers/evm/index.ts b/app/src/providers/evm/index.ts index 55f58ba6..26e56781 100644 --- a/app/src/providers/evm/index.ts +++ b/app/src/providers/evm/index.ts @@ -1,5 +1,9 @@ import client from "./client"; +const getBlockExplorerUrl = () => + process.env.NEXT_PUBLIC_DEFAULT_NETWORK_ENV === "testnet" ? "https://sepolia.etherscan.io" : "https://etherscan.io"; + export default { client, + getBlockExplorerUrl, }; diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.module.scss b/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.module.scss index 230f8940..63963823 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.module.scss +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.module.scss @@ -15,63 +15,4 @@ &__grid { margin-top: $space-l; } - - &__item { - display: block; - margin-bottom: $space-default; - - &:hover { - [class*="icon-"] { - color: var(--color-primary); - transform: scale(1.5); - transition: transform 0.1s ease-in-out; - } - } - - [class*="icon-"] { - transition: transform 0.1s ease-in-out; - } - - &--img { - padding: $space-xs; - - img { - width: 100%; - } - } - - &--name-row { - display: flex; - justify-content: space-between; - } - - &--price-row { - display: flex; - justify-content: space-between; - - > div { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - } - } - - &--price { - color: var(--color-typography-text); - - span { - color: var(--color-typography-description); - } - } - - &--expand { - font-size: $font-size-text; - color: var(--color-typography-description); - - &:hover { - cursor: pointer; - } - } - } } diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.module.scss.d.ts b/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.module.scss.d.ts index 7c746b9a..0e2d0b38 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.module.scss.d.ts +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.module.scss.d.ts @@ -3,12 +3,6 @@ export type Styles = { "latest-collection__grid": string; "latest-collection__intro": string; "latest-collection__intro--artist-name": string; - "latest-collection__item": string; - "latest-collection__item--expand": string; - "latest-collection__item--img": string; - "latest-collection__item--name-row": string; - "latest-collection__item--price": string; - "latest-collection__item--price-row": string; "z-depth-0": string; "z-depth-1": string; "z-depth-1-half": string; diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.tsx b/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.tsx index d5b2838c..f1f78861 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.tsx +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.tsx @@ -4,13 +4,12 @@ import { useState } from "react"; import { Grid } from "ui/grid/Grid"; import { Typography } from "ui/typography/Typography"; import { Button } from "ui/button/Button"; -import { Card } from "ui/card/Card"; -import { Icon } from "ui/icon/Icon"; import styles from "./LarsKristoHellheads.module.scss"; import { ItemMetadata, LatestCollectionProps } from "./LarsKristoHellheads.types"; import metadata from "./metadata.json"; import { DetailsModal } from "./details-modal/DetailsModal"; +import { GridItem } from "./grid-item/GridItem"; export const LarsKristoHellheads: React.FC = ({ className }) => { const [isDetailsModalVisible, displayDetailsModals] = useState(false); @@ -59,34 +58,7 @@ export const LarsKristoHellheads: React.FC = ({ className
    {metadata.map((item: ItemMetadata, index) => ( - - -
    - {item.name} -
    - -
    -
    - {item.name} -
    -
    -
    -
    - - 1.75 ETH - -
    -
    - handleExpand(item, index)} - /> -
    -
    -
    -
    -
    + ))}
    diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss index 2f7b05d0..1cf342ad 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss @@ -43,6 +43,13 @@ display: flex; justify-content: space-between; + &--success { + margin-top: $space-default; + padding: $space-default; + color: var(--color-background); + background-color: var(--color-primary-shade-low); + } + &--connect-wallet { margin-bottom: $space-default; } diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts index 34dcb747..122f179e 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts @@ -10,6 +10,7 @@ export type Styles = { "details-modal__price-block--connect-wallet": string; "details-modal__price-block--owner-pill": string; "details-modal__price-block--price": string; + "details-modal__price-block--success": string; "details-modal__price-card": string; "z-depth-0": string; "z-depth-1": string; diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx index ae7492ea..eccc69e0 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx @@ -10,13 +10,14 @@ import { Card } from "ui/card/Card"; import { Button } from "ui/button/Button"; import { useLarskristoHellheadsContext } from "context/evm/larskristo-hellheads/useLarskristoHellheadsContext"; import { Icon } from "ui/icon/Icon"; +import evm from "providers/evm"; import { DetailsModalProps } from "./DetailsModal.types"; import styles from "./DetailsModal.module.scss"; export const DetailsModal: React.FC = ({ onClose, className, item }) => { - const larskristohellheads = useLarskristoHellheadsContext(); - const { data: ensName } = useEnsName({ address: larskristohellheads.owner }); + const ERC721 = useLarskristoHellheadsContext(); + const { data: ensName } = useEnsName({ address: ERC721.owner }); const { open } = useWeb3Modal(); const { isConnected } = useAccount(); @@ -29,23 +30,23 @@ export const DetailsModal: React.FC = ({ onClose, className, }; const handleOnBuyNowClick = () => { - larskristohellheads.buyToken(item.id!); + ERC721.buyToken(item.id!); }; useEffect(() => { (async () => { - await larskristohellheads.ownerOf(item.id!); - await larskristohellheads.getTokenPrice(item.id!); + await ERC721.ownerOf(item.id!); + await ERC721.getTokenPrice(item.id!); })(); }, [item.id]); useEffect(() => { - if (!larskristohellheads.tokenPrice?.rawValue) return; + if (!ERC721.tokenPrice?.rawValue) return; (async () => { - await larskristohellheads.royaltyInfo(item.id!); + await ERC721.royaltyInfo(item.id!); })(); - }, [larskristohellheads.tokenPrice?.rawValue]); + }, [ERC721.tokenPrice?.rawValue]); return ( = ({ onClose, className,
    - {larskristohellheads.contractValues?.name}, {larskristohellheads.contractValues?.symbol} + {ERC721.contractValues?.name}, {ERC721.contractValues?.symbol} @@ -88,14 +89,13 @@ export const DetailsModal: React.FC = ({ onClose, className,
    Price - {larskristohellheads.tokenPrice?.formattedValue}{" "} - ETH | {larskristohellheads.tokenPrice?.exchangeRateFormatted} + {ERC721.tokenPrice?.formattedValue}{" "} + ETH | {ERC721.tokenPrice?.exchangeRateFormatted}
    - Owned by:{" "} - {ensName || larskristohellheads.owner} + Owned by: {ensName || ERC721.owner}
    @@ -107,10 +107,29 @@ export const DetailsModal: React.FC = ({ onClose, className, )}
    -
    + {ERC721.actions.buyToken.isConfirmed && ( +
    + {ERC721.actions.buyToken.isConfirmed && ( + + Purchase confirmed! Check your transaction{" "} + + here + + + )} +
    + )} @@ -145,7 +164,7 @@ export const DetailsModal: React.FC = ({ onClose, className, Details
    Contract Address - {larskristohellheads.contractAddress} + {ERC721.contractAddress}
    Token ID @@ -157,11 +176,11 @@ export const DetailsModal: React.FC = ({ onClose, className,
    Owner - {ensName || larskristohellheads.owner} + {ensName || ERC721.owner}
    Royalty - {larskristohellheads.royalty?.percentageFormatted} + {ERC721.royalty?.percentageFormatted}
    Chain diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.module.scss b/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.module.scss new file mode 100644 index 00000000..0e4ddb7f --- /dev/null +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.module.scss @@ -0,0 +1,60 @@ +@import "src/theme/base"; + +.grid-item { + display: block; + margin-bottom: $space-default; + + &:hover { + [class*="icon-"] { + color: var(--color-primary); + transform: scale(1.5); + transition: transform 0.1s ease-in-out; + } + } + + [class*="icon-"] { + transition: transform 0.1s ease-in-out; + } + + &__img { + padding: $space-xs; + + img { + width: 100%; + } + } + + &__name-row { + display: flex; + justify-content: space-between; + } + + &__price-row { + display: flex; + justify-content: space-between; + + > div { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + } + + &__price { + color: var(--color-typography-text); + + span { + color: var(--color-typography-description); + } + } + + &__expand { + font-size: $font-size-text; + color: var(--color-typography-description); + + &:hover { + cursor: pointer; + } + } +} diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.module.scss.d.ts b/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.module.scss.d.ts new file mode 100644 index 00000000..66a7d8cc --- /dev/null +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.module.scss.d.ts @@ -0,0 +1,21 @@ +export type Styles = { + "grid-item": string; + "grid-item__expand": string; + "grid-item__img": string; + "grid-item__name-row": string; + "grid-item__price": string; + "grid-item__price-row": string; + "z-depth-0": string; + "z-depth-1": string; + "z-depth-1-half": string; + "z-depth-2": string; + "z-depth-3": string; + "z-depth-4": string; + "z-depth-5": string; +}; + +export type ClassNames = keyof Styles; + +declare const styles: Styles; + +export default styles; diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.test.tsx b/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.test.tsx new file mode 100644 index 00000000..b3fc7ae6 --- /dev/null +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.test.tsx @@ -0,0 +1,13 @@ +import { screen, render } from "tests"; + +import { GridItem } from "./GridItem"; + +describe("GridItem", () => { + it("renders children correctly", () => { + render(GridItem); + + const element = screen.getByText("GridItem"); + + expect(element).toBeInTheDocument(); + }); +}); diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.tsx b/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.tsx new file mode 100644 index 00000000..271c6958 --- /dev/null +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.tsx @@ -0,0 +1,52 @@ +import clsx from "clsx"; +import { useEffect } from "react"; + +import { Grid } from "ui/grid/Grid"; +import { Card } from "ui/card/Card"; +import { Typography } from "ui/typography/Typography"; +import { Icon } from "ui/icon/Icon"; +import { useLarskristoHellheadsContext } from "context/evm/larskristo-hellheads/useLarskristoHellheadsContext"; + +import styles from "./GridItem.module.scss"; +import { GridItemProps } from "./GridItem.types"; + +export const GridItem: React.FC = ({ item, index, handleExpand, className }) => { + const ERC721 = useLarskristoHellheadsContext(); + + useEffect(() => { + (async () => { + await ERC721.getTokenPrice(index); + })(); + }, [index]); + + return ( + + +
    + {item.name} +
    + +
    +
    + {item.name} +
    +
    +
    +
    + + {ERC721.tokenPrice?.formattedValue} ETH + +
    +
    + handleExpand(item, index)} + /> +
    +
    +
    +
    +
    + ); +}; diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.types.ts b/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.types.ts new file mode 100644 index 00000000..91f0a297 --- /dev/null +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.types.ts @@ -0,0 +1,11 @@ +import { ReactNode } from "react"; + +import { ItemMetadata } from "../LarsKristoHellheads.types"; + +export type GridItemProps = { + children?: ReactNode; + className?: string; + item: ItemMetadata; + index: number; + handleExpand: (item: ItemMetadata, index: number) => void; +}; From 7168630cdb473933c46305c5478d911fe0a69980 Mon Sep 17 00:00:00 2001 From: netpoe Date: Mon, 29 Apr 2024 01:07:21 -0600 Subject: [PATCH 55/57] fix: getTokenPrice on GridItem --- .../LarskristoHellheadsContext.types.ts | 8 +- .../LarskristoHellheadsContextController.tsx | 145 +++++++---- app/src/providers/evm/client.ts | 15 +- app/src/providers/evm/index.ts | 5 +- app/src/theme/forms/_input-fields.scss | 4 +- app/src/theme/variants/_svpervnder.scss | 2 +- .../LarsKristoHellheadsContainer.tsx | 10 + .../details-modal/DetailsModal.module.scss | 73 +++++- .../DetailsModal.module.scss.d.ts | 11 + .../details-modal/DetailsModal.tsx | 246 ++++++++++++++---- .../grid-item/GridItem.tsx | 52 +++- app/src/ui/svpervnder/home/Home.tsx | 16 +- 12 files changed, 452 insertions(+), 135 deletions(-) create mode 100644 app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheadsContainer.tsx diff --git a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts index b72332bf..dcdcda84 100644 --- a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts +++ b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts @@ -8,6 +8,7 @@ export type LarskristoHellheadsContextControllerProps = { export type LarskristoHellheadsContextActions = { fetchContractValues: { isLoading: boolean }; + getTokenPrice: { isLoading: boolean }; buyToken: { isPending: boolean; isConfirmed: boolean; transactionHash?: string }; }; @@ -19,8 +20,8 @@ export type LarskristoHellheadsContractValues = { export type TokenPrice = { rawValue: bigint; formattedValue: string; - exchangeRate: number; - exchangeRateFormatted: string; + exchangeRate?: number; + exchangeRateFormatted?: string; }; export type Royalty = { @@ -38,7 +39,8 @@ export type LarskristoHellheadsContextType = { royalty?: Royalty; fetchContractValues: (address: string) => Promise; ownerOf: (tokenId: number) => Promise; - getTokenPrice: (tokenId: number) => Promise; + getTokenPrice: (tokenId: number, options?: { excludeExchangeRate?: boolean }) => Promise; royaltyInfo: (tokenId: number) => Promise; buyToken: (tokenId: number) => Promise; + connectedAccountIsOwner: () => boolean; }; diff --git a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx index b8d75dda..dc2e1e3c 100644 --- a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx +++ b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx @@ -1,13 +1,12 @@ import React, { useEffect, useState } from "react"; -import { Client, getContract } from "viem"; -import { useAccount, useWaitForTransactionReceipt, useWriteContract } from "wagmi"; -import { getClient } from "@wagmi/core"; +import { getContract } from "viem"; +import { useAccount } from "wagmi"; import { ethers } from "ethers"; import { LarsKristoHellheads__factory } from "providers/evm/contracts/larskristohellheads/LarsKristoHellheads__factory"; -import { useEvmWalletSelectorContext } from "../wallet-selector/useEvmWalletSelectorContext"; import currency from "providers/currency"; import { ZeroXAddress } from "../wallet-selector/EvmWalletSelectorContext.types"; +import evm from "providers/evm"; import { LarskristoHellheadsContext } from "./LarskristoHellheadsContext"; import { @@ -36,82 +35,117 @@ export const LarskristoHellheadsContextController = ({ children }: LarskristoHel isPending: false, isConfirmed: false, }, + getTokenPrice: { + isLoading: false, + }, }); - const { address: connectedAccountAddress, chainId } = useAccount(); - const { wagmiConfig } = useEvmWalletSelectorContext(); - const { data: hash, error: writeContractError, writeContract, isPending } = useWriteContract(); - const { - isLoading: isConfirming, - isSuccess: isConfirmed, - data, - } = useWaitForTransactionReceipt({ - hash, - }); - - useEffect(() => { - setActions((prev) => ({ - ...prev, - buyToken: { - isPending: isPending || isConfirming, - isConfirmed, - transactionHash: data?.transactionHash, - }, - })); - }, [isPending, isConfirming, isConfirmed, data]); + const { address: connectedAccountAddress } = useAccount(); + const { publicClient } = evm; - if (writeContractError) { - console.error(writeContractError); - } + const getContractInstance = () => + getContract({ + address: contractAddress as ZeroXAddress, + abi: LarsKristoHellheads__factory.abi, + client: publicClient, + }); - const client = getClient(wagmiConfig, { chainId }) as Client; + const connectedAccountIsOwner = () => owner === connectedAccountAddress; const buyToken = async (tokenId: number) => { try { - await writeContract({ - address: contractAddress as ZeroXAddress, - abi: LarsKristoHellheads__factory.abi, - functionName: "buyToken" as "buyToken", - args: [BigInt(tokenId)], + setActions((prev) => ({ + ...prev, + buyToken: { + isPending: true, + isConfirmed: false, + }, + })); + + const contract = getContractInstance(); + + const hash = await contract.write.buyToken([BigInt(tokenId)], { account: connectedAccountAddress as ZeroXAddress, value: tokenPrice?.rawValue!, + chain: undefined, }); + + console.log({ hash }); + + const receipt = await publicClient.waitForTransactionReceipt({ hash }); + + console.log({ receipt }); + + setActions((prev) => ({ + ...prev, + buyToken: { + isPending: false, + isConfirmed: true, + transactionHash: receipt.transactionHash, + }, + })); } catch (error) { console.error(error); } }; - const getTokenPrice = async (tokenId: number) => { + const getTokenPrice = async (tokenId: number, options?: { excludeExchangeRate?: boolean }) => { try { - const contract = getContract({ - address: contractAddress as ZeroXAddress, - abi: LarsKristoHellheads__factory.abi, - client, - }); + setActions((prev) => ({ + ...prev, + getTokenPrice: { + isLoading: true, + }, + })); + + const contract = getContractInstance(); const rawValue = await contract.read.getTokenPrice([BigInt(tokenId)]); const formattedValue = ethers.formatEther(rawValue); - const exchangeRate = await currency.getCoinCurrentPrice("ethereum", "usd"); - const exchangeRateFormatted = currency.formatFiatCurrency(Number(formattedValue) * exchangeRate); - setTokenPrice({ + const values: TokenPrice = { rawValue, formattedValue, - exchangeRate, - exchangeRateFormatted, - }); + }; + + if (!options?.excludeExchangeRate) { + const exchangeRate = await currency.getCoinCurrentPrice("ethereum", "usd"); + const exchangeRateFormatted = currency.formatFiatCurrency(Number(formattedValue) * exchangeRate); + values.exchangeRate = exchangeRate; + values.exchangeRateFormatted = exchangeRateFormatted; + } + + setTokenPrice(values); + + setActions((prev) => ({ + ...prev, + getTokenPrice: { + isLoading: false, + }, + })); + + return values; } catch (error) { console.error(error); + setTokenPrice(undefined); } + + setActions((prev) => ({ + ...prev, + getTokenPrice: { + isLoading: false, + }, + })); + + return { + rawValue: BigInt(0), + formattedValue: "0.00", + }; }; const royaltyInfo = async (tokenId: number) => { try { - const contract = getContract({ - address: contractAddress as ZeroXAddress, - abi: LarsKristoHellheads__factory.abi, - client, - }); + const contract = getContractInstance(); const [, rawValue] = await contract.read.royaltyInfo([BigInt(tokenId), tokenPrice!.rawValue]); const percentage = Number(ethers.formatEther(rawValue)) / Number(ethers.formatEther(tokenPrice!.rawValue)); @@ -128,11 +162,7 @@ export const LarskristoHellheadsContextController = ({ children }: LarskristoHel const ownerOf = async (tokenId: number) => { try { - const contract = getContract({ - address: contractAddress as ZeroXAddress, - abi: LarsKristoHellheads__factory.abi, - client, - }); + const contract = getContractInstance(); const result = await contract.read.ownerOf([BigInt(tokenId)]); @@ -154,7 +184,7 @@ export const LarskristoHellheadsContextController = ({ children }: LarskristoHel const contract = getContract({ address: address as ZeroXAddress, abi: LarsKristoHellheads__factory.abi, - client, + client: publicClient, }); const [name, symbol] = await Promise.all([contract.read.name(), contract.read.symbol()]); @@ -199,6 +229,7 @@ export const LarskristoHellheadsContextController = ({ children }: LarskristoHel tokenPrice, royaltyInfo, royalty, + connectedAccountIsOwner, }; return {children}; diff --git a/app/src/providers/evm/client.ts b/app/src/providers/evm/client.ts index c29d9a2c..d41d180d 100644 --- a/app/src/providers/evm/client.ts +++ b/app/src/providers/evm/client.ts @@ -1,9 +1,12 @@ -import { createWalletClient, http } from "viem"; -import { sepolia } from "viem/chains"; +import { createPublicClient, createWalletClient, custom, http } from "viem"; +import { mainnet, sepolia } from "viem/chains"; -const client = createWalletClient({ - chain: sepolia, - transport: http(), +export const walletClient = createWalletClient({ + chain: process.env.NEXT_PUBLIC_DEFAULT_NETWORK_ENV === "testnet" ? sepolia : mainnet, + transport: window !== undefined && (window as any).ethereum ? custom((window as any).ethereum) : http(), }); -export default client; +export const publicClient = createPublicClient({ + chain: process.env.NEXT_PUBLIC_DEFAULT_NETWORK_ENV === "testnet" ? sepolia : mainnet, + transport: window !== undefined && (window as any).ethereum ? custom((window as any).ethereum) : http(), +}); diff --git a/app/src/providers/evm/index.ts b/app/src/providers/evm/index.ts index 26e56781..ec95c6a9 100644 --- a/app/src/providers/evm/index.ts +++ b/app/src/providers/evm/index.ts @@ -1,9 +1,10 @@ -import client from "./client"; +import { walletClient, publicClient } from "./client"; const getBlockExplorerUrl = () => process.env.NEXT_PUBLIC_DEFAULT_NETWORK_ENV === "testnet" ? "https://sepolia.etherscan.io" : "https://etherscan.io"; export default { - client, + walletClient, + publicClient, getBlockExplorerUrl, }; diff --git a/app/src/theme/forms/_input-fields.scss b/app/src/theme/forms/_input-fields.scss index 2679c171..674d4679 100644 --- a/app/src/theme/forms/_input-fields.scss +++ b/app/src/theme/forms/_input-fields.scss @@ -30,10 +30,8 @@ textarea.materialize-textarea { border-radius: $border-radius-input; padding: $input-padding; color: $input-text-color; - // General Styles outline: none; - - // Disabled input style + background-color: $input-background; &:disabled, &[readonly="readonly"] { diff --git a/app/src/theme/variants/_svpervnder.scss b/app/src/theme/variants/_svpervnder.scss index 574ee0c5..79e63e47 100644 --- a/app/src/theme/variants/_svpervnder.scss +++ b/app/src/theme/variants/_svpervnder.scss @@ -135,7 +135,7 @@ body[data-theme="lease-721"] { --color-value-decrease-bright: #e76823; // Forms - --color-input-text: var(--color-background); + --color-input-text: var(--color-typography-text); --color-input-text-disabled: var(--color-typography-description); --color-input-background: white; --color-input-background-disabled: var(--color-background-contrast); diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheadsContainer.tsx b/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheadsContainer.tsx new file mode 100644 index 00000000..75c7ad8e --- /dev/null +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheadsContainer.tsx @@ -0,0 +1,10 @@ +import { LarskristoHellheadsContextController } from "context/evm/larskristo-hellheads/LarskristoHellheadsContextController"; + +import { LatestCollectionProps } from "./LarsKristoHellheads.types"; +import { LarsKristoHellheads } from "./LarsKristoHellheads"; + +export const LarsKristoHellheadsContainer: React.FC = () => ( + + + +); diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss index 1cf342ad..f90a620f 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss @@ -28,7 +28,8 @@ &__price-card, &__details-card, - &__author-card { + &__author-card, + &__forge-card { margin-bottom: $space-default; } @@ -39,15 +40,81 @@ } } + &__forge-card { + &--row { + display: flex; + justify-content: space-between; + margin-bottom: $space-s; + + &-price, + &-button { + display: block; + } + + > div { + display: flex; + flex-direction: column; + justify-content: center; + } + + &-img { + img { + width: 100%; + height: auto; + border-radius: $border-radius; + } + } + + &-details { + display: flex; + + p { + margin-right: $space-m; + } + } + } + } + + &__set-for-sale { + display: block; + + &--form { + position: relative; + + &-price-field { + padding-right: 80px !important; + font-size: $font-size-text-lead; + + &::placeholder { + font-size: $font-size-text-lead; + } + } + + &-currency { + position: absolute; + top: 7px; + right: $space-default; + z-index: $z-index-content; + } + } + + &--info { + border-radius: $border-radius; + padding: $space-default; + text-align: center; + background-color: var(--color-background); + } + } + &__price-block { display: flex; justify-content: space-between; &--success { - margin-top: $space-default; padding: $space-default; + text-align: center; color: var(--color-background); - background-color: var(--color-primary-shade-low); + background-color: var(--color-background); } &--connect-wallet { diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts index 122f179e..3a184b43 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts @@ -3,6 +3,12 @@ export type Styles = { "details-modal__author-card": string; "details-modal__details-card": string; "details-modal__details-card--row": string; + "details-modal__forge-card": string; + "details-modal__forge-card--row": string; + "details-modal__forge-card--row-button": string; + "details-modal__forge-card--row-details": string; + "details-modal__forge-card--row-img": string; + "details-modal__forge-card--row-price": string; "details-modal__header--row": string; "details-modal__img-container": string; "details-modal__price-block": string; @@ -12,6 +18,11 @@ export type Styles = { "details-modal__price-block--price": string; "details-modal__price-block--success": string; "details-modal__price-card": string; + "details-modal__set-for-sale": string; + "details-modal__set-for-sale--form": string; + "details-modal__set-for-sale--form-currency": string; + "details-modal__set-for-sale--form-price-field": string; + "details-modal__set-for-sale--info": string; "z-depth-0": string; "z-depth-1": string; "z-depth-1-half": string; diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx index eccc69e0..db3b1a4b 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx @@ -1,5 +1,6 @@ import clsx from "clsx"; -import { useEffect } from "react"; +import { Field, Form as RFForm } from "react-final-form"; +import { useEffect, useRef, useState } from "react"; import { useAccount, useEnsName } from "wagmi"; import { useWeb3Modal } from "@web3modal/wagmi/react"; @@ -15,7 +16,14 @@ import evm from "providers/evm"; import { DetailsModalProps } from "./DetailsModal.types"; import styles from "./DetailsModal.module.scss"; +const handleOnSetTokenPriceSubmit = (values: Record) => { + console.log({ values }); +}; + export const DetailsModal: React.FC = ({ onClose, className, item }) => { + const [isSetForSale, setIsSetForSale] = useState(false); + const tokenPriceInputRef = useRef(); + const ERC721 = useLarskristoHellheadsContext(); const { data: ensName } = useEnsName({ address: ERC721.owner }); const { open } = useWeb3Modal(); @@ -33,12 +41,19 @@ export const DetailsModal: React.FC = ({ onClose, className, ERC721.buyToken(item.id!); }; + const handleSetForSaleToggle = () => { + setIsSetForSale(!isSetForSale); + setTimeout(() => { + tokenPriceInputRef.current?.focus(); + }, 500); + }; + useEffect(() => { (async () => { await ERC721.ownerOf(item.id!); await ERC721.getTokenPrice(item.id!); })(); - }, [item.id]); + }, [item.id, ERC721.actions.buyToken.isConfirmed]); useEffect(() => { if (!ERC721.tokenPrice?.rawValue) return; @@ -83,53 +98,190 @@ export const DetailsModal: React.FC = ({ onClose, className, {item.description} */} - - -
    -
    - Price - - {ERC721.tokenPrice?.formattedValue}{" "} - ETH | {ERC721.tokenPrice?.exchangeRateFormatted} - -
    -
    - - Owned by: {ensName || ERC721.owner} - -
    -
    - {!isConnected && ( -
    - -
    - )} -
    - -
    - {ERC721.actions.buyToken.isConfirmed && ( -
    + ( + + +
    +
    + Price + {!ERC721.tokenPrice ? ( + Not for sale yet. + ) : ( + + {ERC721.tokenPrice?.formattedValue}{" "} + ETH | {ERC721.tokenPrice?.exchangeRateFormatted} + + )} +
    +
    + + Owned by: {ensName || ERC721.owner} + +
    +
    + {!isConnected && ( +
    + +
    + )} + + {isSetForSale && ( +
    + + ETH + + +
    + )} + + {ERC721.connectedAccountIsOwner() && !isSetForSale && !ERC721.actions.buyToken.isConfirmed && ( +
    +
    + You own this item. +
    +
    + )} + {ERC721.actions.buyToken.isConfirmed && ( - - Purchase confirmed! Check your transaction{" "} - - here - - +
    + + Purchase confirmed! Check your transaction{" "} + + here + + +
    )} -
    - )} +
    + + {ERC721.tokenPrice && !ERC721.connectedAccountIsOwner() && ( + + + + )} + + {ERC721.connectedAccountIsOwner() && !isSetForSale && ( + + + + )} + + {isSetForSale && ( + + + + + )} +
    + )} + /> + + + Forge This Item + Extend this item's story, exclusively for you by Lars Kristo. + + * Each forge is also registered in the Ethereum blockchain tied to the original NFT. + + + + {item.id?.toString()} + + + 3D Animated Character +
    + 1.5 ETH + +
    +
    + + + +
    + + + {item.id?.toString()} + + + Physical Hellhead Toy +
    + 1.5 ETH + +
    +
    + + + +
    + + + {item.id?.toString()} + + + Physical Hellhead Oil On Canvas +
    + 1.5 ETH + +
    +
    + + + +
    diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.tsx b/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.tsx index 271c6958..460b806f 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.tsx +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.tsx @@ -1,26 +1,62 @@ import clsx from "clsx"; -import { useEffect } from "react"; +import { useState } from "react"; import { Grid } from "ui/grid/Grid"; import { Card } from "ui/card/Card"; import { Typography } from "ui/typography/Typography"; import { Icon } from "ui/icon/Icon"; import { useLarskristoHellheadsContext } from "context/evm/larskristo-hellheads/useLarskristoHellheadsContext"; +import { TokenPrice } from "context/evm/larskristo-hellheads/LarskristoHellheadsContext.types"; import styles from "./GridItem.module.scss"; import { GridItemProps } from "./GridItem.types"; export const GridItem: React.FC = ({ item, index, handleExpand, className }) => { + const [tokenPrice, setTokenPrice] = useState(); + const [isFetchingTokenPrice, setIsFetchingTokenPrice] = useState(false); + const ERC721 = useLarskristoHellheadsContext(); - useEffect(() => { - (async () => { - await ERC721.getTokenPrice(index); - })(); - }, [index]); + const handleMouseEnter = async () => { + if (tokenPrice) { + return; + } + + setIsFetchingTokenPrice(true); + + setTimeout(async () => { + const result = await ERC721.getTokenPrice(index, { excludeExchangeRate: true }); + + setTokenPrice(result); + + setIsFetchingTokenPrice(false); + }, 500); + }; + + const renderTokenPrice = () => { + if (tokenPrice?.rawValue === BigInt(0)) { + return "Sold Out"; + } + + if (tokenPrice?.formattedValue) { + return ( + <> + {tokenPrice?.formattedValue} ETH + + ); + } + + return <>{isFetchingTokenPrice ? "..." : "Reveal Price"}; + }; return ( - +
    {item.name} @@ -34,7 +70,7 @@ export const GridItem: React.FC = ({ item, index, handleExpand, c
    - {ERC721.tokenPrice?.formattedValue} ETH + {renderTokenPrice()}
    diff --git a/app/src/ui/svpervnder/home/Home.tsx b/app/src/ui/svpervnder/home/Home.tsx index 47c9b1d6..aa3a06be 100644 --- a/app/src/ui/svpervnder/home/Home.tsx +++ b/app/src/ui/svpervnder/home/Home.tsx @@ -1,13 +1,21 @@ import clsx from "clsx"; +import dynamic from "next/dynamic"; import { Typography } from "ui/typography/Typography"; import { Grid } from "ui/grid/Grid"; -import { LarsKristoHellheads } from "../collections/larskristo_hellheads/LarsKristoHellheads"; -import { LarskristoHellheadsContextController } from "context/evm/larskristo-hellheads/LarskristoHellheadsContextController"; +import { LatestCollectionProps } from "../collections/larskristo_hellheads/LarsKristoHellheads.types"; import { HomeProps } from "./Home.types"; import styles from "./Home.module.scss"; +const LarsKristoHellheadsContainer = dynamic( + () => + import("../collections/larskristo_hellheads/LarsKristoHellheadsContainer").then( + (mod) => mod.LarsKristoHellheadsContainer, + ), + { ssr: false }, +); + export const Home: React.FC = ({ className }) => (
    @@ -24,8 +32,6 @@ export const Home: React.FC = ({ className }) => ( - - - +
    ); From f14b65a04f4bea0631928136df9c975a24627e61 Mon Sep 17 00:00:00 2001 From: netpoe Date: Mon, 29 Apr 2024 11:24:48 -0600 Subject: [PATCH 56/57] chore: mobile layout adjustments --- app/src/theme/variants/_svpervnder.scss | 2 +- app/src/ui/modal/Modal.module.scss | 35 +++++++++++---- app/src/ui/modal/Modal.module.scss.d.ts | 5 ++- app/src/ui/modal/Modal.tsx | 16 +++---- .../LarsKristoHellheads.tsx | 6 +-- .../details-modal/DetailsModal.module.scss | 44 ++++++++++++++++--- .../DetailsModal.module.scss.d.ts | 1 + .../details-modal/DetailsModal.tsx | 28 ++++++------ .../grid-item/GridItem.tsx | 16 +++---- 9 files changed, 100 insertions(+), 53 deletions(-) diff --git a/app/src/theme/variants/_svpervnder.scss b/app/src/theme/variants/_svpervnder.scss index 79e63e47..99a9c36e 100644 --- a/app/src/theme/variants/_svpervnder.scss +++ b/app/src/theme/variants/_svpervnder.scss @@ -1,5 +1,5 @@ /* stylelint-disable CssSyntaxError */ -body[data-theme="lease-721"] { +body[data-theme="svpervnder"] { // Status colors --color-status-info: #5356fc; --color-status-info-light: rgba(83, 86, 252, 0.7); diff --git a/app/src/ui/modal/Modal.module.scss b/app/src/ui/modal/Modal.module.scss index 2cd72ed7..6e156c16 100644 --- a/app/src/ui/modal/Modal.module.scss +++ b/app/src/ui/modal/Modal.module.scss @@ -72,13 +72,14 @@ } &--fullscreen { - @include fullscreen(); - - &-on-mobile { - @media (max-width: $mq-medium) { - @include fullscreen(); - } + @include atLargeTablet { + width: 75vw; } + position: absolute; + align-self: center; + width: 95vw; + max-height: 95%; + overflow-y: auto; } &--pullup { @@ -94,13 +95,29 @@ &__header { @include font-properties($typography-headline-2); + @include atLargeTablet { + padding: $space-ml; + } + display: flex; + justify-content: space-between; border-bottom: 1px solid var(--color-background); border-top-left-radius: $border-radius-modal; border-top-right-radius: $border-radius-modal; - padding: $space-ml; + padding: $space-default; color: var(--color-typography-text); background-color: var(--color-background); + &--left, + &--right { + display: block; + + &-item { + display: flex; + flex-direction: column; + justify-content: center; + } + } + &--on-close { display: flex; justify-content: flex-end; @@ -113,8 +130,10 @@ &__content { @include font-properties($typography-text); + @include atLargeTablet { + padding: $space-ml; + } max-height: 65vh; - padding: $space-ml; overflow-y: auto; background-color: var(--color-background-contrast); diff --git a/app/src/ui/modal/Modal.module.scss.d.ts b/app/src/ui/modal/Modal.module.scss.d.ts index a9c6fa84..54f5f0b0 100644 --- a/app/src/ui/modal/Modal.module.scss.d.ts +++ b/app/src/ui/modal/Modal.module.scss.d.ts @@ -6,12 +6,15 @@ export type Styles = { modal__content: string; modal__flat: string; modal__header: string; + "modal__header--left": string; + "modal__header--left-item": string; "modal__header--on-close": string; "modal__header--on-close-icon": string; + "modal__header--right": string; + "modal__header--right-item": string; modal__overlay: string; modal__wrapper: string; "modal__wrapper--fullscreen": string; - "modal__wrapper--fullscreen-on-mobile": string; "modal__wrapper--large": string; "modal__wrapper--medium": string; "modal__wrapper--pullup": string; diff --git a/app/src/ui/modal/Modal.tsx b/app/src/ui/modal/Modal.tsx index e4dda152..77c5dca5 100644 --- a/app/src/ui/modal/Modal.tsx +++ b/app/src/ui/modal/Modal.tsx @@ -4,7 +4,6 @@ import { createPortal } from "react-dom"; import { CSSTransition } from "react-transition-group"; import { Button } from "ui/button/Button"; -import { Grid } from "ui/grid/Grid"; import { Icon } from "ui/icon/Icon"; import { IconButton } from "../iconButton/IconButton"; import { CloseIcon } from "../icons/CloseIcon"; @@ -104,7 +103,6 @@ export const Modal = ({ aria-modal="true" className={clsx(styles.modal__wrapper, className, { [styles["modal__wrapper--fullscreen"]]: fullscreenVariant === "default", - [styles["modal__wrapper--fullscreen-on-mobile"]]: fullscreenVariant === "mobile-only", [styles["modal__wrapper--small"]]: size === "s", [styles["modal__wrapper--medium"]]: size === "m", [styles["modal__wrapper--large"]]: size === "l", @@ -126,11 +124,11 @@ Modal.Header = ({ children, className, onClose, ...props }: ModalHeaderProps) => if (onClose) { return (
    - - - {children} - - +
    +
    {children}
    +
    +
    +
    - - +
    +
    ); } diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.tsx b/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.tsx index f1f78861..e100115b 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.tsx +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.tsx @@ -36,12 +36,12 @@ export const LarsKristoHellheads: React.FC = ({ className
    Latest Collection - larskristo: hellheads + Lars Kristo: Hellheadz - 31/150 Sold + 31/222 Sold In 2022, Larskristo ventured deeper into the abyss, exploring the unsettling terrain of AI dark art. - This foray birthed HellheadS—a chilling fusion of the ordinary and the grotesque. Here, everyday + This foray birthed Hellheadz — a chilling fusion of the ordinary and the grotesque. Here, everyday objects metamorphosed into eerie spectacles, blurring the lines between reality and nightmare. diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss index f90a620f..3e46022f 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss @@ -6,19 +6,32 @@ &__header { &--row { - display: flex; - - > div { + @include atLargeTablet { display: flex; - flex-direction: column; - justify-content: center; - margin-right: $space-default; + + > div { + display: flex; + flex-direction: column; + justify-content: center; + margin-right: $space-default; + } } } + + &--token-id { + @include atLargeTablet { + margin-bottom: 0; + } + margin-bottom: $space-default; + } } &__img-container { + @include atLargeTablet { + padding-top: 0; + } margin-bottom: $space-default; + padding-top: $space-default; img { width: 100%; @@ -42,9 +55,22 @@ &__forge-card { &--row { + @include atLargeTablet { + margin-bottom: $space-s; + } display: flex; justify-content: space-between; - margin-bottom: $space-s; + + &:not(:last-child) { + margin-bottom: $space-ml; + } + + &-price { + @include atLargeTablet { + padding: 0; + } + padding: $space-default; + } &-price, &-button { @@ -66,7 +92,11 @@ } &-details { + @include atLargeTablet { + justify-content: start; + } display: flex; + justify-content: space-between; p { margin-right: $space-m; diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts index 3a184b43..4bfe52c5 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts @@ -10,6 +10,7 @@ export type Styles = { "details-modal__forge-card--row-img": string; "details-modal__forge-card--row-price": string; "details-modal__header--row": string; + "details-modal__header--token-id": string; "details-modal__img-container": string; "details-modal__price-block": string; "details-modal__price-block--buy-now": string; diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx index db3b1a4b..80642615 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx @@ -77,7 +77,7 @@ export const DetailsModal: React.FC = ({ onClose, className,
    {item.name}
    -
    +
    @@ -297,18 +297,20 @@ export const DetailsModal: React.FC = ({ onClose, className, This foray birthed HellheadS—a chilling fusion of the ordinary and the grotesque. Here, everyday objects metamorphosed into eerie spectacles, blurring the lines between reality and nightmare. - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.tsx b/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.tsx index 460b806f..b1ac8e0d 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.tsx +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.tsx @@ -1,5 +1,5 @@ import clsx from "clsx"; -import { useState } from "react"; +import { useEffect, useState } from "react"; import { Grid } from "ui/grid/Grid"; import { Card } from "ui/card/Card"; @@ -17,7 +17,7 @@ export const GridItem: React.FC = ({ item, index, handleExpand, c const ERC721 = useLarskristoHellheadsContext(); - const handleMouseEnter = async () => { + useEffect(() => { if (tokenPrice) { return; } @@ -30,8 +30,8 @@ export const GridItem: React.FC = ({ item, index, handleExpand, c setTokenPrice(result); setIsFetchingTokenPrice(false); - }, 500); - }; + }, 100 * (index + 1)); + }, [tokenPrice?.rawValue]); const renderTokenPrice = () => { if (tokenPrice?.rawValue === BigInt(0)) { @@ -50,13 +50,7 @@ export const GridItem: React.FC = ({ item, index, handleExpand, c }; return ( - +
    {item.name} From 21a1c5d31c61165e1d8022e03b12a0b8aa78b891 Mon Sep 17 00:00:00 2001 From: netpoe Date: Mon, 29 Apr 2024 12:50:58 -0600 Subject: [PATCH 57/57] feat: sets token for sale --- .../LarskristoHellheadsContext.types.ts | 2 + .../LarskristoHellheadsContextController.tsx | 41 +++++++++ app/src/ui/button/Button.module.scss | 2 +- app/src/ui/modal/Modal.tsx | 11 +-- .../details-modal/DetailsModal.module.scss | 4 + .../DetailsModal.module.scss.d.ts | 1 + .../details-modal/DetailsModal.tsx | 92 ++++++++++++++----- .../grid-item/GridItem.tsx | 4 +- 8 files changed, 123 insertions(+), 34 deletions(-) diff --git a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts index dcdcda84..679a3834 100644 --- a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts +++ b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts @@ -10,6 +10,7 @@ export type LarskristoHellheadsContextActions = { fetchContractValues: { isLoading: boolean }; getTokenPrice: { isLoading: boolean }; buyToken: { isPending: boolean; isConfirmed: boolean; transactionHash?: string }; + setTokenForSale: { isPending: boolean; isConfirmed: boolean; transactionHash?: string }; }; export type LarskristoHellheadsContractValues = { @@ -42,5 +43,6 @@ export type LarskristoHellheadsContextType = { getTokenPrice: (tokenId: number, options?: { excludeExchangeRate?: boolean }) => Promise; royaltyInfo: (tokenId: number) => Promise; buyToken: (tokenId: number) => Promise; + setTokenForSale: (tokenId: number, price: string) => Promise; connectedAccountIsOwner: () => boolean; }; diff --git a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx index dc2e1e3c..71ab5fea 100644 --- a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx +++ b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx @@ -35,6 +35,10 @@ export const LarskristoHellheadsContextController = ({ children }: LarskristoHel isPending: false, isConfirmed: false, }, + setTokenForSale: { + isPending: false, + isConfirmed: false, + }, getTokenPrice: { isLoading: false, }, @@ -52,6 +56,42 @@ export const LarskristoHellheadsContextController = ({ children }: LarskristoHel const connectedAccountIsOwner = () => owner === connectedAccountAddress; + const setTokenForSale = async (tokenId: number, price: string) => { + try { + setActions((prev) => ({ + ...prev, + setTokenForSale: { + isPending: true, + isConfirmed: false, + }, + })); + + const contract = getContractInstance(); + + const hash = await contract.write.setTokenForSale([BigInt(tokenId), ethers.parseEther(price)], { + account: connectedAccountAddress as ZeroXAddress, + chain: undefined, + }); + + console.log({ hash }); + + const receipt = await publicClient.waitForTransactionReceipt({ hash }); + + console.log({ receipt }); + + setActions((prev) => ({ + ...prev, + setTokenForSale: { + isPending: false, + isConfirmed: true, + transactionHash: receipt.transactionHash, + }, + })); + } catch (error) { + console.error(error); + } + }; + const buyToken = async (tokenId: number) => { try { setActions((prev) => ({ @@ -230,6 +270,7 @@ export const LarskristoHellheadsContextController = ({ children }: LarskristoHel royaltyInfo, royalty, connectedAccountIsOwner, + setTokenForSale, }; return {children}; diff --git a/app/src/ui/button/Button.module.scss b/app/src/ui/button/Button.module.scss index 7346561d..579af151 100644 --- a/app/src/ui/button/Button.module.scss +++ b/app/src/ui/button/Button.module.scss @@ -353,7 +353,7 @@ $HALF_LOADER_SIZE: 15px; &[disabled] { border-color: var(--color-dark-1); color: var(--color-dark-1); - background-color: var(--color-white); + background-color: transparent; &:active, &:hover, diff --git a/app/src/ui/modal/Modal.tsx b/app/src/ui/modal/Modal.tsx index 77c5dca5..237e9c78 100644 --- a/app/src/ui/modal/Modal.tsx +++ b/app/src/ui/modal/Modal.tsx @@ -38,16 +38,7 @@ export const Modal = ({ // Save page scrollY before modal is opened and restore it after close // It fixes auto scroll to input fields on focus in android - const [pageScrollY, setPageScrollY] = useState(0); - - useEffect(() => { - if (isOpened && fullscreenVariant === "default") { - setTimeout(() => { - setPageScrollY(window.scrollY); - window.scrollTo(0, 0); - }, MODAL_ANIMATION_TIME); - } - }, [isOpened, fullscreenVariant]); + const [pageScrollY] = useState(0); useEffect(() => { if (!isOpened && pageScrollY) { diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss index 3e46022f..ea1e38ba 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss @@ -145,6 +145,10 @@ text-align: center; color: var(--color-background); background-color: var(--color-background); + + &-setTokenForSale { + margin-top: $space-default; + } } &--connect-wallet { diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts index 4bfe52c5..b2a8da33 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.module.scss.d.ts @@ -18,6 +18,7 @@ export type Styles = { "details-modal__price-block--owner-pill": string; "details-modal__price-block--price": string; "details-modal__price-block--success": string; + "details-modal__price-block--success-setTokenForSale": string; "details-modal__price-card": string; "details-modal__set-for-sale": string; "details-modal__set-for-sale--form": string; diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx index 80642615..f50dbff4 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/details-modal/DetailsModal.tsx @@ -16,10 +16,6 @@ import evm from "providers/evm"; import { DetailsModalProps } from "./DetailsModal.types"; import styles from "./DetailsModal.module.scss"; -const handleOnSetTokenPriceSubmit = (values: Record) => { - console.log({ values }); -}; - export const DetailsModal: React.FC = ({ onClose, className, item }) => { const [isSetForSale, setIsSetForSale] = useState(false); const tokenPriceInputRef = useRef(); @@ -37,6 +33,11 @@ export const DetailsModal: React.FC = ({ onClose, className, } }; + const handleOnSetTokenPriceSubmit = async (values: Record) => { + await ERC721.setTokenForSale(item.id!, values.tokenPrice); + setIsSetForSale(false); + }; + const handleOnBuyNowClick = () => { ERC721.buyToken(item.id!); }; @@ -53,7 +54,7 @@ export const DetailsModal: React.FC = ({ onClose, className, await ERC721.ownerOf(item.id!); await ERC721.getTokenPrice(item.id!); })(); - }, [item.id, ERC721.actions.buyToken.isConfirmed]); + }, [item.id, ERC721.actions.buyToken.isConfirmed, ERC721.actions.setTokenForSale.isConfirmed]); useEffect(() => { if (!ERC721.tokenPrice?.rawValue) return; @@ -117,10 +118,17 @@ export const DetailsModal: React.FC = ({ onClose, className,
    - Owned by: {ensName || ERC721.owner} + Owned by:{" "} + + {ensName || ERC721.owner} +
    + {!isConnected && (
    )} + + {ERC721.actions.setTokenForSale.isConfirmed && ( +
    + + New price set!
    + This token is now for sale. +
    Check your transaction{" "} + + here + +
    +
    + )} {ERC721.tokenPrice && !ERC721.connectedAccountIsOwner() && ( @@ -172,8 +202,8 @@ export const DetailsModal: React.FC = ({ onClose, className, @@ -188,7 +218,7 @@ export const DetailsModal: React.FC = ({ onClose, className, onClick={handleSetForSaleToggle} isLoading={ERC721.actions.buyToken.isPending} > - Set For Sale + {ERC721.tokenPrice ? "Set A New Price" : "Set For Sale"} )} @@ -198,7 +228,7 @@ export const DetailsModal: React.FC = ({ onClose, className, )} @@ -220,7 +250,10 @@ export const DetailsModal: React.FC = ({ onClose, className, /> - Forge This Item + Forge This Item + {!ERC721.connectedAccountIsOwner() && ( + (Only the current owner can forge this item) + )} Extend this item's story, exclusively for you by Lars Kristo. * Each forge is also registered in the Ethereum blockchain tied to the original NFT. @@ -239,7 +272,7 @@ export const DetailsModal: React.FC = ({ onClose, className,
    - @@ -258,7 +291,7 @@ export const DetailsModal: React.FC = ({ onClose, className,
    - @@ -277,7 +310,7 @@ export const DetailsModal: React.FC = ({ onClose, className,
    - @@ -318,11 +351,22 @@ export const DetailsModal: React.FC = ({ onClose, className, Details
    Contract Address - {ERC721.contractAddress} + + {ERC721.contractAddress} +
    Token ID - #{item.id!} + + #{item.id!} +
    Token Standard @@ -330,15 +374,21 @@ export const DetailsModal: React.FC = ({ onClose, className,
    Owner - {ensName || ERC721.owner} + + {ensName || ERC721.owner} +
    Royalty - {ERC721.royalty?.percentageFormatted} + {ERC721.royalty?.percentageFormatted}
    Chain - Ethereum + Ethereum
    diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.tsx b/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.tsx index b1ac8e0d..cb0fec32 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.tsx +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/grid-item/GridItem.tsx @@ -30,8 +30,8 @@ export const GridItem: React.FC = ({ item, index, handleExpand, c setTokenPrice(result); setIsFetchingTokenPrice(false); - }, 100 * (index + 1)); - }, [tokenPrice?.rawValue]); + }, 500 + 100 * (index + 1)); + }, [index]); const renderTokenPrice = () => { if (tokenPrice?.rawValue === BigInt(0)) {