diff --git a/.changeset/nasty-files-reply.md b/.changeset/nasty-files-reply.md new file mode 100644 index 0000000000..29e1fdee44 --- /dev/null +++ b/.changeset/nasty-files-reply.md @@ -0,0 +1,27 @@ +--- +'@shopify/cli-hydrogen': minor +--- + +Add experimental support for Vite projects. + +In the Vite config of you Vite<>Remix project, import and use the new experimental Hydrogen and Oxygen plugins, and include them before Remix: + +```ts +import {defineConfig} from 'vite'; +import {hydrogen, oxygen} from '@shopify/cli-hydrogen/experimental-vite'; +import {vitePlugin as remix} from '@remix-run/dev'; +import tsconfigPaths from 'vite-tsconfig-paths'; + +export default defineConfig({ + plugins: [ + hydrogen(), // Adds utilities like GraphiQL and Subrequest Profiler + oxygen(), // Runs your app using the MiniOxygen runtime (closer to production) + remix({buildDirectory: 'dist'}), // Use `dist` to be compatible with `h2 deploy` + tsconfigPaths(), + ], +}); +``` + +Then, run `h2 dev-vite` and `h2 build-vite` commands to start and build your app. + +Please report any issue with this new feature, and let us know if you have any feedback or suggestions. diff --git a/examples/vite/README.md b/examples/vite/README.md new file mode 100644 index 0000000000..f75210afa5 --- /dev/null +++ b/examples/vite/README.md @@ -0,0 +1,64 @@ +# Hydrogen template: Experimental Vite + +Hydrogen is Shopify’s stack for headless commerce. Hydrogen is designed to dovetail with [Remix](https://remix.run/), Shopify’s full stack web framework. This template contains a **minimal setup** of components, queries and tooling to get started with Hydrogen and Vite. + +[Check out Hydrogen docs](https://shopify.dev/custom-storefronts/hydrogen) +[Get familiar with Remix](https://remix.run/docs/en/v1) + +## What's included + +- Remix +- Hydrogen +- Oxygen +- Vite +- Shopify CLI +- ESLint +- Prettier +- GraphQL generator +- TypeScript and JavaScript flavors +- Minimal setup of components and routes + +## Getting started + +**Requirements:** + +- Node.js version 18.0.0 or higher + +```bash +npm create @shopify/hydrogen@latest -- --template vite +``` + +## Building for production + +```bash +npm run build +``` + +## Local development + +```bash +npm run dev +``` + +## Setup for using Customer Account API (`/account` section) + +### Setup public domain using ngrok + +1. Setup a [ngrok](https://ngrok.com/) account and add a permanent domain (ie. `https://.app`). +1. Install the [ngrok CLI](https://ngrok.com/download) to use in terminal +1. Start ngrok using `ngrok http --domain=.app 3000` + +### Include public domain in Customer Account API settings + +1. Go to your Shopify admin => `Hydrogen` or `Headless` app/channel => Customer Account API => Application setup +1. Edit `Callback URI(s)` to include `https://.app/account/authorize` +1. Edit `Javascript origin(s)` to include your public domain `https://.app` or keep it blank +1. Edit `Logout URI` to include your public domain `https://.app` or keep it blank + +### Prepare Environment variables + +Run [`npx shopify hydrogen link`](https://shopify.dev/docs/custom-storefronts/hydrogen/cli#link) or [`npx shopify hydrogen env pull`](https://shopify.dev/docs/custom-storefronts/hydrogen/cli#env-pull) to link this app to your own test shop. + +Alternatly, the values of the required environment varaibles "PUBLIC_CUSTOMER_ACCOUNT_API_CLIENT_ID" and "PUBLIC_CUSTOMER_ACCOUNT_API_URL" can be found in customer account api settings in the Hydrogen admin channel. + +🗒️ Note that mock.shop doesn't supply these variables automatically. diff --git a/examples/vite/app/root.tsx b/examples/vite/app/root.tsx new file mode 100644 index 0000000000..599a2dc0e4 --- /dev/null +++ b/examples/vite/app/root.tsx @@ -0,0 +1,240 @@ +import {useNonce} from '@shopify/hydrogen'; +import { + defer, + type SerializeFrom, + type LoaderFunctionArgs, +} from '@shopify/remix-oxygen'; +import { + Links, + Meta, + Outlet, + Scripts, + useMatches, + useRouteError, + useLoaderData, + ScrollRestoration, + isRouteErrorResponse, + type ShouldRevalidateFunction, +} from '@remix-run/react'; +import {Layout} from '~/components/Layout'; + +import './styles/reset.css'; +import './styles/app.css'; + +/** + * This is important to avoid re-fetching root queries on sub-navigations + */ +export const shouldRevalidate: ShouldRevalidateFunction = ({ + formMethod, + currentUrl, + nextUrl, +}) => { + // revalidate when a mutation is performed e.g add to cart, login... + if (formMethod && formMethod !== 'GET') { + return true; + } + + // revalidate when manually revalidating via useRevalidator + if (currentUrl.toString() === nextUrl.toString()) { + return true; + } + + return false; +}; + +export function links() { + return [ + { + rel: 'preconnect', + href: 'https://cdn.shopify.com', + }, + { + rel: 'preconnect', + href: 'https://shop.app', + }, + {rel: 'icon', type: 'image/svg+xml', href: '/favicon.svg'}, + ]; +} + +/** + * Access the result of the root loader from a React component. + */ +export const useRootLoaderData = () => { + const [root] = useMatches(); + return root?.data as SerializeFrom; +}; + +export async function loader({context}: LoaderFunctionArgs) { + const {storefront, customerAccount, cart} = context; + const publicStoreDomain = context.env.PUBLIC_STORE_DOMAIN; + + const isLoggedInPromise = customerAccount.isLoggedIn(); + + // defer the cart query by not awaiting it + const cartPromise = cart.get(); + + // defer the footer query (below the fold) + const footerPromise = storefront.query(FOOTER_QUERY, { + cache: storefront.CacheLong(), + variables: { + footerMenuHandle: 'footer', // Adjust to your footer menu handle + }, + }); + + // await the header query (above the fold) + const headerPromise = storefront.query(HEADER_QUERY, { + cache: storefront.CacheLong(), + variables: { + headerMenuHandle: 'main-menu', // Adjust to your header menu handle + }, + }); + + return defer( + { + cart: cartPromise, + footer: footerPromise, + header: await headerPromise, + isLoggedIn: isLoggedInPromise, + publicStoreDomain, + }, + { + headers: { + 'Set-Cookie': await context.session.commit(), + }, + }, + ); +} + +export default function App() { + const nonce = useNonce(); + const data = useLoaderData(); + + return ( + + + + + + + + + + + + + + + + ); +} + +export function ErrorBoundary() { + const error = useRouteError(); + const rootData = useRootLoaderData(); + const nonce = useNonce(); + let errorMessage = 'Unknown error'; + let errorStatus = 500; + + if (isRouteErrorResponse(error)) { + errorMessage = error?.data?.message ?? error.data; + errorStatus = error.status; + } else if (error instanceof Error) { + errorMessage = error.message; + } + + return ( + + + + + + + + + +
+

Oops

+

{errorStatus}

+ {errorMessage && ( +
+
{errorMessage}
+
+ )} +
+
+ + + + + ); +} + +const MENU_FRAGMENT = `#graphql + fragment MenuItem on MenuItem { + id + resourceId + tags + title + type + url + } + fragment ChildMenuItem on MenuItem { + ...MenuItem + } + fragment ParentMenuItem on MenuItem { + ...MenuItem + items { + ...ChildMenuItem + } + } + fragment Menu on Menu { + id + items { + ...ParentMenuItem + } + } +` as const; + +const HEADER_QUERY = `#graphql + fragment Shop on Shop { + id + name + description + primaryDomain { + url + } + brand { + logo { + image { + url + } + } + } + } + query Header( + $country: CountryCode + $headerMenuHandle: String! + $language: LanguageCode + ) @inContext(language: $language, country: $country) { + shop { + ...Shop + } + menu(handle: $headerMenuHandle) { + ...Menu + } + } + ${MENU_FRAGMENT} +` as const; + +const FOOTER_QUERY = `#graphql + query Footer( + $country: CountryCode + $footerMenuHandle: String! + $language: LanguageCode + ) @inContext(language: $language, country: $country) { + menu(handle: $footerMenuHandle) { + ...Menu + } + } + ${MENU_FRAGMENT} +` as const; diff --git a/examples/vite/env.d.ts b/examples/vite/env.d.ts new file mode 100644 index 0000000000..fd6095c426 --- /dev/null +++ b/examples/vite/env.d.ts @@ -0,0 +1,47 @@ +/// +/// +/// + +// Enhance TypeScript's built-in typings. +import '@total-typescript/ts-reset'; + +import type { + Storefront, + CustomerAccount, + HydrogenCart, +} from '@shopify/hydrogen'; +import type {AppSession} from '~/lib/session'; + +declare global { + /** + * A global `process` object is only available during build to access NODE_ENV. + */ + const process: {env: {NODE_ENV: 'production' | 'development'}}; + + /** + * Declare expected Env parameter in fetch handler. + */ + interface Env { + SESSION_SECRET: string; + PUBLIC_STOREFRONT_API_TOKEN: string; + PRIVATE_STOREFRONT_API_TOKEN: string; + PUBLIC_STORE_DOMAIN: string; + PUBLIC_STOREFRONT_ID: string; + PUBLIC_CUSTOMER_ACCOUNT_API_CLIENT_ID: string; + PUBLIC_CUSTOMER_ACCOUNT_API_URL: string; + } +} + +declare module '@shopify/remix-oxygen' { + /** + * Declare local additions to the Remix loader context. + */ + export interface AppLoadContext { + env: Env; + cart: HydrogenCart; + storefront: Storefront; + customerAccount: CustomerAccount; + session: AppSession; + waitUntil: ExecutionContext['waitUntil']; + } +} diff --git a/examples/vite/package.json b/examples/vite/package.json new file mode 100644 index 0000000000..cb4ab190db --- /dev/null +++ b/examples/vite/package.json @@ -0,0 +1,24 @@ +{ + "name": "example-vite", + "private": true, + "type": "module", + "prettier": "@shopify/prettier-config", + "scripts": { + "build": "shopify hydrogen build-vite --diff", + "dev": "shopify hydrogen dev-vite --codegen --diff", + "preview": "npm run build && shopify hydrogen preview", + "lint": "eslint --no-error-on-unmatched-pattern --ext .js,.ts,.jsx,.tsx .", + "typecheck": "tsc --noEmit", + "codegen": "shopify hydrogen codegen" + }, + "devDependencies": { + "vite": "^5.1.0", + "vite-tsconfig-paths": "^4.3.1" + }, + "h2:diff": { + "skip-files": [ + "remix.config.js", + "remix.env.d.ts" + ] + } +} diff --git a/examples/vite/server.ts b/examples/vite/server.ts new file mode 100644 index 0000000000..98f7510a5f --- /dev/null +++ b/examples/vite/server.ts @@ -0,0 +1,114 @@ +// Virtual entry point for the app +// @ts-ignore +import * as remixBuild from 'virtual:remix/server-build'; +import { + cartGetIdDefault, + cartSetIdDefault, + createCartHandler, + createStorefrontClient, + storefrontRedirect, + createCustomerAccountClient, +} from '@shopify/hydrogen'; +import { + createRequestHandler, + getStorefrontHeaders, + type AppLoadContext, +} from '@shopify/remix-oxygen'; +import {AppSession} from '~/lib/session'; +import {CART_QUERY_FRAGMENT} from '~/lib/fragments'; + +/** + * Export a fetch handler in module format. + */ +export default { + async fetch( + request: Request, + env: Env, + executionContext: ExecutionContext, + ): Promise { + try { + /** + * Open a cache instance in the worker and a custom session instance. + */ + if (!env?.SESSION_SECRET) { + throw new Error('SESSION_SECRET environment variable is not set'); + } + + const waitUntil = executionContext.waitUntil.bind(executionContext); + const [cache, session] = await Promise.all([ + caches.open('hydrogen'), + AppSession.init(request, [env.SESSION_SECRET]), + ]); + + /** + * Create Hydrogen's Storefront client. + */ + const {storefront} = createStorefrontClient({ + cache, + waitUntil, + i18n: {language: 'EN', country: 'US'}, + publicStorefrontToken: env.PUBLIC_STOREFRONT_API_TOKEN, + privateStorefrontToken: env.PRIVATE_STOREFRONT_API_TOKEN, + storeDomain: env.PUBLIC_STORE_DOMAIN, + storefrontId: env.PUBLIC_STOREFRONT_ID, + storefrontHeaders: getStorefrontHeaders(request), + }); + + /** + * Create a client for Customer Account API. + */ + const customerAccount = createCustomerAccountClient({ + waitUntil, + request, + session, + customerAccountId: env.PUBLIC_CUSTOMER_ACCOUNT_API_CLIENT_ID, + customerAccountUrl: env.PUBLIC_CUSTOMER_ACCOUNT_API_URL, + }); + + /* + * Create a cart handler that will be used to + * create and update the cart in the session. + */ + const cart = createCartHandler({ + storefront, + getCartId: cartGetIdDefault(request.headers), + setCartId: cartSetIdDefault(), + cartQueryFragment: CART_QUERY_FRAGMENT, + }); + + /** + * Create a Remix request handler and pass + * Hydrogen's Storefront client to the loader context. + */ + const handleRequest = createRequestHandler({ + build: remixBuild, + mode: process.env.NODE_ENV, + getLoadContext: (): AppLoadContext => ({ + session, + storefront, + customerAccount, + cart, + env, + waitUntil, + }), + }); + + const response = await handleRequest(request); + + if (response.status === 404) { + /** + * Check for redirects only when there's a 404 from the app. + * If the redirect doesn't exist, then `storefrontRedirect` + * will pass through the 404 response. + */ + return storefrontRedirect({request, response, storefront}); + } + + return response; + } catch (error) { + // eslint-disable-next-line no-console + console.error(error); + return new Response('An unexpected error occurred', {status: 500}); + } + }, +}; diff --git a/examples/vite/tsconfig.json b/examples/vite/tsconfig.json new file mode 100644 index 0000000000..110d781eea --- /dev/null +++ b/examples/vite/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../templates/skeleton/tsconfig.json", + "include": ["./**/*.d.ts", "./**/*.ts", "./**/*.tsx"], + "compilerOptions": { + "baseUrl": ".", + "paths": { + "*": ["./*", "../../templates/skeleton/*"], + "~/*": ["app/*", "../../templates/skeleton/app/*"] + } + } +} diff --git a/examples/vite/vite.config.ts b/examples/vite/vite.config.ts new file mode 100644 index 0000000000..dadb879b48 --- /dev/null +++ b/examples/vite/vite.config.ts @@ -0,0 +1,13 @@ +import {defineConfig} from 'vite'; +import {hydrogen, oxygen} from '@shopify/cli-hydrogen/experimental-vite'; +import {vitePlugin as remix} from '@remix-run/dev'; +import tsconfigPaths from 'vite-tsconfig-paths'; + +export default defineConfig({ + plugins: [ + hydrogen(), + oxygen(), + remix({buildDirectory: 'dist'}), + tsconfigPaths(), + ], +}); diff --git a/package-lock.json b/package-lock.json index f4ec05654e..9d57065f83 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "examples/partytown", "examples/subscriptions", "examples/third-party-queries-caching", + "examples/vite", "packages/cli", "packages/create-hydrogen", "packages/hydrogen", @@ -262,6 +263,13 @@ "examples/third-party-queries-caching": { "name": "example-third-party-queries-caching" }, + "examples/vite": { + "name": "example-vite", + "devDependencies": { + "vite": "^5.1.0", + "vite-tsconfig-paths": "^4.3.1" + } + }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", @@ -825,16 +833,16 @@ "license": "ISC" }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz", - "integrity": "sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==", + "version": "7.23.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz", + "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" @@ -1160,9 +1168,9 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz", - "integrity": "sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz", + "integrity": "sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1203,8 +1211,9 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "license": "MIT", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1227,9 +1236,10 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1407,11 +1417,11 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", - "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -1598,15 +1608,15 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.11.tgz", - "integrity": "sha512-0E4/L+7gfvHub7wsbTv03oRtD69X31LByy44fGmFzbZScpupFByMcgCJ0VbBTkzyjSJKuRoGN8tcijOWKTmqOA==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", + "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-create-class-features-plugin": "^7.23.6", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.22.5" + "@babel/plugin-syntax-typescript": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -1635,16 +1645,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.11.tgz", - "integrity": "sha512-tWY5wyCZYBGY7IlalfKI1rLiGlIfnwsRHZqlky0HVv8qviwQ1Uo/05M6+s+TcTCVa6Bmoo2uJW5TMFX6Wa4qVg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", + "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.11", - "@babel/plugin-transform-typescript": "^7.22.11" + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-typescript": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -2790,9 +2800,9 @@ } }, "node_modules/@cloudflare/workerd-darwin-64": { - "version": "1.20231218.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20231218.0.tgz", - "integrity": "sha512-547gOmTIVmRdDy7HNAGJUPELa+fSDm2Y0OCxqAtQOz0GLTDu1vX61xYmsb2rn91+v3xW6eMttEIpbYokKjtfJA==", + "version": "1.20240129.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240129.0.tgz", + "integrity": "sha512-DfVVB5IsQLVcWPJwV019vY3nEtU88c2Qu2ST5SQxqcGivZ52imagLRK0RHCIP8PK4piSiq90qUC6ybppUsw8eg==", "cpu": [ "x64" ], @@ -2805,9 +2815,9 @@ } }, "node_modules/@cloudflare/workerd-darwin-arm64": { - "version": "1.20231218.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20231218.0.tgz", - "integrity": "sha512-b39qrU1bKolCfmKFDAnX4vXcqzISkEUVE/V8sMBsFzxrIpNAbcUHBZAQPYmS/OHIGB94KjOVokvDi7J6UNurPw==", + "version": "1.20240129.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240129.0.tgz", + "integrity": "sha512-t0q8ABkmumG1zRM/MZ/vIv/Ysx0vTAXnQAPy/JW5aeQi/tqrypXkO9/NhPc0jbF/g/hIPrWEqpDgEp3CB7Da7Q==", "cpu": [ "arm64" ], @@ -2820,9 +2830,9 @@ } }, "node_modules/@cloudflare/workerd-linux-64": { - "version": "1.20231218.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20231218.0.tgz", - "integrity": "sha512-dMUF1wA+0mybm6hHNOCgY/WMNMwomPPs4I7vvYCgwHSkch0Q2Wb7TnxQZSt8d1PK/myibaBwadrlIxpjxmpz3w==", + "version": "1.20240129.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240129.0.tgz", + "integrity": "sha512-sFV1uobHgDI+6CKBS/ZshQvOvajgwl6BtiYaH4PSFSpvXTmRx+A9bcug+6BnD+V4WgwxTiEO2iR97E1XuwDAVw==", "cpu": [ "x64" ], @@ -2835,9 +2845,9 @@ } }, "node_modules/@cloudflare/workerd-linux-arm64": { - "version": "1.20231218.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20231218.0.tgz", - "integrity": "sha512-2s5uc8IHt0QmWyKxAr1Fy+4b8Xy0b/oUtlPnm5MrKi2gDRlZzR7JvxENPJCpCnYENydS8lzvkMiAFECPBccmyQ==", + "version": "1.20240129.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240129.0.tgz", + "integrity": "sha512-O7q7htHaFRp8PgTqNJx1/fYc3+LnvAo6kWWB9a14C5OWak6AAZk42PNpKPx+DXTmGvI+8S1+futBGUeJ8NPDXg==", "cpu": [ "arm64" ], @@ -2850,9 +2860,9 @@ } }, "node_modules/@cloudflare/workerd-windows-64": { - "version": "1.20231218.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20231218.0.tgz", - "integrity": "sha512-oN5hz6TXUDB5YKUN5N3QWAv6cYz9JjTZ9g16HVyoegVFEL6/zXU3tV19MBX2IvlE11ab/mRogEv9KXVIrHfKmA==", + "version": "1.20240129.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240129.0.tgz", + "integrity": "sha512-YqGno0XSqqqkDmNoGEX6M8kJlI2lEfWntbTPVtHaZlaXVR9sWfoD7TEno0NKC95cXFz+ioyFLbgbOdnfWwmVAA==", "cpu": [ "x64" ], @@ -3420,14 +3430,15 @@ } }, "node_modules/@emotion/hash": { - "version": "0.9.0", - "dev": true, - "license": "MIT" + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==", + "dev": true }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", - "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", "cpu": [ "ppc64" ], @@ -3436,7 +3447,6 @@ "os": [ "aix" ], - "peer": true, "engines": { "node": ">=12" } @@ -3491,11 +3501,12 @@ }, "node_modules/@esbuild/darwin-arm64": { "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.6.tgz", + "integrity": "sha512-bsDRvlbKMQMt6Wl08nHtFz++yoZHsyTOxnjfB2Q95gato+Yi4WnRl13oC2/PJJA9yLCoRv9gqT/EYX0/zDsyMA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -4293,21 +4304,21 @@ } }, "node_modules/@graphql-tools/apollo-engine-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.14.tgz", - "integrity": "sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "dependencies": { - "@whatwg-node/node-fetch": "^0.5.0", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/apollo-engine-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.3.tgz", - "integrity": "sha512-toMC8N53RxgprcuU7Fc05KOrJhZV49njJCHPZvXBsjZMQBKrDm9o14Y56CsrUC85cvjQu862MaYOjd8rKgHdDw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "dependencies": { "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", @@ -4325,9 +4336,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@graphql-tools/apollo-engine-loader/node_modules/urlpattern-polyfill": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" }, "node_modules/@graphql-tools/batch-execute": { "version": "9.0.2", @@ -4471,9 +4482,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@graphql-tools/executor-graphql-ws/node_modules/ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "engines": { "node": ">=10.0.0" }, @@ -4519,21 +4530,21 @@ } }, "node_modules/@graphql-tools/executor-http/node_modules/@whatwg-node/fetch": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.14.tgz", - "integrity": "sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "dependencies": { - "@whatwg-node/node-fetch": "^0.5.0", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/executor-http/node_modules/@whatwg-node/node-fetch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.3.tgz", - "integrity": "sha512-toMC8N53RxgprcuU7Fc05KOrJhZV49njJCHPZvXBsjZMQBKrDm9o14Y56CsrUC85cvjQu862MaYOjd8rKgHdDw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "dependencies": { "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", @@ -4562,9 +4573,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@graphql-tools/executor-http/node_modules/urlpattern-polyfill": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" }, "node_modules/@graphql-tools/executor-legacy-ws": { "version": "1.0.4", @@ -4667,21 +4678,21 @@ } }, "node_modules/@graphql-tools/github-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.14.tgz", - "integrity": "sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "dependencies": { - "@whatwg-node/node-fetch": "^0.5.0", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/github-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.3.tgz", - "integrity": "sha512-toMC8N53RxgprcuU7Fc05KOrJhZV49njJCHPZvXBsjZMQBKrDm9o14Y56CsrUC85cvjQu862MaYOjd8rKgHdDw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "dependencies": { "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", @@ -4699,9 +4710,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@graphql-tools/github-loader/node_modules/urlpattern-polyfill": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" }, "node_modules/@graphql-tools/graphql-file-loader": { "version": "8.0.0", @@ -4903,21 +4914,21 @@ } }, "node_modules/@graphql-tools/prisma-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.14.tgz", - "integrity": "sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "dependencies": { - "@whatwg-node/node-fetch": "^0.5.0", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/prisma-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.3.tgz", - "integrity": "sha512-toMC8N53RxgprcuU7Fc05KOrJhZV49njJCHPZvXBsjZMQBKrDm9o14Y56CsrUC85cvjQu862MaYOjd8rKgHdDw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "dependencies": { "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", @@ -4947,9 +4958,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@graphql-tools/prisma-loader/node_modules/urlpattern-polyfill": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" }, "node_modules/@graphql-tools/relay-operation-optimizer": { "version": "7.0.0", @@ -5029,21 +5040,21 @@ } }, "node_modules/@graphql-tools/url-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.14.tgz", - "integrity": "sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "dependencies": { - "@whatwg-node/node-fetch": "^0.5.0", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/url-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.3.tgz", - "integrity": "sha512-toMC8N53RxgprcuU7Fc05KOrJhZV49njJCHPZvXBsjZMQBKrDm9o14Y56CsrUC85cvjQu862MaYOjd8rKgHdDw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "dependencies": { "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", @@ -5061,14 +5072,14 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@graphql-tools/url-loader/node_modules/urlpattern-polyfill": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" }, "node_modules/@graphql-tools/url-loader/node_modules/ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "engines": { "node": ">=10.0.0" }, @@ -5352,9 +5363,9 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -5471,6 +5482,18 @@ "vite": "^4.1.0-beta.0" } }, + "node_modules/@ladle/react/node_modules/@vitejs/plugin-react-swc": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.6.0.tgz", + "integrity": "sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g==", + "dev": true, + "dependencies": { + "@swc/core": "^1.3.107" + }, + "peerDependencies": { + "vite": "^4 || ^5" + } + }, "node_modules/@ladle/react/node_modules/commander": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", @@ -5534,9 +5557,9 @@ } }, "node_modules/@ladle/react/node_modules/vite": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", - "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", + "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", "dev": true, "dependencies": { "esbuild": "^0.18.10", @@ -5962,9 +5985,9 @@ } }, "node_modules/@miniflare/web-sockets/node_modules/ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "engines": { "node": ">=10.0.0" }, @@ -7547,17 +7570,19 @@ }, "node_modules/@remix-run/dev/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==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@remix-run/dev/node_modules/esbuild": { "version": "0.17.6", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.6.tgz", + "integrity": "sha512-TKFRp9TxrJDdRWfSsSERKEovm6v30iHnrjlcGhLBOtReE28Yp1VSBRfO3GTaOFMoxsNerx4TjrhzSuma9ha83Q==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -7591,8 +7616,9 @@ }, "node_modules/@remix-run/dev/node_modules/execa": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -7613,16 +7639,18 @@ }, "node_modules/@remix-run/dev/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==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/@remix-run/dev/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==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -7632,8 +7660,9 @@ }, "node_modules/@remix-run/dev/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==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -7655,8 +7684,9 @@ }, "node_modules/@remix-run/dev/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==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -7666,8 +7696,9 @@ }, "node_modules/@remix-run/dev/node_modules/onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -7680,8 +7711,9 @@ }, "node_modules/@remix-run/dev/node_modules/pidtree": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, - "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -7691,8 +7723,9 @@ }, "node_modules/@remix-run/dev/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==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -7930,9 +7963,9 @@ "integrity": "sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.5.tgz", - "integrity": "sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", + "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", "cpu": [ "arm" ], @@ -7940,13 +7973,12 @@ "optional": true, "os": [ "android" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.5.tgz", - "integrity": "sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", + "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", "cpu": [ "arm64" ], @@ -7954,13 +7986,12 @@ "optional": true, "os": [ "android" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.5.tgz", - "integrity": "sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", + "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", "cpu": [ "arm64" ], @@ -7968,13 +7999,12 @@ "optional": true, "os": [ "darwin" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.5.tgz", - "integrity": "sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", + "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", "cpu": [ "x64" ], @@ -7982,13 +8012,12 @@ "optional": true, "os": [ "darwin" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.5.tgz", - "integrity": "sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", + "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", "cpu": [ "arm" ], @@ -7996,13 +8025,12 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.5.tgz", - "integrity": "sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", + "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", "cpu": [ "arm64" ], @@ -8010,13 +8038,12 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.5.tgz", - "integrity": "sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", + "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", "cpu": [ "arm64" ], @@ -8024,13 +8051,12 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.5.tgz", - "integrity": "sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", + "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", "cpu": [ "riscv64" ], @@ -8038,13 +8064,12 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", - "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", + "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", "cpu": [ "x64" ], @@ -8052,13 +8077,12 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.5.tgz", - "integrity": "sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", + "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", "cpu": [ "x64" ], @@ -8066,13 +8090,12 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.5.tgz", - "integrity": "sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", + "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", "cpu": [ "arm64" ], @@ -8080,13 +8103,12 @@ "optional": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.5.tgz", - "integrity": "sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", + "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", "cpu": [ "ia32" ], @@ -8094,13 +8116,12 @@ "optional": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz", - "integrity": "sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", + "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", "cpu": [ "x64" ], @@ -8108,8 +8129,7 @@ "optional": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/@rushstack/eslint-patch": { "version": "1.2.0", @@ -8676,9 +8696,9 @@ } }, "node_modules/@swc/core": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.103.tgz", - "integrity": "sha512-PYtt8KzRXIFDwxeD7BA9ylmXNQ4hRVcmDVuAmL3yvL9rgx7Tn3qn6T37wiMVZnP1OjqGyhuHRPNycd+ssr+byw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.0.tgz", + "integrity": "sha512-wc5DMI5BJftnK0Fyx9SNJKkA0+BZSJQx8430yutWmsILkHMBD3Yd9GhlMaxasab9RhgKqZp7Ht30hUYO5ZDvQg==", "devOptional": true, "hasInstallScript": true, "dependencies": { @@ -8693,16 +8713,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.3.103", - "@swc/core-darwin-x64": "1.3.103", - "@swc/core-linux-arm-gnueabihf": "1.3.103", - "@swc/core-linux-arm64-gnu": "1.3.103", - "@swc/core-linux-arm64-musl": "1.3.103", - "@swc/core-linux-x64-gnu": "1.3.103", - "@swc/core-linux-x64-musl": "1.3.103", - "@swc/core-win32-arm64-msvc": "1.3.103", - "@swc/core-win32-ia32-msvc": "1.3.103", - "@swc/core-win32-x64-msvc": "1.3.103" + "@swc/core-darwin-arm64": "1.4.0", + "@swc/core-darwin-x64": "1.4.0", + "@swc/core-linux-arm-gnueabihf": "1.4.0", + "@swc/core-linux-arm64-gnu": "1.4.0", + "@swc/core-linux-arm64-musl": "1.4.0", + "@swc/core-linux-x64-gnu": "1.4.0", + "@swc/core-linux-x64-musl": "1.4.0", + "@swc/core-win32-arm64-msvc": "1.4.0", + "@swc/core-win32-ia32-msvc": "1.4.0", + "@swc/core-win32-x64-msvc": "1.4.0" }, "peerDependencies": { "@swc/helpers": "^0.5.0" @@ -8714,9 +8734,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.103.tgz", - "integrity": "sha512-Dqqz48mvdm/3PHPPA6YeAEofkF9H5Krgqd/baPf0dXcarzng6U9Ilv2aCtDjq7dfI9jfkVCW5zuwq98PE2GEdw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.0.tgz", + "integrity": "sha512-UTJ/Vz+s7Pagef6HmufWt6Rs0aUu+EJF4Pzuwvr7JQQ5b1DZeAAUeUtkUTFx/PvCbM8Xfw4XdKBUZfrIKCfW8A==", "cpu": [ "arm64" ], @@ -8730,9 +8750,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.103.tgz", - "integrity": "sha512-mhUVSCEAyFLqtrDtwr9qPbe891J8cKxq53CD873/ZsUnyasHMPyWXzTvy9qjmbYyfDIArm6fGqjF5YsDKwGGNg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.0.tgz", + "integrity": "sha512-f8v58u2GsGak8EtZFN9guXqE0Ep10Suny6xriaW2d8FGqESPyNrnBzli3aqkSeQk5gGqu2zJ7WiiKp3XoUOidA==", "cpu": [ "x64" ], @@ -8746,9 +8766,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.103.tgz", - "integrity": "sha512-rYLmwxr01ZHOI6AzooqwB0DOkMm0oU8Jznk6uutV1lHgcwyxsNiC1Css8yf77Xr/sYTvKvuTfBjThqa5H716pA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.0.tgz", + "integrity": "sha512-q2KAkBzmPcTnRij/Y1fgHCKAGevUX/H4uUESrw1J5gmUg9Qip6onKV80lTumA1/aooGJ18LOsB31qdbwmZk9OA==", "cpu": [ "arm" ], @@ -8762,9 +8782,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.103.tgz", - "integrity": "sha512-w+5XFpUqxiAGUBiyRyYR28Ghddp5uVyo+dHAkCnY1u3V6RsZkY3vRwmoXT7/HxVGV7csodJ1P9Cp9VaRnNvTKA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.0.tgz", + "integrity": "sha512-SknGu96W0mzHtLHWm+62fk5+Omp9fMPFO7AWyGFmz2tr8EgRRXtTSrBUnWhAbgcalnhen48GsvtMdxf1KNputg==", "cpu": [ "arm64" ], @@ -8778,9 +8798,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.103.tgz", - "integrity": "sha512-lS5p8ewAIar7adX6t0OrkICTcw92PXrn3ZmYyG5hvfjUg4RPQFjMfFMDQSne32ZJhGXHBf0LVm1R8wHwkcpwgA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.0.tgz", + "integrity": "sha512-/k3TDvpBRMDNskHooNN1KqwUhcwkfBlIYxRTnJvsfT2C7My4pffR+4KXmt0IKynlTTbCdlU/4jgX4801FSuliw==", "cpu": [ "arm64" ], @@ -8794,9 +8814,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.103.tgz", - "integrity": "sha512-Lf2cHDoEPNB6TwexHBEZCsAO2C7beb0YljhtQS+QfjWLLVqCiwt5LRCPuKN2Bav7el9KZXOI5baXedUeFj0oFg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.0.tgz", + "integrity": "sha512-GYsTMvNt5+WTVlwwQzOOWsPMw6P/F41u5PGHWmfev8Nd4QJ1h3rWPySKk4mV42IJwH9MgQCVSl3ygwNqwl6kFg==", "cpu": [ "x64" ], @@ -8810,9 +8830,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.103.tgz", - "integrity": "sha512-HR1Y9iiLEO3F49P47vjbHczBza9RbdXWRWC8NpcOcGJ4Wnw0c2DLWAh416fGH3VYCF/19EuglLEXhvSj0NXGuA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.0.tgz", + "integrity": "sha512-jGVPdM/VwF7kK/uYRW5N6FwzKf/FnDjGIR3RPvQokjYJy7Auk+3Oj21C0Jev7sIT9RYnO/TrFEoEozKeD/z2Qw==", "cpu": [ "x64" ], @@ -8826,9 +8846,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.103.tgz", - "integrity": "sha512-3/GfROD1GPyf2hi6R0l4iZ5nrrKG8IU29hYhZCb7r0ZqhL/58kktVPlkib8X/EAJI8xbhM/NMl76h8ElrnyH5w==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.0.tgz", + "integrity": "sha512-biHYm1AronEKlt47O/H8sSOBM2BKXMmWT+ApvlxUw50m1RGNnVnE0bgY7tylFuuSiWyXsQPJbmUV708JqORXVg==", "cpu": [ "arm64" ], @@ -8842,9 +8862,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.103.tgz", - "integrity": "sha512-9ejEFjfgPi0ibNmtuiRbYq9p4RRV6oH1DN9XjkYM8zh2qHlpZHKQZ3n4eHS0VtJO4rEGZxL8ebcnTNs62wqJig==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.0.tgz", + "integrity": "sha512-TL5L2tFQb19kJwv6+elToGBj74QXCn9j+hZfwQatvZEJRA5rDK16eH6oAE751dGUArhnWlW3Vj65hViPvTuycw==", "cpu": [ "ia32" ], @@ -8858,9 +8878,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.103.tgz", - "integrity": "sha512-/1RvaOmZolXurWAUdnELYynVlFUiT0hj3PyTPoo+YK6+KV7er4EqUalRsoUf3zzGepQuhKFZFDpQn6Xi9kJX1A==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.0.tgz", + "integrity": "sha512-e2xVezU7XZ2Stzn4i7TOQe2Kn84oYdG0M3A7XI7oTdcpsKCcKwgiMoroiAhqCv+iN20KNqhnWwJiUiTj/qN5AA==", "cpu": [ "x64" ], @@ -9014,9 +9034,9 @@ } }, "node_modules/@testing-library/react/node_modules/@testing-library/dom": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz", - "integrity": "sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==", + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", + "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.10.4", @@ -9208,9 +9228,10 @@ } }, "node_modules/@types/connect": { - "version": "3.4.35", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -9496,9 +9517,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "18.19.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.3.tgz", - "integrity": "sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==", + "version": "18.19.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.17.tgz", + "integrity": "sha512-SzyGKgwPzuWp2SHhlpXKzCX0pIOfcI4V2eF37nNBJOhwlegQ83omtVQ1XxZpDE06V/d6AQvfQdPfnw0tRC//Ng==", "dependencies": { "undici-types": "~5.26.4" } @@ -9589,9 +9610,9 @@ "license": "MIT" }, "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", + "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==", "dev": true }, "node_modules/@types/send": { @@ -9686,8 +9707,9 @@ "license": "MIT" }, "node_modules/@types/ws": { - "version": "8.5.4", - "license": "MIT", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dependencies": { "@types/node": "*" } @@ -10023,556 +10045,89 @@ } }, "node_modules/@vanilla-extract/babel-plugin-debug-ids": { - "version": "1.0.2", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.0.4.tgz", + "integrity": "sha512-mevYcVMwsT6960xnXRw/Rr2K7SOEwzwVBApg/2SJ3eg2KGsHfj1rN0oQ12WdoTT3RzThq+0551bVQKPvQnjeaA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.20.7" } }, "node_modules/@vanilla-extract/css": { - "version": "1.11.0", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.14.1.tgz", + "integrity": "sha512-V4JUuHNjZgl64NGfkDJePqizkNgiSpphODtZEs4cCPuxLAzwOUJYATGpejwimJr1n529kq4DEKWexW22LMBokw==", "dev": true, - "license": "MIT", "dependencies": { "@emotion/hash": "^0.9.0", "@vanilla-extract/private": "^1.0.3", - "ahocorasick": "1.0.2", "chalk": "^4.1.1", - "css-what": "^5.0.1", + "css-what": "^6.1.0", "cssesc": "^3.0.0", "csstype": "^3.0.7", "deep-object-diff": "^1.1.9", "deepmerge": "^4.2.2", "media-query-parser": "^2.0.2", + "modern-ahocorasick": "^1.0.0", "outdent": "^0.8.0" } }, "node_modules/@vanilla-extract/css/node_modules/outdent": { "version": "0.8.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz", + "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==", + "dev": true }, "node_modules/@vanilla-extract/integration": { - "version": "6.2.1", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@vanilla-extract/integration/-/integration-6.5.0.tgz", + "integrity": "sha512-E2YcfO8vA+vs+ua+gpvy1HRqvgWbI+MTlUpxA8FvatOvybuNcWAY0CKwQ/Gpj7rswYKtC6C7+xw33emM6/ImdQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.20.7", "@babel/plugin-syntax-typescript": "^7.20.0", - "@vanilla-extract/babel-plugin-debug-ids": "^1.0.2", - "@vanilla-extract/css": "^1.10.0", - "esbuild": "0.17.6", - "eval": "0.1.6", + "@vanilla-extract/babel-plugin-debug-ids": "^1.0.4", + "@vanilla-extract/css": "^1.14.0", + "esbuild": "npm:esbuild@~0.17.6 || ~0.18.0 || ~0.19.0", + "eval": "0.1.8", "find-up": "^5.0.0", "javascript-stringify": "^2.0.1", "lodash": "^4.17.21", - "mlly": "^1.1.0", + "mlly": "^1.4.2", "outdent": "^0.8.0", - "vite": "^4.1.4", - "vite-node": "^0.28.5" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/esbuild": { - "version": "0.17.6", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.6", - "@esbuild/android-arm64": "0.17.6", - "@esbuild/android-x64": "0.17.6", - "@esbuild/darwin-arm64": "0.17.6", - "@esbuild/darwin-x64": "0.17.6", - "@esbuild/freebsd-arm64": "0.17.6", - "@esbuild/freebsd-x64": "0.17.6", - "@esbuild/linux-arm": "0.17.6", - "@esbuild/linux-arm64": "0.17.6", - "@esbuild/linux-ia32": "0.17.6", - "@esbuild/linux-loong64": "0.17.6", - "@esbuild/linux-mips64el": "0.17.6", - "@esbuild/linux-ppc64": "0.17.6", - "@esbuild/linux-riscv64": "0.17.6", - "@esbuild/linux-s390x": "0.17.6", - "@esbuild/linux-x64": "0.17.6", - "@esbuild/netbsd-x64": "0.17.6", - "@esbuild/openbsd-x64": "0.17.6", - "@esbuild/sunos-x64": "0.17.6", - "@esbuild/win32-arm64": "0.17.6", - "@esbuild/win32-ia32": "0.17.6", - "@esbuild/win32-x64": "0.17.6" + "vite": "^5.0.11", + "vite-node": "^1.2.0" } }, "node_modules/@vanilla-extract/integration/node_modules/outdent": { "version": "0.8.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@vanilla-extract/integration/node_modules/vite": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", - "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", - "dev": true, - "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz", + "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==", + "dev": true }, "node_modules/@vanilla-extract/private": { "version": "1.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.3.tgz", + "integrity": "sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ==", + "dev": true }, - "node_modules/@vitejs/plugin-react-swc": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.5.0.tgz", - "integrity": "sha512-1PrOvAaDpqlCV+Up8RkAh9qaiUjoDUcjtttyhXDKw53XA6Ve16SOp6cCOpRs8Dj8DqUQs6eTW5YkLcLJjrXAig==", + "node_modules/@vitejs/plugin-react": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", + "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", "dev": true, "dependencies": { - "@swc/core": "^1.3.96" + "@babel/core": "^7.23.5", + "@babel/plugin-transform-react-jsx-self": "^7.23.3", + "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { - "vite": "^4 || ^5" + "vite": "^4.2.0 || ^5.0.0" } }, "node_modules/@vitest/coverage-v8": { @@ -10914,11 +10469,6 @@ "node": ">=8" } }, - "node_modules/ahocorasick": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, "node_modules/ajv": { "version": "6.12.6", "dev": true, @@ -13189,9 +12739,10 @@ } }, "node_modules/css-what": { - "version": "5.1.0", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -13460,8 +13011,9 @@ }, "node_modules/deep-object-diff": { "version": "1.1.9", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.9.tgz", + "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==", + "dev": true }, "node_modules/deepmerge": { "version": "4.3.1", @@ -13657,8 +13209,9 @@ "license": "Apache-2.0" }, "node_modules/diff": { - "version": "5.1.0", - "license": "BSD-3-Clause", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "engines": { "node": ">=0.3.1" } @@ -13747,9 +13300,9 @@ } }, "node_modules/dotenv": { - "version": "16.4.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.2.tgz", - "integrity": "sha512-rZSSFxke7d9nYQ5NeMIwp5PP+f8wXgKNljpOb7KtH6SKW1cEqcXAz9VSJYVLKe7Jhup/gUYOkaeSVyK8GJ+nBg==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { "node": ">=12" }, @@ -14075,20 +13628,20 @@ } }, "node_modules/esbuild-plugins-node-modules-polyfill": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/esbuild-plugins-node-modules-polyfill/-/esbuild-plugins-node-modules-polyfill-1.6.1.tgz", - "integrity": "sha512-6sAwI24PV8W0zxeO+i4BS5zoQypS3SzEGwIdxpzpy65riRuK8apMw8PN0aKVLCTnLr0FgNIxUMRd9BsreBrtog==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/esbuild-plugins-node-modules-polyfill/-/esbuild-plugins-node-modules-polyfill-1.6.2.tgz", + "integrity": "sha512-UwFku/RAQkKi6YsL6SkltZOz7qjmLadvT+7B46jzUqcHrQw524dn4MyMmMRUkAklBsX9nXzVt3LswQlznTJN7A==", "dev": true, "dependencies": { "@jspm/core": "^2.0.1", - "local-pkg": "^0.4.3", + "local-pkg": "^0.5.0", "resolve.exports": "^2.0.2" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { - "esbuild": "^0.14.0 || ^0.15.0 || ^0.16.0 || ^0.17.0 || ^0.18.0 || ^0.19.0" + "esbuild": "^0.14.0 || ^0.15.0 || ^0.16.0 || ^0.17.0 || ^0.18.0 || ^0.19.0 || ^0.20.0" } }, "node_modules/esbuild/node_modules/@esbuild/android-arm": { @@ -15308,8 +14861,9 @@ }, "node_modules/estree-util-is-identifier-name": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-1.1.0.tgz", + "integrity": "sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -15331,8 +14885,9 @@ }, "node_modules/estree-util-value-to-estree": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-1.3.0.tgz", + "integrity": "sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==", "dev": true, - "license": "MIT", "dependencies": { "is-plain-obj": "^3.0.0" }, @@ -15378,9 +14933,12 @@ } }, "node_modules/eval": { - "version": "0.1.6", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", "dev": true, "dependencies": { + "@types/node": "*", "require-like": ">= 0.1.1" }, "engines": { @@ -15451,6 +15009,10 @@ "resolved": "examples/third-party-queries-caching", "link": true }, + "node_modules/example-vite": { + "resolved": "examples/vite", + "link": true + }, "node_modules/execa": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", @@ -15686,8 +15248,9 @@ }, "node_modules/fault": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", "dev": true, - "license": "MIT", "dependencies": { "format": "^0.2.0" }, @@ -16041,8 +15604,9 @@ }, "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==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -16124,20 +15688,13 @@ }, "node_modules/generic-names": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", + "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", "dev": true, - "license": "MIT", "dependencies": { "loader-utils": "^3.2.0" } }, - "node_modules/generic-names/node_modules/loader-utils": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "license": "MIT", @@ -17064,9 +16621,9 @@ } }, "node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -17088,9 +16645,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -17135,8 +16692,9 @@ }, "node_modules/icss-utils": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, - "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -17580,9 +17138,9 @@ } }, "node_modules/ink/node_modules/ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "engines": { "node": ">=10.0.0" }, @@ -18054,8 +17612,9 @@ }, "node_modules/is-plain-obj": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -18292,8 +17851,9 @@ "license": "MIT" }, "node_modules/isbot": { - "version": "3.6.10", - "license": "Unlicense", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/isbot/-/isbot-3.8.0.tgz", + "integrity": "sha512-vne1mzQUTR+qsMLeCBL9+/tgnDXRyc2pygLGl/WsgA+EZKIiB5Ehu0CiVTHIIk30zhJ24uGz4M5Ppse37aR0Hg==", "engines": { "node": ">=12" } @@ -18430,8 +17990,9 @@ }, "node_modules/javascript-stringify": { "version": "2.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true }, "node_modules/jest-diff": { "version": "29.4.3", @@ -18658,8 +18219,9 @@ }, "node_modules/jsesc": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true, - "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -18973,9 +18535,10 @@ } }, "node_modules/lilconfig": { - "version": "2.0.6", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } @@ -19259,10 +18822,24 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, "node_modules/local-pkg": { - "version": "0.4.3", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", "dev": true, - "license": "MIT", + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, "engines": { "node": ">=14" }, @@ -19290,8 +18867,9 @@ }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true }, "node_modules/lodash.castarray": { "version": "4.4.0", @@ -19523,9 +19101,9 @@ "integrity": "sha512-vGBKTA+jwM4KgjGZ+S/8/Mkj9rWzePyGY6jManXPGhiWu63RYwW8dKPyk5koP+8qNVhPhHgFa1y/MJ4wrjsNrg==" }, "node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -19682,10 +19260,13 @@ } }, "node_modules/mdast-util-frontmatter": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-1.0.1.tgz", + "integrity": "sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==", "dev": true, - "license": "MIT", "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0", "micromark-extension-frontmatter": "^1.0.0" }, "funding": { @@ -19846,8 +19427,9 @@ }, "node_modules/media-query-parser": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/media-query-parser/-/media-query-parser-2.0.2.tgz", + "integrity": "sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.5" } @@ -20041,13 +19623,15 @@ } }, "node_modules/micromark-extension-frontmatter": { - "version": "1.0.0", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.1.1.tgz", + "integrity": "sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==", "dev": true, - "license": "MIT", "dependencies": { "fault": "^2.0.0", "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" }, "funding": { "type": "opencollective", @@ -20753,9 +20337,9 @@ } }, "node_modules/miniflare": { - "version": "3.20231218.2", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20231218.2.tgz", - "integrity": "sha512-rCUI2OjqCf3fZVdmSX4DOZQRzSDvHp/oL2vjER/cvJEdWSYiqRxDp2oO7A7JcEo1/Y+kPa5VQ1pFfdZpjBcpFg==", + "version": "3.20240129.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240129.0.tgz", + "integrity": "sha512-27pDhlP2G/4gXmvnSt6LjMQ8KrkmbJElIQmn+BLjdiyIx+zXY4E8MSPJmi9flgf0dn3wtjuHO2ASenuopqqxrw==", "dependencies": { "@cspotcode/source-map-support": "0.8.1", "acorn": "^8.8.0", @@ -20764,8 +20348,8 @@ "exit-hook": "^2.2.1", "glob-to-regexp": "^0.4.1", "stoppable": "^1.1.0", - "undici": "^5.22.1", - "workerd": "1.20231218.0", + "undici": "^5.28.2", + "workerd": "1.20240129.0", "ws": "^8.11.0", "youch": "^3.2.2", "zod": "^3.20.6" @@ -20778,9 +20362,9 @@ } }, "node_modules/miniflare/node_modules/ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "engines": { "node": ">=10.0.0" }, @@ -20974,6 +20558,12 @@ "ufo": "^1.3.0" } }, + "node_modules/modern-ahocorasick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modern-ahocorasick/-/modern-ahocorasick-1.0.1.tgz", + "integrity": "sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==", + "dev": true + }, "node_modules/morgan": { "version": "1.10.0", "license": "MIT", @@ -21739,8 +21329,9 @@ } }, "node_modules/npm-run-path": { - "version": "5.1.0", - "license": "MIT", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", "dependencies": { "path-key": "^4.0.0" }, @@ -24961,8 +24552,9 @@ }, "node_modules/parse-ms": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -25155,9 +24747,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "dev": true, "engines": { "node": "14 || >=16.14" @@ -25687,8 +25279,9 @@ }, "node_modules/postcss-discard-duplicates": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "dev": true, - "license": "MIT", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -25891,12 +25484,15 @@ } }, "node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", "dev": true, "engines": { "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, "node_modules/postcss-logical": { @@ -25930,8 +25526,9 @@ }, "node_modules/postcss-modules": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-6.0.0.tgz", + "integrity": "sha512-7DGfnlyi/ju82BRzTIjWS5C4Tafmzl3R79YP/PASiocj+aa6yYphHhhKUOEoXQToId5rgyFgJ88+ccOUydjBXQ==", "dev": true, - "license": "MIT", "dependencies": { "generic-names": "^4.0.0", "icss-utils": "^5.1.0", @@ -25948,8 +25545,9 @@ }, "node_modules/postcss-modules-extract-imports": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, - "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -25958,9 +25556,10 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", + "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", "dev": true, - "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -25974,9 +25573,10 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.0.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", + "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", "dev": true, - "license": "ISC", "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -25989,8 +25589,9 @@ }, "node_modules/postcss-modules-values": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, - "license": "ISC", "dependencies": { "icss-utils": "^5.0.0" }, @@ -26308,8 +25909,9 @@ }, "node_modules/pretty-ms": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", "dev": true, - "license": "MIT", "dependencies": { "parse-ms": "^2.1.0" }, @@ -26397,9 +25999,9 @@ "license": "MIT" }, "node_modules/property-information": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.0.tgz", - "integrity": "sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.1.tgz", + "integrity": "sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==", "dev": true, "funding": { "type": "github", @@ -27257,8 +26859,9 @@ }, "node_modules/remark-frontmatter": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz", + "integrity": "sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==", "dev": true, - "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-frontmatter": "^1.0.0", @@ -27300,8 +26903,9 @@ }, "node_modules/remark-mdx-frontmatter": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/remark-mdx-frontmatter/-/remark-mdx-frontmatter-1.1.1.tgz", + "integrity": "sha512-7teX9DW4tI2WZkXS4DBxneYSY7NHiXl4AKdWDO9LXVweULlCT8OPWsOjLEnMIXViN1j+QcY8mfbq3k0EK6x3uA==", "dev": true, - "license": "MIT", "dependencies": { "estree-util-is-identifier-name": "^1.0.0", "estree-util-value-to-estree": "^1.0.0", @@ -27399,6 +27003,8 @@ }, "node_modules/require-like": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", "dev": true, "engines": { "node": "*" @@ -28402,9 +28008,10 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", @@ -28416,9 +28023,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", "dev": true }, "node_modules/split-on-first": { @@ -28614,8 +28221,9 @@ }, "node_modules/string-hash": { "version": "1.1.3", - "dev": true, - "license": "CC0-1.0" + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==", + "dev": true }, "node_modules/string-width": { "version": "4.2.3", @@ -29043,9 +28651,9 @@ } }, "node_modules/tailwindcss/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==", + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -29422,8 +29030,9 @@ }, "node_modules/toml": { "version": "3.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", + "dev": true }, "node_modules/touch": { "version": "3.1.0", @@ -29563,18 +29172,18 @@ } }, "node_modules/tsconfck": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-2.1.2.tgz", - "integrity": "sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.0.2.tgz", + "integrity": "sha512-6lWtFjwuhS3XI4HsX4Zg0izOI3FU/AI9EGVlPEUMDIhvLPMD4wkiof0WCoDgW7qY+Dy198g4d9miAqUHWHFH6Q==", "dev": true, "bin": { "tsconfck": "bin/tsconfck.js" }, "engines": { - "node": "^14.13.1 || ^16 || >=18" + "node": "^18 || >=20" }, "peerDependencies": { - "typescript": "^4.3.5 || ^5.0.0" + "typescript": "^5.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -30630,106 +30239,50 @@ } }, "node_modules/vite-node": { - "version": "0.28.5", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.3.1.tgz", + "integrity": "sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==", "dev": true, - "license": "MIT", "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", - "mlly": "^1.1.0", - "pathe": "^1.1.0", + "pathe": "^1.1.1", "picocolors": "^1.0.0", - "source-map": "^0.6.1", - "source-map-support": "^0.5.21", - "vite": "^3.0.0 || ^4.0.0" + "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" }, "engines": { - "node": ">=v14.16.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/vite-node/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "url": "https://opencollective.com/vitest" } }, - "node_modules/vite-node/node_modules/vite": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", - "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", + "node_modules/vite-tsconfig-paths": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.1.tgz", + "integrity": "sha512-cfgJwcGOsIxXOLU/nELPny2/LUD/lcf1IbfyeKTv2bsupVbTH/xpFtdQlBmIP1GEK2CjjLxYhFfB+QODFAx5aw==", "dev": true, "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "debug": "^4.1.1", + "globrex": "^0.1.2", + "tsconfck": "^3.0.1" }, "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" + "vite": "*" }, "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { + "vite": { "optional": true } } }, - "node_modules/vite-tsconfig-paths": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "globrex": "^0.1.2", - "tsconfck": "^2.0.1" - } - }, "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", - "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", "cpu": [ "arm" ], @@ -30738,15 +30291,14 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", - "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", "cpu": [ "arm64" ], @@ -30755,15 +30307,14 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", - "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", "cpu": [ "x64" ], @@ -30772,15 +30323,14 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", - "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", "cpu": [ "arm64" ], @@ -30789,15 +30339,14 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", - "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", "cpu": [ "x64" ], @@ -30806,15 +30355,14 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", - "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", "cpu": [ "arm64" ], @@ -30823,15 +30371,14 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", - "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", "cpu": [ "x64" ], @@ -30840,15 +30387,14 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", - "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", "cpu": [ "arm" ], @@ -30857,15 +30403,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", - "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", "cpu": [ "arm64" ], @@ -30874,15 +30419,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", - "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", "cpu": [ "ia32" ], @@ -30891,15 +30435,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", - "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", "cpu": [ "loong64" ], @@ -30908,15 +30451,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", - "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", "cpu": [ "mips64el" ], @@ -30925,15 +30467,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", - "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", "cpu": [ "ppc64" ], @@ -30942,15 +30483,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", - "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", "cpu": [ "riscv64" ], @@ -30959,15 +30499,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", - "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", "cpu": [ "s390x" ], @@ -30976,15 +30515,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", - "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", "cpu": [ "x64" ], @@ -30993,15 +30531,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", - "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", "cpu": [ "x64" ], @@ -31010,15 +30547,14 @@ "os": [ "netbsd" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", - "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", "cpu": [ "x64" ], @@ -31027,15 +30563,14 @@ "os": [ "openbsd" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", - "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", "cpu": [ "x64" ], @@ -31044,15 +30579,14 @@ "os": [ "sunos" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", - "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", "cpu": [ "arm64" ], @@ -31061,15 +30595,14 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", - "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", "cpu": [ "ia32" ], @@ -31078,15 +30611,14 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", - "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", "cpu": [ "x64" ], @@ -31095,15 +30627,14 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/esbuild": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", - "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, "hasInstallScript": true, "bin": { @@ -31113,35 +30644,35 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.11", - "@esbuild/android-arm": "0.19.11", - "@esbuild/android-arm64": "0.19.11", - "@esbuild/android-x64": "0.19.11", - "@esbuild/darwin-arm64": "0.19.11", - "@esbuild/darwin-x64": "0.19.11", - "@esbuild/freebsd-arm64": "0.19.11", - "@esbuild/freebsd-x64": "0.19.11", - "@esbuild/linux-arm": "0.19.11", - "@esbuild/linux-arm64": "0.19.11", - "@esbuild/linux-ia32": "0.19.11", - "@esbuild/linux-loong64": "0.19.11", - "@esbuild/linux-mips64el": "0.19.11", - "@esbuild/linux-ppc64": "0.19.11", - "@esbuild/linux-riscv64": "0.19.11", - "@esbuild/linux-s390x": "0.19.11", - "@esbuild/linux-x64": "0.19.11", - "@esbuild/netbsd-x64": "0.19.11", - "@esbuild/openbsd-x64": "0.19.11", - "@esbuild/sunos-x64": "0.19.11", - "@esbuild/win32-arm64": "0.19.11", - "@esbuild/win32-ia32": "0.19.11", - "@esbuild/win32-x64": "0.19.11" + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, "node_modules/vite/node_modules/rollup": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.5.tgz", - "integrity": "sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz", + "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -31154,19 +30685,19 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.9.5", - "@rollup/rollup-android-arm64": "4.9.5", - "@rollup/rollup-darwin-arm64": "4.9.5", - "@rollup/rollup-darwin-x64": "4.9.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", - "@rollup/rollup-linux-arm64-gnu": "4.9.5", - "@rollup/rollup-linux-arm64-musl": "4.9.5", - "@rollup/rollup-linux-riscv64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-musl": "4.9.5", - "@rollup/rollup-win32-arm64-msvc": "4.9.5", - "@rollup/rollup-win32-ia32-msvc": "4.9.5", - "@rollup/rollup-win32-x64-msvc": "4.9.5", + "@rollup/rollup-android-arm-eabi": "4.12.0", + "@rollup/rollup-android-arm64": "4.12.0", + "@rollup/rollup-darwin-arm64": "4.12.0", + "@rollup/rollup-darwin-x64": "4.12.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.12.0", + "@rollup/rollup-linux-arm64-gnu": "4.12.0", + "@rollup/rollup-linux-arm64-musl": "4.12.0", + "@rollup/rollup-linux-riscv64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-musl": "4.12.0", + "@rollup/rollup-win32-arm64-msvc": "4.12.0", + "@rollup/rollup-win32-ia32-msvc": "4.12.0", + "@rollup/rollup-win32-x64-msvc": "4.12.0", "fsevents": "~2.3.2" } }, @@ -31280,22 +30811,6 @@ "node": ">=16.17.0" } }, - "node_modules/vitest/node_modules/local-pkg": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", - "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", - "dev": true, - "dependencies": { - "mlly": "^1.4.2", - "pkg-types": "^1.0.3" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/vitest/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -31534,9 +31049,9 @@ "license": "MIT" }, "node_modules/workerd": { - "version": "1.20231218.0", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20231218.0.tgz", - "integrity": "sha512-AGIsDvqCrcwhoA9kb1hxOhVAe53/xJeaGZxL4FbYI9FvO17DZwrnqGq+6eqItJ6Cfw1ZLmf3BM+QdMWaL2bFWQ==", + "version": "1.20240129.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240129.0.tgz", + "integrity": "sha512-t4pnsmjjk/u+GdVDgH2M1AFmJaBUABshYK/vT/HNrAXsHSwN6VR8Yqw0JQ845OokO34VLkuUtYQYyxHHKpdtsw==", "hasInstallScript": true, "bin": { "workerd": "bin/workerd" @@ -31545,11 +31060,11 @@ "node": ">=16" }, "optionalDependencies": { - "@cloudflare/workerd-darwin-64": "1.20231218.0", - "@cloudflare/workerd-darwin-arm64": "1.20231218.0", - "@cloudflare/workerd-linux-64": "1.20231218.0", - "@cloudflare/workerd-linux-arm64": "1.20231218.0", - "@cloudflare/workerd-windows-64": "1.20231218.0" + "@cloudflare/workerd-darwin-64": "1.20240129.0", + "@cloudflare/workerd-darwin-arm64": "1.20240129.0", + "@cloudflare/workerd-linux-64": "1.20240129.0", + "@cloudflare/workerd-linux-arm64": "1.20240129.0", + "@cloudflare/workerd-windows-64": "1.20240129.0" } }, "node_modules/worktop": { @@ -31940,7 +31455,7 @@ "get-port": "^7.0.0", "graphql-config": "5.0.3", "gunzip-maybe": "^1.4.2", - "miniflare": "3.20231218.2", + "miniflare": "3.20240129.0", "prettier": "^2.8.4", "semver": "^7.5.3", "source-map": "^0.7.4", @@ -31949,7 +31464,7 @@ "tempy": "^3.0.0", "ts-morph": "20.0.0", "use-resize-observer": "^9.1.0", - "ws": "^8.13.0" + "ws": "^8.16.0" }, "bin": { "cli-hydrogen": "dist/create-app.js" @@ -31963,12 +31478,14 @@ "@types/recursive-readdir": "^2.2.1", "@types/stack-trace": "^0.0.30", "@types/tar-fs": "^2.0.1", + "@types/ws": "^8.5.10", "@vitest/coverage-v8": "^1.0.4", "devtools-protocol": "^0.0.1177611", "fast-glob": "^3.2.12", "flame-chart-js": "2.3.2", "get-port": "^7.0.0", "type-fest": "^4.5.0", + "vite": "^5.1.0", "vitest": "^1.0.4" }, "engines": { @@ -31978,11 +31495,15 @@ "@parcel/watcher": "^2.3.0" }, "peerDependencies": { - "@remix-run/dev": "^2.1.0" + "@remix-run/dev": "^2.1.0", + "vite": "^5.1.0" }, "peerDependenciesMeta": { "@remix-run/dev": { "optional": true + }, + "vite": { + "optional": true } } }, @@ -32103,9 +31624,9 @@ } }, "packages/cli/node_modules/string-width": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz", - "integrity": "sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -32133,9 +31654,9 @@ } }, "packages/cli/node_modules/type-fest": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.8.3.tgz", - "integrity": "sha512-//BaTm14Q/gHBn09xlnKNqfI8t6bmdzx2DXYfPBNofN0WUybCEUDcbCWcTa0oF09lzLjZgPphXAsvRiMK0V6Bw==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", + "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==", "dev": true, "engines": { "node": ">=16" @@ -32145,9 +31666,9 @@ } }, "packages/cli/node_modules/ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "engines": { "node": ">=10.0.0" }, @@ -32222,9 +31743,9 @@ } }, "packages/hydrogen-codegen/node_modules/type-fest": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.8.3.tgz", - "integrity": "sha512-//BaTm14Q/gHBn09xlnKNqfI8t6bmdzx2DXYfPBNofN0WUybCEUDcbCWcTa0oF09lzLjZgPphXAsvRiMK0V6Bw==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", + "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==", "engines": { "node": ">=16" }, @@ -32276,7 +31797,7 @@ "rimraf": "^4.1.2", "ts-expect": "^1.3.0", "typescript": "^5.2.2", - "vite": "^5.0.12", + "vite": "^5.1.0", "vitest": "^1.0.4" }, "engines": { @@ -32287,25 +31808,6 @@ "react-dom": "^18.0.0" } }, - "packages/hydrogen-react/node_modules/@vitejs/plugin-react": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", - "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.23.5", - "@babel/plugin-transform-react-jsx-self": "^7.23.3", - "@babel/plugin-transform-react-jsx-source": "^7.23.3", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0" - } - }, "packages/hydrogen-react/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -32361,9 +31863,9 @@ } }, "packages/hydrogen-react/node_modules/eslint-plugin-jest": { - "version": "27.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz", - "integrity": "sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==", + "version": "27.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", + "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", "dev": true, "dependencies": { "@typescript-eslint/utils": "^5.10.0" @@ -32372,7 +31874,7 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0", + "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", "eslint": "^7.0.0 || ^8.0.0", "jest": "*" }, @@ -32459,9 +31961,9 @@ } }, "packages/hydrogen-react/node_modules/type-fest": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.8.3.tgz", - "integrity": "sha512-//BaTm14Q/gHBn09xlnKNqfI8t6bmdzx2DXYfPBNofN0WUybCEUDcbCWcTa0oF09lzLjZgPphXAsvRiMK0V6Bw==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", + "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==", "engines": { "node": ">=16" }, @@ -32478,9 +31980,9 @@ } }, "packages/hydrogen/node_modules/type-fest": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.8.3.tgz", - "integrity": "sha512-//BaTm14Q/gHBn09xlnKNqfI8t6bmdzx2DXYfPBNofN0WUybCEUDcbCWcTa0oF09lzLjZgPphXAsvRiMK0V6Bw==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", + "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==", "engines": { "node": ">=16" }, @@ -32726,6 +32228,76 @@ "engines": { "node": ">=18.0.0" } + }, + "templates/vite-hello-world": { + "version": "0.0.0", + "extraneous": true, + "dependencies": { + "@remix-run/react": "^2.6.0", + "@remix-run/serve": "^2.6.0", + "@remix-run/server-runtime": "^2.6.0", + "@shopify/cli": "3.52.0", + "@shopify/cli-hydrogen": "^7.0.0", + "@shopify/hydrogen": "~2024.1.0", + "@shopify/remix-oxygen": "^2.0.3", + "@total-typescript/ts-reset": "^0.4.2", + "graphql": "^16.6.0", + "graphql-tag": "^2.12.6", + "isbot": "^3.6.6", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@remix-run/dev": "^2.6.0", + "@shopify/oxygen-workers-types": "^4.0.0", + "@shopify/prettier-config": "^1.1.2", + "@types/eslint": "^8.4.10", + "@types/react": "^18.2.22", + "@types/react-dom": "^18.2.7", + "eslint": "^8.20.0", + "eslint-plugin-hydrogen": "0.12.2", + "prettier": "^2.8.4", + "typescript": "^5.2.2", + "vite": "^5.1.0-beta.6" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "templates/vite-skeleton": { + "version": "0.0.0", + "extraneous": true, + "dependencies": { + "@remix-run/react": "^2.6.0", + "@remix-run/serve": "^2.6.0", + "@remix-run/server-runtime": "^2.6.0", + "@shopify/cli": "3.52.0", + "@shopify/cli-hydrogen": "^7.0.0", + "@shopify/hydrogen": "~2024.1.0", + "@shopify/remix-oxygen": "^2.0.3", + "@total-typescript/ts-reset": "^0.4.2", + "graphql": "^16.6.0", + "graphql-tag": "^2.12.6", + "isbot": "^3.6.6", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@remix-run/dev": "^2.6.0", + "@shopify/oxygen-workers-types": "^4.0.0", + "@shopify/prettier-config": "^1.1.2", + "@types/eslint": "^8.4.10", + "@types/react": "^18.2.22", + "@types/react-dom": "^18.2.7", + "eslint": "^8.20.0", + "eslint-plugin-hydrogen": "0.12.2", + "prettier": "^2.8.4", + "typescript": "^5.2.2", + "vite": "^5.1.0-beta.6" + }, + "engines": { + "node": ">=18.0.0" + } } }, "dependencies": { @@ -33116,16 +32688,16 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz", - "integrity": "sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==", + "version": "7.23.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz", + "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==", "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" @@ -33346,9 +32918,9 @@ } }, "@babel/plugin-syntax-decorators": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz", - "integrity": "sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz", + "integrity": "sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -33371,7 +32943,9 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.22.5", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -33385,7 +32959,9 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.22.5", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -33492,11 +33068,11 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", - "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", "requires": { - "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" } @@ -33601,15 +33177,15 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.11.tgz", - "integrity": "sha512-0E4/L+7gfvHub7wsbTv03oRtD69X31LByy44fGmFzbZScpupFByMcgCJ0VbBTkzyjSJKuRoGN8tcijOWKTmqOA==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", + "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-create-class-features-plugin": "^7.23.6", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.22.5" + "@babel/plugin-syntax-typescript": "^7.23.3" } }, "@babel/preset-react": { @@ -33625,16 +33201,16 @@ } }, "@babel/preset-typescript": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.11.tgz", - "integrity": "sha512-tWY5wyCZYBGY7IlalfKI1rLiGlIfnwsRHZqlky0HVv8qviwQ1Uo/05M6+s+TcTCVa6Bmoo2uJW5TMFX6Wa4qVg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", + "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.11", - "@babel/plugin-transform-typescript": "^7.22.11" + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-typescript": "^7.23.3" } }, "@babel/runtime": { @@ -34480,33 +34056,33 @@ } }, "@cloudflare/workerd-darwin-64": { - "version": "1.20231218.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20231218.0.tgz", - "integrity": "sha512-547gOmTIVmRdDy7HNAGJUPELa+fSDm2Y0OCxqAtQOz0GLTDu1vX61xYmsb2rn91+v3xW6eMttEIpbYokKjtfJA==", + "version": "1.20240129.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240129.0.tgz", + "integrity": "sha512-DfVVB5IsQLVcWPJwV019vY3nEtU88c2Qu2ST5SQxqcGivZ52imagLRK0RHCIP8PK4piSiq90qUC6ybppUsw8eg==", "optional": true }, "@cloudflare/workerd-darwin-arm64": { - "version": "1.20231218.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20231218.0.tgz", - "integrity": "sha512-b39qrU1bKolCfmKFDAnX4vXcqzISkEUVE/V8sMBsFzxrIpNAbcUHBZAQPYmS/OHIGB94KjOVokvDi7J6UNurPw==", + "version": "1.20240129.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240129.0.tgz", + "integrity": "sha512-t0q8ABkmumG1zRM/MZ/vIv/Ysx0vTAXnQAPy/JW5aeQi/tqrypXkO9/NhPc0jbF/g/hIPrWEqpDgEp3CB7Da7Q==", "optional": true }, "@cloudflare/workerd-linux-64": { - "version": "1.20231218.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20231218.0.tgz", - "integrity": "sha512-dMUF1wA+0mybm6hHNOCgY/WMNMwomPPs4I7vvYCgwHSkch0Q2Wb7TnxQZSt8d1PK/myibaBwadrlIxpjxmpz3w==", + "version": "1.20240129.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240129.0.tgz", + "integrity": "sha512-sFV1uobHgDI+6CKBS/ZshQvOvajgwl6BtiYaH4PSFSpvXTmRx+A9bcug+6BnD+V4WgwxTiEO2iR97E1XuwDAVw==", "optional": true }, "@cloudflare/workerd-linux-arm64": { - "version": "1.20231218.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20231218.0.tgz", - "integrity": "sha512-2s5uc8IHt0QmWyKxAr1Fy+4b8Xy0b/oUtlPnm5MrKi2gDRlZzR7JvxENPJCpCnYENydS8lzvkMiAFECPBccmyQ==", + "version": "1.20240129.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240129.0.tgz", + "integrity": "sha512-O7q7htHaFRp8PgTqNJx1/fYc3+LnvAo6kWWB9a14C5OWak6AAZk42PNpKPx+DXTmGvI+8S1+futBGUeJ8NPDXg==", "optional": true }, "@cloudflare/workerd-windows-64": { - "version": "1.20231218.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20231218.0.tgz", - "integrity": "sha512-oN5hz6TXUDB5YKUN5N3QWAv6cYz9JjTZ9g16HVyoegVFEL6/zXU3tV19MBX2IvlE11ab/mRogEv9KXVIrHfKmA==", + "version": "1.20240129.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240129.0.tgz", + "integrity": "sha512-YqGno0XSqqqkDmNoGEX6M8kJlI2lEfWntbTPVtHaZlaXVR9sWfoD7TEno0NKC95cXFz+ioyFLbgbOdnfWwmVAA==", "optional": true }, "@cspotcode/source-map-support": { @@ -34740,16 +34316,17 @@ "requires": {} }, "@emotion/hash": { - "version": "0.9.0", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==", "dev": true }, "@esbuild/aix-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", - "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/android-arm": { "version": "0.17.6", @@ -34774,6 +34351,8 @@ }, "@esbuild/darwin-arm64": { "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.6.tgz", + "integrity": "sha512-bsDRvlbKMQMt6Wl08nHtFz++yoZHsyTOxnjfB2Q95gato+Yi4WnRl13oC2/PJJA9yLCoRv9gqT/EYX0/zDsyMA==", "dev": true, "optional": true }, @@ -35290,18 +34869,18 @@ "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==" }, "@whatwg-node/fetch": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.14.tgz", - "integrity": "sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "requires": { - "@whatwg-node/node-fetch": "^0.5.0", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" } }, "@whatwg-node/node-fetch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.3.tgz", - "integrity": "sha512-toMC8N53RxgprcuU7Fc05KOrJhZV49njJCHPZvXBsjZMQBKrDm9o14Y56CsrUC85cvjQu862MaYOjd8rKgHdDw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "requires": { "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", @@ -35316,9 +34895,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "urlpattern-polyfill": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" } } }, @@ -35443,9 +35022,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "requires": {} } } @@ -35470,18 +35049,18 @@ "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==" }, "@whatwg-node/fetch": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.14.tgz", - "integrity": "sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "requires": { - "@whatwg-node/node-fetch": "^0.5.0", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" } }, "@whatwg-node/node-fetch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.3.tgz", - "integrity": "sha512-toMC8N53RxgprcuU7Fc05KOrJhZV49njJCHPZvXBsjZMQBKrDm9o14Y56CsrUC85cvjQu862MaYOjd8rKgHdDw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "requires": { "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", @@ -35501,9 +35080,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "urlpattern-polyfill": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" } } }, @@ -35572,18 +35151,18 @@ "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==" }, "@whatwg-node/fetch": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.14.tgz", - "integrity": "sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "requires": { - "@whatwg-node/node-fetch": "^0.5.0", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" } }, "@whatwg-node/node-fetch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.3.tgz", - "integrity": "sha512-toMC8N53RxgprcuU7Fc05KOrJhZV49njJCHPZvXBsjZMQBKrDm9o14Y56CsrUC85cvjQu862MaYOjd8rKgHdDw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "requires": { "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", @@ -35598,9 +35177,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "urlpattern-polyfill": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" } } }, @@ -35764,18 +35343,18 @@ "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==" }, "@whatwg-node/fetch": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.14.tgz", - "integrity": "sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "requires": { - "@whatwg-node/node-fetch": "^0.5.0", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" } }, "@whatwg-node/node-fetch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.3.tgz", - "integrity": "sha512-toMC8N53RxgprcuU7Fc05KOrJhZV49njJCHPZvXBsjZMQBKrDm9o14Y56CsrUC85cvjQu862MaYOjd8rKgHdDw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "requires": { "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", @@ -35799,9 +35378,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "urlpattern-polyfill": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" } } }, @@ -35866,18 +35445,18 @@ "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==" }, "@whatwg-node/fetch": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.14.tgz", - "integrity": "sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "requires": { - "@whatwg-node/node-fetch": "^0.5.0", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" } }, "@whatwg-node/node-fetch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.3.tgz", - "integrity": "sha512-toMC8N53RxgprcuU7Fc05KOrJhZV49njJCHPZvXBsjZMQBKrDm9o14Y56CsrUC85cvjQu862MaYOjd8rKgHdDw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "requires": { "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", @@ -35892,14 +35471,14 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "urlpattern-polyfill": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" }, "ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "requires": {} } } @@ -36082,9 +35661,9 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "requires": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -36175,6 +35754,15 @@ "react-refresh": "^0.14.0" } }, + "@vitejs/plugin-react-swc": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.6.0.tgz", + "integrity": "sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g==", + "dev": true, + "requires": { + "@swc/core": "^1.3.107" + } + }, "commander": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", @@ -36212,9 +35800,9 @@ "dev": true }, "vite": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", - "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", + "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", "dev": true, "requires": { "esbuild": "^0.18.10", @@ -36511,9 +36099,9 @@ }, "dependencies": { "ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "requires": {} } } @@ -37572,6 +37160,8 @@ "dependencies": { "brace-expansion": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -37579,6 +37169,8 @@ }, "esbuild": { "version": "0.17.6", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.6.tgz", + "integrity": "sha512-TKFRp9TxrJDdRWfSsSERKEovm6v30iHnrjlcGhLBOtReE28Yp1VSBRfO3GTaOFMoxsNerx4TjrhzSuma9ha83Q==", "dev": true, "requires": { "@esbuild/android-arm": "0.17.6", @@ -37607,6 +37199,8 @@ }, "execa": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { "cross-spawn": "^7.0.3", @@ -37622,14 +37216,20 @@ }, "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==", "dev": true }, "is-stream": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "mimic-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "minimatch": { @@ -37643,6 +37243,8 @@ }, "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==", "dev": true, "requires": { "path-key": "^3.0.0" @@ -37650,6 +37252,8 @@ }, "onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { "mimic-fn": "^2.1.0" @@ -37657,10 +37261,14 @@ }, "pidtree": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true }, "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==", "dev": true } } @@ -37824,108 +37432,95 @@ "integrity": "sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==" }, "@rollup/rollup-android-arm-eabi": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.5.tgz", - "integrity": "sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", + "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-android-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.5.tgz", - "integrity": "sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", + "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-darwin-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.5.tgz", - "integrity": "sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", + "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-darwin-x64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.5.tgz", - "integrity": "sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", + "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.5.tgz", - "integrity": "sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", + "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.5.tgz", - "integrity": "sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", + "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-linux-arm64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.5.tgz", - "integrity": "sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", + "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.5.tgz", - "integrity": "sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", + "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-linux-x64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", - "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", + "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-linux-x64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.5.tgz", - "integrity": "sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", + "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.5.tgz", - "integrity": "sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", + "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.5.tgz", - "integrity": "sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", + "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-win32-x64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz", - "integrity": "sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", + "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@rushstack/eslint-patch": { "version": "1.2.0", @@ -37964,6 +37559,7 @@ "@types/recursive-readdir": "^2.2.1", "@types/stack-trace": "^0.0.30", "@types/tar-fs": "^2.0.1", + "@types/ws": "^8.5.10", "@vitest/coverage-v8": "^1.0.4", "ansi-escapes": "^6.2.0", "cli-truncate": "^4.0.0", @@ -37975,7 +37571,7 @@ "get-port": "^7.0.0", "graphql-config": "5.0.3", "gunzip-maybe": "^1.4.2", - "miniflare": "3.20231218.2", + "miniflare": "3.20240129.0", "prettier": "^2.8.4", "semver": "^7.5.3", "source-map": "^0.7.4", @@ -37985,8 +37581,9 @@ "ts-morph": "20.0.0", "type-fest": "^4.5.0", "use-resize-observer": "^9.1.0", + "vite": "^5.1.0", "vitest": "^1.0.4", - "ws": "^8.13.0" + "ws": "^8.16.0" }, "dependencies": { "ansi-escapes": { @@ -38055,9 +37652,9 @@ } }, "string-width": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz", - "integrity": "sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "requires": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -38073,15 +37670,15 @@ } }, "type-fest": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.8.3.tgz", - "integrity": "sha512-//BaTm14Q/gHBn09xlnKNqfI8t6bmdzx2DXYfPBNofN0WUybCEUDcbCWcTa0oF09lzLjZgPphXAsvRiMK0V6Bw==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", + "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==", "dev": true }, "ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "requires": {} } } @@ -38386,9 +37983,9 @@ }, "dependencies": { "type-fest": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.8.3.tgz", - "integrity": "sha512-//BaTm14Q/gHBn09xlnKNqfI8t6bmdzx2DXYfPBNofN0WUybCEUDcbCWcTa0oF09lzLjZgPphXAsvRiMK0V6Bw==" + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", + "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==" } } }, @@ -38406,9 +38003,9 @@ }, "dependencies": { "type-fest": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.8.3.tgz", - "integrity": "sha512-//BaTm14Q/gHBn09xlnKNqfI8t6bmdzx2DXYfPBNofN0WUybCEUDcbCWcTa0oF09lzLjZgPphXAsvRiMK0V6Bw==" + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", + "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==" } } }, @@ -38451,24 +38048,11 @@ "ts-expect": "^1.3.0", "type-fest": "^4.5.0", "typescript": "^5.2.2", - "vite": "^5.0.12", + "vite": "^5.1.0", "vitest": "^1.0.4", "worktop": "^0.7.3" }, "dependencies": { - "@vitejs/plugin-react": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", - "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", - "dev": true, - "requires": { - "@babel/core": "^7.23.5", - "@babel/plugin-transform-react-jsx-self": "^7.23.3", - "@babel/plugin-transform-react-jsx-source": "^7.23.3", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.0" - } - }, "brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -38506,9 +38090,9 @@ } }, "eslint-plugin-jest": { - "version": "27.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz", - "integrity": "sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==", + "version": "27.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", + "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", "dev": true, "requires": { "@typescript-eslint/utils": "^5.10.0" @@ -38563,9 +38147,9 @@ } }, "type-fest": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.8.3.tgz", - "integrity": "sha512-//BaTm14Q/gHBn09xlnKNqfI8t6bmdzx2DXYfPBNofN0WUybCEUDcbCWcTa0oF09lzLjZgPphXAsvRiMK0V6Bw==" + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", + "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==" }, "webidl-conversions": { "version": "7.0.0", @@ -38722,92 +38306,92 @@ "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==" }, "@swc/core": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.103.tgz", - "integrity": "sha512-PYtt8KzRXIFDwxeD7BA9ylmXNQ4hRVcmDVuAmL3yvL9rgx7Tn3qn6T37wiMVZnP1OjqGyhuHRPNycd+ssr+byw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.0.tgz", + "integrity": "sha512-wc5DMI5BJftnK0Fyx9SNJKkA0+BZSJQx8430yutWmsILkHMBD3Yd9GhlMaxasab9RhgKqZp7Ht30hUYO5ZDvQg==", "devOptional": true, "requires": { - "@swc/core-darwin-arm64": "1.3.103", - "@swc/core-darwin-x64": "1.3.103", - "@swc/core-linux-arm-gnueabihf": "1.3.103", - "@swc/core-linux-arm64-gnu": "1.3.103", - "@swc/core-linux-arm64-musl": "1.3.103", - "@swc/core-linux-x64-gnu": "1.3.103", - "@swc/core-linux-x64-musl": "1.3.103", - "@swc/core-win32-arm64-msvc": "1.3.103", - "@swc/core-win32-ia32-msvc": "1.3.103", - "@swc/core-win32-x64-msvc": "1.3.103", + "@swc/core-darwin-arm64": "1.4.0", + "@swc/core-darwin-x64": "1.4.0", + "@swc/core-linux-arm-gnueabihf": "1.4.0", + "@swc/core-linux-arm64-gnu": "1.4.0", + "@swc/core-linux-arm64-musl": "1.4.0", + "@swc/core-linux-x64-gnu": "1.4.0", + "@swc/core-linux-x64-musl": "1.4.0", + "@swc/core-win32-arm64-msvc": "1.4.0", + "@swc/core-win32-ia32-msvc": "1.4.0", + "@swc/core-win32-x64-msvc": "1.4.0", "@swc/counter": "^0.1.1", "@swc/types": "^0.1.5" } }, "@swc/core-darwin-arm64": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.103.tgz", - "integrity": "sha512-Dqqz48mvdm/3PHPPA6YeAEofkF9H5Krgqd/baPf0dXcarzng6U9Ilv2aCtDjq7dfI9jfkVCW5zuwq98PE2GEdw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.0.tgz", + "integrity": "sha512-UTJ/Vz+s7Pagef6HmufWt6Rs0aUu+EJF4Pzuwvr7JQQ5b1DZeAAUeUtkUTFx/PvCbM8Xfw4XdKBUZfrIKCfW8A==", "optional": true, "peer": true }, "@swc/core-darwin-x64": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.103.tgz", - "integrity": "sha512-mhUVSCEAyFLqtrDtwr9qPbe891J8cKxq53CD873/ZsUnyasHMPyWXzTvy9qjmbYyfDIArm6fGqjF5YsDKwGGNg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.0.tgz", + "integrity": "sha512-f8v58u2GsGak8EtZFN9guXqE0Ep10Suny6xriaW2d8FGqESPyNrnBzli3aqkSeQk5gGqu2zJ7WiiKp3XoUOidA==", "optional": true, "peer": true }, "@swc/core-linux-arm-gnueabihf": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.103.tgz", - "integrity": "sha512-rYLmwxr01ZHOI6AzooqwB0DOkMm0oU8Jznk6uutV1lHgcwyxsNiC1Css8yf77Xr/sYTvKvuTfBjThqa5H716pA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.0.tgz", + "integrity": "sha512-q2KAkBzmPcTnRij/Y1fgHCKAGevUX/H4uUESrw1J5gmUg9Qip6onKV80lTumA1/aooGJ18LOsB31qdbwmZk9OA==", "optional": true, "peer": true }, "@swc/core-linux-arm64-gnu": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.103.tgz", - "integrity": "sha512-w+5XFpUqxiAGUBiyRyYR28Ghddp5uVyo+dHAkCnY1u3V6RsZkY3vRwmoXT7/HxVGV7csodJ1P9Cp9VaRnNvTKA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.0.tgz", + "integrity": "sha512-SknGu96W0mzHtLHWm+62fk5+Omp9fMPFO7AWyGFmz2tr8EgRRXtTSrBUnWhAbgcalnhen48GsvtMdxf1KNputg==", "optional": true, "peer": true }, "@swc/core-linux-arm64-musl": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.103.tgz", - "integrity": "sha512-lS5p8ewAIar7adX6t0OrkICTcw92PXrn3ZmYyG5hvfjUg4RPQFjMfFMDQSne32ZJhGXHBf0LVm1R8wHwkcpwgA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.0.tgz", + "integrity": "sha512-/k3TDvpBRMDNskHooNN1KqwUhcwkfBlIYxRTnJvsfT2C7My4pffR+4KXmt0IKynlTTbCdlU/4jgX4801FSuliw==", "optional": true, "peer": true }, "@swc/core-linux-x64-gnu": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.103.tgz", - "integrity": "sha512-Lf2cHDoEPNB6TwexHBEZCsAO2C7beb0YljhtQS+QfjWLLVqCiwt5LRCPuKN2Bav7el9KZXOI5baXedUeFj0oFg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.0.tgz", + "integrity": "sha512-GYsTMvNt5+WTVlwwQzOOWsPMw6P/F41u5PGHWmfev8Nd4QJ1h3rWPySKk4mV42IJwH9MgQCVSl3ygwNqwl6kFg==", "optional": true, "peer": true }, "@swc/core-linux-x64-musl": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.103.tgz", - "integrity": "sha512-HR1Y9iiLEO3F49P47vjbHczBza9RbdXWRWC8NpcOcGJ4Wnw0c2DLWAh416fGH3VYCF/19EuglLEXhvSj0NXGuA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.0.tgz", + "integrity": "sha512-jGVPdM/VwF7kK/uYRW5N6FwzKf/FnDjGIR3RPvQokjYJy7Auk+3Oj21C0Jev7sIT9RYnO/TrFEoEozKeD/z2Qw==", "optional": true, "peer": true }, "@swc/core-win32-arm64-msvc": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.103.tgz", - "integrity": "sha512-3/GfROD1GPyf2hi6R0l4iZ5nrrKG8IU29hYhZCb7r0ZqhL/58kktVPlkib8X/EAJI8xbhM/NMl76h8ElrnyH5w==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.0.tgz", + "integrity": "sha512-biHYm1AronEKlt47O/H8sSOBM2BKXMmWT+ApvlxUw50m1RGNnVnE0bgY7tylFuuSiWyXsQPJbmUV708JqORXVg==", "optional": true, "peer": true }, "@swc/core-win32-ia32-msvc": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.103.tgz", - "integrity": "sha512-9ejEFjfgPi0ibNmtuiRbYq9p4RRV6oH1DN9XjkYM8zh2qHlpZHKQZ3n4eHS0VtJO4rEGZxL8ebcnTNs62wqJig==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.0.tgz", + "integrity": "sha512-TL5L2tFQb19kJwv6+elToGBj74QXCn9j+hZfwQatvZEJRA5rDK16eH6oAE751dGUArhnWlW3Vj65hViPvTuycw==", "optional": true, "peer": true }, "@swc/core-win32-x64-msvc": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.103.tgz", - "integrity": "sha512-/1RvaOmZolXurWAUdnELYynVlFUiT0hj3PyTPoo+YK6+KV7er4EqUalRsoUf3zzGepQuhKFZFDpQn6Xi9kJX1A==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.0.tgz", + "integrity": "sha512-e2xVezU7XZ2Stzn4i7TOQe2Kn84oYdG0M3A7XI7oTdcpsKCcKwgiMoroiAhqCv+iN20KNqhnWwJiUiTj/qN5AA==", "optional": true, "peer": true }, @@ -38914,9 +38498,9 @@ }, "dependencies": { "@testing-library/dom": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz", - "integrity": "sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==", + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", + "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", @@ -39079,7 +38663,9 @@ } }, "@types/connect": { - "version": "3.4.35", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "requires": { "@types/node": "*" @@ -39329,9 +38915,9 @@ "dev": true }, "@types/node": { - "version": "18.19.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.3.tgz", - "integrity": "sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==", + "version": "18.19.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.17.tgz", + "integrity": "sha512-SzyGKgwPzuWp2SHhlpXKzCX0pIOfcI4V2eF37nNBJOhwlegQ83omtVQ1XxZpDE06V/d6AQvfQdPfnw0tRC//Ng==", "requires": { "undici-types": "~5.26.4" } @@ -39413,9 +38999,9 @@ "devOptional": true }, "@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", + "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==", "dev": true }, "@types/send": { @@ -39503,7 +39089,9 @@ "version": "2.0.6" }, "@types/ws": { - "version": "8.5.4", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "requires": { "@types/node": "*" } @@ -39673,297 +39261,87 @@ } }, "@vanilla-extract/babel-plugin-debug-ids": { - "version": "1.0.2", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.0.4.tgz", + "integrity": "sha512-mevYcVMwsT6960xnXRw/Rr2K7SOEwzwVBApg/2SJ3eg2KGsHfj1rN0oQ12WdoTT3RzThq+0551bVQKPvQnjeaA==", "dev": true, "requires": { "@babel/core": "^7.20.7" } }, "@vanilla-extract/css": { - "version": "1.11.0", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.14.1.tgz", + "integrity": "sha512-V4JUuHNjZgl64NGfkDJePqizkNgiSpphODtZEs4cCPuxLAzwOUJYATGpejwimJr1n529kq4DEKWexW22LMBokw==", "dev": true, "requires": { "@emotion/hash": "^0.9.0", "@vanilla-extract/private": "^1.0.3", - "ahocorasick": "1.0.2", "chalk": "^4.1.1", - "css-what": "^5.0.1", + "css-what": "^6.1.0", "cssesc": "^3.0.0", "csstype": "^3.0.7", "deep-object-diff": "^1.1.9", "deepmerge": "^4.2.2", "media-query-parser": "^2.0.2", + "modern-ahocorasick": "^1.0.0", "outdent": "^0.8.0" }, "dependencies": { "outdent": { "version": "0.8.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz", + "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==", "dev": true } } }, "@vanilla-extract/integration": { - "version": "6.2.1", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@vanilla-extract/integration/-/integration-6.5.0.tgz", + "integrity": "sha512-E2YcfO8vA+vs+ua+gpvy1HRqvgWbI+MTlUpxA8FvatOvybuNcWAY0CKwQ/Gpj7rswYKtC6C7+xw33emM6/ImdQ==", "dev": true, "requires": { "@babel/core": "^7.20.7", "@babel/plugin-syntax-typescript": "^7.20.0", - "@vanilla-extract/babel-plugin-debug-ids": "^1.0.2", - "@vanilla-extract/css": "^1.10.0", - "esbuild": "0.17.6", - "eval": "0.1.6", + "@vanilla-extract/babel-plugin-debug-ids": "^1.0.4", + "@vanilla-extract/css": "^1.14.0", + "esbuild": "npm:esbuild@~0.17.6 || ~0.18.0 || ~0.19.0", + "eval": "0.1.8", "find-up": "^5.0.0", "javascript-stringify": "^2.0.1", "lodash": "^4.17.21", - "mlly": "^1.1.0", + "mlly": "^1.4.2", "outdent": "^0.8.0", - "vite": "^4.1.4", - "vite-node": "^0.28.5" + "vite": "^5.0.11", + "vite-node": "^1.2.0" }, "dependencies": { - "esbuild": { - "version": "0.17.6", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.17.6", - "@esbuild/android-arm64": "0.17.6", - "@esbuild/android-x64": "0.17.6", - "@esbuild/darwin-arm64": "0.17.6", - "@esbuild/darwin-x64": "0.17.6", - "@esbuild/freebsd-arm64": "0.17.6", - "@esbuild/freebsd-x64": "0.17.6", - "@esbuild/linux-arm": "0.17.6", - "@esbuild/linux-arm64": "0.17.6", - "@esbuild/linux-ia32": "0.17.6", - "@esbuild/linux-loong64": "0.17.6", - "@esbuild/linux-mips64el": "0.17.6", - "@esbuild/linux-ppc64": "0.17.6", - "@esbuild/linux-riscv64": "0.17.6", - "@esbuild/linux-s390x": "0.17.6", - "@esbuild/linux-x64": "0.17.6", - "@esbuild/netbsd-x64": "0.17.6", - "@esbuild/openbsd-x64": "0.17.6", - "@esbuild/sunos-x64": "0.17.6", - "@esbuild/win32-arm64": "0.17.6", - "@esbuild/win32-ia32": "0.17.6", - "@esbuild/win32-x64": "0.17.6" - } - }, "outdent": { "version": "0.8.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz", + "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==", "dev": true - }, - "vite": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", - "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", - "dev": true, - "requires": { - "esbuild": "^0.18.10", - "fsevents": "~2.3.2", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - }, - "dependencies": { - "@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "dev": true, - "optional": true - }, - "esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - } - } } } }, "@vanilla-extract/private": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.3.tgz", + "integrity": "sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ==", "dev": true }, - "@vitejs/plugin-react-swc": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.5.0.tgz", - "integrity": "sha512-1PrOvAaDpqlCV+Up8RkAh9qaiUjoDUcjtttyhXDKw53XA6Ve16SOp6cCOpRs8Dj8DqUQs6eTW5YkLcLJjrXAig==", + "@vitejs/plugin-react": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", + "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", "dev": true, "requires": { - "@swc/core": "^1.3.96" + "@babel/core": "^7.23.5", + "@babel/plugin-transform-react-jsx-self": "^7.23.3", + "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.0" } }, "@vitest/coverage-v8": { @@ -40219,10 +39597,6 @@ "indent-string": "^4.0.0" } }, - "ahocorasick": { - "version": "1.0.2", - "dev": true - }, "ajv": { "version": "6.12.6", "dev": true, @@ -41690,7 +41064,9 @@ } }, "css-what": { - "version": "5.1.0", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true }, "css.escape": { @@ -41862,6 +41238,8 @@ }, "deep-object-diff": { "version": "1.1.9", + "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.9.tgz", + "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==", "dev": true }, "deepmerge": { @@ -42024,7 +41402,9 @@ "dev": true }, "diff": { - "version": "5.1.0" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==" }, "diff-sequences": { "version": "29.6.3", @@ -42104,9 +41484,9 @@ } }, "dotenv": { - "version": "16.4.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.2.tgz", - "integrity": "sha512-rZSSFxke7d9nYQ5NeMIwp5PP+f8wXgKNljpOb7KtH6SKW1cEqcXAz9VSJYVLKe7Jhup/gUYOkaeSVyK8GJ+nBg==" + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==" }, "dset": { "version": "3.1.3", @@ -42508,13 +41888,13 @@ } }, "esbuild-plugins-node-modules-polyfill": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/esbuild-plugins-node-modules-polyfill/-/esbuild-plugins-node-modules-polyfill-1.6.1.tgz", - "integrity": "sha512-6sAwI24PV8W0zxeO+i4BS5zoQypS3SzEGwIdxpzpy65riRuK8apMw8PN0aKVLCTnLr0FgNIxUMRd9BsreBrtog==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/esbuild-plugins-node-modules-polyfill/-/esbuild-plugins-node-modules-polyfill-1.6.2.tgz", + "integrity": "sha512-UwFku/RAQkKi6YsL6SkltZOz7qjmLadvT+7B46jzUqcHrQw524dn4MyMmMRUkAklBsX9nXzVt3LswQlznTJN7A==", "dev": true, "requires": { "@jspm/core": "^2.0.1", - "local-pkg": "^0.4.3", + "local-pkg": "^0.5.0", "resolve.exports": "^2.0.2" } }, @@ -43061,6 +42441,8 @@ }, "estree-util-is-identifier-name": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-1.1.0.tgz", + "integrity": "sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ==", "dev": true }, "estree-util-to-js": { @@ -43074,6 +42456,8 @@ }, "estree-util-value-to-estree": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-1.3.0.tgz", + "integrity": "sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==", "dev": true, "requires": { "is-plain-obj": "^3.0.0" @@ -43104,9 +42488,12 @@ "version": "1.8.1" }, "eval": { - "version": "0.1.6", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", "dev": true, "requires": { + "@types/node": "*", "require-like": ">= 0.1.1" } }, @@ -43288,6 +42675,13 @@ "example-third-party-queries-caching": { "version": "file:examples/third-party-queries-caching" }, + "example-vite": { + "version": "file:examples/vite", + "requires": { + "vite": "^5.1.0", + "vite-tsconfig-paths": "^4.3.1" + } + }, "execa": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", @@ -43462,6 +42856,8 @@ }, "fault": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", "dev": true, "requires": { "format": "^0.2.0" @@ -43706,6 +43102,8 @@ }, "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==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -43757,15 +43155,11 @@ }, "generic-names": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", + "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", "dev": true, "requires": { "loader-utils": "^3.2.0" - }, - "dependencies": { - "loader-utils": { - "version": "3.2.1", - "dev": true - } } }, "gensync": { @@ -44419,9 +43813,9 @@ } }, "http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "requires": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -44437,9 +43831,9 @@ } }, "https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "requires": { "agent-base": "^7.0.2", "debug": "4" @@ -44468,6 +43862,8 @@ }, "icss-utils": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, "requires": {} }, @@ -44716,9 +44112,9 @@ } }, "ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "requires": {} } } @@ -44985,6 +44381,8 @@ }, "is-plain-obj": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true }, "is-plain-object": { @@ -45125,7 +44523,9 @@ "version": "1.0.0" }, "isbot": { - "version": "3.6.10" + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/isbot/-/isbot-3.8.0.tgz", + "integrity": "sha512-vne1mzQUTR+qsMLeCBL9+/tgnDXRyc2pygLGl/WsgA+EZKIiB5Ehu0CiVTHIIk30zhJ24uGz4M5Ppse37aR0Hg==" }, "iserror": { "version": "0.0.2", @@ -45218,6 +44618,8 @@ }, "javascript-stringify": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", "dev": true }, "jest-diff": { @@ -45374,6 +44776,8 @@ }, "jsesc": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true }, "json-buffer": { @@ -45597,7 +45001,9 @@ } }, "lilconfig": { - "version": "2.0.6", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true }, "lines-and-columns": { @@ -45786,10 +45192,22 @@ } } }, - "local-pkg": { - "version": "0.4.3", + "loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", "dev": true }, + "local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dev": true, + "requires": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + } + }, "locate-path": { "version": "6.0.0", "dev": true, @@ -45802,6 +45220,8 @@ }, "lodash.camelcase": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true }, "lodash.castarray": { @@ -45973,9 +45393,9 @@ "integrity": "sha512-vGBKTA+jwM4KgjGZ+S/8/Mkj9rWzePyGY6jManXPGhiWu63RYwW8dKPyk5koP+8qNVhPhHgFa1y/MJ4wrjsNrg==" }, "magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", "dev": true, "requires": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -46075,9 +45495,13 @@ } }, "mdast-util-frontmatter": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-1.0.1.tgz", + "integrity": "sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==", "dev": true, "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0", "micromark-extension-frontmatter": "^1.0.0" } }, @@ -46183,6 +45607,8 @@ }, "media-query-parser": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/media-query-parser/-/media-query-parser-2.0.2.tgz", + "integrity": "sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==", "dev": true, "requires": { "@babel/runtime": "^7.12.5" @@ -46304,12 +45730,15 @@ } }, "micromark-extension-frontmatter": { - "version": "1.0.0", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.1.1.tgz", + "integrity": "sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==", "dev": true, "requires": { "fault": "^2.0.0", "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, "micromark-extension-gfm": { @@ -46672,9 +46101,9 @@ "dev": true }, "miniflare": { - "version": "3.20231218.2", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20231218.2.tgz", - "integrity": "sha512-rCUI2OjqCf3fZVdmSX4DOZQRzSDvHp/oL2vjER/cvJEdWSYiqRxDp2oO7A7JcEo1/Y+kPa5VQ1pFfdZpjBcpFg==", + "version": "3.20240129.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240129.0.tgz", + "integrity": "sha512-27pDhlP2G/4gXmvnSt6LjMQ8KrkmbJElIQmn+BLjdiyIx+zXY4E8MSPJmi9flgf0dn3wtjuHO2ASenuopqqxrw==", "requires": { "@cspotcode/source-map-support": "0.8.1", "acorn": "^8.8.0", @@ -46683,17 +46112,17 @@ "exit-hook": "^2.2.1", "glob-to-regexp": "^0.4.1", "stoppable": "^1.1.0", - "undici": "^5.22.1", - "workerd": "1.20231218.0", + "undici": "^5.28.2", + "workerd": "1.20240129.0", "ws": "^8.11.0", "youch": "^3.2.2", "zod": "^3.20.6" }, "dependencies": { "ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "requires": {} } } @@ -46834,6 +46263,12 @@ "ufo": "^1.3.0" } }, + "modern-ahocorasick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modern-ahocorasick/-/modern-ahocorasick-1.0.1.tgz", + "integrity": "sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==", + "dev": true + }, "morgan": { "version": "1.10.0", "requires": { @@ -49070,7 +48505,9 @@ } }, "npm-run-path": { - "version": "5.1.0", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", "requires": { "path-key": "^4.0.0" }, @@ -49391,6 +48828,8 @@ }, "parse-ms": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", "dev": true }, "parse-package-name": { @@ -49524,9 +48963,9 @@ }, "dependencies": { "lru-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "dev": true } } @@ -49837,6 +49276,8 @@ }, "postcss-discard-duplicates": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "dev": true, "requires": {} }, @@ -49921,9 +49362,9 @@ }, "dependencies": { "lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", "dev": true } } @@ -49942,6 +49383,8 @@ }, "postcss-modules": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-6.0.0.tgz", + "integrity": "sha512-7DGfnlyi/ju82BRzTIjWS5C4Tafmzl3R79YP/PASiocj+aa6yYphHhhKUOEoXQToId5rgyFgJ88+ccOUydjBXQ==", "dev": true, "requires": { "generic-names": "^4.0.0", @@ -49956,11 +49399,15 @@ }, "postcss-modules-extract-imports": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, "requires": {} }, "postcss-modules-local-by-default": { - "version": "4.0.0", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", + "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", "dev": true, "requires": { "icss-utils": "^5.0.0", @@ -49969,7 +49416,9 @@ } }, "postcss-modules-scope": { - "version": "3.0.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", + "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.4" @@ -49977,6 +49426,8 @@ }, "postcss-modules-values": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "requires": { "icss-utils": "^5.0.0" @@ -50154,6 +49605,8 @@ }, "pretty-ms": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", "dev": true, "requires": { "parse-ms": "^2.1.0" @@ -50223,9 +49676,9 @@ } }, "property-information": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.0.tgz", - "integrity": "sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.1.tgz", + "integrity": "sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==", "dev": true }, "proto-list": { @@ -50793,6 +50246,8 @@ }, "remark-frontmatter": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz", + "integrity": "sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==", "dev": true, "requires": { "@types/mdast": "^3.0.0", @@ -50854,6 +50309,8 @@ }, "remark-mdx-frontmatter": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/remark-mdx-frontmatter/-/remark-mdx-frontmatter-1.1.1.tgz", + "integrity": "sha512-7teX9DW4tI2WZkXS4DBxneYSY7NHiXl4AKdWDO9LXVweULlCT8OPWsOjLEnMIXViN1j+QcY8mfbq3k0EK6x3uA==", "dev": true, "requires": { "estree-util-is-identifier-name": "^1.0.0", @@ -50892,6 +50349,8 @@ }, "require-like": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", "dev": true }, "require-main-filename": { @@ -51605,7 +51064,9 @@ } }, "spdx-exceptions": { - "version": "2.3.0", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "spdx-expression-parse": { @@ -51617,9 +51078,9 @@ } }, "spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", "dev": true }, "split-on-first": { @@ -51769,6 +51230,8 @@ }, "string-hash": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==", "dev": true }, "string-width": { @@ -52047,9 +51510,9 @@ } }, "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==", + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -52328,6 +51791,8 @@ }, "toml": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", "dev": true }, "touch": { @@ -52413,9 +51878,9 @@ } }, "tsconfck": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-2.1.2.tgz", - "integrity": "sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.0.2.tgz", + "integrity": "sha512-6lWtFjwuhS3XI4HsX4Zg0izOI3FU/AI9EGVlPEUMDIhvLPMD4wkiof0WCoDgW7qY+Dy198g4d9miAqUHWHFH6Q==", "dev": true, "requires": {} }, @@ -53063,231 +52528,209 @@ }, "dependencies": { "@esbuild/android-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", - "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/android-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", - "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/android-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", - "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", - "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/darwin-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", - "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", - "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", - "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/linux-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", - "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/linux-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", - "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/linux-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", - "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/linux-loong64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", - "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", - "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", - "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", - "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/linux-s390x": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", - "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/linux-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", - "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", - "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", - "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/sunos-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", - "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/win32-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", - "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/win32-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", - "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@esbuild/win32-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", - "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "esbuild": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", - "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", - "dev": true, - "requires": { - "@esbuild/aix-ppc64": "0.19.11", - "@esbuild/android-arm": "0.19.11", - "@esbuild/android-arm64": "0.19.11", - "@esbuild/android-x64": "0.19.11", - "@esbuild/darwin-arm64": "0.19.11", - "@esbuild/darwin-x64": "0.19.11", - "@esbuild/freebsd-arm64": "0.19.11", - "@esbuild/freebsd-x64": "0.19.11", - "@esbuild/linux-arm": "0.19.11", - "@esbuild/linux-arm64": "0.19.11", - "@esbuild/linux-ia32": "0.19.11", - "@esbuild/linux-loong64": "0.19.11", - "@esbuild/linux-mips64el": "0.19.11", - "@esbuild/linux-ppc64": "0.19.11", - "@esbuild/linux-riscv64": "0.19.11", - "@esbuild/linux-s390x": "0.19.11", - "@esbuild/linux-x64": "0.19.11", - "@esbuild/netbsd-x64": "0.19.11", - "@esbuild/openbsd-x64": "0.19.11", - "@esbuild/sunos-x64": "0.19.11", - "@esbuild/win32-arm64": "0.19.11", - "@esbuild/win32-ia32": "0.19.11", - "@esbuild/win32-x64": "0.19.11" + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, "rollup": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.5.tgz", - "integrity": "sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==", - "dev": true, - "requires": { - "@rollup/rollup-android-arm-eabi": "4.9.5", - "@rollup/rollup-android-arm64": "4.9.5", - "@rollup/rollup-darwin-arm64": "4.9.5", - "@rollup/rollup-darwin-x64": "4.9.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", - "@rollup/rollup-linux-arm64-gnu": "4.9.5", - "@rollup/rollup-linux-arm64-musl": "4.9.5", - "@rollup/rollup-linux-riscv64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-musl": "4.9.5", - "@rollup/rollup-win32-arm64-msvc": "4.9.5", - "@rollup/rollup-win32-ia32-msvc": "4.9.5", - "@rollup/rollup-win32-x64-msvc": "4.9.5", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz", + "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==", + "dev": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.12.0", + "@rollup/rollup-android-arm64": "4.12.0", + "@rollup/rollup-darwin-arm64": "4.12.0", + "@rollup/rollup-darwin-x64": "4.12.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.12.0", + "@rollup/rollup-linux-arm64-gnu": "4.12.0", + "@rollup/rollup-linux-arm64-musl": "4.12.0", + "@rollup/rollup-linux-riscv64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-musl": "4.12.0", + "@rollup/rollup-win32-arm64-msvc": "4.12.0", + "@rollup/rollup-win32-ia32-msvc": "4.12.0", + "@rollup/rollup-win32-x64-msvc": "4.12.0", "@types/estree": "1.0.5", "fsevents": "~2.3.2" } @@ -53295,44 +52738,27 @@ } }, "vite-node": { - "version": "0.28.5", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.3.1.tgz", + "integrity": "sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==", "dev": true, "requires": { "cac": "^6.7.14", "debug": "^4.3.4", - "mlly": "^1.1.0", - "pathe": "^1.1.0", + "pathe": "^1.1.1", "picocolors": "^1.0.0", - "source-map": "^0.6.1", - "source-map-support": "^0.5.21", - "vite": "^3.0.0 || ^4.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true - }, - "vite": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", - "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", - "dev": true, - "requires": { - "esbuild": "^0.18.10", - "fsevents": "~2.3.2", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - } - } + "vite": "^5.0.0" } }, "vite-tsconfig-paths": { - "version": "4.0.5", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.1.tgz", + "integrity": "sha512-cfgJwcGOsIxXOLU/nELPny2/LUD/lcf1IbfyeKTv2bsupVbTH/xpFtdQlBmIP1GEK2CjjLxYhFfB+QODFAx5aw==", "dev": true, "requires": { "debug": "^4.1.1", "globrex": "^0.1.2", - "tsconfck": "^2.0.1" + "tsconfck": "^3.0.1" } }, "vitest": { @@ -53393,16 +52819,6 @@ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true }, - "local-pkg": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", - "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", - "dev": true, - "requires": { - "mlly": "^1.4.2", - "pkg-types": "^1.0.3" - } - }, "signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -53568,15 +52984,15 @@ "version": "1.0.0" }, "workerd": { - "version": "1.20231218.0", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20231218.0.tgz", - "integrity": "sha512-AGIsDvqCrcwhoA9kb1hxOhVAe53/xJeaGZxL4FbYI9FvO17DZwrnqGq+6eqItJ6Cfw1ZLmf3BM+QdMWaL2bFWQ==", - "requires": { - "@cloudflare/workerd-darwin-64": "1.20231218.0", - "@cloudflare/workerd-darwin-arm64": "1.20231218.0", - "@cloudflare/workerd-linux-64": "1.20231218.0", - "@cloudflare/workerd-linux-arm64": "1.20231218.0", - "@cloudflare/workerd-windows-64": "1.20231218.0" + "version": "1.20240129.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240129.0.tgz", + "integrity": "sha512-t4pnsmjjk/u+GdVDgH2M1AFmJaBUABshYK/vT/HNrAXsHSwN6VR8Yqw0JQ845OokO34VLkuUtYQYyxHHKpdtsw==", + "requires": { + "@cloudflare/workerd-darwin-64": "1.20240129.0", + "@cloudflare/workerd-darwin-arm64": "1.20240129.0", + "@cloudflare/workerd-linux-64": "1.20240129.0", + "@cloudflare/workerd-linux-arm64": "1.20240129.0", + "@cloudflare/workerd-windows-64": "1.20240129.0" } }, "worktop": { diff --git a/package.json b/package.json index c54b5c43f7..16ba77e298 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "examples/partytown", "examples/subscriptions", "examples/third-party-queries-caching", + "examples/vite", "packages/cli", "packages/create-hydrogen", "packages/hydrogen", diff --git a/packages/cli/oclif.manifest.json b/packages/cli/oclif.manifest.json index 7e1d1c35ee..f3938757e1 100644 --- a/packages/cli/oclif.manifest.json +++ b/packages/cli/oclif.manifest.json @@ -1,6 +1,73 @@ { "version": "7.1.0", "commands": { + "hydrogen:build-vite": { + "id": "hydrogen:build-vite", + "description": "Builds a Hydrogen storefront for production.", + "strict": true, + "pluginName": "@shopify/cli-hydrogen", + "pluginAlias": "@shopify/cli-hydrogen", + "pluginType": "core", + "aliases": [], + "flags": { + "path": { + "name": "path", + "type": "option", + "description": "The path to the directory of the Hydrogen storefront. The default is the current directory.", + "multiple": false + }, + "entry": { + "name": "entry", + "type": "option", + "description": "Entry file for the worker. Defaults to `./server`.", + "multiple": false + }, + "sourcemap": { + "name": "sourcemap", + "type": "boolean", + "description": "Generate sourcemaps for the build.", + "allowNo": true + }, + "lockfile-check": { + "name": "lockfile-check", + "type": "boolean", + "description": "Checks that there is exactly 1 valid lockfile in the project.", + "allowNo": true + }, + "disable-route-warning": { + "name": "disable-route-warning", + "type": "boolean", + "description": "Disable warning about missing standard routes.", + "allowNo": false + }, + "codegen": { + "name": "codegen", + "type": "boolean", + "description": "Generate types for the Storefront API queries found in your project.", + "required": false, + "allowNo": false + }, + "codegen-config-path": { + "name": "codegen-config-path", + "type": "option", + "description": "Specify a path to a codegen configuration file. Defaults to `/codegen.ts` if it exists.", + "required": false, + "multiple": false, + "dependsOn": [ + "codegen" + ] + }, + "diff": { + "name": "diff", + "type": "boolean", + "description": "Applies the current files on top of Hydrogen's starter template in a temporary directory.", + "hidden": true, + "required": false, + "allowNo": false + } + }, + "args": {} + }, "hydrogen:build": { "id": "hydrogen:build", "description": "Builds a Hydrogen storefront for production.", @@ -61,6 +128,7 @@ "name": "diff", "type": "boolean", "description": "Applies the current files on top of Hydrogen's starter template in a temporary directory.", + "hidden": true, "required": false, "allowNo": false } @@ -253,6 +321,110 @@ "hidden": true, "required": false, "multiple": false + }, + "diff": { + "name": "diff", + "type": "boolean", + "description": "Applies the current files on top of Hydrogen's starter template in a temporary directory.", + "hidden": true, + "required": false, + "allowNo": false + } + }, + "args": {} + }, + "hydrogen:dev-vite": { + "id": "hydrogen:dev-vite", + "description": "Runs Hydrogen storefront in an Oxygen worker for development.", + "strict": true, + "pluginName": "@shopify/cli-hydrogen", + "pluginAlias": "@shopify/cli-hydrogen", + "pluginType": "core", + "aliases": [], + "flags": { + "path": { + "name": "path", + "type": "option", + "description": "The path to the directory of the Hydrogen storefront. The default is the current directory.", + "multiple": false + }, + "entry": { + "name": "entry", + "type": "option", + "description": "Entry file for the worker. Defaults to `./server`.", + "multiple": false + }, + "port": { + "name": "port", + "type": "option", + "description": "Port to run the server on.", + "required": false, + "multiple": false + }, + "codegen": { + "name": "codegen", + "type": "boolean", + "description": "Generate types for the Storefront API queries found in your project. It updates the types on file save.", + "required": false, + "allowNo": false + }, + "codegen-config-path": { + "name": "codegen-config-path", + "type": "option", + "description": "Specify a path to a codegen configuration file. Defaults to `/codegen.ts` if it exists.", + "required": false, + "multiple": false, + "dependsOn": [ + "codegen" + ] + }, + "disable-virtual-routes": { + "name": "disable-virtual-routes", + "type": "boolean", + "description": "Disable rendering fallback routes when a route file doesn't exist.", + "allowNo": false + }, + "debug": { + "name": "debug", + "type": "boolean", + "description": "Enables inspector connections with a debugger.", + "allowNo": false + }, + "inspector-port": { + "name": "inspector-port", + "type": "option", + "description": "Port where the inspector will be available.", + "multiple": false, + "default": 9229 + }, + "host": { + "name": "host", + "type": "boolean", + "description": "Expose the server to the network", + "required": false, + "allowNo": false + }, + "env-branch": { + "name": "env-branch", + "type": "option", + "char": "e", + "description": "Specify an environment's branch name when using remote environment variables.", + "multiple": false + }, + "disable-version-check": { + "name": "disable-version-check", + "type": "boolean", + "description": "Skip the version check when running `hydrogen dev`", + "required": false, + "allowNo": false + }, + "diff": { + "name": "diff", + "type": "boolean", + "description": "Applies the current files on top of Hydrogen's starter template in a temporary directory.", + "hidden": true, + "required": false, + "allowNo": false } }, "args": {} @@ -350,6 +522,7 @@ "name": "diff", "type": "boolean", "description": "Applies the current files on top of Hydrogen's starter template in a temporary directory.", + "hidden": true, "required": false, "allowNo": false } diff --git a/packages/cli/package.json b/packages/cli/package.json index 839204da5c..83f23182c1 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -24,12 +24,14 @@ "@types/recursive-readdir": "^2.2.1", "@types/stack-trace": "^0.0.30", "@types/tar-fs": "^2.0.1", + "@types/ws": "^8.5.10", "@vitest/coverage-v8": "^1.0.4", "devtools-protocol": "^0.0.1177611", "fast-glob": "^3.2.12", "flame-chart-js": "2.3.2", "get-port": "^7.0.0", "type-fest": "^4.5.0", + "vite": "^5.1.0", "vitest": "^1.0.4" }, "dependencies": { @@ -47,7 +49,7 @@ "get-port": "^7.0.0", "graphql-config": "5.0.3", "gunzip-maybe": "^1.4.2", - "miniflare": "3.20231218.2", + "miniflare": "3.20240129.0", "prettier": "^2.8.4", "semver": "^7.5.3", "source-map": "^0.7.4", @@ -56,23 +58,34 @@ "tempy": "^3.0.0", "ts-morph": "20.0.0", "use-resize-observer": "^9.1.0", - "ws": "^8.13.0" + "ws": "^8.16.0" }, "optionalDependencies": { "@parcel/watcher": "^2.3.0" }, "peerDependencies": { - "@remix-run/dev": "^2.1.0" + "@remix-run/dev": "^2.1.0", + "vite": "^5.1.0" }, "peerDependenciesMeta": { "@remix-run/dev": { "optional": true + }, + "vite": { + "optional": true } }, "bin": "dist/create-app.js", "exports": { "./package.json": "./package.json", - "./commands/hydrogen/init": "./dist/commands/hydrogen/init.js" + "./commands/hydrogen/init": { + "types": "./dist/commands/hydrogen/init.d.ts", + "default": "./dist/commands/hydrogen/init.js" + }, + "./experimental-vite": { + "types": "./dist/lib/vite/plugins.d.ts", + "default": "./dist/lib/vite/plugins.js" + } }, "files": [ "dist", diff --git a/packages/cli/src/commands/hydrogen/build-vite.ts b/packages/cli/src/commands/hydrogen/build-vite.ts new file mode 100644 index 0000000000..18fed7182d --- /dev/null +++ b/packages/cli/src/commands/hydrogen/build-vite.ts @@ -0,0 +1,186 @@ +import {Flags} from '@oclif/core'; +import Command from '@shopify/cli-kit/node/base-command'; +import {outputWarn} from '@shopify/cli-kit/node/output'; +import {fileSize, removeFile} from '@shopify/cli-kit/node/fs'; +import {resolvePath, joinPath} from '@shopify/cli-kit/node/path'; +import {getPackageManager} from '@shopify/cli-kit/node/node-package-manager'; +import {commonFlags, flagsToCamelObject} from '../../lib/flags.js'; +import {checkLockfileStatus} from '../../lib/check-lockfile.js'; +import {findMissingRoutes} from '../../lib/missing-routes.js'; +import {codegen} from '../../lib/codegen.js'; +import {isCI} from '../../lib/is-ci.js'; +import {copyDiffBuild, prepareDiffDirectory} from '../../lib/template-diff.js'; +import {getViteConfig} from '../../lib/vite-config.js'; + +const WORKER_BUILD_SIZE_LIMIT = 5; + +export default class Build extends Command { + static description = 'Builds a Hydrogen storefront for production.'; + static flags = { + path: commonFlags.path, + entry: commonFlags.entry, + sourcemap: Flags.boolean({ + description: 'Generate sourcemaps for the build.', + env: 'SHOPIFY_HYDROGEN_FLAG_SOURCEMAP', + allowNo: true, + default: true, + }), + 'lockfile-check': Flags.boolean({ + description: + 'Checks that there is exactly 1 valid lockfile in the project.', + env: 'SHOPIFY_HYDROGEN_FLAG_LOCKFILE_CHECK', + default: true, + allowNo: true, + }), + 'disable-route-warning': Flags.boolean({ + description: 'Disable warning about missing standard routes.', + env: 'SHOPIFY_HYDROGEN_FLAG_DISABLE_ROUTE_WARNING', + }), + codegen: commonFlags.codegen, + 'codegen-config-path': commonFlags.codegenConfigPath, + diff: commonFlags.diff, + }; + + async run(): Promise { + const {flags} = await this.parse(Build); + const originalDirectory = flags.path + ? resolvePath(flags.path) + : process.cwd(); + let directory = originalDirectory; + + if (flags.diff) { + directory = await prepareDiffDirectory(originalDirectory, false); + } + + await runViteBuild({ + ...flagsToCamelObject(flags), + useCodegen: flags.codegen, + directory, + }); + + if (flags.diff) { + await copyDiffBuild(directory, originalDirectory); + } + } +} + +type RunBuildOptions = { + entry?: string; + directory?: string; + useCodegen?: boolean; + codegenConfigPath?: string; + sourcemap?: boolean; + disableRouteWarning?: boolean; + assetPath?: string; + bundleStats?: boolean; + lockfileCheck?: boolean; +}; + +export async function runViteBuild({ + entry: ssrEntry, + directory, + useCodegen = false, + codegenConfigPath, + sourcemap = false, + disableRouteWarning = false, + lockfileCheck = true, + assetPath = '/', +}: RunBuildOptions) { + if (!process.env.NODE_ENV) { + process.env.NODE_ENV = 'production'; + } + + const root = directory ?? process.cwd(); + + if (lockfileCheck) { + await checkLockfileStatus(root, isCI()); + } + + const { + userViteConfig, + remixConfig, + clientOutDir, + serverOutDir, + serverOutFile, + } = await getViteConfig(root); + + const serverMinify = userViteConfig.build?.minify ?? true; + const commonConfig = { + root, + mode: process.env.NODE_ENV, + base: assetPath, + }; + + // Avoid static imports because this file is imported by `deploy` command, + // which must have a hard dependency on 'vite'. + const vite = await import('vite'); + + // Client build first + await vite.build({ + ...commonConfig, + build: { + emptyOutDir: true, + copyPublicDir: true, + // Disable client sourcemaps in production + sourcemap: process.env.NODE_ENV !== 'production' && sourcemap, + }, + }); + + console.log(''); + + // Server/SSR build + await vite.build({ + ...commonConfig, + build: { + sourcemap, + ssr: ssrEntry ?? true, + emptyOutDir: false, + copyPublicDir: false, + minify: serverMinify, + }, + }); + + await Promise.all([ + removeFile(joinPath(clientOutDir, '.vite')), + removeFile(joinPath(serverOutDir, '.vite')), + removeFile(joinPath(serverOutDir, 'assets')), + ]); + + if (useCodegen) { + await codegen({ + rootDirectory: root, + appDirectory: remixConfig.appDirectory, + configFilePath: codegenConfigPath, + }); + } + + if (process.env.NODE_ENV !== 'development') { + const sizeMB = (await fileSize(serverOutFile)) / (1024 * 1024); + + if (sizeMB >= WORKER_BUILD_SIZE_LIMIT) { + outputWarn( + `🚨 Smaller worker bundles are faster to deploy and run.${ + serverMinify + ? '' + : '\n Minify your bundle by adding `build.minify: true` to vite.config.js.' + }\n Learn more about optimizing your worker bundle file: https://h2o.fyi/debugging/bundle-size\n`, + ); + } + } + + if (!disableRouteWarning) { + const missingRoutes = findMissingRoutes(remixConfig); + if (missingRoutes.length) { + const packageManager = await getPackageManager(root); + const exec = packageManager === 'npm' ? 'npx' : packageManager; + + outputWarn( + `Heads up: Shopify stores have a number of standard routes that aren’t set up yet.\n` + + `Some functionality and backlinks might not work as expected until these are created or redirects are set up.\n` + + `This build is missing ${missingRoutes.length} route${ + missingRoutes.length > 1 ? 's' : '' + }. For more details, run \`${exec} shopify hydrogen check routes\`.\n`, + ); + } + } +} diff --git a/packages/cli/src/commands/hydrogen/deploy.test.ts b/packages/cli/src/commands/hydrogen/deploy.test.ts index 9d443ae51b..44824528fc 100644 --- a/packages/cli/src/commands/hydrogen/deploy.test.ts +++ b/packages/cli/src/commands/hydrogen/deploy.test.ts @@ -16,7 +16,7 @@ import { GitDirectoryNotCleanError, } from '@shopify/cli-kit/node/git'; -import {deploymentLogger, oxygenDeploy} from './deploy.js'; +import {deploymentLogger, runDeploy} from './deploy.js'; import {getOxygenDeploymentData} from '../../lib/get-oxygen-deployment-data.js'; import { CompletedDeployment, @@ -173,7 +173,7 @@ describe('deploy', () => { }); it('calls getOxygenDeploymentData with the correct parameters', async () => { - await oxygenDeploy(deployParams); + await runDeploy(deployParams); expect(getOxygenDeploymentData).toHaveBeenCalledWith({ root: './', flagShop: 'snowdevil.myshopify.com', @@ -182,7 +182,7 @@ describe('deploy', () => { }); it('calls createDeploy with the correct parameters', async () => { - await oxygenDeploy(deployParams); + await runDeploy(deployParams); expect(vi.mocked(createDeploy)).toHaveBeenCalledWith({ config: expectedConfig, @@ -200,7 +200,7 @@ describe('deploy', () => { }, }); - await oxygenDeploy({ + await runDeploy({ ...deployParams, environmentFile: 'fake-env-file', }); @@ -225,7 +225,7 @@ describe('deploy', () => { vi.mocked(ensureIsClean).mockRejectedValue( new GitDirectoryNotCleanError('Uncommitted changes'), ); - await expect(oxygenDeploy(deployParams)).rejects.toThrowError( + await expect(runDeploy(deployParams)).rejects.toThrowError( 'Uncommitted changes detected', ); expect(vi.mocked(createDeploy)).not.toHaveBeenCalled; @@ -245,7 +245,7 @@ describe('deploy', () => { refs: 'HEAD -> main', }); - await oxygenDeploy({ + await runDeploy({ ...deployParams, force: true, }); @@ -282,7 +282,7 @@ describe('deploy', () => { refs: 'HEAD -> main', }); - await oxygenDeploy({ + await runDeploy({ ...deployParams, force: true, metadataDescription: 'cool new stuff', @@ -314,7 +314,7 @@ describe('deploy', () => { refs: 'HEAD -> main', }); - await oxygenDeploy(deployParams); + await runDeploy(deployParams); expect(vi.mocked(createDeploy)).toHaveBeenCalledWith({ config: {...expectedConfig, environmentTag: 'main'}, @@ -333,7 +333,7 @@ describe('deploy', () => { ], }); - await oxygenDeploy(deployParams); + await runDeploy(deployParams); expect(vi.mocked(renderSelectPrompt)).toHaveBeenCalledWith({ message: 'Select an environment to deploy to', @@ -367,7 +367,7 @@ describe('deploy', () => { 'shopify-preview-environment.', ); - await oxygenDeploy(deployParams); + await runDeploy(deployParams); expect(vi.mocked(createDeploy)).toHaveBeenCalledWith({ config: { @@ -393,7 +393,7 @@ describe('deploy', () => { resolve({url: 'https://a-lovely-deployment.com'}); }) as Promise; }); - await oxygenDeploy(params); + await runDeploy(params); expect(vi.mocked(runBuild)).toHaveBeenCalledWith({ assetPath: 'some-cool-asset-path', @@ -411,7 +411,7 @@ describe('deploy', () => { }; const {buildFunction: _, ...hooks} = expectedHooks; - await oxygenDeploy(params); + await runDeploy(params); expect(vi.mocked(createDeploy)).toHaveBeenCalledWith({ config: { @@ -437,7 +437,7 @@ describe('deploy', () => { generateAuthBypassToken: true, }; - await oxygenDeploy(ciDeployParams); + await runDeploy(ciDeployParams); expect(vi.mocked(writeFile)).toHaveBeenCalledWith( 'h2_deploy_log.json', @@ -449,7 +449,7 @@ describe('deploy', () => { vi.mocked(writeFile).mockClear(); ciDeployParams.jsonOutput = false; - await oxygenDeploy(ciDeployParams); + await runDeploy(ciDeployParams); expect(vi.mocked(writeFile)).not.toHaveBeenCalled(); }); @@ -469,7 +469,7 @@ describe('deploy', () => { }); try { - await oxygenDeploy(deployParams); + await runDeploy(deployParams); expect(true).toBe(false); } catch (err) { if (err instanceof AbortError) { @@ -500,7 +500,7 @@ describe('deploy', () => { }); try { - await oxygenDeploy(deployParams); + await runDeploy(deployParams); expect(true).toBe(false); } catch (err) { if (err instanceof AbortError) { @@ -533,7 +533,7 @@ describe('deploy', () => { }); try { - await oxygenDeploy(deployParams); + await runDeploy(deployParams); expect(true).toBe(false); } catch (err) { if (err instanceof AbortError) { @@ -551,7 +551,7 @@ describe('deploy', () => { url: 'https://a-lovely-deployment.com', }); - await oxygenDeploy(deployParams); + await runDeploy(deployParams); expect(vi.mocked(renderSuccess)).toHaveBeenCalledWith({ body: ['Successfully deployed to Oxygen'], @@ -571,7 +571,7 @@ describe('deploy', () => { authBypassToken: 'some-token', }); - await oxygenDeploy(deployParams); + await runDeploy(deployParams); expect(vi.mocked(renderSuccess)).toHaveBeenCalledWith({ body: ['Successfully deployed to Oxygen'], @@ -598,7 +598,7 @@ describe('deploy', () => { metadata: {}, }); - await oxygenDeploy({...deployParams, token: 'fake-token'}); + await runDeploy({...deployParams, token: 'fake-token'}); expect(vi.mocked(renderSuccess)).toHaveBeenCalledWith({ body: ['Successfully deployed to Oxygen'], @@ -618,7 +618,7 @@ describe('deploy', () => { metadata: {}, }); - await oxygenDeploy({ + await runDeploy({ ...deployParams, token: 'fake-token', jsonOutput: false, diff --git a/packages/cli/src/commands/hydrogen/deploy.ts b/packages/cli/src/commands/hydrogen/deploy.ts index f5df86439a..721e44599c 100644 --- a/packages/cli/src/commands/hydrogen/deploy.ts +++ b/packages/cli/src/commands/hydrogen/deploy.ts @@ -14,9 +14,8 @@ import { getLatestGitCommit, GitDirectoryNotCleanError, } from '@shopify/cli-kit/node/git'; -import {resolvePath} from '@shopify/cli-kit/node/path'; +import {relativePath, resolvePath} from '@shopify/cli-kit/node/path'; import { - renderFatalError, renderSelectPrompt, renderSuccess, renderTasks, @@ -37,6 +36,9 @@ import {commonFlags, flagsToCamelObject} from '../../lib/flags.js'; import {getOxygenDeploymentData} from '../../lib/get-oxygen-deployment-data.js'; import {OxygenDeploymentData} from '../../lib/graphql/admin/get-oxygen-data.js'; import {runBuild} from './build.js'; +import {runViteBuild} from './build-vite.js'; +import {getViteConfig} from '../../lib/vite-config.js'; +import {prepareDiffDirectory} from '../../lib/template-diff.js'; const DEPLOY_OUTPUT_FILE_HANDLE = 'h2_deploy_log.json'; @@ -130,23 +132,26 @@ export default class Deploy extends Command { env: 'SHOPIFY_HYDROGEN_FLAG_METADATA_VERSION', hidden: true, }), + diff: commonFlags.diff, }; async run() { const {flags} = await this.parse(Deploy); const deploymentOptions = this.flagsToOxygenDeploymentOptions(flags); - await oxygenDeploy(deploymentOptions) - .catch((error) => { - renderFatalError(error); - process.exit(1); - }) - .finally(() => { - // The Remix compiler hangs due to a bug in ESBuild: - // https://github.com/evanw/esbuild/issues/2727 - // The actual build has already finished so we can kill the process - process.exit(0); - }); + if (flags.diff) { + deploymentOptions.path = await prepareDiffDirectory( + deploymentOptions.path, + false, + ); + } + + await runDeploy(deploymentOptions); + + // The Remix compiler hangs due to a bug in ESBuild: + // https://github.com/evanw/esbuild/issues/2727 + // The actual build has already finished so we can kill the process + process.exit(0); } private flagsToOxygenDeploymentOptions(flags: { @@ -206,7 +211,7 @@ function createUnexpectedAbortError(message?: string): AbortError { ); } -export async function oxygenDeploy( +export async function runDeploy( options: OxygenDeploymentOptions, ): Promise { const { @@ -219,7 +224,7 @@ export async function oxygenDeploy( noVerify, lockfileCheck, jsonOutput, - path, + path: root, shop, metadataUrl, metadataUser, @@ -229,7 +234,7 @@ export async function oxygenDeploy( let isCleanGit = true; try { - await ensureIsClean(path); + await ensureIsClean(root); } catch (error) { if (error instanceof GitDirectoryNotCleanError) { isCleanGit = false; @@ -255,7 +260,7 @@ export async function oxygenDeploy( let gitCommit: GitCommit; try { - gitCommit = await getLatestGitCommit(path); + gitCommit = await getLatestGitCommit(root); branch = (/HEAD -> ([^,]*)/.exec(gitCommit.refs) || [])[1]; commitHash = gitCommit.hash; } catch (error) { @@ -292,7 +297,7 @@ export async function oxygenDeploy( if (!isCI) { deploymentData = await getOxygenDeploymentData({ - root: path, + root, flagShop: shop, }); @@ -364,8 +369,18 @@ export async function oxygenDeploy( isPreview = true; } + let assetsDir = 'dist/client'; + let workerDir = 'dist/worker'; + + const maybeVite = await getViteConfig(root).catch(() => null); + + if (maybeVite) { + assetsDir = relativePath(root, maybeVite.clientOutDir); + workerDir = relativePath(root, maybeVite.serverOutDir); + } + const config: DeploymentConfig = { - assetsDir: 'dist/client', + assetsDir, bugsnag: true, deploymentUrl, defaultEnvironment: defaultEnvironment || isPreview, @@ -381,10 +396,10 @@ export async function oxygenDeploy( ...(metadataVersion ? {version: metadataVersion} : {}), }, skipVerification: noVerify, - rootPath: path, + rootPath: root, skipBuild: false, workerOnly: false, - workerDir: 'dist/worker', + workerDir, overriddenEnvironmentVariables, }; @@ -450,8 +465,11 @@ export async function oxygenDeploy( outputInfo( outputContent`${colors.whiteBright('Building project...')}`.value, ); - await runBuild({ - directory: path, + + const build = maybeVite ? runViteBuild : runBuild; + + await build({ + directory: root, assetPath, lockfileCheck, sourcemap: true, diff --git a/packages/cli/src/commands/hydrogen/dev-vite.ts b/packages/cli/src/commands/hydrogen/dev-vite.ts new file mode 100644 index 0000000000..12a3aab832 --- /dev/null +++ b/packages/cli/src/commands/hydrogen/dev-vite.ts @@ -0,0 +1,225 @@ +import path from 'node:path'; +import {fileURLToPath} from 'node:url'; +import {enhanceH2Logs, muteDevLogs} from '../../lib/log.js'; +import { + commonFlags, + flagsToCamelObject, + overrideFlag, +} from '../../lib/flags.js'; +import Command from '@shopify/cli-kit/node/base-command'; +import colors from '@shopify/cli-kit/node/colors'; +import {type TokenItem, renderInfo} from '@shopify/cli-kit/node/ui'; +import {AbortError} from '@shopify/cli-kit/node/error'; +import {Flags} from '@oclif/core'; +import {spawnCodegenProcess} from '../../lib/codegen.js'; +import {getAllEnvironmentVariables} from '../../lib/environment-variables.js'; +import {getConfig} from '../../lib/shopify-config.js'; +import {checkRemixVersions} from '../../lib/remix-version-check.js'; +import {displayDevUpgradeNotice} from './upgrade.js'; +import {prepareDiffDirectory} from '../../lib/template-diff.js'; +import {setH2OPluginContext} from '../../lib/vite/shared.js'; +import {getGraphiQLUrl} from '../../lib/graphiql-url.js'; +import {getDebugBannerLine} from '../../lib/mini-oxygen/workerd.js'; + +export default class DevVite extends Command { + static description = + 'Runs Hydrogen storefront in an Oxygen worker for development.'; + static flags = { + path: commonFlags.path, + entry: commonFlags.entry, + port: overrideFlag(commonFlags.port, {default: undefined, required: false}), + codegen: overrideFlag(commonFlags.codegen, { + description: + commonFlags.codegen.description! + + ' It updates the types on file save.', + }), + 'codegen-config-path': commonFlags.codegenConfigPath, + // sourcemap: commonFlags.sourcemap, + 'disable-virtual-routes': Flags.boolean({ + description: + "Disable rendering fallback routes when a route file doesn't exist.", + env: 'SHOPIFY_HYDROGEN_FLAG_DISABLE_VIRTUAL_ROUTES', + default: false, + }), + debug: commonFlags.debug, + 'inspector-port': commonFlags.inspectorPort, + host: Flags.boolean({ + description: 'Expose the server to the network', + default: false, + required: false, + }), + ['env-branch']: commonFlags.envBranch, + ['disable-version-check']: Flags.boolean({ + description: 'Skip the version check when running `hydrogen dev`', + default: false, + required: false, + }), + diff: commonFlags.diff, + }; + + async run(): Promise { + const {flags} = await this.parse(DevVite); + let directory = flags.path ? path.resolve(flags.path) : process.cwd(); + + if (flags.diff) { + directory = await prepareDiffDirectory(directory, true); + } + + await runDev({ + ...flagsToCamelObject(flags), + path: directory, + isLocalDev: flags.diff, + }); + } +} + +type DevOptions = { + entry?: string; + port: number; + path?: string; + codegen?: boolean; + host?: boolean; + codegenConfigPath?: string; + disableVirtualRoutes?: boolean; + disableVersionCheck?: boolean; + envBranch?: string; + debug?: boolean; + sourcemap?: boolean; + inspectorPort: number; + isLocalDev?: boolean; +}; + +export async function runDev({ + entry: ssrEntry, + port: appPort, + path: appPath, + host, + codegen: useCodegen = false, + codegenConfigPath, + disableVirtualRoutes, + envBranch, + debug = false, + disableVersionCheck = false, + inspectorPort, + isLocalDev = false, +}: DevOptions) { + if (!process.env.NODE_ENV) process.env.NODE_ENV = 'development'; + + muteDevLogs(); + + const root = appPath ?? process.cwd(); + + const envPromise = getConfig(root).then(({shop, storefront}) => { + const fetchRemote = !!shop && !!storefront?.id; + return getAllEnvironmentVariables({root, fetchRemote, envBranch}); + }); + + const vite = await import('vite'); + + // Allow Vite to read files from the Hydrogen packages in local development. + const fs = isLocalDev + ? {allow: [root, fileURLToPath(new URL('../../../../', import.meta.url))]} + : undefined; + + const viteServer = await vite.createServer({ + root, + server: {fs, host: host ? true : undefined}, + ...setH2OPluginContext({ + cliOptions: { + debug, + ssrEntry, + envPromise, + inspectorPort, + disableVirtualRoutes, + }, + }), + }); + + process.once('SIGTERM', async () => { + try { + await viteServer.close(); + } finally { + process.exit(); + } + }); + + if ( + !viteServer.config.plugins.find((plugin) => plugin.name === 'hydrogen:main') + ) { + await viteServer.close(); + throw new AbortError( + 'Hydrogen plugin not found.', + 'Add `hydrogen()` plugin to your Vite config.', + ); + } + + const codegenProcess = useCodegen + ? spawnCodegenProcess({ + rootDirectory: root, + configFilePath: codegenConfigPath, + }) + : undefined; + + // handle unhandledRejection so that the process won't exit + process.on('unhandledRejection', (err) => { + console.log('Unhandled Rejection: ', err); + }); + + // Store the port passed by the user in the config. + const publicPort = appPort ?? viteServer.config.server.port ?? 3000; + + // TODO -- Need to change Remix' component + // const assetsPort = await findPort(publicPort + 100); + // if (assetsPort) { + // // Note: Set this env before loading Remix config! + // process.env.HYDROGEN_ASSET_BASE_URL = buildAssetsUrl(assetsPort); + // } + + await viteServer.listen(publicPort); + + const publicUrl = new URL( + viteServer.resolvedUrls!.local[0] ?? viteServer.resolvedUrls!.network[0]!, + ); + + // Start the public facing server with the port passed by the user. + enhanceH2Logs({rootDirectory: root, host: publicUrl.toString()}); + + await envPromise; // Prints the injected env vars + console.log(''); + viteServer.printUrls(); + viteServer.bindCLIShortcuts({print: true}); + console.log('\n'); + + const infoLines: TokenItem = []; + + if (!disableVirtualRoutes) { + infoLines.push( + `${colors.dim('View GraphiQL API browser:')} ${getGraphiQLUrl({ + host: publicUrl.origin, + })}`, + `\n${colors.dim('View server network requests:')} ${ + publicUrl.origin + }/subrequest-profiler`, + ); + } + + if (debug) { + infoLines.push({warn: getDebugBannerLine(inspectorPort)}); + } + + if (infoLines.length > 0) { + renderInfo({body: infoLines}); + } + + checkRemixVersions(); + if (!disableVersionCheck) { + displayDevUpgradeNotice({targetPath: root}); + } + + return { + async close() { + codegenProcess?.kill(0); + await viteServer.close(); + }, + }; +} diff --git a/packages/cli/src/commands/hydrogen/init.test.ts b/packages/cli/src/commands/hydrogen/init.test.ts index aec09a75f1..caca76da24 100644 --- a/packages/cli/src/commands/hydrogen/init.test.ts +++ b/packages/cli/src/commands/hydrogen/init.test.ts @@ -148,10 +148,12 @@ describe('init', () => { language: 'ts', template: 'https://github.com/some/repo', }), - ).resolves; + ).resolves.ok; }); - expect(outputMock.error()).toMatch('--template'); + // The error message is printed asynchronously + await vi.waitFor(() => expect(outputMock.error()).toMatch('--template')); + expect(processExit).toHaveBeenCalledWith(1); processExit.mockRestore(); diff --git a/packages/cli/src/commands/hydrogen/preview.ts b/packages/cli/src/commands/hydrogen/preview.ts index 415cea91eb..708bbe6fd3 100644 --- a/packages/cli/src/commands/hydrogen/preview.ts +++ b/packages/cli/src/commands/hydrogen/preview.ts @@ -6,6 +6,9 @@ import {startMiniOxygen} from '../../lib/mini-oxygen/index.js'; import {getAllEnvironmentVariables} from '../../lib/environment-variables.js'; import {getConfig} from '../../lib/shopify-config.js'; import {findPort} from '../../lib/find-port.js'; +import {fileExists} from '@shopify/cli-kit/node/fs'; +import {joinPath} from '@shopify/cli-kit/node/path'; +import {getViteConfig} from '../../lib/vite-config.js'; export default class Preview extends Command { static description = @@ -51,7 +54,13 @@ export async function runPreview({ muteDevLogs({workerReload: false}); - const {root, buildPathWorkerFile, buildPathClient} = getProjectPaths(appPath); + let {root, buildPathWorkerFile, buildPathClient} = getProjectPaths(appPath); + + if (!(await fileExists(joinPath(root, buildPathWorkerFile)))) { + const maybeResult = await getViteConfig(root).catch(() => null); + if (maybeResult) buildPathWorkerFile = maybeResult.serverOutFile; + } + const {shop, storefront} = await getConfig(root); const fetchRemote = !!shop && !!storefront?.id; const env = await getAllEnvironmentVariables({root, fetchRemote, envBranch}); diff --git a/packages/cli/src/commands/hydrogen/upgrade.ts b/packages/cli/src/commands/hydrogen/upgrade.ts index e16610e9a3..237da79812 100644 --- a/packages/cli/src/commands/hydrogen/upgrade.ts +++ b/packages/cli/src/commands/hydrogen/upgrade.ts @@ -295,7 +295,7 @@ export async function getChangelog(): Promise { // For local testing if ( process.env.FORCE_CHANGELOG_SOURCE === 'local' || - (process.env.FORCE_CHANGELOG_SOURCE !== 'remote' && !!process.env.LOCAL_ENV) + (process.env.FORCE_CHANGELOG_SOURCE !== 'remote' && !!process.env.LOCAL_DEV) ) { const require = createRequire(import.meta.url); return require(fileURLToPath( diff --git a/packages/cli/src/lib/codegen.ts b/packages/cli/src/lib/codegen.ts index 6d04535d4b..b58f0d9ae7 100644 --- a/packages/cli/src/lib/codegen.ts +++ b/packages/cli/src/lib/codegen.ts @@ -2,7 +2,12 @@ import {spawn} from 'node:child_process'; import {fileURLToPath} from 'node:url'; import {formatCode, getCodeFormatOptions} from './format-code.js'; import {renderFatalError, renderWarning} from '@shopify/cli-kit/node/ui'; -import {joinPath, relativePath, basename} from '@shopify/cli-kit/node/path'; +import { + joinPath, + relativePath, + basename, + resolvePath, +} from '@shopify/cli-kit/node/path'; import {AbortError} from '@shopify/cli-kit/node/error'; import type {LoadCodegenConfigResult} from '@graphql-codegen/cli'; import type {GraphQLConfig} from 'graphql-config'; @@ -55,7 +60,7 @@ export function spawnCodegenProcess({ [ fileURLToPath(import.meta.url), rootDirectory, - appDirectory, + appDirectory ?? resolvePath('app'), configFilePath ?? '', ], {stdio: ['inherit', 'ignore', 'pipe']}, @@ -92,7 +97,7 @@ export function spawnCodegenProcess({ type ProjectDirs = { rootDirectory: string; - appDirectory: string; + appDirectory?: string; }; type CodegenOptions = ProjectDirs & { @@ -164,7 +169,10 @@ async function generateTypes({ } async function generateDefaultConfig( - {rootDirectory, appDirectory}: ProjectDirs, + { + rootDirectory, + appDirectory = resolvePath(rootDirectory, 'app'), + }: ProjectDirs, forceSfapiVersion?: string, ): Promise { const {getSchema, preset, pluckConfig} = await import( diff --git a/packages/cli/src/lib/flags.ts b/packages/cli/src/lib/flags.ts index 7aa10b048c..99c686118c 100644 --- a/packages/cli/src/lib/flags.ts +++ b/packages/cli/src/lib/flags.ts @@ -108,6 +108,11 @@ export const commonFlags = { "Applies the current files on top of Hydrogen's starter template in a temporary directory.", default: false, required: false, + hidden: true, + }), + entry: Flags.string({ + description: 'Entry file for the worker. Defaults to `./server`.', + env: 'SHOPIFY_HYDROGEN_FLAG_ENTRY', }), lockfileCheck: Flags.boolean({ allowNo: true, diff --git a/packages/cli/src/lib/log.ts b/packages/cli/src/lib/log.ts index 99d328a28a..2ddf66017e 100644 --- a/packages/cli/src/lib/log.ts +++ b/packages/cli/src/lib/log.ts @@ -249,6 +249,7 @@ export function muteAuthLogs({ export function enhanceH2Logs(options: {rootDirectory: string; host: string}) { injectLogReplacer('error'); injectLogReplacer('warn', warningDebouncer); + injectLogReplacer('log', warningDebouncer); addMessageReplacers('h2-warn', [ ([first]) => { diff --git a/packages/cli/src/lib/mini-oxygen/common.ts b/packages/cli/src/lib/mini-oxygen/common.ts index 00c2e38e91..9f2f114aa8 100644 --- a/packages/cli/src/lib/mini-oxygen/common.ts +++ b/packages/cli/src/lib/mini-oxygen/common.ts @@ -9,6 +9,8 @@ import {DEV_ROUTES} from '../request-events.js'; // Default port used for debugging in VSCode and Chrome DevTools. export const DEFAULT_INSPECTOR_PORT = 9229; +export const SUBREQUEST_PROFILER_ENDPOINT = '/debug-network-server'; + export function logRequestLine( // Minimal overlap between Fetch, Miniflare@2 and Miniflare@3 request types. request: Pick & { diff --git a/packages/cli/src/lib/mini-oxygen/node.ts b/packages/cli/src/lib/mini-oxygen/node.ts index 024d15ef78..7405ddfeeb 100644 --- a/packages/cli/src/lib/mini-oxygen/node.ts +++ b/packages/cli/src/lib/mini-oxygen/node.ts @@ -10,7 +10,11 @@ import { } from '@shopify/mini-oxygen'; import {DEFAULT_PORT} from '../flags.js'; import type {MiniOxygenInstance, MiniOxygenOptions} from './types.js'; -import {OXYGEN_HEADERS_MAP, logRequestLine} from './common.js'; +import { + OXYGEN_HEADERS_MAP, + SUBREQUEST_PROFILER_ENDPOINT, + logRequestLine, +} from './common.js'; import { H2O_BINDING_NAME, createLogRequestEvent, @@ -74,7 +78,7 @@ export async function startNodeServer({ oxygenHeaders, async onRequest(request, defaultDispatcher) { const url = new URL(request.url); - if (url.pathname === '/debug-network-server') { + if (url.pathname === SUBREQUEST_PROFILER_ENDPOINT) { return handleDebugNetworkRequest(request); } diff --git a/packages/cli/src/lib/mini-oxygen/workerd-inspector.ts b/packages/cli/src/lib/mini-oxygen/workerd-inspector.ts index 1d41d6ea5a..a80c868916 100644 --- a/packages/cli/src/lib/mini-oxygen/workerd-inspector.ts +++ b/packages/cli/src/lib/mini-oxygen/workerd-inspector.ts @@ -101,7 +101,7 @@ async function findInspectorUrl(inspectorPort: number) { ).json()) as InspectorWebSocketTarget[]; const url = body?.find( - ({id}) => id === 'core:user:hydrogen', + ({id}) => id === 'core:user:hydrogen' || id === 'core:user:oxygen', )?.webSocketDebuggerUrl; if (!url) { diff --git a/packages/cli/src/lib/mini-oxygen/workerd.ts b/packages/cli/src/lib/mini-oxygen/workerd.ts index ad8565a67f..c716afeba6 100644 --- a/packages/cli/src/lib/mini-oxygen/workerd.ts +++ b/packages/cli/src/lib/mini-oxygen/workerd.ts @@ -15,7 +15,11 @@ import colors from '@shopify/cli-kit/node/colors'; import {createInspectorConnector} from './workerd-inspector.js'; import {findPort} from '../find-port.js'; import type {MiniOxygenInstance, MiniOxygenOptions} from './types.js'; -import {OXYGEN_HEADERS_MAP, logRequestLine} from './common.js'; +import { + OXYGEN_HEADERS_MAP, + SUBREQUEST_PROFILER_ENDPOINT, + logRequestLine, +} from './common.js'; import { H2O_BINDING_NAME, handleDebugNetworkRequest, @@ -30,7 +34,12 @@ import { // This should probably be `0` and let workerd find a free port, // but at the moment we can't get the port from workerd (afaik?). -const PRIVATE_WORKERD_INSPECTOR_PORT = 9222; +export const PRIVATE_WORKERD_INSPECTOR_PORT = 9222; + +export const OXYGEN_WORKERD_COMPAT_PARAMS = { + compatibilityFlags: ['streams_enable_constructors'], + compatibilityDate: '2022-10-31', +}; export async function startWorkerdServer({ root, @@ -59,7 +68,13 @@ export async function startWorkerdServer({ const handleAssets = createAssetHandler(assetsPort); const staticAssetExtensions = STATIC_ASSET_EXTENSIONS.slice(); - let stringifiedOxygenHandler = miniOxygenHandler.toString(); + let stringifiedOxygenHandler = miniOxygenHandler + .toString() + .replace( + 'SUBREQUEST_PROFILER_ENDPOINT', + JSON.stringify(SUBREQUEST_PROFILER_ENDPOINT), + ); + if (process.env.NODE_ENV === 'test') { // Vitest adds namespaces to imports stringifiedOxygenHandler = stringifiedOxygenHandler.replace( @@ -106,11 +121,12 @@ export async function startWorkerdServer({ contents: await readFile(absoluteBundlePath), }, ], - compatibilityFlags: ['streams_enable_constructors'], - compatibilityDate: '2022-10-31', + ...OXYGEN_WORKERD_COMPAT_PARAMS, bindings: {...env}, serviceBindings: { - [H2O_BINDING_NAME]: createLogRequestEvent({absoluteBundlePath}), + [H2O_BINDING_NAME]: createLogRequestEvent({ + transformLocation: () => absoluteBundlePath, + }), }, }, ], @@ -158,20 +174,6 @@ export async function startWorkerdServer({ showBanner(options) { console.log(''); // New line - const isVSCode = process.env.TERM_PROGRAM === 'vscode'; - const debuggingDocsLink = - 'https://h2o.fyi/debugging/server-code' + - (isVSCode ? '#visual-studio-code' : '#step-2-attach-a-debugger'); - - const debuggerMessage = - outputContent`\n\nDebugging enabled on port ${String( - publicInspectorPort, - )}.\nAttach a ${outputToken.link( - colors.yellow(isVSCode ? 'VSCode debugger' : 'debugger'), - debuggingDocsLink, - )} or open DevTools in http://localhost:${String(publicInspectorPort)}.` - .value; - renderSuccess({ headline: `${ options?.headlinePrefix ?? '' @@ -181,9 +183,10 @@ export async function startWorkerdServer({ body: [ `View ${options?.appName ?? 'Hydrogen'} app: ${listeningAt}`, ...(options?.extraLines ?? []), - ...(debug ? [{warn: debuggerMessage}] : []), + ...(debug ? [{warn: getDebugBannerLine(publicInspectorPort)}] : []), ], }); + console.log(''); }, async close() { @@ -209,7 +212,7 @@ async function miniOxygenHandler( ) { const {pathname} = new URL(request.url); - if (pathname === '/debug-network-server') { + if (pathname === SUBREQUEST_PROFILER_ENDPOINT) { return env.debugNetwork.fetch(request); } @@ -286,3 +289,18 @@ async function logRequest(request: Request): Promise { return new Response('ok'); } + +export function getDebugBannerLine(publicInspectorPort: number) { + const isVSCode = process.env.TERM_PROGRAM === 'vscode'; + const debuggingDocsLink = + 'https://h2o.fyi/debugging/server-code' + + (isVSCode ? '#visual-studio-code' : '#step-2-attach-a-debugger'); + + return outputContent`\n\nDebugging enabled on port ${String( + publicInspectorPort, + )}.\nAttach a ${outputToken.link( + colors.yellow(isVSCode ? 'VSCode debugger' : 'debugger'), + debuggingDocsLink, + )} or open DevTools in http://localhost:${String(publicInspectorPort)}.` + .value; +} diff --git a/packages/cli/src/lib/onboarding/common.ts b/packages/cli/src/lib/onboarding/common.ts index fc2d8cb8b1..0b894a9367 100644 --- a/packages/cli/src/lib/onboarding/common.ts +++ b/packages/cli/src/lib/onboarding/common.ts @@ -749,9 +749,8 @@ export function createAbortHandler( ), ); - if (process.env.NODE_ENV === 'test') { - console.error(error); - } + // Enable this when debugging tests: + // if (process.env.NODE_ENV === 'test') console.error(error); // This code runs asynchronously so throwing here // turns into an unhandled rejection. Exit process instead: diff --git a/packages/cli/src/lib/onboarding/remote.ts b/packages/cli/src/lib/onboarding/remote.ts index 235517b2c1..c1857d65dd 100644 --- a/packages/cli/src/lib/onboarding/remote.ts +++ b/packages/cli/src/lib/onboarding/remote.ts @@ -1,3 +1,4 @@ +import {readdir} from 'node:fs/promises'; import {AbortError} from '@shopify/cli-kit/node/error'; import {AbortController} from '@shopify/cli-kit/node/abort'; import {copyFile, fileExists} from '@shopify/cli-kit/node/fs'; @@ -46,9 +47,20 @@ export async function setupRemoteTemplate( return {templatesDir, sourcePath: examplePath}; } + const availableTemplates = ( + await Promise.all([readdir(examplesDir), readdir(templatesDir)]).catch( + () => [], + ) + ) + .flat() + .filter((name) => name !== 'skeleton' && !name.endsWith('.md')) + .sort(); + throw new AbortError( - 'Unknown value in --template flag.', - 'Skip the --template flag or provide the name of a template or example in the Hydrogen repository.', + `Unknown value in \`--template\` flag "${appTemplate}".\nSkip the flag or provide the name of a template or example in the Hydrogen repository.`, + availableTemplates.length === 0 + ? '' + : {list: {title: 'Available templates:', items: availableTemplates}}, ); }) .catch(abort); @@ -59,13 +71,16 @@ export async function setupRemoteTemplate( abort = createAbortHandler(controller, project); - let backgroundWorkPromise = backgroundDownloadPromise - .then(async (result) => { + const downloaded = await backgroundDownloadPromise; + if (controller.signal.aborted) return; + + let backgroundWorkPromise = Promise.resolve() + .then(async () => { // Result is undefined in certain tests, // do not continue if it's already aborted if (controller.signal.aborted) return; - const {sourcePath, templatesDir} = result; + const {sourcePath, templatesDir} = downloaded; const pkgJson = await readAndParsePackageJson( joinPath(sourcePath, 'package.json'), @@ -83,11 +98,8 @@ export async function setupRemoteTemplate( }) .catch(abort); - if (controller.signal.aborted) return; - - const {sourcePath} = await backgroundDownloadPromise; const supportsTranspilation = await fileExists( - joinPath(sourcePath, 'tsconfig.json'), + joinPath(downloaded.sourcePath, 'tsconfig.json'), ); const {language, transpileProject} = supportsTranspilation diff --git a/packages/cli/src/lib/remix-config.ts b/packages/cli/src/lib/remix-config.ts index cdc162686a..16bb529031 100644 --- a/packages/cli/src/lib/remix-config.ts +++ b/packages/cli/src/lib/remix-config.ts @@ -18,7 +18,7 @@ const WORKER_SUBDIR = 'worker'; // Hardcoded in Oxygen const oxygenServerMainFields = ['browser', 'module', 'main']; -export function getProjectPaths(appPath?: string, entry?: string) { +export function getProjectPaths(appPath?: string) { const root = appPath ?? process.cwd(); const publicPath = path.join(root, 'public'); const buildPath = path.join(root, BUILD_DIR); diff --git a/packages/cli/src/lib/request-events.ts b/packages/cli/src/lib/request-events.ts index 7a82be2b4d..7030f96a2d 100644 --- a/packages/cli/src/lib/request-events.ts +++ b/packages/cli/src/lib/request-events.ts @@ -18,7 +18,10 @@ type InferredResponse = R extends WorkerdRequest ? WorkerdResponse : Response; -let ResponseConstructor: typeof Response | typeof WorkerdResponse; +let ResponseConstructor: + | typeof Response + | typeof WorkerdResponse + | typeof globalThis.Response; export function setConstructors(constructors: { Response: typeof ResponseConstructor; }) { @@ -91,17 +94,18 @@ function createResponse( main: string | ReadableStream = 'ok', init?: Pick, ) { + // @ts-ignore return new ResponseConstructor(main, init) as InferredResponse; } -async function clearHistory( - request: R, -): Promise> { +function clearHistory(request: R): InferredResponse { eventHistory.length = 0; return createResponse(); } -export function createLogRequestEvent(options?: {absoluteBundlePath?: string}) { +export function createLogRequestEvent(options?: { + transformLocation?: (partialPath: string) => string; +}) { return async function logRequestEvent( request: R, ): Promise> { @@ -141,8 +145,8 @@ export function createLogRequestEvent(options?: {absoluteBundlePath?: string}) { let stackLink: string | null = null; if (stackInfo?.file) { - if (!path.isAbsolute(stackInfo.file) && options?.absoluteBundlePath) { - stackInfo.file = options.absoluteBundlePath; + if (options?.transformLocation) { + stackInfo.file = options.transformLocation(stackInfo.file); } const {source, line, column} = mapSourcePosition({ diff --git a/packages/cli/src/lib/template-diff.ts b/packages/cli/src/lib/template-diff.ts index aad0302f5c..bf0f71cb98 100644 --- a/packages/cli/src/lib/template-diff.ts +++ b/packages/cli/src/lib/template-diff.ts @@ -7,6 +7,7 @@ import { } from 'fs-extra/esm'; import {copyFile, removeFile} from '@shopify/cli-kit/node/fs'; import {joinPath, relativePath} from '@shopify/cli-kit/node/path'; +import {readAndParsePackageJson} from '@shopify/cli-kit/node/node-package-manager'; import colors from '@shopify/cli-kit/node/colors'; import {getRepoNodeModules, getStarterDir} from './build.js'; import {mergePackageJson} from './file.js'; @@ -91,21 +92,30 @@ export async function applyTemplateDiff( diffDirectory: string, templateDir = getStarterDir(), ) { - const createFilter = (re: RegExp) => (filepath: string) => - !re.test(relativePath(templateDir, filepath)); + const pkgJson: Record = await readAndParsePackageJson( + joinPath(diffDirectory, 'package.json'), + ); + + const createFilter = + (re: RegExp, skipFiles?: string[]) => (filepath: string) => { + const filename = relativePath(templateDir, filepath); + return !re.test(filename) && !skipFiles?.includes(filename); + }; await copyDirectory(templateDir, targetDirectory, { filter: createFilter( - /(^|\/|\\)(dist|node_modules|\.cache|CHANGELOG\.md)(\/|\\|$)/i, + /(^|\/|\\)(dist|node_modules|\.cache|.turbo|CHANGELOG\.md)(\/|\\|$)/i, + pkgJson['h2:diff']?.['skip-files'] || [], ), }); await copyDirectory(diffDirectory, targetDirectory, { filter: createFilter( - /(^|\/|\\)(dist|node_modules|\.cache|package\.json|tsconfig\.json)(\/|\\|$)/i, + /(^|\/|\\)(dist|node_modules|\.cache|.turbo|package\.json|tsconfig\.json)(\/|\\|$)/i, ), }); await mergePackageJson(diffDirectory, targetDirectory, { + ignoredKeys: ['h2:diff'], onResult: (pkgJson) => { for (const key of ['build', 'dev']) { const scriptLine = pkgJson.scripts?.[key]; @@ -125,7 +135,13 @@ export async function copyDiffBuild( ) { const targetDist = joinPath(diffDirectory, 'dist'); await removeDirectory(targetDist); - await copyDirectory(joinPath(targetDirectory, 'dist'), targetDist, { - overwrite: true, - }); + await Promise.all([ + copyDirectory(joinPath(targetDirectory, 'dist'), targetDist, { + overwrite: true, + }), + copyFile( + joinPath(targetDirectory, '.env'), + joinPath(diffDirectory, '.env'), + ), + ]); } diff --git a/packages/cli/src/lib/template-downloader.ts b/packages/cli/src/lib/template-downloader.ts index 29c1aa10d3..1e6f823a8c 100644 --- a/packages/cli/src/lib/template-downloader.ts +++ b/packages/cli/src/lib/template-downloader.ts @@ -1,4 +1,5 @@ -import path from 'path'; +import path from 'node:path'; +import {fileURLToPath} from 'node:url'; import {pipeline} from 'stream/promises'; import gunzipMaybe from 'gunzip-maybe'; import {extract} from 'tar-fs'; @@ -6,7 +7,7 @@ import {fetch} from '@shopify/cli-kit/node/http'; import {mkdir, fileExists} from '@shopify/cli-kit/node/fs'; import {AbortError} from '@shopify/cli-kit/node/error'; import {AbortSignal} from '@shopify/cli-kit/node/abort'; -import {fileURLToPath} from 'url'; +import {getSkeletonSourceDir} from './build.js'; // Note: this skips pre-releases const REPO_RELEASES_URL = `https://api.github.com/repos/shopify/hydrogen/releases/latest`; @@ -74,6 +75,15 @@ async function downloadTarball( export async function getLatestTemplates({ signal, }: {signal?: AbortSignal} = {}) { + if (process.env.LOCAL_DEV) { + const templatesDir = path.dirname(getSkeletonSourceDir()); + return { + version: 'local', + templatesDir, + examplesDir: path.resolve(templatesDir, '..', 'examples'), + }; + } + try { const {version, url} = await getLatestReleaseDownloadUrl(signal); const templateStoragePath = fileURLToPath( diff --git a/packages/cli/src/lib/virtual-routes.ts b/packages/cli/src/lib/virtual-routes.ts index 4b5826e86a..22d19de812 100644 --- a/packages/cli/src/lib/virtual-routes.ts +++ b/packages/cli/src/lib/virtual-routes.ts @@ -6,7 +6,14 @@ import type {RemixConfig} from './remix-config.js'; export const VIRTUAL_ROUTES_DIR = 'virtual-routes/routes'; export const VIRTUAL_ROOT = 'virtual-routes/virtual-root'; -export async function addVirtualRoutes(config: RemixConfig) { +type MinimalRemixConfig = { + appDirectory: string; + routes: RemixConfig['routes']; +}; + +export async function addVirtualRoutes( + config: T, +): Promise { const userRouteList = Object.values(config.routes); const distPath = fileURLToPath(new URL('..', import.meta.url)); const virtualRoutesPath = joinPath(distPath, VIRTUAL_ROUTES_DIR); diff --git a/packages/cli/src/lib/vite-config.ts b/packages/cli/src/lib/vite-config.ts new file mode 100644 index 0000000000..1a6c55989d --- /dev/null +++ b/packages/cli/src/lib/vite-config.ts @@ -0,0 +1,55 @@ +import {joinPath} from '@shopify/cli-kit/node/path'; +import type {RemixPluginContext} from '@remix-run/dev/dist/vite/plugin.js'; + +export async function getViteConfig(root: string) { + const vite = await import('vite'); + + const command = 'build'; + const mode = process.env.NODE_ENV || 'production'; + + const maybeConfig = await vite.loadConfigFromFile( + {command, mode, isSsrBuild: true}, + undefined, + root, + ); + + if (!maybeConfig || !maybeConfig.path) { + throw new Error('No Vite config found'); + } + + const resolvedViteConfig = await vite.resolveConfig( + {root, build: {ssr: true}}, + command, + mode, + mode, + ); + + const serverOutDir = resolvedViteConfig.build.outDir; + const clientOutDir = serverOutDir.replace(/server$/, 'client'); + + const rollupOutput = resolvedViteConfig.build.rollupOptions.output; + const {entryFileNames} = + (Array.isArray(rollupOutput) ? rollupOutput[0] : rollupOutput) ?? {}; + const serverOutFile = joinPath( + serverOutDir, + typeof entryFileNames === 'string' ? entryFileNames : 'index.js', + ); + + return { + clientOutDir, + serverOutDir, + serverOutFile, + resolvedViteConfig, + userViteConfig: maybeConfig.config, + remixConfig: getRemixConfigFromVite(resolvedViteConfig), + }; +} + +function getRemixConfigFromVite(viteConfig: any) { + const {remixConfig} = + (viteConfig.__remixPluginContext as RemixPluginContext) || { + remixConfig: {appDirectory: joinPath(viteConfig.root, 'app')}, + }; + + return remixConfig; +} diff --git a/packages/cli/src/lib/vite/hydrogen-middleware.ts b/packages/cli/src/lib/vite/hydrogen-middleware.ts new file mode 100644 index 0000000000..ce03693953 --- /dev/null +++ b/packages/cli/src/lib/vite/hydrogen-middleware.ts @@ -0,0 +1,136 @@ +import {normalizePath, type ViteDevServer, type ResolvedConfig} from 'vite'; +import path from 'node:path'; +import {createRequire} from 'node:module'; +import {createFileReadStream} from '@shopify/cli-kit/node/fs'; +import {handleDebugNetworkRequest, setConstructors} from '../request-events.js'; +import {SUBREQUEST_PROFILER_ENDPOINT} from '../mini-oxygen/common.js'; +import {pipeFromWeb, toWeb} from './utils.js'; +import type {RemixPluginContext} from '@remix-run/dev/dist/vite/plugin.js'; +import {addVirtualRoutes} from '../virtual-routes.js'; +import type {HydrogenPluginOptions} from './shared.js'; + +// Function to be passed as a setup function to the Oxygen worker. +// It runs within workerd and sets up Remix dev server hooks. +// It is eventually stringified to be initialized in the worker, +// so do not use any external variables or imports. +export function setupRemixDevServerHooks(viteUrl: string) { + // @ts-expect-error Remix global magic + globalThis['__remix_devServerHooks'] = { + getCriticalCss: (...args: any) => + fetch(new URL('/__vite_critical_css', viteUrl), { + method: 'POST', + body: JSON.stringify(args), + }).then((res) => res.json()), + }; +} + +export function setupHydrogenMiddleware( + viteDevServer: ViteDevServer, + options: HydrogenPluginOptions, +) { + viteDevServer.middlewares.use( + '/__vite_critical_css', + function h2HandleCriticalCss(req, res) { + // This request comes from Remix's `getCriticalCss` function + // to gather the required CSS and avoid flashes of unstyled content in dev. + + toWeb(req) + .json() + .then(async (args: any) => { + // @ts-expect-error Remix global magic + const result = await globalThis[ + '__remix_devServerHooks' + ]?.getCriticalCss?.(...args); + res.writeHead(200, {'Content-Type': 'application/json'}); + res.end(JSON.stringify(result ?? '')); + }); + }, + ); + + if (options.disableVirtualRoutes) return; + + addVirtualRoutesToRemix(viteDevServer); + setConstructors({Response: globalThis.Response}); + + viteDevServer.middlewares.use( + SUBREQUEST_PROFILER_ENDPOINT, + function h2HandleSubrequestProfilerEvent(req, res) { + // This request comes from Hydrogen's Subrequest Profiler UI. + + const webResponse = handleDebugNetworkRequest(toWeb(req)); + pipeFromWeb(webResponse, res); + }, + ); + + viteDevServer.middlewares.use( + '/graphiql/customer-account.schema.json', + function h2HandleGraphiQLCustomerSchema(req, res) { + // This request comes from Hydrogen's GraphiQL. + // Currently, the CAAPI schema is not available in the public API, + // so we serve it from here. + + const require = createRequire(import.meta.url); + const filePath = require.resolve( + '@shopify/hydrogen/customer-account.schema.json', + ); + + res.writeHead(200, {'Content-Type': 'application/json'}); + createFileReadStream(filePath).pipe(res); + }, + ); +} + +// TODO: Sync with Remix team and find an official way to add virtual routes. +let virtualRoutesAdded = false; +async function addVirtualRoutesToRemix(viteDevServer: ViteDevServer) { + if (virtualRoutesAdded) return; + + const appDirectory = await reloadRemixVirtualRoutes(viteDevServer.config); + + viteDevServer.watcher.on('all', (eventName, filepath) => { + const appFileAddedOrRemoved = + (eventName === 'add' || eventName === 'unlink') && + normalizePath(filepath).startsWith(normalizePath(appDirectory)); + + const viteConfigChanged = + eventName === 'change' && + normalizePath(filepath) === + normalizePath(viteDevServer.config.configFile ?? ''); + + if (appFileAddedOrRemoved || viteConfigChanged) { + setTimeout(() => reloadRemixVirtualRoutes(viteDevServer.config), 100); + } + }); + + virtualRoutesAdded = true; +} + +async function reloadRemixVirtualRoutes(config: ResolvedConfig) { + const remixPluginContext = (config as any) + .__remixPluginContext as RemixPluginContext; + + // Unfreeze remixConfig to extend it with virtual routes. + remixPluginContext.remixConfig = {...remixPluginContext.remixConfig}; + // @ts-expect-error + remixPluginContext.remixConfig.routes = { + ...remixPluginContext.remixConfig.routes, + }; + + await addVirtualRoutes(remixPluginContext.remixConfig).catch((error) => { + // Seen this fail when somehow NPM doesn't publish + // the full 'virtual-routes' directory. + // E.g. https://unpkg.com/browse/@shopify/cli-hydrogen@0.0.0-next-aa15969-20230703072007/dist/virtual-routes/ + console.debug( + 'Could not add virtual routes: ' + + (error?.stack ?? error?.message ?? error), + ); + }); + + Object.freeze(remixPluginContext.remixConfig.routes); + Object.freeze(remixPluginContext.remixConfig); + + return ( + remixPluginContext?.remixConfig?.appDirectory ?? + path.join(config.root, 'app') + ); +} diff --git a/packages/cli/src/lib/vite/mini-oxygen.ts b/packages/cli/src/lib/vite/mini-oxygen.ts new file mode 100644 index 0000000000..c6bde34be2 --- /dev/null +++ b/packages/cli/src/lib/vite/mini-oxygen.ts @@ -0,0 +1,210 @@ +import {fetchModule, type ViteDevServer} from 'vite'; +import {fileURLToPath} from 'node:url'; +import crypto from 'node:crypto'; +import {Miniflare, NoOpLog, Request, type Response} from 'miniflare'; +import {OXYGEN_HEADERS_MAP, logRequestLine} from '../mini-oxygen/common.js'; +import { + PRIVATE_WORKERD_INSPECTOR_PORT, + OXYGEN_WORKERD_COMPAT_PARAMS, +} from '../mini-oxygen/workerd.js'; +import {findPort} from '../find-port.js'; +import {createInspectorConnector} from '../mini-oxygen/workerd-inspector.js'; +import {MiniOxygenOptions} from '../mini-oxygen/types.js'; +import {getHmrUrl, pipeFromWeb, toURL, toWeb} from './utils.js'; + +import type {ViteEnv} from './worker-entry.js'; +const scriptPath = fileURLToPath(new URL('./worker-entry.js', import.meta.url)); + +const FETCH_MODULE_PATHNAME = '/__vite_fetch_module'; +const WARMUP_PATHNAME = '/__vite_warmup'; + +const oxygenHeadersMap = Object.values(OXYGEN_HEADERS_MAP).reduce( + (acc, item) => { + acc[item.name] = item.defaultValue; + return acc; + }, + {} as Record, +); + +export type InternalMiniOxygenOptions = { + setupScripts?: Array<(viteUrl: string) => void>; + services?: Record Response | Promise>; +}; + +type MiniOxygenViteOptions = InternalMiniOxygenOptions & + Pick & { + viteDevServer: ViteDevServer; + workerEntryFile: string; + }; + +export type MiniOxygen = Awaited>; + +export async function startMiniOxygenRuntime({ + viteDevServer, + env, + services, + debug = false, + inspectorPort, + workerEntryFile, + setupScripts, +}: MiniOxygenViteOptions) { + const [publicInspectorPort, privateInspectorPort] = await Promise.all([ + findPort(inspectorPort), + findPort(PRIVATE_WORKERD_INSPECTOR_PORT), + ]); + + const mf = new Miniflare({ + cf: false, + verbose: false, + log: new NoOpLog(), + inspectorPort: privateInspectorPort, + handleRuntimeStdio(stdout, stderr) { + // TODO: handle runtime stdio and remove inspector logs + }, + workers: [ + { + name: 'oxygen', + modulesRoot: '/', + modules: [{type: 'ESModule', path: scriptPath}], + ...OXYGEN_WORKERD_COMPAT_PARAMS, + serviceBindings: {...services}, + bindings: { + ...env, + __VITE_ROOT: viteDevServer.config.root, + __VITE_RUNTIME_EXECUTE_URL: workerEntryFile, + __VITE_FETCH_MODULE_PATHNAME: FETCH_MODULE_PATHNAME, + __VITE_HMR_URL: getHmrUrl(viteDevServer), + __VITE_WARMUP_PATHNAME: WARMUP_PATHNAME, + } satisfies Omit, + unsafeEvalBinding: '__VITE_UNSAFE_EVAL', + wrappedBindings: { + __VITE_SETUP_ENV: 'setup-environment', + }, + }, + { + name: 'setup-environment', + modules: true, + scriptPath, + script: ` + const setupScripts = [${setupScripts ?? ''}]; + export default (env) => (request) => { + const viteUrl = new URL(request.url).origin; + setupScripts.forEach((setup) => setup?.(viteUrl)); + setupScripts.length = 0; + }`, + }, + ], + }); + + const warmupWorkerdCache = () => { + let viteUrl = + viteDevServer.resolvedUrls?.local[0] ?? + viteDevServer.resolvedUrls?.network[0]; + + if (!viteUrl) { + const address = viteDevServer.httpServer?.address?.(); + viteUrl = + address && typeof address !== 'string' + ? `http://localhost:${address.port}` + : address ?? undefined; + } + + if (viteUrl) { + mf.dispatchFetch(new URL(WARMUP_PATHNAME, viteUrl)).catch(() => {}); + } + }; + + viteDevServer.httpServer?.listening + ? warmupWorkerdCache() + : viteDevServer.httpServer?.once('listening', warmupWorkerdCache); + + mf.ready.then(() => { + const reconnect = createInspectorConnector({ + debug, + sourceMapPath: '', + absoluteBundlePath: '', + privateInspectorPort, + publicInspectorPort, + }); + + return reconnect(); + }); + + return { + ready: mf.ready, + publicInspectorPort, + dispatch: (webRequest: Request) => mf.dispatchFetch(webRequest), + async dispose() { + await mf.dispose(); + }, + }; +} + +export function setupOxygenMiddleware( + viteDevServer: ViteDevServer, + dispatchFetch: (webRequest: Request) => Promise, +) { + viteDevServer.middlewares.use( + FETCH_MODULE_PATHNAME, + function o2HandleModuleFetch(req, res) { + // This request comes from workerd. It is asking for the contents + // of backend files. We need to fetch the file through Vite, + // which transpiles/prepares the source code into valid JS, and + // send it back so that workerd can evaluate/run it. + + const url = toURL(req); + const id = url.searchParams.get('id'); + const importer = url.searchParams.get('importer') ?? undefined; + + if (id) { + res.setHeader('cache-control', 'no-store'); + res.setHeader('content-type', 'application/json'); + + // `fetchModule` is similar to `viteDevServer.ssrFetchModule`, + // but it treats source maps differently (avoids adding empty lines). + fetchModule(viteDevServer, id, importer) + .then((ssrModule) => res.end(JSON.stringify(ssrModule))) + .catch((error) => { + console.error('Error during module fetch:', error); + res.writeHead(500, {'Content-Type': 'text/plain'}); + res.end('Internal server error'); + }); + } else { + res.statusCode = 400; + res.writeHead(400, {'Content-Type': 'text/plain'}); + res.end('Invalid request'); + } + }, + ); + + viteDevServer.middlewares.use(function o2HandleWorkerRequest(req, res) { + // This request comes from the browser. At this point, Vite + // tried to serve the request as a static file, but it didn't + // find it in the project. Therefore, we assume this is a + // request for a backend route, and we forward it to workerd. + + if (!req.headers.host) throw new Error('Missing host header'); + + const webRequest = toWeb(req, { + 'request-id': crypto.randomUUID(), + ...oxygenHeadersMap, + }); + + const startTimeMs = Date.now(); + + dispatchFetch(webRequest) + .then((webResponse) => { + pipeFromWeb(webResponse, res); + + logRequestLine(webRequest, { + responseStatus: webResponse.status, + durationMs: Date.now() - startTimeMs, + }); + }) + .catch((error) => { + console.error('Error during evaluation:', error); + res.writeHead(500); + res.end(); + }); + }); +} diff --git a/packages/cli/src/lib/vite/plugins.ts b/packages/cli/src/lib/vite/plugins.ts new file mode 100644 index 0000000000..223c96ff72 --- /dev/null +++ b/packages/cli/src/lib/vite/plugins.ts @@ -0,0 +1,187 @@ +import path from 'node:path'; +import type {Plugin, ResolvedConfig} from 'vite'; +import { + setupHydrogenMiddleware, + setupRemixDevServerHooks, +} from './hydrogen-middleware.js'; +import { + setupOxygenMiddleware, + startMiniOxygenRuntime, + type MiniOxygen, +} from './mini-oxygen.js'; +import { + getH2OPluginContext, + setH2OPluginContext, + DEFAULT_SSR_ENTRY, + type OxygenPluginOptions, + type HydrogenPluginOptions, +} from './shared.js'; +import {H2O_BINDING_NAME, createLogRequestEvent} from '../request-events.js'; + +/** + * Enables Hydrogen utilities for local development + * such as GraphiQL, Subrequest Profiler, etc. + * It must be used in combination with the `oxygen` plugin and Hydrogen CLI. + * @experimental + */ +export function hydrogen(pluginOptions: HydrogenPluginOptions = {}): Plugin[] { + const isRemixChildCompiler = (config: ResolvedConfig) => + !config.plugins?.some((plugin) => plugin.name === 'remix'); + + return [ + { + name: 'hydrogen:main', + config(config) { + return { + ssr: { + optimizeDeps: { + // Add CJS dependencies that break code in workerd + // with errors like "require/module/exports is not defined": + include: [ + // React deps: + 'react', + 'react/jsx-runtime', + 'react/jsx-dev-runtime', + 'react-dom', + 'react-dom/server', + // Remix deps: + 'set-cookie-parser', + 'cookie', + // Hydrogen deps: + 'content-security-policy-builder', + ], + }, + }, + // Pass the setup functions to the Oxygen runtime. + ...setH2OPluginContext({ + setupScripts: [setupRemixDevServerHooks], + shouldStartRuntime: (config) => !isRemixChildCompiler(config), + services: { + [H2O_BINDING_NAME]: createLogRequestEvent({ + transformLocation: (partialLocation) => + path.join(config.root ?? process.cwd(), partialLocation), + }), + }, + }), + }; + }, + configureServer(viteDevServer) { + if (isRemixChildCompiler(viteDevServer.config)) return; + + // Get options from Hydrogen CLI. + const {cliOptions} = getH2OPluginContext(viteDevServer.config) || {}; + + return () => { + setupHydrogenMiddleware(viteDevServer, { + ...pluginOptions, + ...cliOptions, + }); + }; + }, + }, + ]; +} + +/** + * Runs backend code in an Oxygen worker instead of Node.js during development. + * It must be placed after `hydrogen` but before `remix` in the Vite plugins list. + * @experimental + */ +export function oxygen(pluginOptions: OxygenPluginOptions = {}): Plugin[] { + let resolvedConfig: ResolvedConfig; + let absoluteWorkerEntryFile: string; + + return [ + { + name: 'oxygen:runtime', + config(config, env) { + return { + appType: 'custom', + resolve: { + conditions: ['worker', 'workerd'], + }, + ssr: { + noExternal: true, + target: 'webworker', + }, + // When building, the CLI will set the `ssr` option to `true` + // if no --entry flag is passed for the default SSR entry file. + // Replace it here with a default value. + ...(env.isSsrBuild && + config.build?.ssr && { + build: { + ssr: + config.build?.ssr === true + ? // No --entry flag passed by the user, use the + // option passed to the plugin or the default value + pluginOptions.ssrEntry ?? DEFAULT_SSR_ENTRY + : // --entry flag passed by the user, keep it + config.build?.ssr, + }, + }), + }; + }, + configureServer(viteDevServer) { + resolvedConfig = viteDevServer.config; + + // Get options from Hydrogen plugin and CLI. + const {shouldStartRuntime, cliOptions, setupScripts, services} = + getH2OPluginContext(resolvedConfig) || {}; + + if (shouldStartRuntime && !shouldStartRuntime(resolvedConfig)) return; + + const workerEntryFile = + cliOptions?.ssrEntry ?? pluginOptions.ssrEntry ?? DEFAULT_SSR_ENTRY; + absoluteWorkerEntryFile = path.isAbsolute(workerEntryFile) + ? workerEntryFile + : path.resolve(viteDevServer.config.root, workerEntryFile); + + const envPromise = cliOptions?.envPromise ?? Promise.resolve(); + + let miniOxygen: MiniOxygen; + const miniOxygenPromise = envPromise.then((remoteEnv) => { + return startMiniOxygenRuntime({ + viteDevServer, + workerEntryFile, + setupScripts, + services, + env: {...remoteEnv, ...pluginOptions.env}, + debug: cliOptions?.debug ?? pluginOptions.debug ?? false, + inspectorPort: + cliOptions?.inspectorPort ?? pluginOptions.inspectorPort ?? 9229, + }); + }); + + process.once('SIGTERM', async () => { + try { + await miniOxygen?.dispose(); + } finally { + process.exit(); + } + }); + + return () => { + setupOxygenMiddleware(viteDevServer, async (request) => { + miniOxygen ??= await miniOxygenPromise; + return miniOxygen.dispatch(request); + }); + }; + }, + transform(code, id, options) { + if ( + resolvedConfig?.command === 'serve' && + resolvedConfig?.server?.hmr !== false && + options?.ssr && + (id === absoluteWorkerEntryFile || + id === absoluteWorkerEntryFile + path.extname(id)) + ) { + return { + // Accept HMR in server entry module to avoid full-page refresh in the browser. + // Note: appending code at the end should not break the source map. + code: code + '\nif (import.meta.hot) import.meta.hot.accept();', + }; + } + }, + }, + ]; +} diff --git a/packages/cli/src/lib/vite/shared.ts b/packages/cli/src/lib/vite/shared.ts new file mode 100644 index 0000000000..4a1e3c3587 --- /dev/null +++ b/packages/cli/src/lib/vite/shared.ts @@ -0,0 +1,38 @@ +// Do not import Vite in this file since it is used from +// the rest of the CLI when Vite might not be installed. +import type {ResolvedConfig, UserConfig} from 'vite'; +import type {InternalMiniOxygenOptions} from './mini-oxygen.js'; + +export type H2OPluginContext = InternalMiniOxygenOptions & { + shouldStartRuntime?: (config: ResolvedConfig) => boolean; + cliOptions?: Partial< + HydrogenPluginOptions & + OxygenPluginOptions & { + envPromise: Promise>; + } + >; +}; + +export type HydrogenPluginOptions = { + disableVirtualRoutes?: boolean; +}; + +export type OxygenPluginOptions = { + ssrEntry?: string; + debug?: boolean; + inspectorPort?: number; + env?: Record; +}; + +// Note: Vite resolves extensions like .js or .ts automatically. +export const DEFAULT_SSR_ENTRY = './server'; + +const H2O_CONTEXT_KEY = '__h2oPluginContext'; + +export function getH2OPluginContext(config: UserConfig | ResolvedConfig) { + return (config as any)?.[H2O_CONTEXT_KEY] as H2OPluginContext; +} + +export function setH2OPluginContext(options: Partial) { + return {[H2O_CONTEXT_KEY]: options} as Record; +} diff --git a/packages/cli/src/lib/vite/utils.ts b/packages/cli/src/lib/vite/utils.ts new file mode 100644 index 0000000000..9a1799c102 --- /dev/null +++ b/packages/cli/src/lib/vite/utils.ts @@ -0,0 +1,78 @@ +import type {ServerResponse, IncomingMessage} from 'node:http'; +import path from 'node:path'; +import {Readable} from 'node:stream'; +import {Request, Response} from 'miniflare'; +import type {ViteDevServer} from 'vite'; + +/** + * Creates a fully qualified URL from a Node request or a string. + * In the case of a Node request, it uses the host header to determine the origin. + */ +export function toURL(req: string | IncomingMessage = '/', origin?: string) { + const isRequest = typeof req !== 'string'; + const pathname = (isRequest ? req.url : req) || '/'; + + return new URL( + pathname, + origin || + (isRequest && req.headers.host && `http://${req.headers.host}`) || + 'http://example.com', + ); +} + +/** + * Turns a Node request into a Web request by using native Node APIs. + */ +export function toWeb(req: IncomingMessage, headers?: Record) { + return new Request(toURL(req), { + method: req.method, + headers: {...headers, ...(req.headers as object)}, + body: req.headers['content-length'] ? Readable.toWeb(req) : undefined, + duplex: 'half', // This is required when sending a ReadableStream as body + redirect: 'manual', // Avoid consuming 300 responses here, return to browser + }); +} + +/** + * Reads from a Web response and writes to a Node response + * using native Node APIs. + */ +export function pipeFromWeb(webResponse: Response, res: ServerResponse) { + const headers = Object.fromEntries(webResponse.headers.entries()); + + const setCookieHeader = 'set-cookie'; + if (headers[setCookieHeader]) { + delete headers[setCookieHeader]; + res.setHeader(setCookieHeader, webResponse.headers.getSetCookie()); + } + + res.writeHead(webResponse.status, webResponse.statusText, headers); + + if (webResponse.body) { + Readable.fromWeb(webResponse.body).pipe(res); + } else { + res.end(); + } +} + +export function getHmrUrl(viteDevServer: ViteDevServer) { + const userHmrValue = viteDevServer.config.server?.hmr; + + if (userHmrValue === false) { + console.warn( + 'HMR is disabled. Code changes will not be reflected in neither browser or server.', + ); + + return ''; + } + + const configHmr = typeof userHmrValue === 'object' ? userHmrValue : {}; + + const hmrPort = configHmr.port; + const hmrPath = configHmr.path; + + let hmrBase = viteDevServer.config.base; + if (hmrPath) hmrBase = path.posix.join(hmrBase, hmrPath); + + return (hmrPort ? `http://localhost:${hmrPort}` : '') + hmrBase; +} diff --git a/packages/cli/src/lib/vite/worker-entry.ts b/packages/cli/src/lib/vite/worker-entry.ts new file mode 100644 index 0000000000..b4281480dc --- /dev/null +++ b/packages/cli/src/lib/vite/worker-entry.ts @@ -0,0 +1,198 @@ +/** + * All the code in this file is executed in workerd. This file + * is compiled at build time (tsup) to be transpiled to JS, and + * then loaded as string in a workerd instance at runtime as + * the worker entrypoint. It then requests modules to Vite + * and evaluates them to run the app's backend code. + */ + +import { + ViteRuntime, + ssrModuleExportsKey, + type ViteRuntimeModuleContext, +} from 'vite/runtime'; +import type {HMRPayload} from 'vite'; +import type {Response} from 'miniflare'; + +export interface ViteEnv { + __VITE_ROOT: string; + __VITE_HMR_URL: string; + __VITE_FETCH_MODULE_PATHNAME: string; + __VITE_RUNTIME_EXECUTE_URL: string; + __VITE_WARMUP_PATHNAME: string; + __VITE_SETUP_ENV: (request: Request) => void; + // Ref: https://github.com/cloudflare/workerd/blob/main/src/workerd/api/unsafe.h + __VITE_UNSAFE_EVAL: { + eval(code: string, name?: string): Function; + newFunction(code: string, name?: string, ...args: string[]): Function; + newAsyncFunction(code: string, name?: string, ...args: string[]): Function; + }; +} + +const O2_PREFIX = '[o2:runtime]'; + +export default { + /** + * Worker entry module that wraps the user app's entry module. + */ + async fetch(request: Request, env: ViteEnv, ctx: any) { + env.__VITE_SETUP_ENV(request); + const url = new URL(request.url); + + // Fetch the app's entry module and cache it. E.g. `/server.ts` + const module = await fetchEntryModule(url, env); + + // Return early for warmup requests after loading the entry module. + if (url.pathname === env.__VITE_WARMUP_PATHNAME) { + return new globalThis.Response(null); + } + + // Execute the user app's entry module. + return module.default.fetch(request, createUserEnv(env), ctx); + }, +}; + +/** + * Clean up variables that are only used for dev orchestration. + */ +function createUserEnv(env: ViteEnv) { + return Object.fromEntries( + Object.entries(env).filter(([key]) => !key.startsWith('__VITE_')), + ); +} + +/** + * The Vite runtime instance. It's a singleton because it's shared + * across all the requests to workerd and it's stateful (module cache). + */ +let runtime: ViteRuntime; + +/** + * Setup the whole Vite runtime and HMR the first time this function is called. + * Note: we can use the `env` object that comes from the first request even + * for subsequent requests, so there's no need to refresh the pointer. + * @returns The app's entry module. + */ +function fetchEntryModule(publicUrl: URL, env: ViteEnv) { + if (!runtime) { + let onHmrRecieve: ((payload: HMRPayload) => void) | undefined; + + let hmrReady = false; + connectHmrWsClient(publicUrl, env) + .then((hmrWs) => { + hmrReady = !!hmrWs; + hmrWs?.addEventListener('message', (message) => { + if (onHmrRecieve) { + let data: HMRPayload = JSON.parse(message.data?.toString()); + + if (data?.type === 'update') { + // TODO: handle partial updates + data = {type: 'full-reload', path: '*'}; + } + + onHmrRecieve(data); + } + }); + }) + .catch((error) => console.error(error)); + + runtime = new ViteRuntime( + { + root: env.__VITE_ROOT, + sourcemapInterceptor: 'prepareStackTrace', + fetchModule: (id, importer) => { + // Do not use WS here because the payload can exceed the limit + // of WS in workerd. Instead, use fetch to get the module: + const url = new URL(env.__VITE_FETCH_MODULE_PATHNAME, publicUrl); + url.searchParams.set('id', id); + if (importer) url.searchParams.set('importer', importer); + + return fetch(url).then((res) => res.json()); + }, + hmr: { + connection: { + isReady: () => hmrReady, + send: () => {}, + onUpdate(receiver) { + onHmrRecieve = receiver; + return () => { + onHmrRecieve = undefined; + }; + }, + }, + }, + }, + { + runExternalModule(filepath: string): Promise { + // Might need to implement this in the future if we enable `nodejs_compat` flag, + // or add custom Oxygen runtime modules (e.g. `import kv from 'oxygen:kv';`). + throw new Error( + `${O2_PREFIX} External modules are not supported: "${filepath}"`, + ); + }, + + async runViteModule( + context: ViteRuntimeModuleContext, + code: string, + id: string, + ): Promise { + if (!env.__VITE_UNSAFE_EVAL) { + throw new Error(`${O2_PREFIX} unsafeEval module is not set`); + } + + // We can't use `newAsyncFunction` here because it uses the `id` + // as the function name AND for sourcemaps. The `id` contains + // symbols like `@`, `/` or `.` to make the sourcemaps work, but + // these symbols are not allowed in function names. Therefore, + // use `eval` instead with an anonymous function: + const initModule = env.__VITE_UNSAFE_EVAL.eval( + // 'use strict' is implied in ESM so we enable it here. Also, we + // add an extra block scope (`{}`) to allow redeclaring variables + // with the same name as the parameters. + `'use strict';async (${Object.keys(context).join( + ',', + )})=>{{${code}\n}}`, + id, + ); + + await initModule(...Object.values(context)); + + Object.freeze(context[ssrModuleExportsKey]); + }, + }, + ); + } + + return runtime.executeEntrypoint(env.__VITE_RUNTIME_EXECUTE_URL) as Promise<{ + default: {fetch: ExportedHandlerFetchHandler}; + }>; +} + +/** + * Establish a WebSocket connection to the HMR server. + * Note: HMR in the server is just for invalidating modules + * in workerd/ViteRuntime cache, not to refresh the browser. + */ +function connectHmrWsClient(url: URL, env: ViteEnv) { + // The HMR URL might come without origin, which means it's relative + // to the main Vite HTTP server. Otherwise, it's an absolute URL. + const hmrUrl = env.__VITE_HMR_URL.startsWith('http://') + ? env.__VITE_HMR_URL + : new URL(env.__VITE_HMR_URL, url.origin); + + return fetch(hmrUrl, { + // When the HTTP port and the HMR port are the same, Vite reuses the same server for both. + // This happens when not specifying the HMR port in the Vite config. Otherwise, Vite creates + // a new server for HMR. In the first case, the protocol header is required to specify + // that the connection to the main HTTP server via WS is for HMR. + // Ref: https://github.com/vitejs/vite/blob/7440191715b07a50992fcf8c90d07600dffc375e/packages/vite/src/node/server/ws.ts#L120-L127 + headers: {Upgrade: 'websocket', 'sec-websocket-protocol': 'vite-hmr'}, + }).then((response: unknown) => { + const ws = (response as Response).webSocket; + + if (!ws) throw new Error(`${O2_PREFIX} Failed to connect to HMR server`); + + ws.accept(); + return ws; + }); +} diff --git a/packages/cli/src/virtual-routes/components/RequestWaterfall.tsx b/packages/cli/src/virtual-routes/components/RequestWaterfall.tsx index 8877f2f40f..360d89e16d 100644 --- a/packages/cli/src/virtual-routes/components/RequestWaterfall.tsx +++ b/packages/cli/src/virtual-routes/components/RequestWaterfall.tsx @@ -8,6 +8,10 @@ import { type ServerEvents, } from '../lib/useDebugNetworkServer.jsx'; +declare global { + var setActiveEventId: (eventId: string) => void; +} + export type RequestWaterfallConfig = { colors: { server: string; diff --git a/packages/cli/src/virtual-routes/lib/useDebugNetworkServer.tsx b/packages/cli/src/virtual-routes/lib/useDebugNetworkServer.tsx index 42788a931f..cdbc7e12f7 100644 --- a/packages/cli/src/virtual-routes/lib/useDebugNetworkServer.tsx +++ b/packages/cli/src/virtual-routes/lib/useDebugNetworkServer.tsx @@ -32,6 +32,7 @@ export type ServerEvents = { let nextEventId = 0; +export const SUBREQUEST_PROFILER_ENDPOINT = '/debug-network-server'; const LOCAL_STORAGE_SETTINGS_KEY = 'h2-debug-network-settings'; type DebugNetworkSettings = Pick< ServerEvents, @@ -89,7 +90,7 @@ export function useDebugNetworkServer() { }, []); function clearServerEvents() { - fetch('/debug-network-server', {method: 'DELETE'}).catch((error) => + fetch(SUBREQUEST_PROFILER_ENDPOINT, {method: 'DELETE'}).catch((error) => console.error('Could not clear history:', error), ); @@ -117,7 +118,7 @@ export function useDebugNetworkServer() { } useEffect(() => { - const evtSource = new EventSource('/debug-network-server', { + const evtSource = new EventSource(SUBREQUEST_PROFILER_ENDPOINT, { withCredentials: true, }); diff --git a/packages/cli/src/virtual-routes/routes/subrequest-profiler.tsx b/packages/cli/src/virtual-routes/routes/subrequest-profiler.tsx index 822ac82b81..279c3bee80 100644 --- a/packages/cli/src/virtual-routes/routes/subrequest-profiler.tsx +++ b/packages/cli/src/virtual-routes/routes/subrequest-profiler.tsx @@ -9,12 +9,14 @@ import {Link} from '@remix-run/react'; import favicon from '../assets/favicon.svg'; import faviconDark from '../assets/favicon-dark.svg'; -import styles from '../assets/debug-network.css'; import {useDebugNetworkServer} from '../lib/useDebugNetworkServer.jsx'; import {RequestDetails} from '../components/RequestDetails.jsx'; import {IconClose} from '../components/IconClose.jsx'; import {IconDiscard} from '../components/IconDiscard.jsx'; +// @ts-expect-error +import styles from '../assets/debug-network.css?url'; + export const links: LinksFunction = () => { return [ { diff --git a/packages/cli/src/virtual-routes/virtual-root.tsx b/packages/cli/src/virtual-routes/virtual-root.tsx index a703c5e30b..c128bff3d5 100644 --- a/packages/cli/src/virtual-routes/virtual-root.tsx +++ b/packages/cli/src/virtual-routes/virtual-root.tsx @@ -11,11 +11,13 @@ import { isRouteErrorResponse, useRouteError, } from '@remix-run/react'; -import styles from './assets/styles.css'; import favicon from './assets/favicon.svg'; import {Layout} from './components/Layout.jsx'; import {useNonce} from '@shopify/hydrogen'; +// @ts-expect-error +import styles from './assets/styles.css?url'; + export const links: LinksFunction = () => { return [ {rel: 'stylesheet', href: styles}, diff --git a/packages/cli/tsup.config.ts b/packages/cli/tsup.config.ts index 98c62bfc85..7106e8d7a9 100644 --- a/packages/cli/tsup.config.ts +++ b/packages/cli/tsup.config.ts @@ -21,10 +21,6 @@ const commonConfig = defineConfig({ sourcemap: false, publicDir: 'templates', clean: false, // Avoid deleting the assets folder - // Weird bug: - // When `dts: true`, Tsup will remove all the d.ts files copied to `dist` - // during `onSuccess` callbacks, thus removing part of the starter templates. - dts: false, }); const outDir = 'dist'; @@ -32,8 +28,10 @@ const outDir = 'dist'; export default defineConfig([ { ...commonConfig, - entry: ['src/**/*.ts'], + entry: ['src/**/*.ts', '!src/lib/vite/worker-entry.ts'], outDir, + // Generate types only for the exposed entry points + dts: {entry: ['src/lib/vite/plugins.ts', 'src/commands/hydrogen/init.ts']}, async onSuccess() { // Copy TS templates const i18nTemplatesPath = 'lib/setups/i18n/templates'; @@ -64,11 +62,19 @@ export default defineConfig([ console.log('', 'Oclif manifest generated.\n'); }, }, + { + entry: ['src/lib/vite/worker-entry.ts'], + outDir: 'dist/lib/vite', + format: 'esm', + noExternal: [/./], + dts: false, + }, { ...commonConfig, entry: ['src/virtual-routes/**/*.tsx'], outDir: `${outDir}/virtual-routes`, outExtension: () => ({js: '.jsx'}), + dts: false, async onSuccess() { const filterArtifacts = (filepath: string) => !/node_modules|\.shopify|\.cache|\.turbo|build|dist/gi.test(filepath); diff --git a/packages/create-hydrogen/src/create-app.ts b/packages/create-hydrogen/src/create-app.ts index 3932d806a1..c7246dbb1e 100755 --- a/packages/create-hydrogen/src/create-app.ts +++ b/packages/create-hydrogen/src/create-app.ts @@ -1,6 +1,5 @@ #!/usr/bin/env node -// @ts-expect-error CLI has no types import {runInit} from '@shopify/cli-hydrogen/commands/hydrogen/init'; runInit(); diff --git a/packages/hydrogen-react/package.json b/packages/hydrogen-react/package.json index d8ddd92d8c..5ce3c09aba 100644 --- a/packages/hydrogen-react/package.json +++ b/packages/hydrogen-react/package.json @@ -163,7 +163,7 @@ "rimraf": "^4.1.2", "ts-expect": "^1.3.0", "typescript": "^5.2.2", - "vite": "^5.0.12", + "vite": "^5.1.0", "vitest": "^1.0.4" }, "peerDependencies": {