From 4da28fa857d1e5538eb5bbe28ecc4bf9dba1ce7d Mon Sep 17 00:00:00 2001 From: Tom Milewski Date: Fri, 22 Nov 2024 11:40:26 -0500 Subject: [PATCH] feat(chrome-extension): Handle manifest permissions in a more-deterministic fashion (#4133) --- .changeset/afraid-toes-sin.md | 6 + .changeset/tidy-garlics-boil.md | 5 + .changeset/wise-spiders-play.md | 48 + packages/chrome-extension/README.md | 142 +- .../chrome-extension/docs/clerk-provider.md | 114 + packages/chrome-extension/docs/manifest.md | 53 + .../chrome-extension/docs/service-worker.md | 27 + .../chrome-extension/src/background/clerk.ts | 21 +- .../chrome-extension/src/background/index.ts | 2 +- .../chrome-extension/src/internal/clerk.ts | 102 +- .../src/internal/constants.ts | 12 +- .../internal/utils/__tests__/cookies.test.ts | 67 +- .../internal/utils/__tests__/manifest.test.ts | 75 +- .../src/internal/utils/cookies.ts | 31 +- .../src/internal/utils/errors.ts | 2 - .../src/internal/utils/manifest.ts | 67 +- .../src/internal/utils/request-handler.ts | 39 + .../src/internal/utils/response-handler.ts | 47 + .../src/react/ClerkProvider.tsx | 12 +- packages/chrome-extension/src/types.ts | 2 +- packages/chrome-extension/tsup.config.ts | 7 +- packages/clerk-js/no-rhc/index.d.ts | 3 + packages/clerk-js/no-rhc/index.js | 1 + packages/clerk-js/package.json | 3 +- packages/clerk-js/rspack.config.js | 65 +- packages/clerk-js/src/core/clerk.ts | 60 +- packages/clerk-js/src/core/errors.ts | 14 +- .../clerk-js/src/core/resources/SignIn.ts | 16 + .../clerk-js/src/core/resources/SignUp.ts | 74 +- packages/clerk-js/src/globals.d.ts | 1 + .../components/GoogleOneTap/one-tap-start.tsx | 8 + .../src/utils/captcha/getCaptchaToken.ts | 8 +- packages/clerk-js/src/utils/index.ts | 11 +- packages/react/src/globals.d.ts | 1 + packages/react/src/isomorphicClerk.ts | 6 +- .../browser-extension/.env.chrome.example | 1 + .../.env.development.example | 2 + playground/browser-extension/.gitignore | 5 + playground/browser-extension/README.md | 68 + playground/browser-extension/assets/icon.png | Bin 0 -> 14295 bytes playground/browser-extension/package.json | 48 + playground/browser-extension/pnpm-lock.yaml | 7170 +++++++++++++++++ .../browser-extension/postcss.config.js | 8 + .../browser-extension/src/background/index.ts | 34 + playground/browser-extension/src/content.tsx | 24 + .../src/features/count-button.tsx | 19 + .../browser-extension/src/popup/index.tsx | 31 + .../src/popup/layouts/root-layout.tsx | 47 + .../src/popup/routes/index.tsx | 7 + .../src/popup/routes/sdk-features.tsx | 16 + .../src/popup/routes/settings.tsx | 10 + .../src/popup/routes/sign-in.tsx | 10 + .../src/popup/routes/sign-up.tsx | 10 + playground/browser-extension/src/style.css | 5 + .../src/tabs/background-worker-demo.html | 12 + .../src/tabs/background-worker-demo.tsx | 37 + .../browser-extension/tailwind.config.js | 6 + playground/browser-extension/tsconfig.json | 20 + playground/chrome-extension/.env.example | 1 - playground/chrome-extension/.gitignore | 14 - playground/chrome-extension/README.md | 66 - playground/chrome-extension/demo.png | Bin 180543 -> 0 bytes .../manifest.dev.json.example | 10 - .../chrome-extension/manifest.json.example | 26 - playground/chrome-extension/nodemon.json | 14 - playground/chrome-extension/package.json | 39 - .../chrome-extension/public/dev-icon-128.png | Bin 16876 -> 0 bytes .../chrome-extension/public/dev-icon-32.png | Bin 2529 -> 0 bytes .../chrome-extension/public/icon-128.png | Bin 19200 -> 0 bytes .../chrome-extension/public/icon-32.png | Bin 2613 -> 0 bytes .../src/assets/styles/index.css | 134 - playground/chrome-extension/src/background.ts | 25 - .../src/components/CurrentUser.tsx | 36 - .../src/components/SharedApp.tsx | 130 - playground/chrome-extension/src/global.d.ts | 11 - .../src/pages/background/index.ts | 1 - .../src/pages/content/index.tsx | 1 - .../src/pages/devtools/index.html | 10 - .../src/pages/devtools/index.ts | 6 - .../src/pages/new-tab/index.html | 12 - .../src/pages/new-tab/index.tsx | 11 - .../src/pages/new-tab/new-tab.tsx | 12 - .../src/pages/options/Options.tsx | 12 - .../src/pages/options/index.html | 12 - .../src/pages/options/index.tsx | 11 - .../src/pages/panel/Panel.tsx | 12 - .../src/pages/panel/index.html | 12 - .../src/pages/panel/index.tsx | 11 - .../src/pages/popup/Popup.tsx | 12 - .../src/pages/popup/index.html | 12 - .../src/pages/popup/index.tsx | 11 - playground/chrome-extension/src/vite-env.d.ts | 1 - playground/chrome-extension/tsconfig.json | 24 - playground/chrome-extension/vite.config.ts | 50 - turbo.json | 1 + 95 files changed, 8284 insertions(+), 1198 deletions(-) create mode 100644 .changeset/afraid-toes-sin.md create mode 100644 .changeset/tidy-garlics-boil.md create mode 100644 .changeset/wise-spiders-play.md create mode 100644 packages/chrome-extension/docs/clerk-provider.md create mode 100644 packages/chrome-extension/docs/manifest.md create mode 100644 packages/chrome-extension/docs/service-worker.md create mode 100644 packages/chrome-extension/src/internal/utils/request-handler.ts create mode 100644 packages/chrome-extension/src/internal/utils/response-handler.ts create mode 100644 packages/clerk-js/no-rhc/index.d.ts create mode 100644 packages/clerk-js/no-rhc/index.js create mode 100644 playground/browser-extension/.env.chrome.example create mode 100644 playground/browser-extension/.env.development.example create mode 100644 playground/browser-extension/.gitignore create mode 100644 playground/browser-extension/README.md create mode 100644 playground/browser-extension/assets/icon.png create mode 100644 playground/browser-extension/package.json create mode 100644 playground/browser-extension/pnpm-lock.yaml create mode 100644 playground/browser-extension/postcss.config.js create mode 100644 playground/browser-extension/src/background/index.ts create mode 100644 playground/browser-extension/src/content.tsx create mode 100644 playground/browser-extension/src/features/count-button.tsx create mode 100644 playground/browser-extension/src/popup/index.tsx create mode 100644 playground/browser-extension/src/popup/layouts/root-layout.tsx create mode 100644 playground/browser-extension/src/popup/routes/index.tsx create mode 100644 playground/browser-extension/src/popup/routes/sdk-features.tsx create mode 100644 playground/browser-extension/src/popup/routes/settings.tsx create mode 100644 playground/browser-extension/src/popup/routes/sign-in.tsx create mode 100644 playground/browser-extension/src/popup/routes/sign-up.tsx create mode 100644 playground/browser-extension/src/style.css create mode 100644 playground/browser-extension/src/tabs/background-worker-demo.html create mode 100644 playground/browser-extension/src/tabs/background-worker-demo.tsx create mode 100644 playground/browser-extension/tailwind.config.js create mode 100644 playground/browser-extension/tsconfig.json delete mode 100644 playground/chrome-extension/.env.example delete mode 100644 playground/chrome-extension/.gitignore delete mode 100644 playground/chrome-extension/README.md delete mode 100644 playground/chrome-extension/demo.png delete mode 100644 playground/chrome-extension/manifest.dev.json.example delete mode 100644 playground/chrome-extension/manifest.json.example delete mode 100644 playground/chrome-extension/nodemon.json delete mode 100644 playground/chrome-extension/package.json delete mode 100644 playground/chrome-extension/public/dev-icon-128.png delete mode 100644 playground/chrome-extension/public/dev-icon-32.png delete mode 100644 playground/chrome-extension/public/icon-128.png delete mode 100644 playground/chrome-extension/public/icon-32.png delete mode 100644 playground/chrome-extension/src/assets/styles/index.css delete mode 100644 playground/chrome-extension/src/background.ts delete mode 100644 playground/chrome-extension/src/components/CurrentUser.tsx delete mode 100644 playground/chrome-extension/src/components/SharedApp.tsx delete mode 100644 playground/chrome-extension/src/global.d.ts delete mode 100644 playground/chrome-extension/src/pages/background/index.ts delete mode 100644 playground/chrome-extension/src/pages/content/index.tsx delete mode 100644 playground/chrome-extension/src/pages/devtools/index.html delete mode 100644 playground/chrome-extension/src/pages/devtools/index.ts delete mode 100644 playground/chrome-extension/src/pages/new-tab/index.html delete mode 100644 playground/chrome-extension/src/pages/new-tab/index.tsx delete mode 100644 playground/chrome-extension/src/pages/new-tab/new-tab.tsx delete mode 100644 playground/chrome-extension/src/pages/options/Options.tsx delete mode 100644 playground/chrome-extension/src/pages/options/index.html delete mode 100644 playground/chrome-extension/src/pages/options/index.tsx delete mode 100644 playground/chrome-extension/src/pages/panel/Panel.tsx delete mode 100644 playground/chrome-extension/src/pages/panel/index.html delete mode 100644 playground/chrome-extension/src/pages/panel/index.tsx delete mode 100644 playground/chrome-extension/src/pages/popup/Popup.tsx delete mode 100644 playground/chrome-extension/src/pages/popup/index.html delete mode 100644 playground/chrome-extension/src/pages/popup/index.tsx delete mode 100644 playground/chrome-extension/src/vite-env.d.ts delete mode 100644 playground/chrome-extension/tsconfig.json delete mode 100644 playground/chrome-extension/vite.config.ts diff --git a/.changeset/afraid-toes-sin.md b/.changeset/afraid-toes-sin.md new file mode 100644 index 0000000000..20fe12183a --- /dev/null +++ b/.changeset/afraid-toes-sin.md @@ -0,0 +1,6 @@ +--- +'@clerk/clerk-js': patch +'@clerk/clerk-react': patch +--- + +Include **BUILD_DISABLE_RHC** to allow for builds which remove remotely hosted code as it is a requirement for browser extensions. diff --git a/.changeset/tidy-garlics-boil.md b/.changeset/tidy-garlics-boil.md new file mode 100644 index 0000000000..b885d2e860 --- /dev/null +++ b/.changeset/tidy-garlics-boil.md @@ -0,0 +1,5 @@ +--- +'@clerk/chrome-extension': major +--- + +Consume packages with remotely hosted code removed as required by Manifest v3. diff --git a/.changeset/wise-spiders-play.md b/.changeset/wise-spiders-play.md new file mode 100644 index 0000000000..5bef3e6c0f --- /dev/null +++ b/.changeset/wise-spiders-play.md @@ -0,0 +1,48 @@ +--- +'@clerk/chrome-extension': major +--- + +#### Permission Updates (BREAKING) + +The `storage` entry in `host_permissions` is now required for all extensions. +While it's likely that this is already enabled in your extension, this change is to ensure that Clerk can store the necessary data for the extension to function properly. + +**How to Update:** Add the following to your `manifest.json` file: + +```json +{ + "host_permissions": ["storage"] +} +``` + +#### Introducing `syncHost` (BREAKING) + +In an effort to make the handling of sync hosts more deterministic, we have introduced a new parameter `syncHost` to `` + +**How to Update:** Replace `syncSessionWithTab` with `syncHost` in the `` component and set `syncHost` to the host that you intend to synchronize with. + +#### Service Workers `createClerkClient` + +We've introduced a new method `createClerkClient` to handle background tasks in your extension! + +```ts +import { createClerkClient } from '@clerk/chrome-extension/background'; + +// Create a new Clerk instance and get a fresh token for the user +async function getToken() { + const clerk = await createClerkClient({ + publishableKey: process.env.PLASMO_PUBLIC_CLERK_PUBLISHABLE_KEY, + }); + return await clerk.session?.getToken(); +} + +// Create a listener to listen for messages from content scripts +// NOTE: A runtime listener cannot be async. +// It must return true, in order to keep the connection open and send a response later. +chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { + // You can use the token in the listener to perform actions on behalf of the user + // OR send the token back to the content script + getToken().then(token => sendResponse({ token })); + return true; +}); +``` diff --git a/packages/chrome-extension/README.md b/packages/chrome-extension/README.md index c644c68d37..d49dc92618 100644 --- a/packages/chrome-extension/README.md +++ b/packages/chrome-extension/README.md @@ -27,7 +27,7 @@ ## Getting Started -[Clerk](https://clerk.com/?utm_source=github&utm_medium=clerk_chrome_extension) is the easiest way to add authentication and user management to your Chrome Extension. Add sign up, sign in, and profile management to your application in minutes. +[Clerk](https://clerk.com/?utm_source=github&utm_medium=clerk_chrome_extension) is the easiest way to add authentication and user management to your Browser Extension. Add sign up, sign in, and profile management to your application in minutes. ### Prerequisites @@ -35,126 +35,48 @@ - An existing Clerk application. [Create your account for free](https://dashboard.clerk.com/sign-up?utm_source=github&utm_medium=clerk_chrome_extension). - An existing React app (using [Vite](https://crxjs.dev/vite-plugin/) for example) -### Installation - -1. Add `@clerk/chrome-extension` to your project: - - ```shell - npm install @clerk/chrome-extension - ``` - -1. Retrieve the **Publishable key** from your [Clerk dashboard](https://dashboard.clerk.com/last-active?path=api-keys) and set it as an environment variable. For example, if you used Vite: - - ```sh - VITE_CLERK_PUBLISHABLE_KEY=pk_test_xxx - ``` - -1. Add `` to your app and define the `routerPush` & `routerReplace` properties. For example, with using `react-router-dom`: - - ```tsx - // App.tsx - import { SignedIn, SignedOut, SignIn, SignUp, ClerkProvider } from '@clerk/chrome-extension'; - import { useNavigate, Routes, Route, MemoryRouter } from 'react-router-dom'; - - function HelloUser() { - return

Hello user

; - } - - const publishableKey = process.env.VITE_CLERK_PUBLISHABLE_KEY || ''; - - function ClerkProviderWithRoutes() { - const navigate = useNavigate(); - - return ( - navigate(to)} - routerReplace={to => navigate(to, { replace: true })} - > - - } - /> - - - - - - - - - } - /> - - - ); - } - - function App() { - return ( - - - - ); - } - - export default App; - ``` - -## Usage - -Example repositories: +### Feature Support -- [Standalone](https://github.com/clerk/clerk-chrome-extension-starter/tree/main): The extension is using its own authentication -- [WebSSO](https://github.com/clerk/clerk-chrome-extension-starter/tree/webapp_sso): The extensions shares authentication with a website in the same browser - -### WebSSO - -If you want to use **WebSSO** (extension shares authentication state with a website in same browser) you'll need to add the `syncSessionWithTab` prop to ``. +Please see the latest extension [authentication support matrix](https://clerk.com/docs/references/chrome-extension/overview?utm_source=github&utm_medium=clerk_chrome_extension) in the Clerk documentation for more information. -#### Extension Manifest (`manifest.json`) +### Usage -You must enable the following permissions in your `manifest.json` file: +1. **Installation:** `npm install @clerk/chrome-extension` +2. **Set a consistent extension key**: A browser extension can be identified by its unique key, in a similar way to how a website can be identified by its domain. You will need to explicitly configure your extension's key or it will change often. If the key changes, it can cause the extension to fail. See the [Configure a Consistent Key](https://clerk.com/docs/references/chrome-extension/configure-consistent-crx-id?utm_source=github&utm_medium=clerk_chrome_extension) guide for more information. +3. **Update Clerk Settings**: Once you've set up a consistent extension key, you'll need to configure your Clerk settings to allow the extension to communicate with your Clerk API. + You can do this by adding the extension key to the list of allowed origins in your Clerk settings. Setting the `allowed_origins` is **required** for both **Development** and **Production** instances. -```json -{ - "permissions": ["cookies", "storage"] -} -``` + ```bash + curl -X PATCH https://api.clerk.com/v1/instance \ + -H "Content-type: application/json" \ + -H "Authorization: Bearer " \ + -d '{"allowed_origins": ["chrome-extension://"]}' + ``` -More info on the "cookies" permission: [Google Developer Cookies Reference](https://developer.chrome.com/docs/extensions/reference/cookies/). -More info on the "storage" permission: [Google Developer Storage Reference](https://developer.chrome.com/docs/extensions/reference/storage/). +4. **Set Environment Variables:** Retrieve the **Publishable key** from your [Clerk dashboard](https://dashboard.clerk.com/last-active?path=api-keys&utm_source=github&utm_medium=clerk_chrome_extension) and set it as an environment variable. -#### Host Permissions + ```sh + # Vite + VITE_CLERK_PUBLISHABLE_KEY=pk_test_xxx + ``` -You must enable the following host permissions in your `manifest.json` file: + ```sh + # Plasmo + PLASMO_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_xxx + ``` -- **Development:** `"host_permissions": ["http://localhost"]` - - If you're using a domain other than `localhost`, you'll want replace that entry with your domain: `http://` -- **Production:** `"host_permissions": ["https:///"]` - - Your Frontend API URL can be found in [Clerk Dashboard](https://dashboard.clerk.com/last-active?path=api-keys) under the **Show API URLs** option. +5. **Update the extension manifest:** You'll need to update your extension manifest permissions to support Clerk. + 1. [**Base configuration**:](/packages/chrome-extension/docs/manifest.md#base-configuration) Use this if you plan to only use Clerk in the context of the extention. + 2. [**Session sync configuration**:](/packages/chrome-extension/docs/manifest.md#sync-host-configuration) Use this if you plan to share authentication with a website in the same browser. +6. **Add Clerk to your app:** Though not required, we generally suggest using Plasmo for browser extension development. This will enforce common standards across your extension as well as allow for easier integration with other browsers in the future. -For more info on host permissions visit [Google's developer `host_permissions` reference](https://developer.chrome.com/docs/extensions/mv3/declare_permissions/#host-permissions). + 1. [**Via `ClerkProvider`:**](/packages/chrome-extension/docs/clerk-provider.md) This is the general approach to all extensions. From here you'll be able to support extension-only authentication as well as sharing authentication with a website in the same browser. + 2. [**Via service workers**:](/packages/chrome-extension/docs/service-workers.md) If you also require the use of background service workers, this will allow you to access the Clerk client from the extension context. -#### Clerk Settings +## Example repositories -Add your Chrome extension origin to your instance's `allowed_origins` using the [Backend API](https://clerk.com/docs/reference/backend-api): - -```bash -curl -X PATCH https://api.clerk.com/v1/instance \ - -H "Authorization: Bearer sk_secret_key" \ - -H "Content-type: application/json" \ - -d '{"allowed_origins": ["chrome-extension://extension_id_goes_here"]}' -``` - -Setting the `allowed_origins` is **required** for both **Development** and **Production** instances. +- [Standalone](https://github.com/clerk/clerk-chrome-extension-starter/tree/main): The extension is using its own authentication +- [WebSSO](https://github.com/clerk/clerk-chrome-extension-starter/tree/webapp_sso): The extensions shares authentication with a website in the same browser ## Support diff --git a/packages/chrome-extension/docs/clerk-provider.md b/packages/chrome-extension/docs/clerk-provider.md new file mode 100644 index 0000000000..150922e5f1 --- /dev/null +++ b/packages/chrome-extension/docs/clerk-provider.md @@ -0,0 +1,114 @@ +# Clerk Provider Usage + +## Core App + +```tsx +// App.tsx +import { SignedIn, SignedOut, SignInButton, UserButton } from '@clerk/chrome-extension'; + +function App() { + return ( + <> +
+ + + + + + +
+
+ Please Sign In + Welcome! +
+ + ); +} + +export default App; +``` + +## Provider + +Though not required, we generally suggest using Plasmo for browser extension development. +This will enforce common standards across your extension as well as allow for easier integration with other browsers in the future. + +```tsx +// IndexPopup.tsx +import { ClerkProvider } from '@clerk/chrome-extension'; +import App from './App'; + +const PUBLISHABLE_KEY = process.env.PLASMO_PUBLIC_CLERK_PUBLISHABLE_KEY; // REQUIRED +const SYNC_HOST = process.env.PLASMO_PUBLIC_CLERK_SYNC_HOST; // OPTIONAL + +function IndexPopup() { + return ( + + + + ); +} + +export default IndexPopup; +``` + +## Routing + +You can hook into the router of your choice to handle navigation. Here's an example using `react-router-dom`: + +```tsx +import { ClerkProvider } from '@clerk/chrome-extension'; +import { useNavigate, Routes, Route, MemoryRouter } from 'react-router-dom'; +import App from './App'; + +const publishableKey = process.env.VITE_CLERK_PUBLISHABLE_KEY; + +function AppWithRouting() { + const navigate = useNavigate(); + + return ( + + } + /> + + Welcome User! + + + + + } + /> + + ); +} + +function IndexPopupWithRouting() { + const navigate = useNavigate(); + + return ( + + navigate(to)} + routerReplace={to => navigate(to, { replace: true })} + > + + + + ); +} + +export default IndexPopupWithRouting; +``` diff --git a/packages/chrome-extension/docs/manifest.md b/packages/chrome-extension/docs/manifest.md new file mode 100644 index 0000000000..88d83a94a2 --- /dev/null +++ b/packages/chrome-extension/docs/manifest.md @@ -0,0 +1,53 @@ +# Clerk Browser Extension Manifest + +## Base Configuration + +All Browser Extensions require, at minimum, the following configuration: + +### Permissions + +```json +{ + "permissions": ["storage"] +} +``` + +More info on the "storage" permission: [Google Developer Storage Reference](https://developer.chrome.com/docs/extensions/reference/storage/). + +## Sync Host Configuration + +When syncing with a host application, you must enable the following permissions: + +### Permissions + +```json +{ + "permissions": ["cookies", "storage"] +} +``` + +More info on the "cookies" permission: [Google Developer Cookies Reference](https://developer.chrome.com/docs/extensions/reference/cookies/). + +More info on the "storage" permission: [Google Developer Storage Reference](https://developer.chrome.com/docs/extensions/reference/storage/). + +### Host Permissions + +You must enable the following host permissions in your `manifest.json` file. This will allow the extension to communicate with the host application. + +```json +{ + "host_permissions": [ + "http://localhost/*" + "https:///*", + "https://YOUR_CLERK_DEVELOPMENT_FRONTEND_API.clerk.accounts.dev/*", + "https:///*" + ] +} +``` + +**Notes:** + +- Please make sure to include `/*` at the end of each `host_permission`. Feel free to later scope this down, if your usage sees fit. +- The `YOUR_PRODUCTION_APP_DOMAIN` and `YOUR_CLERK_PRODUCTION_FRONTEND_API` are only required when you're ready to go to production. + +Your Frontend API URLs can be found in [Clerk Dashboard](https://dashboard.clerk.com/last-active?path=api-keys) under the **Show API URLs** option. diff --git a/packages/chrome-extension/docs/service-worker.md b/packages/chrome-extension/docs/service-worker.md new file mode 100644 index 0000000000..34512a85b4 --- /dev/null +++ b/packages/chrome-extension/docs/service-worker.md @@ -0,0 +1,27 @@ +### Service Workers (Experimental) + +You can also use service workers in the your extension to handle background tasks. + +```ts +import { createClerkClient } from '@clerk/chrome-extension/background'; + +const PUBLISHABLE_KEY = process.env.PLASMO_PUBLIC_CLERK_PUBLISHABLE_KEY; +const SYNC_HOST = process.env.PLASMO_PUBLIC_CLERK_SYNC_HOST; // OPTIONAL + +async function getToken() { + const clerk = await createClerkClient({ + publishableKey: PUBLISHABLE_KEY, + syncHost: SYNC_HOST, // OPTIONAL: Add if you want to sync with a host, similarly to the provider above. + }); + return await clerk.session?.getToken(); +} + +// NOTE: A runtime listener cannot be async. +// It must return true, in order to keep the connection open and send a response later. +chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { + // You can use the token in the listener to perform actions on behalf of the user + // OR send the token back to the content script + getToken().then(token => sendResponse({ token })); + return true; +}); +``` diff --git a/packages/chrome-extension/src/background/clerk.ts b/packages/chrome-extension/src/background/clerk.ts index dd8c372abb..c77b472265 100644 --- a/packages/chrome-extension/src/background/clerk.ts +++ b/packages/chrome-extension/src/background/clerk.ts @@ -1,20 +1,17 @@ -import { Clerk } from '@clerk/clerk-js'; +import { Clerk } from '@clerk/clerk-js/no-rhc'; -import { createClerkClient, type CreateClerkClientOptions as _CreateClerkClientOptions } from '../internal'; +import { + createClerkClient as _createClerkClient, + type CreateClerkClientOptions as _CreateClerkClientOptions, +} from '../internal'; import { SCOPE } from '../types'; -export type CreateClerkClientOptions = Omit<_CreateClerkClientOptions, 'scope'>; - -export let clerk: Clerk; +Clerk.mountComponentRenderer = undefined; -export async function __unstable__createClerkClient(opts: CreateClerkClientOptions): Promise { - if (clerk) { - return clerk; - } +export type CreateClerkClientOptions = Omit<_CreateClerkClientOptions, 'scope'>; - Clerk.mountComponentRenderer = undefined; - clerk = await createClerkClient({ ...opts, scope: SCOPE.background }); +export async function createClerkClient(opts: CreateClerkClientOptions): Promise { + const clerk = await _createClerkClient({ ...opts, scope: SCOPE.BACKGROUND }); await clerk.load({ standardBrowser: false }); - return clerk; } diff --git a/packages/chrome-extension/src/background/index.ts b/packages/chrome-extension/src/background/index.ts index 1d0d35ea3f..470b8219ac 100644 --- a/packages/chrome-extension/src/background/index.ts +++ b/packages/chrome-extension/src/background/index.ts @@ -1,2 +1,2 @@ export type { StorageCache } from '../internal/utils/storage'; -export { __unstable__createClerkClient } from './clerk'; +export { createClerkClient } from './clerk'; diff --git a/packages/chrome-extension/src/internal/clerk.ts b/packages/chrome-extension/src/internal/clerk.ts index 79a1944bfb..0fe5df00d1 100644 --- a/packages/chrome-extension/src/internal/clerk.ts +++ b/packages/chrome-extension/src/internal/clerk.ts @@ -1,14 +1,15 @@ -import { Clerk } from '@clerk/clerk-js'; +import { Clerk } from '@clerk/clerk-js/no-rhc'; import { DEV_BROWSER_JWT_KEY } from '@clerk/shared/devBrowser'; import { parsePublishableKey } from '@clerk/shared/keys'; import browser from 'webextension-polyfill'; import { SCOPE, type Scope } from '../types'; -import { AUTH_HEADER, CLIENT_JWT_KEY, DEFAULT_LOCAL_HOST_PERMISSION } from './constants'; -import type { GetClientCookieParams } from './utils/cookies'; +import { CLIENT_JWT_KEY, DEFAULT_LOCAL_HOST_PERMISSION } from './constants'; import { assertPublishableKey } from './utils/errors'; import { JWTHandler } from './utils/jwt-handler'; -import { getValidPossibleManifestHosts, validateHostPermissionExistence, validateManifest } from './utils/manifest'; +import { validateManifest } from './utils/manifest'; +import { requestHandler } from './utils/request-handler'; +import { responseHandler } from './utils/response-handler'; import { BrowserStorageCache, type StorageCache } from './utils/storage'; export let clerk: Clerk; @@ -22,19 +23,27 @@ export type CreateClerkClientOptions = { publishableKey: string; scope?: Scope; storageCache?: StorageCache; - syncSessionWithTab?: boolean; + syncHost?: string; }; export async function createClerkClient({ publishableKey, scope, storageCache = BrowserStorageCache, - syncSessionWithTab = false, + syncHost, }: CreateClerkClientOptions): Promise { - if (clerk) { + if (scope === SCOPE.BACKGROUND) { + Clerk.mountComponentRenderer = undefined; + } + + // Don't cache background scripts as it can result in out-of-sync client information. + if (clerk && scope !== SCOPE.BACKGROUND) { return clerk; } + // Sync is enabled if a `syncHost` is provided + const sync = Boolean(syncHost); + // Parse publishableKey and assert it's present/valid, throw if not const key = parsePublishableKey(publishableKey); assertPublishableKey(key); @@ -44,79 +53,26 @@ export async function createClerkClient({ // Will throw if manifest is invalid validateManifest(manifest, { - sync: syncSessionWithTab, - background: scope === SCOPE.background, + background: scope === SCOPE.BACKGROUND, + sync, }); - let jwt: JWTHandler | undefined; + // Set up JWT handler and attempt to get JWT from storage on initialization + const url = syncHost ? syncHost : DEFAULT_LOCAL_HOST_PERMISSION; - if (syncSessionWithTab) { - const hostHint = isProd ? key.frontendApi : DEFAULT_LOCAL_HOST_PERMISSION; - const validHosts = getValidPossibleManifestHosts(manifest); + const jwtOptions = { + frontendApi: key.frontendApi, + name: isProd ? CLIENT_JWT_KEY : DEV_BROWSER_JWT_KEY, + sync, + url, + }; - // Will throw if manifest host_permissions doesn't contain a valid host - validateHostPermissionExistence(validHosts, hostHint); - - // Set up cookie params based on environment - const getClientCookieParams: GetClientCookieParams = isProd - ? { - urls: `https://${key.frontendApi}`, - name: CLIENT_JWT_KEY, - } - : { - urls: validHosts, - name: DEV_BROWSER_JWT_KEY, - }; - - // Set up JWT handler and attempt to get JWT from storage on initialization - jwt = JWTHandler(storageCache, { ...getClientCookieParams, frontendApi: key.frontendApi, sync: true }); - } else { - jwt = JWTHandler(storageCache, { frontendApi: key.frontendApi, sync: false }); - } - - if (!jwt) { - throw new Error('StorageCache could not be initialized.'); // TODO: Update error - } + const jwt = JWTHandler(storageCache, jwtOptions); // Create Clerk instance clerk = new Clerk(publishableKey); - - // Append appropriate query params to all Clerk requests - clerk.__unstable__onBeforeRequest(async requestInit => { - requestInit.credentials = 'omit'; - - const currentJWT = await jwt.get(); - - if (!currentJWT) { - requestInit.url?.searchParams.append('_is_native', '1'); - return; - } - - if (isProd) { - requestInit.url?.searchParams.append('_is_native', '1'); - (requestInit.headers as Headers).set('authorization', `Bearer ${currentJWT}`); - } else { - requestInit.url?.searchParams.append('__clerk_db_jwt', currentJWT); - } - }); - - // Store updated JWT in StorageCache on Clerk responses - clerk.__unstable__onAfterResponse(async (_, response) => { - const authHeaderkey = isProd ? AUTH_HEADER.production : AUTH_HEADER.development; - const authHeader = response?.headers.get(authHeaderkey); - - if (authHeader?.startsWith('Bearer')) { - const newJWT = authHeader.split(' ')[1] || undefined; - - if (newJWT) { - await jwt.set(newJWT); - } else { - await jwt.remove(); - } - } else if (authHeader) { - await jwt.set(authHeader); - } - }); + clerk.__unstable__onAfterResponse(responseHandler(jwt, { isProd })); + clerk.__unstable__onBeforeRequest(requestHandler(jwt, { isProd })); return clerk; } diff --git a/packages/chrome-extension/src/internal/constants.ts b/packages/chrome-extension/src/internal/constants.ts index 51ab30237a..43a9cafec1 100644 --- a/packages/chrome-extension/src/internal/constants.ts +++ b/packages/chrome-extension/src/internal/constants.ts @@ -1,8 +1,8 @@ -export const CLIENT_JWT_KEY = '__client'; -export const STORAGE_KEY_CLIENT_JWT = '__clerk_client_jwt'; -export const VALID_HOST_PERMISSION_REGEX = /(https?:\/\/[\w.-]+)/; -export const DEFAULT_LOCAL_HOST_PERMISSION = 'http://localhost'; export const AUTH_HEADER = { - production: 'Authorization', - development: 'Clerk-Db-Jwt', + PRODUCTION: 'Authorization', + DEVELOPMENT: 'Clerk-Db-Jwt', }; + +export const CLIENT_JWT_KEY = '__client'; +export const DEFAULT_LOCAL_HOST_PERMISSION = 'http://localhost'; +export const STORAGE_KEY_CLIENT_JWT = '__clerk_client_jwt'; diff --git a/packages/chrome-extension/src/internal/utils/__tests__/cookies.test.ts b/packages/chrome-extension/src/internal/utils/__tests__/cookies.test.ts index 3732fbd2ae..1742244ba3 100644 --- a/packages/chrome-extension/src/internal/utils/__tests__/cookies.test.ts +++ b/packages/chrome-extension/src/internal/utils/__tests__/cookies.test.ts @@ -35,71 +35,14 @@ describe('Cookies', () => { } describe('getClientCookie', () => { - describe('Single Host', () => { - test('returns cookie value from browser.cookies if is set for url', async () => { - const url = urls[0]; + test('returns cookie value from browser.cookies if is set for url', async () => { + const url = urls[0]; - getMock.mockResolvedValue(cookie); + getMock.mockResolvedValue(cookie); - expect(await getClientCookie({ urls: url, name })).toBe(cookie); + expect(await getClientCookie({ url, name })).toBe(cookie); - expectMockCalls(getMock, name, [url]); - }); - }); - - describe('Multiple Hosts', () => { - test('with valid urls', async () => { - getMock.mockResolvedValueOnce(cookie).mockResolvedValueOnce(null).mockResolvedValueOnce(null); - - expect(await getClientCookie({ urls, name })).toBe(cookie); - - expectMockCalls(getMock, name, urls); - }); - - test('with invalid urls', async () => { - const urls = ['foo']; - - getMock.mockResolvedValue(null); - expect(await getClientCookie({ urls, name })).toBe(null); - - expectMockCalls(getMock, name, urls); - }); - - test('with single result', async () => { - getMock.mockResolvedValueOnce(cookie).mockResolvedValueOnce(null); - - expect(await getClientCookie({ urls, name })).toBe(cookie); - - expectMockCalls(getMock, name, urls); - }); - - test('with multiple results - should pick first result', async () => { - const cookie2 = createCookie({ name, value: 'result2', domain }); - - getMock.mockResolvedValueOnce(cookie).mockResolvedValueOnce(cookie2); - - expect(await getClientCookie({ urls, name })).toBe(cookie); - - expectMockCalls(getMock, name, urls); - }); - - test('with rejected result', async () => { - const urls = [`https://${domain}`, 'https://foo.com']; - - getMock.mockResolvedValueOnce(cookie).mockRejectedValueOnce(null); - - expect(await getClientCookie({ urls, name })).toBe(cookie); - - expectMockCalls(getMock, name, urls); - }); - - test('with empty result', async () => { - getMock.mockResolvedValueOnce(null).mockRejectedValueOnce(null); - - expect(await getClientCookie({ urls, name })).toBe(null); - - expectMockCalls(getMock, name, urls); - }); + expectMockCalls(getMock, name, [url]); }); }); }); diff --git a/packages/chrome-extension/src/internal/utils/__tests__/manifest.test.ts b/packages/chrome-extension/src/internal/utils/__tests__/manifest.test.ts index 7523e92ff6..4e8ba7ccc5 100644 --- a/packages/chrome-extension/src/internal/utils/__tests__/manifest.test.ts +++ b/packages/chrome-extension/src/internal/utils/__tests__/manifest.test.ts @@ -1,13 +1,7 @@ import type { Manifest } from 'webextension-polyfill'; -import { missingManifestKeyError, missingValidManifestHostPermission } from '../errors'; -import type { ValidatedManifest } from '../manifest'; -import { getValidPossibleManifestHosts, validateHostPermissionExistence, validateManifest } from '../manifest'; - -const validClerkManifest = { - permissions: ['cookies', 'storage'], - host_permissions: ['http://localhost:3000'], -} as ValidatedManifest; +import { missingManifestKeyError } from '../errors'; +import { validateManifest } from '../manifest'; describe('Manifest', () => { describe('validateManifest(manifest)', () => { @@ -94,69 +88,4 @@ describe('Manifest', () => { }); }); }); - - describe('validateHostPermissionExistence(manifest.host_permissions[])', () => { - describe('valid configuration', () => { - const hostHint = 'https://clerk.clerk.com'; - - test('valid', () => { - expect(() => validateHostPermissionExistence(['http://localhost:3000'], hostHint)).not.toThrow(); - }); - - test('invalid', () => { - expect(() => validateHostPermissionExistence([], hostHint)).toThrow( - missingValidManifestHostPermission(hostHint), - ); - }); - }); - }); - - describe('getPossibleManifestHosts(manifest)', () => { - describe('valid configuration', () => { - test('should not throw error', async () => { - expect(() => getValidPossibleManifestHosts(validClerkManifest)).not.toThrow(); - }); - - test('should return localhost', async () => { - expect(() => getValidPossibleManifestHosts(validClerkManifest)).not.toThrow(); - }); - }); - - describe('configurations', () => { - it('should appropriately parse host_permissions', () => { - const host_permissions = [ - '', - 'http://localhost', - 'http://localhost/', - 'http://localhost/*', - 'http://localhost:80/*', - 'http://localhost:*/*', - 'https://*.com/*', - '*://developer.mozilla.org/*', - '*://developer.mozilla.org*', - '*://*.example.org/*', - 'https://developer.mozilla.org/*', - 'ftp://*.example.org/*', - 'https://example.org:80/', - 'https://example.org:*', - 'http://example.org:*', - 'https://example.org:*/*', - ]; - - const manifest = { - permissions: ['cookies', 'storage'], - host_permissions, - } as ValidatedManifest; - - const result = [ - 'http://localhost', - 'https://developer.mozilla.org', - 'https://example.org', - 'http://example.org', - ]; - - expect(getValidPossibleManifestHosts(manifest)).toStrictEqual(result); - }); - }); - }); }); diff --git a/packages/chrome-extension/src/internal/utils/cookies.ts b/packages/chrome-extension/src/internal/utils/cookies.ts index bdf861bf44..87799edea5 100644 --- a/packages/chrome-extension/src/internal/utils/cookies.ts +++ b/packages/chrome-extension/src/internal/utils/cookies.ts @@ -1,34 +1,15 @@ import browser from 'webextension-polyfill'; +export type FormattedUrl = `http${string}`; export type GetClientCookieParams = { - urls: string | string[]; name: string; + url: string; }; -function isSingleHost(urls: string | string[]): urls is string { - return typeof urls === 'string'; +function ensureFormattedUrl(url: string): FormattedUrl { + return url.startsWith('http') ? (url as FormattedUrl) : `https://${url}`; } -function ensureFormattedUrl(url: string): string { - return url.startsWith('http') ? url : `https://${url}`; -} - -export async function getClientCookie({ urls, name }: GetClientCookieParams) { - // Handle single host request - if (isSingleHost(urls)) { - const url = ensureFormattedUrl(urls); - return await browser.cookies.get({ url, name }); - } - - // Handle multi-host request - const cookiePromises = urls.map(url => browser.cookies.get({ url, name })); - const cookieResults = await Promise.allSettled(cookiePromises); - - for (const cookie of cookieResults) { - if (cookie.status === 'fulfilled' && cookie.value) { - return cookie.value; - } - } - - return null; +export async function getClientCookie({ url, name }: GetClientCookieParams) { + return await browser.cookies.get({ name, url: ensureFormattedUrl(url) }); } diff --git a/packages/chrome-extension/src/internal/utils/errors.ts b/packages/chrome-extension/src/internal/utils/errors.ts index 7c758db578..10fd397aaa 100644 --- a/packages/chrome-extension/src/internal/utils/errors.ts +++ b/packages/chrome-extension/src/internal/utils/errors.ts @@ -8,8 +8,6 @@ export const errorLogger = (err: Error) => console.error(err, err.stack); export const errorThrower = buildErrorThrower({ packageName: '@clerk/chrome-extension' }); export const missingManifestKeyError = (key: string) => `Missing \`${key}\` entry in manifest.json`; -export const missingValidManifestHostPermission = (hostHint: string) => - `You're missing a valid host permission. Please add ${hostHint} to \`host_permissions\` in manifest.json.`; export function assertPublishableKey(publishableKey: unknown): asserts publishableKey { if (!publishableKey) { diff --git a/packages/chrome-extension/src/internal/utils/manifest.ts b/packages/chrome-extension/src/internal/utils/manifest.ts index 004b276226..6640f56b68 100644 --- a/packages/chrome-extension/src/internal/utils/manifest.ts +++ b/packages/chrome-extension/src/internal/utils/manifest.ts @@ -2,58 +2,45 @@ import type { SetRequired } from 'type-fest'; import type { Manifest } from 'webextension-polyfill'; import type { ClerkClientExtensionFeatures } from '../../types'; -import { VALID_HOST_PERMISSION_REGEX } from '../constants'; -import { errorThrower, missingManifestKeyError, missingValidManifestHostPermission } from './errors'; +import { errorThrower, missingManifestKeyError } from './errors'; export type ValidatedManifest = SetRequired; +export type ManifestKeys = keyof Manifest.WebExtensionManifest; -export function validateManifest( - manifest: Manifest.WebExtensionManifest, - features: ClerkClientExtensionFeatures, -): asserts manifest is ValidatedManifest { - const hasFeatures = Boolean(features) && Object.keys(features).length > 0; - - if (!manifest.permissions) { - return errorThrower.throw(missingManifestKeyError('permissions')); - } - - if (!manifest.permissions.includes('storage')) { - return errorThrower.throw(missingManifestKeyError('permissions.storage')); - } - - if (!hasFeatures) { - return; - } - - if (features.background && !manifest.background) { - return errorThrower.throw(missingManifestKeyError('background')); - } - - if (features.sync && !manifest.permissions.includes('cookies')) { - return errorThrower.throw(missingManifestKeyError('permissions.cookies')); +function validateRootManifestKey(manifest: Manifest.WebExtensionManifest, key: ManifestKeys): void { + if (!manifest[key]) { + errorThrower.throw(missingManifestKeyError(key)); } +} - if (features.sync && !manifest.host_permissions) { - return errorThrower.throw(missingManifestKeyError('host_permissions')); +function validateManifestPermission(manifest: Manifest.WebExtensionManifest, key: Manifest.Permission): void { + if (!manifest.permissions?.includes(key)) { + errorThrower.throw(missingManifestKeyError(`permissions.${key}`)); } } -export function validateHostPermissionExistence(hostPermissions: string[], hostHint: string): void { - if (!hostPermissions?.length) { - errorThrower.throw(missingValidManifestHostPermission(hostHint)); - } +function hasAdditionalFeatures(features: ClerkClientExtensionFeatures): boolean { + return Boolean(features) && Object.keys(features).length > 0; } -export function getValidPossibleManifestHosts(manifest: ValidatedManifest): string[] { - const uniqueHosts = new Set(); +export function validateManifest( + manifest: Manifest.WebExtensionManifest, + features: ClerkClientExtensionFeatures, +): asserts manifest is ValidatedManifest { + validateRootManifestKey(manifest, 'permissions'); + validateManifestPermission(manifest, 'storage'); - for (const host of manifest.host_permissions) { - const res = host.match(VALID_HOST_PERMISSION_REGEX)?.[1]; + // If no additional features are provided, we can return success early + if (!hasAdditionalFeatures(features)) { + return; + } - if (res) { - uniqueHosts.add(res); - } + if (features.background) { + validateRootManifestKey(manifest, 'background'); } - return [...uniqueHosts]; + if (features.sync) { + validateManifestPermission(manifest, 'cookies'); + validateRootManifestKey(manifest, 'host_permissions'); + } } diff --git a/packages/chrome-extension/src/internal/utils/request-handler.ts b/packages/chrome-extension/src/internal/utils/request-handler.ts new file mode 100644 index 0000000000..0cad4178c4 --- /dev/null +++ b/packages/chrome-extension/src/internal/utils/request-handler.ts @@ -0,0 +1,39 @@ +import type { Clerk } from '@clerk/clerk-js'; + +import { AUTH_HEADER } from '../constants'; +import type { JWTHandler } from './jwt-handler'; + +type Handler = Parameters[0]; +type Req = Parameters[0]; + +/** Append the JWT to the FAPI request */ +export function requestHandler(jwtHandler: JWTHandler, { isProd }: { isProd: boolean }) { + const handler: Handler = async requestInit => { + requestInit.credentials = 'omit'; + + const currentJWT = await jwtHandler.get(); + + if (!currentJWT) { + return; + } + + if (isProd) { + prodHandler(requestInit, currentJWT); + } else { + devHandler(requestInit, currentJWT); + } + }; + + return handler; +} + +/** Append the JWT to the FAPI request, per development instances */ +function devHandler(requestInit: Req, jwt: string) { + requestInit.url?.searchParams.append('__clerk_db_jwt', jwt); +} + +/** Append the JWT to the FAPI request, per production instances */ +function prodHandler(requestInit: Req, jwt: string) { + requestInit.url?.searchParams.append('_is_native', '1'); + (requestInit.headers as Headers).set(AUTH_HEADER.PRODUCTION, `Bearer ${jwt}`); +} diff --git a/packages/chrome-extension/src/internal/utils/response-handler.ts b/packages/chrome-extension/src/internal/utils/response-handler.ts new file mode 100644 index 0000000000..7e872d054b --- /dev/null +++ b/packages/chrome-extension/src/internal/utils/response-handler.ts @@ -0,0 +1,47 @@ +import type { Clerk } from '@clerk/clerk-js'; + +import { AUTH_HEADER } from '../constants'; +import type { JWTHandler } from './jwt-handler'; + +type Handler = Parameters[0]; +type Res = Parameters[1]; + +/** Retrieve the JWT to the FAPI response */ +export function responseHandler(jwtHandler: JWTHandler, { isProd }: { isProd: boolean }) { + const handler: Handler = async (_, response) => { + if (isProd) { + await prodHandler(response, jwtHandler); + } else { + await devHandler(response, jwtHandler); + } + }; + return handler; +} + +/** Retrieve the JWT to the FAPI response, per development instances */ +async function devHandler(response: Res, jwtHandler: JWTHandler) { + const header = response?.headers.get(AUTH_HEADER.DEVELOPMENT); + + if (header) { + await jwtHandler.set(header); + } else { + await jwtHandler.remove(); + } +} + +/** Retrieve the JWT to the FAPI response, per production instances */ +async function prodHandler(response: Res, jwtHandler: JWTHandler) { + const header = response?.headers.get(AUTH_HEADER.PRODUCTION); + + if (header?.startsWith('Bearer')) { + const jwt = header.split(' ')[1] || undefined; + + if (jwt) { + await jwtHandler.set(jwt); + } else { + await jwtHandler.remove(); + } + } else if (header) { + await jwtHandler.set(header); + } +} diff --git a/packages/chrome-extension/src/react/ClerkProvider.tsx b/packages/chrome-extension/src/react/ClerkProvider.tsx index 68426e749a..8127a36d01 100644 --- a/packages/chrome-extension/src/react/ClerkProvider.tsx +++ b/packages/chrome-extension/src/react/ClerkProvider.tsx @@ -1,4 +1,4 @@ -import type { Clerk } from '@clerk/clerk-js'; +import type { Clerk } from '@clerk/clerk-js/no-rhc'; import type { ClerkProviderProps as ClerkReactProviderProps } from '@clerk/clerk-react'; import { ClerkProvider as ClerkReactProvider } from '@clerk/clerk-react'; import React from 'react'; @@ -8,20 +8,20 @@ import type { StorageCache } from '../internal/utils/storage'; type ChromeExtensionClerkProviderProps = ClerkReactProviderProps & { storageCache?: StorageCache; - syncSessionWithTab?: boolean; + syncHost?: string; }; export function ClerkProvider(props: ChromeExtensionClerkProviderProps): JSX.Element | null { - const { children, storageCache, syncSessionWithTab, ...rest } = props; + const { children, storageCache, syncHost, ...rest } = props; const { publishableKey = '' } = props; const [clerkInstance, setClerkInstance] = React.useState(null); React.useEffect(() => { void (async () => { - setClerkInstance(await createClerkClient({ publishableKey, storageCache, syncSessionWithTab })); + setClerkInstance(await createClerkClient({ publishableKey, storageCache, syncHost })); })(); - }, []); // eslint-disable-line react-hooks/exhaustive-deps + }, [publishableKey, storageCache, syncHost]); if (!clerkInstance) { return null; @@ -31,7 +31,7 @@ export function ClerkProvider(props: ChromeExtensionClerkProviderProps): JSX.Ele {children} diff --git a/packages/chrome-extension/src/types.ts b/packages/chrome-extension/src/types.ts index 3dcc5ed179..4dc4c46222 100644 --- a/packages/chrome-extension/src/types.ts +++ b/packages/chrome-extension/src/types.ts @@ -1,5 +1,5 @@ export const SCOPE = { - background: 'background', + BACKGROUND: 'background', } as const; export type Scope = (typeof SCOPE)[keyof typeof SCOPE]; diff --git a/packages/chrome-extension/tsup.config.ts b/packages/chrome-extension/tsup.config.ts index a7f6237ea5..317efbfa3c 100644 --- a/packages/chrome-extension/tsup.config.ts +++ b/packages/chrome-extension/tsup.config.ts @@ -2,7 +2,6 @@ import type { Options } from 'tsup'; import { defineConfig } from 'tsup'; import { runAfterLast } from '../../scripts/utils'; -// @ts-ignore import { name, version } from './package.json'; export default defineConfig(overrideOptions => { @@ -10,16 +9,20 @@ export default defineConfig(overrideOptions => { const shouldPublish = !!overrideOptions.env?.publish; const common: Options = { - entry: ['./src/index.ts', './src/background/index.ts', './src/internal/index.ts', './src/react/index.ts'], + entry: ['./src/index.ts', './src/background/index.ts', './src/react/index.ts'], bundle: true, clean: true, minify: false, sourcemap: true, legacyOutput: true, + treeshake: true, + noExternal: ['@clerk/clerk-react'], + external: ['use-sync-external-store'], define: { PACKAGE_NAME: `"${name}"`, PACKAGE_VERSION: `"${version}"`, __DEV__: `${isWatch}`, + __BUILD_DISABLE_RHC__: 'true', }, }; diff --git a/packages/clerk-js/no-rhc/index.d.ts b/packages/clerk-js/no-rhc/index.d.ts new file mode 100644 index 0000000000..e2e7107776 --- /dev/null +++ b/packages/clerk-js/no-rhc/index.d.ts @@ -0,0 +1,3 @@ +export { Clerk } from '../dist/types/index'; + +export * from '../dist/types/index'; diff --git a/packages/clerk-js/no-rhc/index.js b/packages/clerk-js/no-rhc/index.js new file mode 100644 index 0000000000..f29fe6cfcf --- /dev/null +++ b/packages/clerk-js/no-rhc/index.js @@ -0,0 +1 @@ +module.exports = require('../dist/clerk.no-rhc'); diff --git a/packages/clerk-js/package.json b/packages/clerk-js/package.json index 3421a69101..1dbcb32ab4 100644 --- a/packages/clerk-js/package.json +++ b/packages/clerk-js/package.json @@ -27,7 +27,8 @@ "types": "dist/types/index.d.ts", "files": [ "dist", - "headless" + "headless", + "no-rhc" ], "scripts": { "build": "pnpm build:bundle && pnpm build:declarations", diff --git a/packages/clerk-js/rspack.config.js b/packages/clerk-js/rspack.config.js index 2f17f5cd94..91bddaa091 100644 --- a/packages/clerk-js/rspack.config.js +++ b/packages/clerk-js/rspack.config.js @@ -11,6 +11,7 @@ const isDevelopment = mode => !isProduction(mode); const variants = { clerk: 'clerk', + clerkNoRHC: 'clerk.no-rhc', // Omit Remotely Hosted Code clerkBrowser: 'clerk.browser', clerkHeadless: 'clerk.headless', clerkHeadlessBrowser: 'clerk.headless.browser', @@ -18,6 +19,7 @@ const variants = { const variantToSourceFile = { [variants.clerk]: './src/index.ts', + [variants.clerkNoRHC]: './src/index.ts', [variants.clerkBrowser]: './src/index.browser.ts', [variants.clerkHeadless]: './src/index.headless.ts', [variants.clerkHeadlessBrowser]: './src/index.headless.browser.ts', @@ -27,9 +29,10 @@ const variantToSourceFile = { * * @param {object} config * @param {'development'|'production'} config.mode + * @param {boolean} [config.disableRHC=false] * @returns { import('@rspack/cli').Configuration } */ -const common = ({ mode }) => { +const common = ({ mode, disableRHC = false }) => { return { mode, resolve: { @@ -39,6 +42,7 @@ const common = ({ mode }) => { }, plugins: [ new rspack.DefinePlugin({ + __BUILD_DISABLE_RHC__: JSON.stringify(disableRHC), __DEV__: isDevelopment(mode), __PKG_VERSION__: JSON.stringify(packageJSON.version), __PKG_NAME__: JSON.stringify(packageJSON.name), @@ -400,12 +404,63 @@ const prodConfig = ({ mode, env, analysis }) => { }, }); + const clerkEsmNoRHC = merge( + entryForVariant(variants.clerkNoRHC), + common({ mode, disableRHC: true }), + commonForProd(), + commonForProdBundled(), + { + experiments: { + outputModule: true, + }, + output: { + filename: '[name].mjs', + libraryTarget: 'module', + }, + plugins: [ + // Include the lazy chunks in the bundle as well + // so that the final bundle can be imported and bundled again + // by a different bundler, eg the webpack instance used by react-scripts + new rspack.optimize.LimitChunkCountPlugin({ + maxChunks: 1, + }), + ], + optimization: { + splitChunks: false, + }, + }, + ); + + const clerkCjsNoRHC = merge( + entryForVariant(variants.clerkNoRHC), + common({ mode, disableRHC: true }), + commonForProd(), + commonForProdBundled(), + { + output: { + filename: '[name].js', + libraryTarget: 'commonjs', + }, + plugins: [ + // Include the lazy chunks in the bundle as well + // so that the final bundle can be imported and bundled again + // by a different bundler, eg the webpack instance used by react-scripts + new rspack.optimize.LimitChunkCountPlugin({ + maxChunks: 1, + }), + ], + optimization: { + splitChunks: false, + }, + }, + ); + // webpack-bundle-analyzer only supports a single build, use clerkBrowser as that's the default build we serve if (analysis) { return [clerkBrowser]; } - return [clerkBrowser, clerkHeadless, clerkHeadlessBrowser, clerkEsm, clerkCjs]; + return [clerkBrowser, clerkHeadless, clerkHeadlessBrowser, clerkEsm, clerkEsmNoRHC, clerkCjs, clerkCjsNoRHC]; }; /** @@ -478,6 +533,12 @@ const devConfig = ({ mode, env }) => { common({ mode }), commonForDev(), ), + // prettier-ignore + [variants.clerkBrowserNoRHC]: merge( + entryForVariant(variants.clerkBrowserNoRHC), + common({ mode, disableRHC: true }), + commonForDev(), + ), [variants.clerkHeadless]: merge( entryForVariant(variants.clerkHeadless), common({ mode }), diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 21f43e6ee6..516ce741dc 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -109,6 +109,7 @@ import { clerkMissingSignInUrlAsSatellite, clerkOAuthCallbackDidNotCompleteSignInSignUp, clerkRedirectUrlIsMissingScheme, + clerkUnsupportedEnvironmentWarning, } from './errors'; import { eventBus, events } from './events'; import type { FapiClient, FapiRequestCallback } from './fapiClient'; @@ -175,7 +176,7 @@ export class Clerk implements ClerkInterface { // converted to protected environment to support `updateEnvironment` type assertion protected environment?: EnvironmentResource | null; - #publishableKey: string = ''; + #publishableKey = ''; #domain: DomainOrProxyUrl['domain']; #proxyUrl: DomainOrProxyUrl['proxyUrl']; #authService?: AuthCookieService; @@ -263,7 +264,9 @@ export class Clerk implements ClerkInterface { const publishableKey = parsePublishableKey(this.publishableKey); if (!publishableKey) { - return errorThrower.throwInvalidPublishableKeyError({ key: this.publishableKey }); + return errorThrower.throwInvalidPublishableKeyError({ + key: this.publishableKey, + }); } return publishableKey.frontendApi; @@ -557,7 +560,7 @@ export class Clerk implements ClerkInterface { }; public mountSignIn = (node: HTMLDivElement, props?: SignInProps): void => { - if (props && props.__experimental?.newComponents && this.__experimental_ui) { + if (props?.__experimental?.newComponents && this.__experimental_ui) { this.__experimental_ui.mount('SignIn', node, props); } else { this.assertComponentsReady(this.#componentControls); @@ -583,7 +586,7 @@ export class Clerk implements ClerkInterface { }; public mountSignUp = (node: HTMLDivElement, props?: SignUpProps): void => { - if (props && props.__experimental?.newComponents && this.__experimental_ui) { + if (props?.__experimental?.newComponents && this.__experimental_ui) { this.__experimental_ui.mount('SignUp', node, props); } else { this.assertComponentsReady(this.#componentControls); @@ -1325,7 +1328,13 @@ export class Clerk implements ClerkInterface { signUp, verifyEmailPath: params.verifyEmailAddressUrl || - buildURL({ base: displayConfig.signUpUrl, hashPath: '/verify-email-address' }, { stringify: true }), + buildURL( + { + base: displayConfig.signUpUrl, + hashPath: '/verify-email-address', + }, + { stringify: true }, + ), verifyPhonePath: params.verifyPhoneNumberUrl || buildURL({ base: displayConfig.signUpUrl, hashPath: '/verify-phone-number' }, { stringify: true }), @@ -1486,6 +1495,11 @@ export class Clerk implements ClerkInterface { public authenticateWithGoogleOneTap = async ( params: AuthenticateWithGoogleOneTapParams, ): Promise => { + if (__BUILD_DISABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Google One Tap'); + return this.client!.signIn; // TODO: Remove not null assertion + } + return this.client?.signIn .create({ strategy: 'google_one_tap', @@ -1504,11 +1518,27 @@ export class Clerk implements ClerkInterface { }; public authenticateWithMetamask = async (props: AuthenticateWithMetamaskParams = {}): Promise => { - await this.authenticateWithWeb3({ ...props, strategy: 'web3_metamask_signature' }); + if (__BUILD_DISABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Metamask'); + return; + } + + await this.authenticateWithWeb3({ + ...props, + strategy: 'web3_metamask_signature', + }); }; public authenticateWithCoinbaseWallet = async (props: AuthenticateWithCoinbaseWalletParams = {}): Promise => { - await this.authenticateWithWeb3({ ...props, strategy: 'web3_coinbase_wallet_signature' }); + if (__BUILD_DISABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Coinbase Wallet'); + return; + } + + await this.authenticateWithWeb3({ + ...props, + strategy: 'web3_coinbase_wallet_signature', + }); }; public authenticateWithWeb3 = async ({ @@ -1519,6 +1549,11 @@ export class Clerk implements ClerkInterface { strategy, legalAccepted, }: ClerkAuthenticateWithWeb3Params): Promise => { + if (__BUILD_DISABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Web3'); + return; + } + if (!this.client || !this.environment) { return; } @@ -1532,7 +1567,11 @@ export class Clerk implements ClerkInterface { let signInOrSignUp: SignInResource | SignUpResource; try { - signInOrSignUp = await this.client.signIn.authenticateWithWeb3({ identifier, generateSignature, strategy }); + signInOrSignUp = await this.client.signIn.authenticateWithWeb3({ + identifier, + generateSignature, + strategy, + }); } catch (err) { if (isError(err, ERROR_CODES.FORM_IDENTIFIER_NOT_FOUND)) { signInOrSignUp = await this.client.signUp.authenticateWithWeb3({ @@ -1642,7 +1681,10 @@ export class Clerk implements ClerkInterface { // 2. clerk-js initializes propA with a default value // 3. The customer update propB independently of propA and window.Clerk.updateProps is called // 4. If we don't merge the new props with the current options, propA will be reset to undefined - const props = { ..._props, options: this.#initOptions({ ...this.#options, ..._props.options }) }; + const props = { + ..._props, + options: this.#initOptions({ ...this.#options, ..._props.options }), + }; return this.#componentControls?.ensureMounted().then(controls => controls.updateProps(props)); }; diff --git a/packages/clerk-js/src/core/errors.ts b/packages/clerk-js/src/core/errors.ts index b917db134c..304a1716dd 100644 --- a/packages/clerk-js/src/core/errors.ts +++ b/packages/clerk-js/src/core/errors.ts @@ -1,5 +1,17 @@ const errorPrefix = 'ClerkJS:'; +/** + * Used to log a warning when a Clerk feature is used in an unsupported environment. + * (Development Only) + * + * @param strategy The strategy that is not supported in the current environment. + * @returns void + * @note This is a warning and not an error because the application will still work, but the feature will not be available. + */ +export function clerkUnsupportedEnvironmentWarning(strategy: string) { + console.warn(`${errorPrefix} ${strategy} is not supported in this environment.`); +} + export function clerkNetworkError(url: string, e: Error): never { throw new Error(`${errorPrefix} Network error at "${url}" - ${e}. Please try again.`); } @@ -8,7 +20,7 @@ export function clerkErrorInitFailed(): never { throw new Error(`${errorPrefix} Something went wrong initializing Clerk.`); } -export function clerkErrorDevInitFailed(msg: string = ''): never { +export function clerkErrorDevInitFailed(msg = ''): never { throw new Error(`${errorPrefix} Something went wrong initializing Clerk in development mode.${msg && ` ${msg}`}`); } diff --git a/packages/clerk-js/src/core/resources/SignIn.ts b/packages/clerk-js/src/core/resources/SignIn.ts index 48bfb57ce2..ce9efceead 100644 --- a/packages/clerk-js/src/core/resources/SignIn.ts +++ b/packages/clerk-js/src/core/resources/SignIn.ts @@ -55,6 +55,7 @@ import { clerkInvalidStrategy, clerkMissingOptionError, clerkMissingWebAuthnPublicKeyOptions, + clerkUnsupportedEnvironmentWarning, clerkVerifyEmailAddressCalledBeforeCreate, clerkVerifyPasskeyCalledBeforeCreate, clerkVerifyWeb3WalletCalledBeforeCreate, @@ -237,6 +238,11 @@ export class SignIn extends BaseResource implements SignInResource { }; public authenticateWithWeb3 = async (params: AuthenticateWithWeb3Params): Promise => { + if (__BUILD_DISABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Web3'); + return this; + } + const { identifier, generateSignature, strategy = 'web3_metamask_signature' } = params || {}; const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider; @@ -283,6 +289,11 @@ export class SignIn extends BaseResource implements SignInResource { }; public authenticateWithMetamask = async (): Promise => { + if (__BUILD_DISABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Metamask'); + return this; + } + const identifier = await getMetamaskIdentifier(); return this.authenticateWithWeb3({ identifier, @@ -292,6 +303,11 @@ export class SignIn extends BaseResource implements SignInResource { }; public authenticateWithCoinbaseWallet = async (): Promise => { + if (__BUILD_DISABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Coinbase Wallet'); + return this; + } + const identifier = await getCoinbaseWalletIdentifier(); return this.authenticateWithWeb3({ identifier, diff --git a/packages/clerk-js/src/core/resources/SignUp.ts b/packages/clerk-js/src/core/resources/SignUp.ts index 85b123ca34..be227ce3c8 100644 --- a/packages/clerk-js/src/core/resources/SignUp.ts +++ b/packages/clerk-js/src/core/resources/SignUp.ts @@ -37,6 +37,7 @@ import { normalizeUnsafeMetadata } from '../../utils/resourceParams'; import { clerkInvalidFAPIResponse, clerkMissingOptionError, + clerkUnsupportedEnvironmentWarning, clerkVerifyEmailAddressCalledBeforeCreate, clerkVerifyWeb3WalletCalledBeforeCreate, } from '../errors'; @@ -79,31 +80,41 @@ export class SignUp extends BaseResource implements SignUpResource { create = async (params: SignUpCreateParams): Promise => { const paramsWithCaptcha: Record = params; - const { captchaSiteKey, canUseCaptcha, captchaURL, captchaWidgetType, captchaProvider, captchaPublicKeyInvisible } = - retrieveCaptchaInfo(SignUp.clerk); - if ( - !this.shouldBypassCaptchaForAttempt(params) && - canUseCaptcha && - captchaSiteKey && - captchaURL && - captchaPublicKeyInvisible - ) { - try { - const captchaParams = await getCaptchaToken({ - siteKey: captchaSiteKey, - widgetType: captchaWidgetType, - invisibleSiteKey: captchaPublicKeyInvisible, - scriptUrl: captchaURL, - captchaProvider, - }); - paramsWithCaptcha.captchaToken = captchaParams.captchaToken; - paramsWithCaptcha.captchaWidgetType = captchaParams.captchaWidgetType; - } catch (e) { - if (e.captchaError) { - paramsWithCaptcha.captchaError = e.captchaError; - } else { - throw new ClerkRuntimeError(e.message, { code: 'captcha_unavailable' }); + if (!__BUILD_DISABLE_RHC__) { + const { + captchaSiteKey, + canUseCaptcha, + captchaURL, + captchaWidgetType, + captchaProvider, + captchaPublicKeyInvisible, + } = retrieveCaptchaInfo(SignUp.clerk); + + if ( + !this.shouldBypassCaptchaForAttempt(params) && + canUseCaptcha && + captchaSiteKey && + captchaURL && + captchaPublicKeyInvisible + ) { + try { + const captchaParams = await getCaptchaToken({ + siteKey: captchaSiteKey, + widgetType: captchaWidgetType, + invisibleSiteKey: captchaPublicKeyInvisible, + scriptUrl: captchaURL, + captchaProvider, + }); + + paramsWithCaptcha.captchaToken = captchaParams.captchaToken; + paramsWithCaptcha.captchaWidgetType = captchaParams.captchaWidgetType; + } catch (e) { + if (e.captchaError) { + paramsWithCaptcha.captchaError = e.captchaError; + } else { + throw new ClerkRuntimeError(e.message, { code: 'captcha_unavailable' }); + } } } } @@ -196,6 +207,11 @@ export class SignUp extends BaseResource implements SignUpResource { legalAccepted?: boolean; }, ): Promise => { + if (__BUILD_DISABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Web3'); + return this; + } + const { generateSignature, identifier, @@ -244,6 +260,11 @@ export class SignUp extends BaseResource implements SignUpResource { legalAccepted?: boolean; }, ): Promise => { + if (__BUILD_DISABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Metamask'); + return this; + } + const identifier = await getMetamaskIdentifier(); return this.authenticateWithWeb3({ identifier, @@ -259,6 +280,11 @@ export class SignUp extends BaseResource implements SignUpResource { legalAccepted?: boolean; }, ): Promise => { + if (__BUILD_DISABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Coinbase Wallet'); + return this; + } + const identifier = await getCoinbaseWalletIdentifier(); return this.authenticateWithWeb3({ identifier, diff --git a/packages/clerk-js/src/globals.d.ts b/packages/clerk-js/src/globals.d.ts index 26ef5a8a3c..4cd691f52f 100644 --- a/packages/clerk-js/src/globals.d.ts +++ b/packages/clerk-js/src/globals.d.ts @@ -2,6 +2,7 @@ declare global { const __DEV__: boolean; const __PKG_NAME__: string; const __PKG_VERSION__: string; + const __BUILD_DISABLE_RHC__: string; interface Window { __unstable__onBeforeSetActive: () => Promise | void; diff --git a/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx b/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx index 9d612da1e7..a06db08f63 100644 --- a/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx +++ b/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx @@ -1,6 +1,7 @@ import { useClerk, useUser } from '@clerk/shared/react'; import { useEffect, useRef } from 'react'; +import { clerkUnsupportedEnvironmentWarning } from '../../../core/errors'; import type { GISCredentialResponse } from '../../../utils/one-tap'; import { loadGIS } from '../../../utils/one-tap'; import { useEnvironment, useGoogleOneTapContext } from '../../contexts'; @@ -33,7 +34,13 @@ function _OneTapStart(): JSX.Element | null { const shouldLoadGIS = !user?.id && !!environmentClientID; async function initializeGIS() { + if (__BUILD_DISABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Google Identity Services'); + return undefined; + } + const google = await loadGIS(); + google.accounts.id.initialize({ client_id: environmentClientID!, callback: oneTapCallback, @@ -42,6 +49,7 @@ function _OneTapStart(): JSX.Element | null { auto_select: false, use_fedcm_for_prompt: ctx.fedCmSupport, }); + return google; } diff --git a/packages/clerk-js/src/utils/captcha/getCaptchaToken.ts b/packages/clerk-js/src/utils/captcha/getCaptchaToken.ts index 68058d407c..1c38f5f173 100644 --- a/packages/clerk-js/src/utils/captcha/getCaptchaToken.ts +++ b/packages/clerk-js/src/utils/captcha/getCaptchaToken.ts @@ -1,4 +1,10 @@ import { getTurnstileToken } from './turnstile'; import type { CaptchaOptions } from './types'; -export const getCaptchaToken = (opts: CaptchaOptions) => getTurnstileToken(opts); +export const getCaptchaToken = (opts: CaptchaOptions) => { + if (__BUILD_DISABLE_RHC__) { + return Promise.reject(); + } + + return getTurnstileToken(opts); +}; diff --git a/packages/clerk-js/src/utils/index.ts b/packages/clerk-js/src/utils/index.ts index cdffa71c21..892275e1cd 100644 --- a/packages/clerk-js/src/utils/index.ts +++ b/packages/clerk-js/src/utils/index.ts @@ -1,4 +1,5 @@ export * from './beforeUnloadTracker'; +export * from './completeSignUpFlow'; export * from './componentGuards'; export * from './dynamicParamParser'; export * from './email'; @@ -6,11 +7,13 @@ export * from './encoders'; export * from './errors'; export * from './errorThrower'; export * from './getClerkQueryParam'; -export * from './getClerkQueryParam'; export * from './hex'; export * from './ignoreEventValue'; +export * from './image'; export * from './instance'; export * from './jwt'; +export * from './normalizeRoutingOptions'; +export * from './organization'; export * from './pageLifecycle'; export * from './path'; export * from './props'; @@ -20,9 +23,3 @@ export * from './runtime'; export * from './url'; export * from './web3'; export * from './windowNavigate'; -export * from './componentGuards'; -export * from './queryStateParams'; -export * from './normalizeRoutingOptions'; -export * from './image'; -export * from './completeSignUpFlow'; -export * from './organization'; diff --git a/packages/react/src/globals.d.ts b/packages/react/src/globals.d.ts index 35c1762298..af26a66470 100644 --- a/packages/react/src/globals.d.ts +++ b/packages/react/src/globals.d.ts @@ -5,4 +5,5 @@ declare global { const PACKAGE_VERSION: string; const JS_PACKAGE_VERSION: string; const __DEV__: boolean; + var __BUILD_DISABLE_RHC__: boolean; // eslint-disable-line no-var } diff --git a/packages/react/src/isomorphicClerk.ts b/packages/react/src/isomorphicClerk.ts index 40c865118d..cabf975d4c 100644 --- a/packages/react/src/isomorphicClerk.ts +++ b/packages/react/src/isomorphicClerk.ts @@ -60,6 +60,10 @@ import type { } from './types'; import { isConstructor } from './utils'; +if (typeof __BUILD_DISABLE_RHC__ === 'undefined') { + globalThis.__BUILD_DISABLE_RHC__ = false; +} + const SDK_METADATA = { name: PACKAGE_NAME, version: PACKAGE_VERSION, @@ -461,7 +465,7 @@ export class IsomorphicClerk implements IsomorphicLoadedClerk { } global.Clerk = c; - } else { + } else if (!__BUILD_DISABLE_RHC__) { // Hot-load latest ClerkJS from Clerk CDN if (!global.Clerk) { await loadClerkJsScript({ diff --git a/playground/browser-extension/.env.chrome.example b/playground/browser-extension/.env.chrome.example new file mode 100644 index 0000000000..beb66b4ed1 --- /dev/null +++ b/playground/browser-extension/.env.chrome.example @@ -0,0 +1 @@ +CRX_PUBLIC_KEY= diff --git a/playground/browser-extension/.env.development.example b/playground/browser-extension/.env.development.example new file mode 100644 index 0000000000..267a1b46ca --- /dev/null +++ b/playground/browser-extension/.env.development.example @@ -0,0 +1,2 @@ +PLASMO_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_***** +CLERK_FRONTEND_API=https://*****.clerk.accounts.dev diff --git a/playground/browser-extension/.gitignore b/playground/browser-extension/.gitignore new file mode 100644 index 0000000000..3d462e4c95 --- /dev/null +++ b/playground/browser-extension/.gitignore @@ -0,0 +1,5 @@ +.plasmo +.env +.env.* +!.env.example +!.env.*.example diff --git a/playground/browser-extension/README.md b/playground/browser-extension/README.md new file mode 100644 index 0000000000..278c4a6cd5 --- /dev/null +++ b/playground/browser-extension/README.md @@ -0,0 +1,68 @@ +## Running the Playground + +Standard: +```bash +pnpm dev +``` + +On changes to upstream monorepo packages: + +```bash +pnpm update @clerk/chrome-extension && pnpm dev +``` + +## Introduction + +Clerk is a developer-first authentication and user management solution. It provides pre-built React components and hooks for sign-in, sign-up, user profile, and organization management. Clerk is designed to be easy to use and customize, and can be dropped into any Chrome Extension application. + +After following the quickstart you'll have learned how to: + +- Scaffold a new application using the Plasmo framework +- Install `@clerk/chrome-extension` +- Set your environment variables +- Add `` to your application +- Create a header with Clerk components for users to sign in and out +- Configure a consistent CRX key +- Load your Chrome Extension into your Chromium-based browser +- Test your Chrome Extension + +## Running the template + +```bash +git clone https://github.com/clerkinc/clerk-chrome-extension-quickstart +``` + +To run the example locally, you need to: + +1. Sign up for a Clerk account at [https://clerk.com](https://dashboard.clerk.com/sign-up?utm_source=readme&utm_medium=owned&utm_campaign=chrome-extension&utm_content=10-24-2023&utm_term=clerk-chrome-extension-quickstart). + +2. Go to the [Clerk dashboard](https://dashboard.clerk.com?utm_source=readme&utm_medium=owned&utm_campaign=chrome-extension&utm_content=10-24-2023&utm_term=clerk-chrome-extension-quickstart) and create an application. + +3. Set the required Clerk environment variables as shown in [the example `.env.development` file](./.env.development.example). + +4. Create a [consistent CRX ID](https://clerk.com/docs/references/chrome-extension/configure-consistent-key) for your extension. + +5. Set the public key are shown in [the example `.env.chrome` file](./.env.chrome.example). + +5. `pnpm install` the required dependencies. + +6. `pnpm dev` to launch the development server. + +## Learn more + +To learn more about Clerk and Chrome Extensions, check out the following resources: + +- [Quickstart: Get started with Chrome Extensions and Clerk](https://clerk.com/docs/quickstarts/chrome-extension?utm_source=readme&utm_medium=owned&utm_campaign=chrome-extension&utm_content=10-24-2023&utm_term=clerk-chrome-extension-quickstart) + +- [Clerk Documentation](https://clerk.com/docs?utm_source=readme&utm_medium=owned&utm_campaign=chrome-extension&utm_content=10-24-2023&utm_term=clerk-chrome-extension-quickstart) +- [Chrome Extensions](https://developer.chrome.com/docs/extensions) + +## Found an issue or want to leave feedback + +Feel free to create a support thread on our [Discord](https://clerk.com/discord). Our support team will be happy to assist you in the `#support` channel. + +## Connect with us + +You can discuss ideas, ask questions, and meet others from the community in our [Discord](https://discord.com/invite/b5rXHjAg7A). + +If you prefer, you can also find support through our [Twitter](https://twitter.com/ClerkDev), or you can [email](mailto:support@clerk.dev) us! diff --git a/playground/browser-extension/assets/icon.png b/playground/browser-extension/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..df3eaad5939e903789c09285a98dc3ced1a54e46 GIT binary patch literal 14295 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 R|M~e!OHE(3UfD7F{{RNg1h@bI literal 0 HcmV?d00001 diff --git a/playground/browser-extension/package.json b/playground/browser-extension/package.json new file mode 100644 index 0000000000..8c2e3619e7 --- /dev/null +++ b/playground/browser-extension/package.json @@ -0,0 +1,48 @@ +{ + "name": "chrome-extension", + "displayName": "Clerk Chrome Extension Demo", + "version": "0.0.1", + "description": "A feature rich implementation of Clerk with a Plasmo-based Chrome Extension.", + "author": "Clerk", + "scripts": { + "build": "plasmo build", + "build:firefox": "plasmo build --target=firefox-mv2", + "debug": "plasmo dev --verbose", + "debug:firefox": "plasmo dev --target=firefox-mv2 --verbose", + "dev": "plasmo dev", + "dev:firefox": "plasmo dev --target=firefox-mv2", + "start:firefox": "web-ext run --source-dir ./build/firefox-mv2-dev" + }, + "dependencies": { + "@clerk/chrome-extension": "file:../../packages/chrome-extension", + "plasmo": "0.89.4", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-router-dom": "^6.27.0", + "tailwindcss": "3.4.14", + "webextension-polyfill": "^0.12.0" + }, + "devDependencies": { + "@types/chrome": "0.0.280", + "@types/node": "20.16.14", + "@types/react": "18.3.12", + "@types/react-dom": "18.3.1", + "@types/webextension-polyfill": "^0.12.1", + "postcss": "8.4.49", + "prettier": "3.3.3", + "prettier-plugin-tailwindcss": "^0.6.8", + "typescript": "5.6.3" + }, + "manifest": { + "permissions": [ + "cookies", + "storage", + "sidePanel" + ], + "host_permissions": [ + "$CLERK_FRONTEND_API/*", + "http://localhost/*" + ], + "key": "$CRX_PUBLIC_KEY" + } +} diff --git a/playground/browser-extension/pnpm-lock.yaml b/playground/browser-extension/pnpm-lock.yaml new file mode 100644 index 0000000000..5a22a73612 --- /dev/null +++ b/playground/browser-extension/pnpm-lock.yaml @@ -0,0 +1,7170 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@clerk/chrome-extension': + specifier: file:../../packages/chrome-extension + version: file:../../packages/chrome-extension(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + plasmo: + specifier: 0.89.4 + version: 0.89.4(@swc/core@1.9.1(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)(lodash@4.17.21)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + react-router-dom: + specifier: ^6.27.0 + version: 6.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + tailwindcss: + specifier: 3.4.14 + version: 3.4.14 + webextension-polyfill: + specifier: ^0.12.0 + version: 0.12.0 + devDependencies: + '@types/chrome': + specifier: 0.0.280 + version: 0.0.280 + '@types/node': + specifier: 20.16.14 + version: 20.16.14 + '@types/react': + specifier: 18.3.12 + version: 18.3.12 + '@types/react-dom': + specifier: 18.3.1 + version: 18.3.1 + '@types/webextension-polyfill': + specifier: ^0.12.1 + version: 0.12.1 + postcss: + specifier: 8.4.49 + version: 8.4.49 + prettier: + specifier: 3.3.3 + version: 3.3.3 + prettier-plugin-tailwindcss: + specifier: ^0.6.8 + version: 0.6.8(prettier@3.3.3) + typescript: + specifier: 5.6.3 + version: 5.6.3 + +packages: + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.2': + resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.2': + resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.2': + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.25.9': + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.0': + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} + engines: {node: '>=6.9.0'} + + '@clerk/chrome-extension@file:../../packages/chrome-extension': + resolution: {directory: ../../packages/chrome-extension, type: directory} + engines: {node: '>=18.17.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + + '@clerk/clerk-js@5.33.1': + resolution: {integrity: sha512-zwAuBtqo7b1vDHCn5tC6/W9iJ1s0FAJr5MRLsvTDraU7ntTw0UPgVMljtJqyo6ruYJbWPiFt6/vAUpLa/9rtxg==} + engines: {node: '>=18.17.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + + '@clerk/clerk-react@5.15.3': + resolution: {integrity: sha512-Ha7Cjiffk3GT0+lJgrtJfeTC9P1kIdmErjQc0t6+lcx12qZwnO1fsf5fp6GND6+P+VtjbgGOPrQmPoJoEcI3cA==} + engines: {node: '>=18.17.0'} + peerDependencies: + react: ^18 || ^19.0.0-0 + react-dom: ^18 || ^19.0.0-0 + + '@clerk/localizations@3.6.2': + resolution: {integrity: sha512-CAP0jAgWP4hjco6hm+KoDan376Co/5ZUyJjAEgh+bs0JoHLIBkK+bML62XHPQgzHUdHHoNUn5pydXvsvaPFNvA==} + engines: {node: '>=18.17.0'} + + '@clerk/shared@2.12.1': + resolution: {integrity: sha512-ezX/BXnMJ1rH7vX4H3nXpZ3WW8m1lbyri5dHOoDlREUOe/zr9lawUgVx+75aTxrVPtK7u8XwzMj/rT2cMfMmqw==} + engines: {node: '>=18.17.0'} + peerDependencies: + react: ^18 || ^19.0.0-0 + react-dom: ^18 || ^19.0.0-0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@clerk/types@4.32.0': + resolution: {integrity: sha512-6oqRJsQE8GIThVyPBAO0kJP0pZJ1c11Hz0qabDk9lStoxjHy7fRIcIm/JX5xlA6rjilWBMEgJr4C0a36mJvVXg==} + engines: {node: '>=18.17.0'} + + '@coinbase/wallet-sdk@4.0.4': + resolution: {integrity: sha512-74c040CRnGhfRjr3ArnkAgud86erIqdkPHNt5HR1k9u97uTIZCJww9eGYT67Qf7gHPpGS/xW8Be1D4dvRm63FA==} + + '@emotion/babel-plugin@11.12.0': + resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==} + + '@emotion/cache@11.11.0': + resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} + + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + + '@emotion/memoize@0.8.1': + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + + '@emotion/react@11.11.1': + resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/serialize@1.3.2': + resolution: {integrity: sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==} + + '@emotion/sheet@1.4.0': + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + + '@emotion/use-insertion-effect-with-fallbacks@1.1.0': + resolution: {integrity: sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==} + peerDependencies: + react: '>=16.8.0' + + '@emotion/utils@1.4.1': + resolution: {integrity: sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==} + + '@emotion/weak-memoize@0.3.1': + resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} + + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@expo/spawn-async@1.7.2': + resolution: {integrity: sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==} + engines: {node: '>=12'} + + '@floating-ui/core@1.6.8': + resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + + '@floating-ui/dom@1.6.12': + resolution: {integrity: sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==} + + '@floating-ui/react-dom@2.1.2': + resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/react@0.25.4': + resolution: {integrity: sha512-lWRQ/UiTvSIBxohn0/2HFHEmnmOVRjl7j6XcRJuLH0ls6f/9AyHMWVzkAJFuwx0n9gaEeCmg9VccCSCJzbEJig==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.1.6': + resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} + + '@floating-ui/utils@0.2.8': + resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + + '@formkit/auto-animate@0.8.2': + resolution: {integrity: sha512-SwPWfeRa5veb1hOIBMdzI+73te5puUBHmqqaF1Bu7FjvxlYSz/kJcZKSa9Cg60zL0uRNeJL2SbRxV6Jp6Q1nFQ==} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@lezer/common@0.15.12': + resolution: {integrity: sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==} + + '@lezer/common@1.2.3': + resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==} + + '@lezer/lr@0.15.8': + resolution: {integrity: sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==} + + '@lezer/lr@1.4.2': + resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==} + + '@ljharb/through@2.3.13': + resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==} + engines: {node: '>= 0.4'} + + '@lmdb/lmdb-darwin-arm64@2.5.2': + resolution: {integrity: sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==} + cpu: [arm64] + os: [darwin] + + '@lmdb/lmdb-darwin-arm64@2.7.11': + resolution: {integrity: sha512-r6+vYq2vKzE+vgj/rNVRMwAevq0+ZR9IeMFIqcSga+wMtMdXQ27KqQ7uS99/yXASg29bos7yHP3yk4x6Iio0lw==} + cpu: [arm64] + os: [darwin] + + '@lmdb/lmdb-darwin-x64@2.5.2': + resolution: {integrity: sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==} + cpu: [x64] + os: [darwin] + + '@lmdb/lmdb-darwin-x64@2.7.11': + resolution: {integrity: sha512-jhj1aB4K8ycRL1HOQT5OtzlqOq70jxUQEWRN9Gqh3TIDN30dxXtiHi6EWF516tzw6v2+3QqhDMJh8O6DtTGG8Q==} + cpu: [x64] + os: [darwin] + + '@lmdb/lmdb-linux-arm64@2.5.2': + resolution: {integrity: sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ==} + cpu: [arm64] + os: [linux] + + '@lmdb/lmdb-linux-arm64@2.7.11': + resolution: {integrity: sha512-7xGEfPPbmVJWcY2Nzqo11B9Nfxs+BAsiiaY/OcT4aaTDdykKeCjvKMQJA3KXCtZ1AtiC9ljyGLi+BfUwdulY5A==} + cpu: [arm64] + os: [linux] + + '@lmdb/lmdb-linux-arm@2.5.2': + resolution: {integrity: sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw==} + cpu: [arm] + os: [linux] + + '@lmdb/lmdb-linux-arm@2.7.11': + resolution: {integrity: sha512-dHfLFVSrw/v5X5lkwp0Vl7+NFpEeEYKfMG2DpdFJnnG1RgHQZngZxCaBagFoaJGykRpd2DYF1AeuXBFrAUAXfw==} + cpu: [arm] + os: [linux] + + '@lmdb/lmdb-linux-x64@2.5.2': + resolution: {integrity: sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q==} + cpu: [x64] + os: [linux] + + '@lmdb/lmdb-linux-x64@2.7.11': + resolution: {integrity: sha512-vUKI3JrREMQsXX8q0Eq5zX2FlYCKWMmLiCyyJNfZK0Uyf14RBg9VtB3ObQ41b4swYh2EWaltasWVe93Y8+KDng==} + cpu: [x64] + os: [linux] + + '@lmdb/lmdb-win32-x64@2.5.2': + resolution: {integrity: sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA==} + cpu: [x64] + os: [win32] + + '@lmdb/lmdb-win32-x64@2.7.11': + resolution: {integrity: sha512-BJwkHlSUgtB+Ei52Ai32M1AOMerSlzyIGA/KC4dAGL+GGwVMdwG8HGCOA2TxP3KjhbgDPMYkv7bt/NmOmRIFng==} + cpu: [x64] + os: [win32] + + '@mischnic/json-sourcemap@0.1.0': + resolution: {integrity: sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==} + engines: {node: '>=12.0.0'} + + '@mischnic/json-sourcemap@0.1.1': + resolution: {integrity: sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w==} + engines: {node: '>=12.0.0'} + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} + cpu: [arm64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==} + cpu: [x64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==} + cpu: [arm64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': + resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==} + cpu: [arm] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': + resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==} + cpu: [x64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': + resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==} + cpu: [x64] + os: [win32] + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@parcel/bundler-default@2.9.3': + resolution: {integrity: sha512-JjJK8dq39/UO/MWI/4SCbB1t/qgpQRFnFDetAAAezQ8oN++b24u1fkMDa/xqQGjbuPmGeTds5zxGgYs7id7PYg==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/cache@2.8.3': + resolution: {integrity: sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.8.3 + + '@parcel/cache@2.9.3': + resolution: {integrity: sha512-Bj/H2uAJJSXtysG7E/x4EgTrE2hXmm7td/bc97K8M9N7+vQjxf7xb0ebgqe84ePVMkj4MVQSMEJkEucXVx4b0Q==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.9.3 + + '@parcel/codeframe@2.8.3': + resolution: {integrity: sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg==} + engines: {node: '>= 12.0.0'} + + '@parcel/codeframe@2.9.3': + resolution: {integrity: sha512-z7yTyD6h3dvduaFoHpNqur74/2yDWL++33rjQjIjCaXREBN6dKHoMGMizzo/i4vbiI1p9dDox2FIDEHCMQxqdA==} + engines: {node: '>= 12.0.0'} + + '@parcel/compressor-raw@2.9.3': + resolution: {integrity: sha512-jz3t4/ICMsHEqgiTmv5i1DJva2k5QRpZlBELVxfY+QElJTVe8edKJ0TiKcBxh2hx7sm4aUigGmp7JiqqHRRYmA==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/config-default@2.9.3': + resolution: {integrity: sha512-tqN5tF7QnVABDZAu76co5E6N8mA9n8bxiWdK4xYyINYFIEHgX172oRTqXTnhEMjlMrdmASxvnGlbaPBaVnrCTw==} + peerDependencies: + '@parcel/core': ^2.9.3 + + '@parcel/core@2.9.3': + resolution: {integrity: sha512-4KlM1Zr/jpsqWuMXr2zmGsaOUs1zMMFh9vfCNKRZkptf+uk8I3sugHbNdo+F5B+4e2yMuOEb1zgAmvJLeuH6ww==} + engines: {node: '>= 12.0.0'} + + '@parcel/diagnostic@2.8.3': + resolution: {integrity: sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ==} + engines: {node: '>= 12.0.0'} + + '@parcel/diagnostic@2.9.3': + resolution: {integrity: sha512-6jxBdyB3D7gP4iE66ghUGntWt2v64E6EbD4AetZk+hNJpgudOOPsKTovcMi/i7I4V0qD7WXSF4tvkZUoac0jwA==} + engines: {node: '>= 12.0.0'} + + '@parcel/events@2.8.3': + resolution: {integrity: sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w==} + engines: {node: '>= 12.0.0'} + + '@parcel/events@2.9.3': + resolution: {integrity: sha512-K0Scx+Bx9f9p1vuShMzNwIgiaZUkxEnexaKYHYemJrM7pMAqxIuIqhnvwurRCsZOVLUJPDDNJ626cWTc5vIq+A==} + engines: {node: '>= 12.0.0'} + + '@parcel/fs-search@2.8.3': + resolution: {integrity: sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ==} + engines: {node: '>= 12.0.0'} + + '@parcel/fs-search@2.9.3': + resolution: {integrity: sha512-nsNz3bsOpwS+jphcd+XjZL3F3PDq9lik0O8HPm5f6LYkqKWT+u/kgQzA8OkAHCR3q96LGiHxUywHPEBc27vI4Q==} + engines: {node: '>= 12.0.0'} + + '@parcel/fs@2.8.3': + resolution: {integrity: sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.8.3 + + '@parcel/fs@2.9.3': + resolution: {integrity: sha512-/PrRKgCRw22G7rNPSpgN3Q+i2nIkZWuvIOAdMG4KWXC4XLp8C9jarNaWd5QEQ75amjhQSl3oUzABzkdCtkKrgg==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.9.3 + + '@parcel/graph@2.9.3': + resolution: {integrity: sha512-3LmRJmF8+OprAr6zJT3X2s8WAhLKkrhi6RsFlMWHifGU5ED1PFcJWFbOwJvSjcAhMQJP0fErcFIK1Ludv3Vm3g==} + engines: {node: '>= 12.0.0'} + + '@parcel/hash@2.8.3': + resolution: {integrity: sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw==} + engines: {node: '>= 12.0.0'} + + '@parcel/hash@2.9.3': + resolution: {integrity: sha512-qlH5B85XLzVAeijgKPjm1gQu35LoRYX/8igsjnN8vOlbc3O8BYAUIutU58fbHbtE8MJPbxQQUw7tkTjeoujcQQ==} + engines: {node: '>= 12.0.0'} + + '@parcel/logger@2.8.3': + resolution: {integrity: sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA==} + engines: {node: '>= 12.0.0'} + + '@parcel/logger@2.9.3': + resolution: {integrity: sha512-5FNBszcV6ilGFcijEOvoNVG6IUJGsnMiaEnGQs7Fvc1dktTjEddnoQbIYhcSZL63wEmzBZOgkT5yDMajJ/41jw==} + engines: {node: '>= 12.0.0'} + + '@parcel/markdown-ansi@2.8.3': + resolution: {integrity: sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ==} + engines: {node: '>= 12.0.0'} + + '@parcel/markdown-ansi@2.9.3': + resolution: {integrity: sha512-/Q4X8F2aN8UNjAJrQ5NfK2OmZf6shry9DqetUSEndQ0fHonk78WKt6LT0zSKEBEW/bB/bXk6mNMsCup6L8ibjQ==} + engines: {node: '>= 12.0.0'} + + '@parcel/namer-default@2.9.3': + resolution: {integrity: sha512-1ynFEcap48/Ngzwwn318eLYpLUwijuuZoXQPCsEQ21OOIOtfhFQJaPwXTsw6kRitshKq76P2aafE0BioGSqxcA==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/node-resolver-core@3.0.3': + resolution: {integrity: sha512-AjxNcZVHHJoNT/A99PKIdFtwvoze8PAiC3yz8E/dRggrDIOboUEodeQYV5Aq++aK76uz/iOP0tST2T8A5rhb1A==} + engines: {node: '>= 12.0.0'} + + '@parcel/optimizer-css@2.9.3': + resolution: {integrity: sha512-RK1QwcSdWDNUsFvuLy0hgnYKtPQebzCb0vPPzqs6LhL+vqUu9utOyRycGaQffHCkHVQP6zGlN+KFssd7YtFGhA==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/optimizer-data-url@2.9.3': + resolution: {integrity: sha512-k8lOKLzgZ24JKOuyrNe5PptoH8GJ78AwnumG1xEOKZ77gZnUgdrn3XdjzE28ZqTI4LFkT3jApUiBKBmqnWDe7Q==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/optimizer-htmlnano@2.9.3': + resolution: {integrity: sha512-9g/KBck3c6DokmJfvJ5zpHFBiCSolaGrcsTGx8C3YPdCTVTI9P1TDCwUxvAr4LjpcIRSa82wlLCI+nF6sSgxKA==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/optimizer-image@2.9.3': + resolution: {integrity: sha512-530YzthE7kmecnNhPbkAK+26yQNt69pfJrgE0Ev0BZaM1Wu2+33nki7o8qvkTkikhPrurEJLGIXt1qKmbKvCbA==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + peerDependencies: + '@parcel/core': ^2.9.3 + + '@parcel/optimizer-svgo@2.9.3': + resolution: {integrity: sha512-ytQS0wY5JJhWU4mL0wfhYDUuHcfuw+Gy2+JcnTm1t1AZXHlOTbU6EzRWNqBShsgXjvdrQQXizAe3B6GFFlFJVQ==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/optimizer-swc@2.9.3': + resolution: {integrity: sha512-GQINNeqtdpL1ombq/Cpwi6IBk02wKJ/JJbYbyfHtk8lxlq13soenpwOlzJ5T9D2fdG+FUhai9NxpN5Ss4lNoAg==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/package-manager@2.8.3': + resolution: {integrity: sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.8.3 + + '@parcel/package-manager@2.9.3': + resolution: {integrity: sha512-NH6omcNTEupDmW4Lm1e4NUYBjdqkURxgZ4CNESESInHJe6tblVhNB8Rpr1ar7zDar7cly9ILr8P6N3Ei7bTEjg==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.9.3 + + '@parcel/packager-css@2.9.3': + resolution: {integrity: sha512-mePiWiYZOULY6e1RdAIJyRoYqXqGci0srOaVZYaP7mnrzvJgA63kaZFFsDiEWghunQpMUuUjM2x/vQVHzxmhKQ==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/packager-html@2.9.3': + resolution: {integrity: sha512-0Ex+O0EaZf9APNERRNGgGto02hFJ6f5RQEvRWBK55WAV1rXeU+kpjC0c0qZvnUaUtXfpWMsEBkevJCwDkUMeMg==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/packager-js@2.9.3': + resolution: {integrity: sha512-V5xwkoE3zQ3R+WqAWhA1KGQ791FvJeW6KonOlMI1q76Djjgox68hhObqcLu66AmYNhR2R/wUpkP18hP2z8dSFw==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/packager-raw@2.9.3': + resolution: {integrity: sha512-oPQTNoYanQ2DdJyL61uPYK2py83rKOT8YVh2QWAx0zsSli6Kiy64U3+xOCYWgDVCrHw9+9NpQMuAdSiFg4cq8g==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/packager-svg@2.9.3': + resolution: {integrity: sha512-p/Ya6UO9DAkaCUFxfFGyeHZDp9YPAlpdnh1OChuwqSFOXFjjeXuoK4KLT+ZRalVBo2Jo8xF70oKMZw4MVvaL7Q==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/plugin@2.8.3': + resolution: {integrity: sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw==} + engines: {node: '>= 12.0.0'} + + '@parcel/plugin@2.9.3': + resolution: {integrity: sha512-qN85Gqr2GMuxX1dT1mnuO9hOcvlEv1lrYrCxn7CJN2nUhbwcfG+LEvcrCzCOJ6XtIHm+ZBV9h9p7FfoPLvpw+g==} + engines: {node: '>= 12.0.0'} + + '@parcel/profiler@2.9.3': + resolution: {integrity: sha512-pyHc9lw8VZDfgZoeZWZU9J0CVEv1Zw9O5+e0DJPDPHuXJYr72ZAOhbljtU3owWKAeW+++Q2AZWkbUGEOjI/e6g==} + engines: {node: '>= 12.0.0'} + + '@parcel/reporter-bundle-buddy@2.9.3': + resolution: {integrity: sha512-9ftzLZ161USdvnxueT55EWufLI48va0xJfB5MAJLG92VAS1N1FSFgYKdkGFzBKw0eK9UScQNYnntCGC17rBayQ==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/reporter-dev-server@2.9.3': + resolution: {integrity: sha512-s6eboxdLEtRSvG52xi9IiNbcPKC0XMVmvTckieue2EqGDbDcaHQoHmmwkk0rNq0/Z/UxelGcQXoIYC/0xq3ykQ==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/resolver-default@2.9.3': + resolution: {integrity: sha512-8ESJk1COKvDzkmOnppNXoDamNMlYVIvrKc2RuFPmp8nKVj47R6NwMgvwxEaatyPzvkmyTpq5RvG9I3HFc+r4Cw==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/runtime-browser-hmr@2.9.3': + resolution: {integrity: sha512-EgiDIDrVAWpz7bOzWXqVinQkaFjLwT34wsonpXAbuI7f7r00d52vNAQC9AMu+pTijA3gyKoJ+Q4NWPMZf7ACDA==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/runtime-js@2.8.3': + resolution: {integrity: sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} + + '@parcel/runtime-js@2.9.3': + resolution: {integrity: sha512-EvIy+qXcKnB5qxHhe96zmJpSAViNVXHfQI5RSdZ2a7CPwORwhTI+zPNT9sb7xb/WwFw/WuTTgzT40b41DceU6Q==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/runtime-react-refresh@2.9.3': + resolution: {integrity: sha512-XBgryZQIyCmi6JwEfMUCmINB3l1TpTp9a2iFxmYNpzHlqj4Ve0saKaqWOVRLvC945ZovWIBzcSW2IYqWKGtbAA==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/runtime-service-worker@2.9.3': + resolution: {integrity: sha512-qLJLqv1mMdWL7gyh8aKBFFAuEiJkhUUgLKpdn6eSfH/R7kTtb76WnOwqUrhvEI9bZFUM/8Pa1bzJnPpqSOM+Sw==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/source-map@2.1.1': + resolution: {integrity: sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==} + engines: {node: ^12.18.3 || >=14} + + '@parcel/transformer-babel@2.9.3': + resolution: {integrity: sha512-pURtEsnsp3h6tOBDuzh9wRvVtw4PgIlqwAArIWdrG7iwqOUYv9D8ME4+ePWEu7MQWAp58hv9pTJtqWv4T+Sq8A==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/transformer-css@2.9.3': + resolution: {integrity: sha512-duWMdbEBBPjg3fQdXF16iWIdThetDZvCs2TpUD7xOlXH6kR0V5BJy8ONFT15u1RCqIV9hSNGaS3v3I9YRNY5zQ==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/transformer-graphql@2.9.3': + resolution: {integrity: sha512-cIohsH3WlXgn63baU35ZoWHzttmkyE2Q1pexKjszODzSUq3pdcg+9k4rB/z8GGMzXvFRYuBgl2M2Ukqz7SueMg==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/transformer-html@2.9.3': + resolution: {integrity: sha512-0NU4omcHzFXA1seqftAXA2KNZaMByoKaNdXnLgBgtCGDiYvOcL+6xGHgY6pw9LvOh5um10KI5TxSIMILoI7VtA==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/transformer-image@2.9.3': + resolution: {integrity: sha512-7CEe35RaPadQzLIuxzTtIxnItvOoy46hcbXtOdDt6lmVa4omuOygZYRIya2lsGIP4JHvAaALMb5nt99a1uTwJg==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + peerDependencies: + '@parcel/core': ^2.9.3 + + '@parcel/transformer-inline-string@2.9.3': + resolution: {integrity: sha512-IZNd0Ksl32psX1M41KbUc4BmvVSoLVnlpaMrh9C/l+piFSkDXWMnF0PONX/RcxYMBIwB2jYllheIKH54naeNaA==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/transformer-js@2.9.3': + resolution: {integrity: sha512-Z2MVVg5FYcPOfxlUwxqb5l9yjTMEqE3KI3zq2MBRUme6AV07KxLmCDF23b6glzZlHWQUE8MXzYCTAkOPCcPz+Q==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + peerDependencies: + '@parcel/core': ^2.9.3 + + '@parcel/transformer-json@2.9.3': + resolution: {integrity: sha512-yNL27dbOLhkkrjaQjiQ7Im9VOxmkfuuSNSmS0rA3gEjVcm07SLKRzWkAaPnyx44Lb6bzyOTWwVrb9aMmxgADpA==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/transformer-less@2.9.3': + resolution: {integrity: sha512-qwF5NQ8rPZjS79tv9RRPxzkZcwLcI4Xg2gHm9c1PvsgoaL2tVNpfjiRA6MOrzfJp+xr7xEzeMDZksOJ1WQiiQg==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/transformer-postcss@2.9.3': + resolution: {integrity: sha512-HoDvPqKzhpmvMmHqQhDnt8F1vH61m6plpGiYaYnYv2Om4HHi5ZIq9bO+9QLBnTKfaZ7ndYSefTKOxTYElg7wyw==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/transformer-posthtml@2.9.3': + resolution: {integrity: sha512-2fQGgrzRmaqbWf3y2/T6xhqrNjzqMMKksqJzvc8TMfK6f2kg3Ddjv158eaSW2JdkV39aY7tvAOn5f1uzo74BMA==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/transformer-raw@2.9.3': + resolution: {integrity: sha512-oqdPzMC9QzWRbY9J6TZEqltknjno+dY24QWqf8ondmdF2+W+/2mRDu59hhCzQrqUHgTq4FewowRZmSfpzHxwaQ==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/transformer-react-refresh-wrap@2.9.3': + resolution: {integrity: sha512-cb9NyU6oJlDblFIlzqIE8AkvRQVGl2IwJNKwD4PdE7Y6sq2okGEPG4hOw3k/Y9JVjM4/2pUORqvjSRhWwd9oVQ==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/transformer-sass@2.9.3': + resolution: {integrity: sha512-i9abj9bKg3xCHghJyTM3rUVxIEn9n1Rl+DFdpyNAD8VZ52COfOshFDQOWNuhU1hEnJOFYCjnfcO0HRTsg3dWmg==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/transformer-svg-react@2.9.3': + resolution: {integrity: sha512-RXmCn58CkCBhpsS1AaRBrSRla0U5JN3r3hb7kQvEb+d7chGnsxCCWsBxtlrxPUjoUFLdQli9rhpCTkiyOBXY2A==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/transformer-svg@2.9.3': + resolution: {integrity: sha512-ypmE+dzB09IMCdEAkOsSxq1dEIm2A3h67nAFz4qbfHbwNgXBUuy/jB3ZMwXN/cO0f7SBh/Ap8Jhq6vmGqB5tWw==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/transformer-worklet@2.9.3': + resolution: {integrity: sha512-Fgd81OTOvAxAKoBGsQow/mgxELaNG1FeZW4DuDEPo/hR3lbs90oYuVpG2thdx7hmi/W6xqhrLaEN5Ea1v0LvEA==} + engines: {node: '>= 12.0.0', parcel: ^2.9.3} + + '@parcel/types@2.8.3': + resolution: {integrity: sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw==} + + '@parcel/types@2.9.3': + resolution: {integrity: sha512-NSNY8sYtRhvF1SqhnIGgGvJocyWt1K8Tnw5cVepm0g38ywtX6mwkBvMkmeehXkII4mSUn+frD9wGsydTunezvA==} + + '@parcel/utils@2.8.3': + resolution: {integrity: sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA==} + engines: {node: '>= 12.0.0'} + + '@parcel/utils@2.9.3': + resolution: {integrity: sha512-cesanjtj/oLehW8Waq9JFPmAImhoiHX03ihc3JTWkrvJYSbD7wYKCDgPAM3JiRAqvh1LZ6P699uITrYWNoRLUg==} + engines: {node: '>= 12.0.0'} + + '@parcel/watcher-android-arm64@2.2.0': + resolution: {integrity: sha512-nU2wh00CTQT9rr1TIKTjdQ9lAGYpmz6XuKw0nAwAN+S2A5YiD55BK1u+E5WMCT8YOIDe/n6gaj4o/Bi9294SSQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-android-arm64@2.5.0': + resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.2.0': + resolution: {integrity: sha512-cJl0UZDcodciy3TDMomoK/Huxpjlkkim3SyMgWzjovHGOZKNce9guLz2dzuFwfObBFCjfznbFMIvAZ5syXotYw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-arm64@2.5.0': + resolution: {integrity: sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.2.0': + resolution: {integrity: sha512-QI77zxaGrCV1StKcoRYfsUfmUmvPMPfQrubkBBy5XujV2fwaLgZivQOTQMBgp5K2+E19u1ufpspKXAPqSzpbyg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.0': + resolution: {integrity: sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.0': + resolution: {integrity: sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.2.0': + resolution: {integrity: sha512-I2GPBcAXazPzabCmfsa3HRRW+MGlqxYd8g8RIueJU+a4o5nyNZDz0CR1cu0INT0QSQXEZV7w6UE8Hz9CF8u3Pg==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-glibc@2.5.0': + resolution: {integrity: sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.0': + resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.2.0': + resolution: {integrity: sha512-St5mlfp+2lS9AmgixUqfwJa/DwVmTCJxC1HcOubUTz6YFOKIlkHCeUa1Bxi4E/tR/HSez8+heXHL8HQkJ4Bd8g==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.0': + resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.2.0': + resolution: {integrity: sha512-jS+qfhhoOBVWwMLP65MaG8xdInMK30pPW8wqTCg2AAuVJh5xepMbzkhHJ4zURqHiyY3EiIRuYu4ONJKCxt8iqA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.0': + resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.2.0': + resolution: {integrity: sha512-xJvJ7R2wJdi47WZBFS691RDOWvP1j/IAs3EXaWVhDI8FFITbWrWaln7KoNcR0Y3T+ZwimFY/cfb0PNht1q895g==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.0': + resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.2.0': + resolution: {integrity: sha512-D+NMpgr23a+RI5mu8ZPKWy7AqjBOkURFDgP5iIXXEf/K3hm0jJ3ogzi0Ed2237B/CdYREimCgXyeiAlE/FtwyA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.0': + resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.2.0': + resolution: {integrity: sha512-z225cPn3aygJsyVUOWwfyW+fY0Tvk7N3XCOl66qUPFxpbuXeZuiuuJemmtm8vxyqa3Ur7peU/qJxrpC64aeI7Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-arm64@2.5.0': + resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.0': + resolution: {integrity: sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.2.0': + resolution: {integrity: sha512-JqGW0RJ61BkKx+yYzIURt9s53P7xMVbv0uxYPzAXLBINGaFmkIKSuUPyBVfy8TMbvp93lvF4SPBNDzVRJfvgOw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.0': + resolution: {integrity: sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.2.0': + resolution: {integrity: sha512-71S4TF+IMyAn24PK4KSkdKtqJDR3zRzb0HE3yXpacItqTM7XfF2f5q9NEGLEVl0dAaBAGfNwDCjH120y25F6Tg==} + engines: {node: '>= 10.0.0'} + + '@parcel/watcher@2.5.0': + resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==} + engines: {node: '>= 10.0.0'} + + '@parcel/workers@2.8.3': + resolution: {integrity: sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.8.3 + + '@parcel/workers@2.9.3': + resolution: {integrity: sha512-zRrDuZJzTevrrwElYosFztgldhqW6G9q5zOeQXfVQFkkEJCNfg36ixeiofKRU8uu2x+j+T6216mhMNB6HiuY+w==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.9.3 + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@plasmohq/consolidate@0.17.0': + resolution: {integrity: sha512-Na8imBnvzYPtzkK+9Uv9hPZ/oJti/0jgiQWD222SHxHw2QCVuR4KzslxXCy/rS8gGluSiTs1BGVvc3d2O6aJCA==} + engines: {node: '>= 0.10.0'} + peerDependencies: + arc-templates: ^0.5.3 + atpl: '>=0.7.6' + babel-core: ^6.26.3 + bracket-template: ^1.1.5 + coffeescript: ^2.7.0 + dot: ^1.1.3 + eco: ^1.1.0-rc-3 + ect: ^0.5.9 + ejs: ^3.1.5 + haml-coffee: ^1.14.1 + hamlet: ^0.3.3 + hamljs: ^0.6.2 + handlebars: ^4.7.6 + hogan.js: ^3.0.2 + htmling: ^0.0.8 + jazz: ^0.0.18 + jqtpl: ~1.1.0 + just: ^0.1.8 + liquid: ^5.1.1 + liquor: ^0.0.5 + lodash: ^4.17.20 + marko: ^3.14.4 + mote: ^0.2.0 + mustache: ^4.0.1 + nunjucks: ^3.2.2 + plates: ~0.4.11 + pug: ^3.0.0 + qejs: ^3.0.5 + ractive: ^1.3.12 + razor-tmpl: ^1.3.1 + react: ^18.2.0 + react-dom: ^18.2.0 + slm: ^2.0.0 + squirrelly: ^5.1.0 + teacup: ^2.0.0 + templayed: '>=0.2.3' + then-pug: '*' + tinyliquid: ^0.2.34 + toffee: ^0.3.6 + twig: ^1.15.2 + twing: ^5.0.2 + underscore: ^1.11.0 + vash: ^0.13.0 + velocityjs: ^2.0.1 + walrus: ^0.10.1 + whiskers: ^0.4.0 + peerDependenciesMeta: + arc-templates: + optional: true + atpl: + optional: true + babel-core: + optional: true + bracket-template: + optional: true + coffeescript: + optional: true + dot: + optional: true + eco: + optional: true + ect: + optional: true + ejs: + optional: true + haml-coffee: + optional: true + hamlet: + optional: true + hamljs: + optional: true + handlebars: + optional: true + hogan.js: + optional: true + htmling: + optional: true + jazz: + optional: true + jqtpl: + optional: true + just: + optional: true + liquid: + optional: true + liquor: + optional: true + lodash: + optional: true + marko: + optional: true + mote: + optional: true + mustache: + optional: true + nunjucks: + optional: true + plates: + optional: true + pug: + optional: true + qejs: + optional: true + ractive: + optional: true + razor-tmpl: + optional: true + react: + optional: true + react-dom: + optional: true + slm: + optional: true + squirrelly: + optional: true + teacup: + optional: true + templayed: + optional: true + then-pug: + optional: true + tinyliquid: + optional: true + toffee: + optional: true + twig: + optional: true + twing: + optional: true + underscore: + optional: true + vash: + optional: true + velocityjs: + optional: true + walrus: + optional: true + whiskers: + optional: true + + '@plasmohq/init@0.7.0': + resolution: {integrity: sha512-P75g48dqOGneJ+n0AcqnLE/TYflcaPc3B7h6EopnCBBYUDnCNBMwYmKAkaf5pnhsEB0ybPS6TU1C2DTGfqaW7A==} + + '@plasmohq/parcel-bundler@0.5.6': + resolution: {integrity: sha512-kjwj5tQUhdAK00AxXOzgqJ2jryZg4X6aleYAcjbREPzVMqKEu1NrNSNy5VGAfNRG6NCT6ZYg39ZCyuUOR2lEsQ==} + engines: {node: '>= 16.0.0', parcel: '>= 2.7.0'} + + '@plasmohq/parcel-compressor-utf8@0.1.1': + resolution: {integrity: sha512-9zcF39XIBzauYLERoGNVSy7qR1MzEqjhQn16RrlCpZ1AyNMlBJ3B28SmnUpBQNgne8JOHTtcx6cUVm1IvM3J+g==} + engines: {parcel: '>= 2.8.0'} + + '@plasmohq/parcel-config@0.41.1': + resolution: {integrity: sha512-peNpm+F1tVIZmDx8Mca8b3769cxc2IWS7q0+0Y4BLT1+2kis7X4b46IAYgOXtsDRZCb9pvxQhRhrVHpwGtdVLg==} + + '@plasmohq/parcel-core@0.1.10': + resolution: {integrity: sha512-XbJrqlgPNo+uQaukWayfRDZnAvdkYrmcydCOz0wfmuksTjDisyGkL3ZbWeX86QPN65CXFyou11/9h3+U9IsHfA==} + engines: {parcel: '>= 2.7.0'} + + '@plasmohq/parcel-namer-manifest@0.3.12': + resolution: {integrity: sha512-mNyIVK4nRbjlnXXUygBcmV7xLzgS1HZ3vedxUrMQah0Wp0Y20GFcomToDBC0w9NXIZVSSKY0bRIeh0B6/verfQ==} + engines: {parcel: '>= 2.7.0'} + + '@plasmohq/parcel-optimizer-encapsulate@0.0.8': + resolution: {integrity: sha512-iXDXoLtYBvV4rHhFw3O6nrS3dEWYe9k2m0i/Tvzg2lz4lUHFyvK5NN9RWqkOLfI8JviaqQzaaMKteJhLsX6z1A==} + engines: {parcel: '>= 2.8.0'} + + '@plasmohq/parcel-optimizer-es@0.4.1': + resolution: {integrity: sha512-2FvBq3L5wHyD+TNHpO0IVMJKX1XQ+uBruFVcRUgo+lDkIAyop7P8wpsY4iq3dOKXJrqjwBop9nzNcq0L/zaalQ==} + engines: {parcel: '>= 2.8.0'} + + '@plasmohq/parcel-packager@0.6.15': + resolution: {integrity: sha512-c6Afk5l8EqxyZ/N7p8avWEBt5teTQPQsvZZpPHWhsAY9eonX+h8bFdmXym1oevaq5TySJOpNCSUdTvqqZtlSnQ==} + engines: {parcel: '>= 2.7.0'} + + '@plasmohq/parcel-resolver-post@0.4.5': + resolution: {integrity: sha512-Y5la9wruh3fMHlUoWtVBcbSyvg2xZE1kSRp5BAjtfyZlKS2cT/vIbFTUkqk9nPvXLExBDNajIxTKk9ag/9WzpA==} + engines: {parcel: '>= 2.7.0'} + + '@plasmohq/parcel-resolver@0.14.1': + resolution: {integrity: sha512-1nmmMI7N5rtpni2TpUyPkI8XU1wIk/lTDGNZXLxtkzOoFiFP2sc2xZq4OGhmnRYvWphZYrnhMjRrjNJmqOFqxw==} + engines: {parcel: '>= 2.7.0'} + + '@plasmohq/parcel-runtime@0.25.1': + resolution: {integrity: sha512-asr4DMXJSKPilye0uiyZf51NUC3WZAr0Y6mzl+mtRGIcywuv42+X52qnZl9a9xYkVZeYlVJq62Kfk4+wPthakg==} + engines: {parcel: '>= 2.7.0'} + + '@plasmohq/parcel-transformer-inject-env@0.2.12': + resolution: {integrity: sha512-QhM5Je0LyuAAJMAXeBEu4YvDirIPXuO2SoxHkwTMIwCMXpstPinnKiElrIoolqZjcxLmDCfsXerXZfbN6NhSlA==} + engines: {parcel: '>= 2.7.0'} + + '@plasmohq/parcel-transformer-inline-css@0.3.11': + resolution: {integrity: sha512-EUSwEowFNSgC/F1q/V4H4NXJ23wwLzlmRI6lvIr6S0mIuG/FCga+lAV3IZ+yAuXqUM2VexX6JyYYpNVidrMSxw==} + engines: {parcel: '>= 2.7.0'} + + '@plasmohq/parcel-transformer-manifest@0.20.1': + resolution: {integrity: sha512-fA2d+u7eAURr8Vyi1HAB8zwndBW2czi5YcLgZRVwEqHODYYIyNcmqMJHLt7TAQYTD+POG+z4WpM81AKdhcq8mg==} + engines: {parcel: '>= 2.7.0'} + + '@plasmohq/parcel-transformer-svelte@0.6.0': + resolution: {integrity: sha512-5lZW6NBtzhJaCyjpKaZF1/YzY9CF+kbfNknvASJB/Cf6uJPJlrgdxoWiVJ8IWMs3DyLgAnJXTdIU+uwjwXP1wg==} + engines: {parcel: '>= 2.7.0'} + + '@plasmohq/parcel-transformer-vue@0.5.0': + resolution: {integrity: sha512-/3oVbajt+DRqtbM0RkKFtfyZR8DVjcsYpj1jHqPParGVBiXwgP0D/8Bj5p5/5Iqihs08gzasTcjKcwQKKdj0og==} + engines: {parcel: '>= 2.7.0'} + + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + '@pnpm/network.ca-file@1.0.2': + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + + '@pnpm/npm-conf@2.3.1': + resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} + engines: {node: '>=12'} + + '@remix-run/router@1.21.0': + resolution: {integrity: sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==} + engines: {node: '>=14.0.0'} + + '@sindresorhus/is@5.6.0': + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + + '@svgr/babel-plugin-add-jsx-attribute@6.5.1': + resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0': + resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0': + resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1': + resolution: {integrity: sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-svg-dynamic-title@6.5.1': + resolution: {integrity: sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-svg-em-dimensions@6.5.1': + resolution: {integrity: sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-transform-react-native-svg@6.5.1': + resolution: {integrity: sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-transform-svg-component@6.5.1': + resolution: {integrity: sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==} + engines: {node: '>=12'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-preset@6.5.1': + resolution: {integrity: sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/core@6.5.1': + resolution: {integrity: sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==} + engines: {node: '>=10'} + + '@svgr/hast-util-to-babel-ast@6.5.1': + resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==} + engines: {node: '>=10'} + + '@svgr/plugin-jsx@6.5.1': + resolution: {integrity: sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==} + engines: {node: '>=10'} + peerDependencies: + '@svgr/core': ^6.0.0 + + '@svgr/plugin-svgo@6.5.1': + resolution: {integrity: sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==} + engines: {node: '>=10'} + peerDependencies: + '@svgr/core': '*' + + '@swc/core-darwin-arm64@1.3.96': + resolution: {integrity: sha512-8hzgXYVd85hfPh6mJ9yrG26rhgzCmcLO0h1TIl8U31hwmTbfZLzRitFQ/kqMJNbIBCwmNH1RU2QcJnL3d7f69A==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-arm64@1.9.1': + resolution: {integrity: sha512-2/ncHSCdAh5OHem1fMITrWEzzl97OdMK1PHc9CkxSJnphLjRubfxB5sbc5tDhcO68a5tVy+DxwaBgDec3PXnOg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.3.96': + resolution: {integrity: sha512-mFp9GFfuPg+43vlAdQZl0WZpZSE8sEzqL7sr/7Reul5McUHP0BaLsEzwjvD035ESfkY8GBZdLpMinblIbFNljQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-darwin-x64@1.9.1': + resolution: {integrity: sha512-4MDOFC5zmNqRJ9RGFOH95oYf27J9HniLVpB1pYm2gGeNHdl2QvDMtx2QTuMHQ6+OTn/3y1BHYuhBGp7d405oLA==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.3.96': + resolution: {integrity: sha512-8UEKkYJP4c8YzYIY/LlbSo8z5Obj4hqcv/fUTHiEePiGsOddgGf7AWjh56u7IoN/0uEmEro59nc1ChFXqXSGyg==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm-gnueabihf@1.9.1': + resolution: {integrity: sha512-eVW/BjRW8/HpLe3+1jRU7w7PdRLBgnEEYTkHJISU8805/EKT03xNZn6CfaBpKfeAloY4043hbGzE/NP9IahdpQ==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.3.96': + resolution: {integrity: sha512-c/IiJ0s1y3Ymm2BTpyC/xr6gOvoqAVETrivVXHq68xgNms95luSpbYQ28rqaZC8bQC8M5zdXpSc0T8DJu8RJGw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.9.1': + resolution: {integrity: sha512-8m3u1v8R8NgI/9+cHMkzk14w87blSy3OsQPWPfhOL+XPwhyLPvat+ahQJb2nZmltjTgkB4IbzKFSfbuA34LmNA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.3.96': + resolution: {integrity: sha512-i5/UTUwmJLri7zhtF6SAo/4QDQJDH2fhYJaBIUhrICmIkRO/ltURmpejqxsM/ye9Jqv5zG7VszMC0v/GYn/7BQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.9.1': + resolution: {integrity: sha512-hpT0sQAZnW8l02I289yeyFfT9llGO9PzKDxUq8pocKtioEHiElRqR53juCWoSmzuWi+6KX7zUJ0NKCBrc8pmDg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.3.96': + resolution: {integrity: sha512-USdaZu8lTIkm4Yf9cogct/j5eqtdZqTgcTib4I+NloUW0E/hySou3eSyp3V2UAA1qyuC72ld1otXuyKBna0YKQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.9.1': + resolution: {integrity: sha512-sGFdpdAYusk/ropHiwtXom2JrdaKPxl8MqemRv6dvxZq1Gm/GdmOowxdXIPjCgBGMgoXVcgNviH6CgiO5q+UtA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.3.96': + resolution: {integrity: sha512-QYErutd+G2SNaCinUVobfL7jWWjGTI0QEoQ6hqTp7PxCJS/dmKmj3C5ZkvxRYcq7XcZt7ovrYCTwPTHzt6lZBg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.9.1': + resolution: {integrity: sha512-YtNLNwIWs0Z2+XgBs6+LrCIGtfCDtNr4S4b6Q5HDOreEIGzSvhkef8eyBI5L+fJ2eGov4b7iEo61C4izDJS5RA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.3.96': + resolution: {integrity: sha512-hjGvvAduA3Un2cZ9iNP4xvTXOO4jL3G9iakhFsgVhpkU73SGmK7+LN8ZVBEu4oq2SUcHO6caWvnZ881cxGuSpg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-arm64-msvc@1.9.1': + resolution: {integrity: sha512-qSxD3uZW2vSiHqUt30vUi0PB92zDh9bjqh5YKpfhhVa7h1vt/xXhlid8yMvSNToTfzhRrTEffOAPUr7WVoyQUA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.3.96': + resolution: {integrity: sha512-Far2hVFiwr+7VPCM2GxSmbh3ikTpM3pDombE+d69hkedvYHYZxtTF+2LTKl/sXtpbUnsoq7yV/32c9R/xaaWfw==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.9.1': + resolution: {integrity: sha512-C3fPEwyX/WRPlX6zIToNykJuz1JkZX0sk8H1QH2vpnKuySUkt/Ur5K2FzLgSWzJdbfxstpgS151/es0VGAD+ZA==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.3.96': + resolution: {integrity: sha512-4VbSAniIu0ikLf5mBX81FsljnfqjoVGleEkCQv4+zRlyZtO3FHoDPkeLVoy6WRlj7tyrRcfUJ4mDdPkbfTO14g==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core-win32-x64-msvc@1.9.1': + resolution: {integrity: sha512-2XZ+U1AyVsOAXeH6WK1syDm7+gwTjA8fShs93WcbxnK7HV+NigDlvr4124CeJLTHyh3fMh1o7+CnQnaBJhlysQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.3.96': + resolution: {integrity: sha512-zwE3TLgoZwJfQygdv2SdCK9mRLYluwDOM53I+dT6Z5ZvrgVENmY3txvWDvduzkV+/8IuvrRbVezMpxcojadRdQ==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': ^0.5.0 + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/core@1.9.1': + resolution: {integrity: sha512-OnPc+Kt5oy3xTvr/KCUOqE9ptJcWbyQgAUr1ydh9EmbBcmJTaO1kfQCxm/axzJi6sKeDTxL9rX5zvLOhoYIaQw==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.13': + resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + + '@swc/types@0.1.12': + resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} + + '@swc/types@0.1.14': + resolution: {integrity: sha512-PbSmTiYCN+GMrvfjrMo9bdY+f2COnwbdnoMw7rqU/PI5jXpKjxOGZ0qqZCImxnT81NkNsKnmEpvu+hRXLBeCJg==} + + '@szmarczak/http-timer@5.0.1': + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@types/chrome@0.0.280': + resolution: {integrity: sha512-AotSmZrL9bcZDDmSI1D9dE7PGbhOur5L0cKxXd7IqbVizQWCY4gcvupPUVsQ4FfDj3V2tt/iOpomT9EY0s+w1g==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/filesystem@0.0.36': + resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} + + '@types/filewriter@0.0.33': + resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} + + '@types/har-format@1.2.16': + resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==} + + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@20.16.14': + resolution: {integrity: sha512-vtgGzjxLF7QT88qRHtXMzCWpAAmwonE7fwgVjFtXosUva2oSpnIEc3gNO9P7uIfOxKnii2f79/xtOnfreYtDaA==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + '@types/prop-types@15.7.13': + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} + + '@types/react-dom@18.3.1': + resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==} + + '@types/react@18.3.12': + resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@types/webextension-polyfill@0.12.1': + resolution: {integrity: sha512-xPTFWwQ8BxPevPF2IKsf4hpZNss4LxaOLZXypQH4E63BDLmcwX/RMGdI4tB4VO4Nb6xDBH3F/p4gz4wvof1o9w==} + + '@vue/compiler-core@3.3.4': + resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} + + '@vue/compiler-dom@3.3.4': + resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==} + + '@vue/compiler-sfc@3.3.4': + resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} + + '@vue/compiler-ssr@3.3.4': + resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==} + + '@vue/reactivity-transform@3.3.4': + resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} + + '@vue/reactivity@3.3.4': + resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} + + '@vue/runtime-core@3.3.4': + resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==} + + '@vue/runtime-dom@3.3.4': + resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==} + + '@vue/server-renderer@3.3.4': + resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==} + peerDependencies: + vue: 3.3.4 + + '@vue/shared@3.3.4': + resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==} + + '@zxcvbn-ts/core@3.0.4': + resolution: {integrity: sha512-aQeiT0F09FuJaAqNrxynlAwZ2mW/1MdXakKWNmGM1Qp/VaY6CnB/GfnMS2T8gB2231Esp1/maCWd8vTG4OuShw==} + + '@zxcvbn-ts/language-common@3.0.4': + resolution: {integrity: sha512-viSNNnRYtc7ULXzxrQIVUNwHAPSXRtoIwy/Tq4XQQdIknBzw4vz36lQLF6mvhMlTIlpjoN/Z1GFu/fwiAlUSsw==} + + abortcontroller-polyfill@1.7.5: + resolution: {integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==} + + abortcontroller-polyfill@1.7.6: + resolution: {integrity: sha512-Zypm+LjYdWAzvuypZvDN0smUJrhOurcuBWhhMRBExqVLRvdjp3Z9mASxKyq19K+meZMshwjjy5S0lkm388zE4Q==} + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + axobject-query@3.2.4: + resolution: {integrity: sha512-aPTElBrbifBU1krmZxGZOlBkslORe7Ll7+BDnI50Wy4LgOt69luMgevkDfTq1O/ZgprooPCtWpjCwKSZw/iZ4A==} + engines: {node: '>= 0.4'} + + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + bare-events@2.5.0: + resolution: {integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==} + + bare-fs@2.3.5: + resolution: {integrity: sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==} + + bare-os@2.4.4: + resolution: {integrity: sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==} + + bare-path@2.1.3: + resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==} + + bare-stream@2.3.2: + resolution: {integrity: sha512-EFZHSIBkDgSHIwj2l2QZfP4U5OcD4xFAOwhSb/vlr9PIqyGJGvB/nfClJbcnh3EY4jtPE4zsb5ztae96bVF79A==} + + base-x@3.0.10: + resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-tabs-lock@1.2.15: + resolution: {integrity: sha512-J8K9vdivK0Di+b8SBdE7EZxDr88TnATing7XoLw6+nFkXMQ6sVBh92K3NQvZlZU91AIkFRi0w3sztk5Z+vsswA==} + + browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bundle-require@4.2.1: + resolution: {integrity: sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.17' + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + + cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001678: + resolution: {integrity: sha512-RR+4U/05gNtps58PEBDZcPWTgEO2MBeoPZ96aQcjmfkBWRIDfN451fW2qyDA9/+HohLLIL5GqiMwA+IB1pWarw==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + change-case@5.1.2: + resolution: {integrity: sha512-CAtbGEDulyjzs05RXy3uKcwqeztz/dMEuAc1Xu9NQBsbrhuGMneL0u9Dj5SoutLKBFYun8txxYIwhjtLNfUmCA==} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} + + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + + clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + + code-red@1.0.4: + resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + + content-security-policy-parser@0.4.1: + resolution: {integrity: sha512-NNJS8XPnx3OKr/CUOSwDSJw+lWTrZMYnclLKj0Y9CYOfJNJTWLFGPg3u2hYgbXMXKVRkZR2fbyReNQ1mUff/Qg==} + engines: {node: '>=8.0.0'} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + copy-anything@2.0.6: + resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} + + copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + + core-js@3.26.1: + resolution: {integrity: sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==} + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + cross-spawn@7.0.5: + resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==} + engines: {node: '>= 8'} + + crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + + crypto-random-string@4.0.0: + resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} + engines: {node: '>=12'} + + css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + + css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + + csstype@3.1.1: + resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + + domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + + dotenv-expand@10.0.0: + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} + + dotenv-expand@5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + + dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + engines: {node: '>=12'} + + dotenv@7.0.0: + resolution: {integrity: sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==} + engines: {node: '>=6'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + electron-to-chromium@1.5.53: + resolution: {integrity: sha512-7F6qFMWzBArEFK4PLE+c+nWzhS1kIoNkQvGnNDogofxQAym+roQ0GUIdw6C/4YdJ6JKGp19c2a/DLcfKTi4wRQ==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + entities@3.0.1: + resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} + engines: {node: '>=0.12'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + errno@0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fflate@0.8.1: + resolution: {integrity: sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ==} + + figures@5.0.0: + resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==} + engines: {node: '>=14'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs-extra@11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-port@7.0.0: + resolution: {integrity: sha512-mDHFgApoQd+azgMdwylJrv2DX47ywGq1i5VFJE7fZ0dttNq3iQMfsU4IvEgBHojA3KqEudyu7Vq+oN8kNaNkWw==} + engines: {node: '>=16'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + got@12.6.1: + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} + + got@13.0.0: + resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==} + engines: {node: '>=16'} + + graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphql-import-macro@1.0.0: + resolution: {integrity: sha512-YK4g6iP60H++MpP93tb0VwOg7aM5iIC0hdSQKTrEDANeLWf0KFAT9dwlBeMDrhY+jcW7qsAEDtaw58cgVnQXAw==} + + graphql@15.9.0: + resolution: {integrity: sha512-GCOQdvm7XxV1S4U4CGrsdlEN37245eC8P9zaYCMr6K1BG0IPGy5lUwmJsEOGyl1GD6HXjOtl2keCP9asRBwNvA==} + engines: {node: '>= 10.x'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + htmlnano@2.1.1: + resolution: {integrity: sha512-kAERyg/LuNZYmdqgCdYvugyLWNFAm8MWXpQMz1pLpetmCbFwoMxvkSoaAMlFrOC4OKTWI4KlZGT/RsNxg4ghOw==} + peerDependencies: + cssnano: ^7.0.0 + postcss: ^8.3.11 + purgecss: ^6.0.0 + relateurl: ^0.2.7 + srcset: 5.0.1 + svgo: ^3.0.2 + terser: ^5.10.0 + uncss: ^0.17.3 + peerDependenciesMeta: + cssnano: + optional: true + postcss: + optional: true + purgecss: + optional: true + relateurl: + optional: true + srcset: + optional: true + svgo: + optional: true + terser: + optional: true + uncss: + optional: true + + htmlparser2@7.2.0: + resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + + image-size@0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + inquirer@9.2.12: + resolution: {integrity: sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==} + engines: {node: '>=14.18.0'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-json@2.0.1: + resolution: {integrity: sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + + is-reference@3.0.2: + resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-what@3.14.1: + resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} + + isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true + + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + + js-cookie@3.0.5: + resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} + engines: {node: '>=14'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-to-ts@2.9.2: + resolution: {integrity: sha512-h9WqLkTVpBbiaPb5OmeUpz/FBLS/kvIJw4oRCPiEisIu2WjMh+aai0QIY2LoOhRFx5r92taGLcerIrzxKBAP6g==} + engines: {node: '>=16'} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + keccak@3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + less@4.2.0: + resolution: {integrity: sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==} + engines: {node: '>=6'} + hasBin: true + + lightningcss-darwin-arm64@1.21.8: + resolution: {integrity: sha512-BOMoGfcgkk2f4ltzsJqmkjiqRtlZUK+UdwhR+P6VgIsnpQBV3G01mlL6GzYxYqxq+6/3/n/D+4oy2NeknmADZw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-arm64@1.28.1: + resolution: {integrity: sha512-VG3vvzM0m/rguCdm76DdobNeNJnHK+jWcdkNLFWHLh9YCotRvbRIt45JxwcHlIF8TDqWStVLTdghq5NaigVCBQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.21.8: + resolution: {integrity: sha512-YhF64mcVDPKKufL4aNFBnVH7uvzE0bW3YUsPXdP4yUcT/8IXChypOZ/PE1pmt2RlbmsyVuuIIeZU4zTyZe5Amw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-darwin-x64@1.28.1: + resolution: {integrity: sha512-O7ORdislvKfMohFl4Iq7fxKqdJOuuxArcglVI3amuFO5DJ0wfV3Gxgi1JRo49slfr7OVzJQEHLG4muTWYM5cTQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.21.8: + resolution: {integrity: sha512-CV6A/vTG2Ryd3YpChEgfWWv4TXCAETo9TcHSNx0IP0dnKcnDEiAko4PIKhCqZL11IGdN1ZLBCVPw+vw5ZYwzfA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-freebsd-x64@1.28.1: + resolution: {integrity: sha512-b7sF89B31kYYijxVcFO7l5u6UNA862YstNu+3YbLl/IQKzveL4a5cwR5cdpG+OOhErg/c2u9WCmzZoX2I5GBvw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.21.8: + resolution: {integrity: sha512-9PMbqh8n/Xq0F4/j2NR/hHM2HRDiFXFSF0iOvV67pNWKJkHIO6mR8jBw/88Aro5Ye/ILsX5OuWsxIVJDFv0NXA==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm-gnueabihf@1.28.1: + resolution: {integrity: sha512-p61kXwvhUDLLzkWHjzSFfUBW/F0iy3jr3CWi3k8SKULtJEsJXTI9DqRm9EixxMSe2AMBQBt4auTYiQL4B1N51A==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.21.8: + resolution: {integrity: sha512-JTM/TuMMllkzaXV7/eDjG4IJKLlCl+RfYZwtsVmC82gc0QX0O37csGAcY2OGleiuA4DnEo/Qea5WoFfZUNC6zg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-gnu@1.28.1: + resolution: {integrity: sha512-iO+fN9hOMmzfwqcG2/BgUtMKD48H2JO/SXU44fyIwpY2veb65QF5xiRrQ9l1FwIxbGK3231KBYCtAqv+xf+NsQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.21.8: + resolution: {integrity: sha512-01gWShXrgoIb8urzShpn1RWtZuaSyKSzF2hfO+flzlTPoACqcO3rgcu/3af4Cw54e8vKzL5hPRo4kROmgaOMLg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.28.1: + resolution: {integrity: sha512-dnMHeXEmCUzHHZjaDpQBYuBKcN9nPC3nPFKl70bcj5Bkn5EmkcgEqm5p035LKOgvAwk1XwLpQCML6pXmCwz0NQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.21.8: + resolution: {integrity: sha512-yVB5vYJjJb/Aku0V9QaGYIntvK/1TJOlNB9GmkNpXX5bSSP2pYW4lWW97jxFMHO908M0zjEt1qyOLMyqojHL+Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-gnu@1.28.1: + resolution: {integrity: sha512-7vWDISaMUn+oo2TwRdf2hl/BLdPxvywv9JKEqNZB/0K7bXwV4XE9wN/C2sAp1gGuh6QBA8lpjF4JIPt3HNlCHA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.21.8: + resolution: {integrity: sha512-TYi+KNtBVK0+FZvxTX/d5XJb+tw3Jq+2Rr9hW359wp1afsi1Vkg+uVGgbn+m2dipa5XwpCseQq81ylMlXuyfPw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.28.1: + resolution: {integrity: sha512-IHCu9tVGP+x5BCpA2rF3D04DBokcBza/a8AuHQU+1AiMKubuMegPwcL7RatBgK4ztFHeYnnD5NdhwhRfYMAtNA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.28.1: + resolution: {integrity: sha512-Erm72kHmMg/3h350PTseskz+eEGBM17Fuu79WW2Qqt0BfWSF1jHHc12lkJCWMYl5jcBHPs5yZdgNHtJ7IJS3Uw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.21.8: + resolution: {integrity: sha512-mww+kqbPx0/C44l2LEloECtRUuOFDjq9ftp+EHTPiCp2t+avy0sh8MaFwGsrKkj2XfZhaRhi4CPVKBoqF1Qlwg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss-win32-x64-msvc@1.28.1: + resolution: {integrity: sha512-ZPQtvx+uQBzrSdHH8p4H3M9Alue+x369TPZAA3b4K3d92FPhpZCuBG04+HQzspam9sVeID9mI6f3VRAs2ezaEA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.21.8: + resolution: {integrity: sha512-jEqaL7m/ZckZJjlMAfycr1Kpz7f93k6n7KGF5SJjuPSm6DWI6h3ayLZmgRHgy1OfrwoCed6h4C/gHYPOd1OFMA==} + engines: {node: '>= 12.0.0'} + + lightningcss@1.28.1: + resolution: {integrity: sha512-KRDkHlLlNj3DWh79CDt93fPlRJh2W1AuHV0ZSZAMMuN7lqlsZTV5842idfS1urWG8q9tc17velp1gCXhY7sLnQ==} + engines: {node: '>= 12.0.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lmdb@2.5.2: + resolution: {integrity: sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA==} + + lmdb@2.7.11: + resolution: {integrity: sha512-x9bD4hVp7PFLUoELL8RglbNXhAMt5CYhkmss+CEau9KlNoilsTzNi9QDsPZb3KMpOGZXG6jmXhW3bBxE2XVztw==} + hasBin: true + + load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + magic-string@0.30.12: + resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + + make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + + mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + + mnemonic-id@3.2.7: + resolution: {integrity: sha512-kysx9gAGbvrzuFYxKkcRjnsg/NK61ovJOV4F1cHTRl9T5leg+bo6WI0pWIvOFh1Z/yDL0cjA5R3EEGPPLDv/XA==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + msgpackr-extract@3.0.3: + resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} + hasBin: true + + msgpackr@1.11.2: + resolution: {integrity: sha512-F9UngXRlPyWCDEASDpTf6c9uNhGPTqnTeLVt7bN+bU1eajoR/8V9ys2BRaV5C/e5ihE6sJ9uPIKaYt6bFuO32g==} + + msgpackr@1.8.5: + resolution: {integrity: sha512-mpPs3qqTug6ahbblkThoUY2DQdNXcm4IapwOS3Vm/87vmpzLVelvp9h3It1y9l1VPpiFLV11vfOXnmeEwiIXwg==} + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + napi-build-utils@1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + + needle@3.3.1: + resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} + engines: {node: '>= 4.4.x'} + hasBin: true + + node-abi@3.71.0: + resolution: {integrity: sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==} + engines: {node: '>=10'} + + node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + + node-addon-api@4.3.0: + resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} + + node-addon-api@6.1.0: + resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-gyp-build-optional-packages@5.0.3: + resolution: {integrity: sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==} + hasBin: true + + node-gyp-build-optional-packages@5.0.6: + resolution: {integrity: sha512-2ZJErHG4du9G3/8IWl/l9Bp5BBFy63rno5GVmjQijvTuUZKsl6g8RB4KH/x3NLcV5ZBb4GsXmAuTYr6dRml3Gw==} + hasBin: true + + node-gyp-build-optional-packages@5.2.2: + resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} + hasBin: true + + node-gyp-build@4.8.2: + resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} + hasBin: true + + node-object-hash@3.0.0: + resolution: {integrity: sha512-jLF6tlyletktvSAawuPmH1SReP0YfZQ+tBrDiTCK+Ai7eXPMS9odi5xW/iKC7ZhrWJJ0Z5xYcW/x+1fVMn1Qvw==} + engines: {node: '>=16', pnpm: '>=8'} + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-url@8.0.1: + resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} + engines: {node: '>=14.16'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + nullthrows@1.1.1: + resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + ordered-binary@1.5.3: + resolution: {integrity: sha512-oGFr3T+pYdTGJ+YFEILMpS3es+GiIbs9h/XQrclBXUtd44ey7XwfsMzM31f64I1SQOawDoDr/D823kNCADI8TA==} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + package-json@8.1.1: + resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} + engines: {node: '>=14.16'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-node-version@1.0.1: + resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} + engines: {node: '>= 0.10'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + periscopic@3.1.0: + resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + plasmo@0.89.4: + resolution: {integrity: sha512-vsoMe8ts0tyW27fZxwQLqWR/58NKqRepLFrZMVBH4ceSIyPDryfPpXzVxmBDH43odbiUVFdh8BGAt2ri2vQuGw==} + hasBin: true + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + + posthtml-parser@0.10.2: + resolution: {integrity: sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==} + engines: {node: '>=12'} + + posthtml-parser@0.11.0: + resolution: {integrity: sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==} + engines: {node: '>=12'} + + posthtml-render@3.0.0: + resolution: {integrity: sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==} + engines: {node: '>=12'} + + posthtml@0.16.6: + resolution: {integrity: sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==} + engines: {node: '>=12.0.0'} + + preact@10.24.3: + resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==} + + prebuild-install@7.1.2: + resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} + engines: {node: '>=10'} + hasBin: true + + prettier-plugin-tailwindcss@0.6.8: + resolution: {integrity: sha512-dGu3kdm7SXPkiW4nzeWKCl3uoImdd5CTZEJGxyypEPL37Wj0HT2pLqjrvSei1nTeuQfO4PUfjeW5cTUNRLZ4sA==} + engines: {node: '>=14.21.3'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig-melody': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-multiline-arrays: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + '@zackad/prettier-plugin-twig-melody': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-multiline-arrays: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-sort-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + + prr@1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qrcode.react@3.1.0: + resolution: {integrity: sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + queue-tick@1.0.1: + resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-error-overlay@6.0.9: + resolution: {integrity: sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==} + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-refresh@0.14.0: + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} + + react-refresh@0.9.0: + resolution: {integrity: sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==} + engines: {node: '>=0.10.0'} + + react-router-dom@6.28.0: + resolution: {integrity: sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + + react-router@6.28.0: + resolution: {integrity: sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} + + regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + registry-auth-token@5.0.2: + resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} + engines: {node: '>=14'} + + registry-url@6.0.1: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@3.29.5: + resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sass@1.80.6: + resolution: {integrity: sha512-ccZgdHNiBF1NHBsWvacvT5rju3y1d/Eu+8Ex6c21nHp2lZGLBEtuwc415QfiI1PJa1TpCo3iXwwSRjRpn2Ckjg==} + engines: {node: '>=14.0.0'} + hasBin: true + + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + + sharp@0.32.6: + resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} + engines: {node: '>=14.15.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + + srcset@4.0.0: + resolution: {integrity: sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==} + engines: {node: '>=12'} + + stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + + std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + + streamx@2.20.1: + resolution: {integrity: sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svelte@4.2.2: + resolution: {integrity: sha512-My2tytF2e2NnHSpn2M7/3VdXT4JdTglYVUuSuK/mXL2XtulPYbeBfl8Dm1QiaKRn0zoULRnL+EtfZHHP0k4H3A==} + engines: {node: '>=16'} + + svg-parser@2.0.4: + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + + svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + + swr@2.2.5: + resolution: {integrity: sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==} + peerDependencies: + react: ^16.11.0 || ^17.0.0 || ^18.0.0 + + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + + tailwindcss@3.4.14: + resolution: {integrity: sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==} + engines: {node: '>=14.0.0'} + hasBin: true + + tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + + tar-fs@3.0.6: + resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + temp-dir@3.0.0: + resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} + engines: {node: '>=14.16'} + + tempy@3.1.0: + resolution: {integrity: sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==} + engines: {node: '>=14.16'} + + text-decoder@1.2.1: + resolution: {integrity: sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + timsort@0.3.0: + resolution: {integrity: sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-algebra@1.2.2: + resolution: {integrity: sha512-kloPhf1hq3JbCPOTYoOWDKxebWjNb2o/LKnNfkWhxVVisFFmMJPPdJeGoGmM+iRLyoXAR61e08Pb+vUXINg8aA==} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tslib@2.4.1: + resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsup@7.2.0: + resolution: {integrity: sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ==} + engines: {node: '>=16.14'} + hasBin: true + peerDependencies: + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.1.0' + peerDependenciesMeta: + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + unique-string@3.0.0: + resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} + engines: {node: '>=12'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + use-sync-external-store@1.2.2: + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utility-types@3.11.0: + resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} + engines: {node: '>= 4'} + + vue@3.3.4: + resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + weak-lru-cache@1.2.2: + resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==} + + webextension-polyfill@0.10.0: + resolution: {integrity: sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==} + + webextension-polyfill@0.12.0: + resolution: {integrity: sha512-97TBmpoWJEE+3nFBQ4VocyCdLKfw54rFaJ6EVQYLBCXqCIpLSZkwGgASpv4oPt9gdKCJ80RJlcmNzNn008Ag6Q==} + + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + xxhash-wasm@0.4.2: + resolution: {integrity: sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yaml@2.6.0: + resolution: {integrity: sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==} + engines: {node: '>= 14'} + hasBin: true + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.2': {} + + '@babel/core@7.26.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.2': + dependencies: + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + + '@babel/helper-compilation-targets@7.25.9': + dependencies: + '@babel/compat-data': 7.26.2 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.0': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + + '@babel/parser@7.26.2': + dependencies: + '@babel/types': 7.26.0 + + '@babel/runtime@7.26.0': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 + + '@babel/traverse@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@clerk/chrome-extension@file:../../packages/chrome-extension(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@clerk/clerk-js': 5.33.1(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/clerk-react': 5.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/shared': 2.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + webextension-polyfill: 0.10.0 + transitivePeerDependencies: + - '@types/react' + - supports-color + + '@clerk/clerk-js@5.33.1(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@clerk/localizations': 3.6.2 + '@clerk/shared': 2.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/types': 4.32.0 + '@coinbase/wallet-sdk': 4.0.4 + '@emotion/cache': 11.11.0 + '@emotion/react': 11.11.1(@types/react@18.3.12)(react@18.3.1) + '@floating-ui/react': 0.25.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@formkit/auto-animate': 0.8.2 + '@swc/helpers': 0.5.13 + '@zxcvbn-ts/core': 3.0.4 + '@zxcvbn-ts/language-common': 3.0.4 + browser-tabs-lock: 1.2.15 + copy-to-clipboard: 3.3.3 + core-js: 3.26.1 + crypto-js: 4.2.0 + dequal: 2.0.3 + qrcode.react: 3.1.0(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + regenerator-runtime: 0.13.11 + transitivePeerDependencies: + - '@types/react' + - supports-color + + '@clerk/clerk-react@5.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@clerk/shared': 2.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/types': 4.32.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tslib: 2.4.1 + + '@clerk/localizations@3.6.2': + dependencies: + '@clerk/types': 4.32.0 + + '@clerk/shared@2.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@clerk/types': 4.32.0 + dequal: 2.0.3 + glob-to-regexp: 0.4.1 + js-cookie: 3.0.5 + std-env: 3.7.0 + swr: 2.2.5(react@18.3.1) + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@clerk/types@4.32.0': + dependencies: + csstype: 3.1.1 + + '@coinbase/wallet-sdk@4.0.4': + dependencies: + buffer: 6.0.3 + clsx: 1.2.1 + eventemitter3: 5.0.1 + keccak: 3.0.4 + preact: 10.24.3 + sha.js: 2.4.11 + + '@emotion/babel-plugin@11.12.0': + dependencies: + '@babel/helper-module-imports': 7.25.9 + '@babel/runtime': 7.26.0 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.2 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/cache@11.11.0': + dependencies: + '@emotion/memoize': 0.8.1 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.1 + '@emotion/weak-memoize': 0.3.1 + stylis: 4.2.0 + + '@emotion/hash@0.9.2': {} + + '@emotion/memoize@0.8.1': {} + + '@emotion/memoize@0.9.0': {} + + '@emotion/react@11.11.1(@types/react@18.3.12)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/babel-plugin': 11.12.0 + '@emotion/cache': 11.11.0 + '@emotion/serialize': 1.3.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) + '@emotion/utils': 1.4.1 + '@emotion/weak-memoize': 0.3.1 + hoist-non-react-statics: 3.3.2 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + transitivePeerDependencies: + - supports-color + + '@emotion/serialize@1.3.2': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.1 + csstype: 3.1.3 + + '@emotion/sheet@1.4.0': {} + + '@emotion/unitless@0.10.0': {} + + '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@emotion/utils@1.4.1': {} + + '@emotion/weak-memoize@0.3.1': {} + + '@esbuild/android-arm64@0.18.20': + optional: true + + '@esbuild/android-arm@0.18.20': + optional: true + + '@esbuild/android-x64@0.18.20': + optional: true + + '@esbuild/darwin-arm64@0.18.20': + optional: true + + '@esbuild/darwin-x64@0.18.20': + optional: true + + '@esbuild/freebsd-arm64@0.18.20': + optional: true + + '@esbuild/freebsd-x64@0.18.20': + optional: true + + '@esbuild/linux-arm64@0.18.20': + optional: true + + '@esbuild/linux-arm@0.18.20': + optional: true + + '@esbuild/linux-ia32@0.18.20': + optional: true + + '@esbuild/linux-loong64@0.18.20': + optional: true + + '@esbuild/linux-mips64el@0.18.20': + optional: true + + '@esbuild/linux-ppc64@0.18.20': + optional: true + + '@esbuild/linux-riscv64@0.18.20': + optional: true + + '@esbuild/linux-s390x@0.18.20': + optional: true + + '@esbuild/linux-x64@0.18.20': + optional: true + + '@esbuild/netbsd-x64@0.18.20': + optional: true + + '@esbuild/openbsd-x64@0.18.20': + optional: true + + '@esbuild/sunos-x64@0.18.20': + optional: true + + '@esbuild/win32-arm64@0.18.20': + optional: true + + '@esbuild/win32-ia32@0.18.20': + optional: true + + '@esbuild/win32-x64@0.18.20': + optional: true + + '@expo/spawn-async@1.7.2': + dependencies: + cross-spawn: 7.0.5 + + '@floating-ui/core@1.6.8': + dependencies: + '@floating-ui/utils': 0.2.8 + + '@floating-ui/dom@1.6.12': + dependencies: + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.8 + + '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/dom': 1.6.12 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@floating-ui/react@0.25.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/utils': 0.1.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tabbable: 6.2.0 + + '@floating-ui/utils@0.1.6': {} + + '@floating-ui/utils@0.2.8': {} + + '@formkit/auto-animate@0.8.2': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@lezer/common@0.15.12': {} + + '@lezer/common@1.2.3': {} + + '@lezer/lr@0.15.8': + dependencies: + '@lezer/common': 0.15.12 + + '@lezer/lr@1.4.2': + dependencies: + '@lezer/common': 1.2.3 + + '@ljharb/through@2.3.13': + dependencies: + call-bind: 1.0.7 + + '@lmdb/lmdb-darwin-arm64@2.5.2': + optional: true + + '@lmdb/lmdb-darwin-arm64@2.7.11': + optional: true + + '@lmdb/lmdb-darwin-x64@2.5.2': + optional: true + + '@lmdb/lmdb-darwin-x64@2.7.11': + optional: true + + '@lmdb/lmdb-linux-arm64@2.5.2': + optional: true + + '@lmdb/lmdb-linux-arm64@2.7.11': + optional: true + + '@lmdb/lmdb-linux-arm@2.5.2': + optional: true + + '@lmdb/lmdb-linux-arm@2.7.11': + optional: true + + '@lmdb/lmdb-linux-x64@2.5.2': + optional: true + + '@lmdb/lmdb-linux-x64@2.7.11': + optional: true + + '@lmdb/lmdb-win32-x64@2.5.2': + optional: true + + '@lmdb/lmdb-win32-x64@2.7.11': + optional: true + + '@mischnic/json-sourcemap@0.1.0': + dependencies: + '@lezer/common': 0.15.12 + '@lezer/lr': 0.15.8 + json5: 2.2.3 + + '@mischnic/json-sourcemap@0.1.1': + dependencies: + '@lezer/common': 1.2.3 + '@lezer/lr': 1.4.2 + json5: 2.2.3 + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@parcel/bundler-default@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/diagnostic': 2.9.3 + '@parcel/graph': 2.9.3 + '@parcel/hash': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/cache@2.8.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/fs': 2.8.3(@parcel/core@2.9.3) + '@parcel/logger': 2.8.3 + '@parcel/utils': 2.8.3 + lmdb: 2.5.2 + + '@parcel/cache@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/fs': 2.9.3(@parcel/core@2.9.3) + '@parcel/logger': 2.9.3 + '@parcel/utils': 2.9.3 + lmdb: 2.7.11 + + '@parcel/codeframe@2.8.3': + dependencies: + chalk: 4.1.2 + + '@parcel/codeframe@2.9.3': + dependencies: + chalk: 4.1.2 + + '@parcel/compressor-raw@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/config-default@2.9.3(@parcel/core@2.9.3)(@swc/helpers@0.5.13)(postcss@8.4.49)(typescript@5.2.2)': + dependencies: + '@parcel/bundler-default': 2.9.3(@parcel/core@2.9.3) + '@parcel/compressor-raw': 2.9.3(@parcel/core@2.9.3) + '@parcel/core': 2.9.3 + '@parcel/namer-default': 2.9.3(@parcel/core@2.9.3) + '@parcel/optimizer-css': 2.9.3(@parcel/core@2.9.3) + '@parcel/optimizer-htmlnano': 2.9.3(@parcel/core@2.9.3)(postcss@8.4.49)(typescript@5.2.2) + '@parcel/optimizer-image': 2.9.3(@parcel/core@2.9.3) + '@parcel/optimizer-svgo': 2.9.3(@parcel/core@2.9.3) + '@parcel/optimizer-swc': 2.9.3(@parcel/core@2.9.3)(@swc/helpers@0.5.13) + '@parcel/packager-css': 2.9.3(@parcel/core@2.9.3) + '@parcel/packager-html': 2.9.3(@parcel/core@2.9.3) + '@parcel/packager-js': 2.9.3(@parcel/core@2.9.3) + '@parcel/packager-raw': 2.9.3(@parcel/core@2.9.3) + '@parcel/packager-svg': 2.9.3(@parcel/core@2.9.3) + '@parcel/reporter-dev-server': 2.9.3(@parcel/core@2.9.3) + '@parcel/resolver-default': 2.9.3(@parcel/core@2.9.3) + '@parcel/runtime-browser-hmr': 2.9.3(@parcel/core@2.9.3) + '@parcel/runtime-js': 2.9.3(@parcel/core@2.9.3) + '@parcel/runtime-react-refresh': 2.9.3(@parcel/core@2.9.3) + '@parcel/runtime-service-worker': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-babel': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-css': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-html': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-image': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-js': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-json': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-postcss': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-posthtml': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-raw': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-react-refresh-wrap': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-svg': 2.9.3(@parcel/core@2.9.3) + transitivePeerDependencies: + - '@swc/helpers' + - cssnano + - postcss + - purgecss + - relateurl + - srcset + - terser + - typescript + - uncss + + '@parcel/core@2.9.3': + dependencies: + '@mischnic/json-sourcemap': 0.1.1 + '@parcel/cache': 2.9.3(@parcel/core@2.9.3) + '@parcel/diagnostic': 2.9.3 + '@parcel/events': 2.9.3 + '@parcel/fs': 2.9.3(@parcel/core@2.9.3) + '@parcel/graph': 2.9.3 + '@parcel/hash': 2.9.3 + '@parcel/logger': 2.9.3 + '@parcel/package-manager': 2.9.3(@parcel/core@2.9.3) + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/profiler': 2.9.3 + '@parcel/source-map': 2.1.1 + '@parcel/types': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + '@parcel/workers': 2.9.3(@parcel/core@2.9.3) + abortcontroller-polyfill: 1.7.6 + base-x: 3.0.10 + browserslist: 4.24.2 + clone: 2.1.2 + dotenv: 7.0.0 + dotenv-expand: 5.1.0 + json5: 2.2.3 + msgpackr: 1.11.2 + nullthrows: 1.1.1 + semver: 7.5.4 + + '@parcel/diagnostic@2.8.3': + dependencies: + '@mischnic/json-sourcemap': 0.1.1 + nullthrows: 1.1.1 + + '@parcel/diagnostic@2.9.3': + dependencies: + '@mischnic/json-sourcemap': 0.1.1 + nullthrows: 1.1.1 + + '@parcel/events@2.8.3': {} + + '@parcel/events@2.9.3': {} + + '@parcel/fs-search@2.8.3': + dependencies: + detect-libc: 1.0.3 + + '@parcel/fs-search@2.9.3': {} + + '@parcel/fs@2.8.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/fs-search': 2.8.3 + '@parcel/types': 2.8.3(@parcel/core@2.9.3) + '@parcel/utils': 2.8.3 + '@parcel/watcher': 2.5.0 + '@parcel/workers': 2.8.3(@parcel/core@2.9.3) + + '@parcel/fs@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/fs-search': 2.9.3 + '@parcel/types': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + '@parcel/watcher': 2.5.0 + '@parcel/workers': 2.9.3(@parcel/core@2.9.3) + + '@parcel/graph@2.9.3': + dependencies: + nullthrows: 1.1.1 + + '@parcel/hash@2.8.3': + dependencies: + detect-libc: 1.0.3 + xxhash-wasm: 0.4.2 + + '@parcel/hash@2.9.3': + dependencies: + xxhash-wasm: 0.4.2 + + '@parcel/logger@2.8.3': + dependencies: + '@parcel/diagnostic': 2.8.3 + '@parcel/events': 2.8.3 + + '@parcel/logger@2.9.3': + dependencies: + '@parcel/diagnostic': 2.9.3 + '@parcel/events': 2.9.3 + + '@parcel/markdown-ansi@2.8.3': + dependencies: + chalk: 4.1.2 + + '@parcel/markdown-ansi@2.9.3': + dependencies: + chalk: 4.1.2 + + '@parcel/namer-default@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/diagnostic': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/node-resolver-core@3.0.3(@parcel/core@2.9.3)': + dependencies: + '@mischnic/json-sourcemap': 0.1.1 + '@parcel/diagnostic': 2.9.3 + '@parcel/fs': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + nullthrows: 1.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/optimizer-css@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/diagnostic': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.9.3 + browserslist: 4.24.2 + lightningcss: 1.28.1 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/optimizer-data-url@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + isbinaryfile: 4.0.10 + mime: 2.6.0 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/optimizer-htmlnano@2.9.3(@parcel/core@2.9.3)(postcss@8.4.49)(typescript@5.2.2)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + htmlnano: 2.1.1(postcss@8.4.49)(svgo@2.8.0)(typescript@5.2.2) + nullthrows: 1.1.1 + posthtml: 0.16.6 + svgo: 2.8.0 + transitivePeerDependencies: + - '@parcel/core' + - cssnano + - postcss + - purgecss + - relateurl + - srcset + - terser + - typescript + - uncss + + '@parcel/optimizer-image@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/diagnostic': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + '@parcel/workers': 2.9.3(@parcel/core@2.9.3) + + '@parcel/optimizer-svgo@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/diagnostic': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + svgo: 2.8.0 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/optimizer-swc@2.9.3(@parcel/core@2.9.3)(@swc/helpers@0.5.13)': + dependencies: + '@parcel/diagnostic': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.9.3 + '@swc/core': 1.9.1(@swc/helpers@0.5.13) + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + - '@swc/helpers' + + '@parcel/package-manager@2.8.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/diagnostic': 2.8.3 + '@parcel/fs': 2.8.3(@parcel/core@2.9.3) + '@parcel/logger': 2.8.3 + '@parcel/types': 2.8.3(@parcel/core@2.9.3) + '@parcel/utils': 2.8.3 + '@parcel/workers': 2.8.3(@parcel/core@2.9.3) + semver: 5.7.2 + + '@parcel/package-manager@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/diagnostic': 2.9.3 + '@parcel/fs': 2.9.3(@parcel/core@2.9.3) + '@parcel/logger': 2.9.3 + '@parcel/node-resolver-core': 3.0.3(@parcel/core@2.9.3) + '@parcel/types': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + '@parcel/workers': 2.9.3(@parcel/core@2.9.3) + semver: 7.5.4 + + '@parcel/packager-css@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/diagnostic': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.9.3 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/packager-html@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/types': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + nullthrows: 1.1.1 + posthtml: 0.16.6 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/packager-js@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/diagnostic': 2.9.3 + '@parcel/hash': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.9.3 + globals: 13.24.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/packager-raw@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/packager-svg@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/types': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + posthtml: 0.16.6 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/plugin@2.8.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/types': 2.8.3(@parcel/core@2.9.3) + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/plugin@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/types': 2.9.3(@parcel/core@2.9.3) + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/profiler@2.9.3': + dependencies: + '@parcel/diagnostic': 2.9.3 + '@parcel/events': 2.9.3 + chrome-trace-event: 1.0.4 + + '@parcel/reporter-bundle-buddy@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/reporter-dev-server@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/resolver-default@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/node-resolver-core': 3.0.3(@parcel/core@2.9.3) + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/runtime-browser-hmr@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/runtime-js@2.8.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.8.3(@parcel/core@2.9.3) + '@parcel/utils': 2.8.3 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/runtime-js@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/diagnostic': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/runtime-react-refresh@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + react-error-overlay: 6.0.9 + react-refresh: 0.9.0 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/runtime-service-worker@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/source-map@2.1.1': + dependencies: + detect-libc: 1.0.3 + + '@parcel/transformer-babel@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/diagnostic': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.9.3 + browserslist: 4.24.2 + json5: 2.2.3 + nullthrows: 1.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/transformer-css@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/diagnostic': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.9.3 + browserslist: 4.24.2 + lightningcss: 1.28.1 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/transformer-graphql@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + graphql: 15.9.0 + graphql-import-macro: 1.0.0 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/transformer-html@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/diagnostic': 2.9.3 + '@parcel/hash': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + nullthrows: 1.1.1 + posthtml: 0.16.6 + posthtml-parser: 0.10.2 + posthtml-render: 3.0.0 + semver: 7.5.4 + srcset: 4.0.0 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/transformer-image@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + '@parcel/workers': 2.9.3(@parcel/core@2.9.3) + nullthrows: 1.1.1 + + '@parcel/transformer-inline-string@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/transformer-js@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/diagnostic': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.9.3 + '@parcel/workers': 2.9.3(@parcel/core@2.9.3) + '@swc/helpers': 0.5.13 + browserslist: 4.24.2 + nullthrows: 1.1.1 + regenerator-runtime: 0.13.11 + semver: 7.5.4 + + '@parcel/transformer-json@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + json5: 2.2.3 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/transformer-less@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + less: 4.2.0 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/transformer-postcss@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/diagnostic': 2.9.3 + '@parcel/hash': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + clone: 2.1.2 + nullthrows: 1.1.1 + postcss-value-parser: 4.2.0 + semver: 7.5.4 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/transformer-posthtml@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + nullthrows: 1.1.1 + posthtml: 0.16.6 + posthtml-parser: 0.10.2 + posthtml-render: 3.0.0 + semver: 7.5.4 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/transformer-raw@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/transformer-react-refresh-wrap@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + react-refresh: 0.9.0 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/transformer-sass@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + sass: 1.80.6 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/transformer-svg-react@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@svgr/core': 6.5.1 + '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1) + '@svgr/plugin-svgo': 6.5.1(@svgr/core@6.5.1) + transitivePeerDependencies: + - '@parcel/core' + - supports-color + + '@parcel/transformer-svg@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/diagnostic': 2.9.3 + '@parcel/hash': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + nullthrows: 1.1.1 + posthtml: 0.16.6 + posthtml-parser: 0.10.2 + posthtml-render: 3.0.0 + semver: 7.5.4 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/transformer-worklet@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/types@2.8.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/cache': 2.8.3(@parcel/core@2.9.3) + '@parcel/diagnostic': 2.8.3 + '@parcel/fs': 2.8.3(@parcel/core@2.9.3) + '@parcel/package-manager': 2.8.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + '@parcel/workers': 2.8.3(@parcel/core@2.9.3) + utility-types: 3.11.0 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/types@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/cache': 2.9.3(@parcel/core@2.9.3) + '@parcel/diagnostic': 2.9.3 + '@parcel/fs': 2.9.3(@parcel/core@2.9.3) + '@parcel/package-manager': 2.9.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + '@parcel/workers': 2.9.3(@parcel/core@2.9.3) + utility-types: 3.11.0 + transitivePeerDependencies: + - '@parcel/core' + + '@parcel/utils@2.8.3': + dependencies: + '@parcel/codeframe': 2.8.3 + '@parcel/diagnostic': 2.8.3 + '@parcel/hash': 2.8.3 + '@parcel/logger': 2.8.3 + '@parcel/markdown-ansi': 2.8.3 + '@parcel/source-map': 2.1.1 + chalk: 4.1.2 + + '@parcel/utils@2.9.3': + dependencies: + '@parcel/codeframe': 2.9.3 + '@parcel/diagnostic': 2.9.3 + '@parcel/hash': 2.9.3 + '@parcel/logger': 2.9.3 + '@parcel/markdown-ansi': 2.9.3 + '@parcel/source-map': 2.1.1 + chalk: 4.1.2 + nullthrows: 1.1.1 + + '@parcel/watcher-android-arm64@2.2.0': + optional: true + + '@parcel/watcher-android-arm64@2.5.0': + optional: true + + '@parcel/watcher-darwin-arm64@2.2.0': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.0': + optional: true + + '@parcel/watcher-darwin-x64@2.2.0': + optional: true + + '@parcel/watcher-darwin-x64@2.5.0': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.0': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.2.0': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.0': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.0': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.2.0': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.0': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.2.0': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.0': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.2.0': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.0': + optional: true + + '@parcel/watcher-linux-x64-musl@2.2.0': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.0': + optional: true + + '@parcel/watcher-win32-arm64@2.2.0': + optional: true + + '@parcel/watcher-win32-arm64@2.5.0': + optional: true + + '@parcel/watcher-win32-ia32@2.5.0': + optional: true + + '@parcel/watcher-win32-x64@2.2.0': + optional: true + + '@parcel/watcher-win32-x64@2.5.0': + optional: true + + '@parcel/watcher@2.2.0': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.2.0 + '@parcel/watcher-darwin-arm64': 2.2.0 + '@parcel/watcher-darwin-x64': 2.2.0 + '@parcel/watcher-linux-arm-glibc': 2.2.0 + '@parcel/watcher-linux-arm64-glibc': 2.2.0 + '@parcel/watcher-linux-arm64-musl': 2.2.0 + '@parcel/watcher-linux-x64-glibc': 2.2.0 + '@parcel/watcher-linux-x64-musl': 2.2.0 + '@parcel/watcher-win32-arm64': 2.2.0 + '@parcel/watcher-win32-x64': 2.2.0 + + '@parcel/watcher@2.5.0': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.0 + '@parcel/watcher-darwin-arm64': 2.5.0 + '@parcel/watcher-darwin-x64': 2.5.0 + '@parcel/watcher-freebsd-x64': 2.5.0 + '@parcel/watcher-linux-arm-glibc': 2.5.0 + '@parcel/watcher-linux-arm-musl': 2.5.0 + '@parcel/watcher-linux-arm64-glibc': 2.5.0 + '@parcel/watcher-linux-arm64-musl': 2.5.0 + '@parcel/watcher-linux-x64-glibc': 2.5.0 + '@parcel/watcher-linux-x64-musl': 2.5.0 + '@parcel/watcher-win32-arm64': 2.5.0 + '@parcel/watcher-win32-ia32': 2.5.0 + '@parcel/watcher-win32-x64': 2.5.0 + + '@parcel/workers@2.8.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/diagnostic': 2.8.3 + '@parcel/logger': 2.8.3 + '@parcel/types': 2.8.3(@parcel/core@2.9.3) + '@parcel/utils': 2.8.3 + chrome-trace-event: 1.0.4 + nullthrows: 1.1.1 + + '@parcel/workers@2.9.3(@parcel/core@2.9.3)': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/diagnostic': 2.9.3 + '@parcel/logger': 2.9.3 + '@parcel/profiler': 2.9.3 + '@parcel/types': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + nullthrows: 1.1.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@plasmohq/consolidate@0.17.0(lodash@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + bluebird: 3.7.2 + optionalDependencies: + lodash: 4.17.21 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@plasmohq/init@0.7.0': {} + + '@plasmohq/parcel-bundler@0.5.6': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/diagnostic': 2.9.3 + '@parcel/graph': 2.9.3 + '@parcel/hash': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + nullthrows: 1.1.1 + + '@plasmohq/parcel-compressor-utf8@0.1.1(@parcel/core@2.9.3)': + dependencies: + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + transitivePeerDependencies: + - '@parcel/core' + + '@plasmohq/parcel-config@0.41.1(@swc/core@1.9.1(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)(lodash@4.17.21)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + dependencies: + '@parcel/compressor-raw': 2.9.3(@parcel/core@2.9.3) + '@parcel/config-default': 2.9.3(@parcel/core@2.9.3)(@swc/helpers@0.5.13)(postcss@8.4.49)(typescript@5.2.2) + '@parcel/core': 2.9.3 + '@parcel/optimizer-data-url': 2.9.3(@parcel/core@2.9.3) + '@parcel/reporter-bundle-buddy': 2.9.3(@parcel/core@2.9.3) + '@parcel/resolver-default': 2.9.3(@parcel/core@2.9.3) + '@parcel/runtime-js': 2.8.3(@parcel/core@2.9.3) + '@parcel/runtime-service-worker': 2.9.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + '@parcel/transformer-babel': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-css': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-graphql': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-inline-string': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-js': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-less': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-postcss': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-raw': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-react-refresh-wrap': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-sass': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-svg-react': 2.9.3(@parcel/core@2.9.3) + '@parcel/transformer-worklet': 2.9.3(@parcel/core@2.9.3) + '@plasmohq/parcel-bundler': 0.5.6 + '@plasmohq/parcel-compressor-utf8': 0.1.1(@parcel/core@2.9.3) + '@plasmohq/parcel-namer-manifest': 0.3.12 + '@plasmohq/parcel-optimizer-encapsulate': 0.0.8 + '@plasmohq/parcel-optimizer-es': 0.4.1(@swc/helpers@0.5.13) + '@plasmohq/parcel-packager': 0.6.15 + '@plasmohq/parcel-resolver': 0.14.1 + '@plasmohq/parcel-resolver-post': 0.4.5(@swc/core@1.9.1(@swc/helpers@0.5.13))(postcss@8.4.49) + '@plasmohq/parcel-runtime': 0.25.1 + '@plasmohq/parcel-transformer-inject-env': 0.2.12 + '@plasmohq/parcel-transformer-inline-css': 0.3.11 + '@plasmohq/parcel-transformer-manifest': 0.20.1 + '@plasmohq/parcel-transformer-svelte': 0.6.0 + '@plasmohq/parcel-transformer-vue': 0.5.0(lodash@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + transitivePeerDependencies: + - '@swc/core' + - '@swc/helpers' + - arc-templates + - atpl + - babel-core + - bracket-template + - coffeescript + - cssnano + - dot + - eco + - ect + - ejs + - haml-coffee + - hamlet + - hamljs + - handlebars + - hogan.js + - htmling + - jazz + - jqtpl + - just + - liquid + - liquor + - lodash + - marko + - mote + - mustache + - nunjucks + - plates + - postcss + - pug + - purgecss + - qejs + - ractive + - razor-tmpl + - react + - react-dom + - relateurl + - slm + - squirrelly + - srcset + - supports-color + - teacup + - templayed + - terser + - then-pug + - tinyliquid + - toffee + - ts-node + - twig + - twing + - typescript + - uncss + - underscore + - vash + - velocityjs + - walrus + - whiskers + + '@plasmohq/parcel-core@0.1.10': + dependencies: + '@parcel/cache': 2.9.3(@parcel/core@2.9.3) + '@parcel/core': 2.9.3 + '@parcel/diagnostic': 2.9.3 + '@parcel/events': 2.9.3 + '@parcel/fs': 2.9.3(@parcel/core@2.9.3) + '@parcel/graph': 2.9.3 + '@parcel/hash': 2.9.3 + '@parcel/logger': 2.9.3 + '@parcel/package-manager': 2.9.3(@parcel/core@2.9.3) + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + '@parcel/types': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + '@parcel/watcher': 2.2.0 + '@parcel/workers': 2.9.3(@parcel/core@2.9.3) + abortcontroller-polyfill: 1.7.5 + nullthrows: 1.1.1 + + '@plasmohq/parcel-namer-manifest@0.3.12': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/types': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + + '@plasmohq/parcel-optimizer-encapsulate@0.0.8': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + '@parcel/types': 2.9.3(@parcel/core@2.9.3) + + '@plasmohq/parcel-optimizer-es@0.4.1(@swc/helpers@0.5.13)': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.9.3 + '@swc/core': 1.3.96(@swc/helpers@0.5.13) + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@swc/helpers' + + '@plasmohq/parcel-packager@0.6.15': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/types': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + nullthrows: 1.1.1 + + '@plasmohq/parcel-resolver-post@0.4.5(@swc/core@1.9.1(@swc/helpers@0.5.13))(postcss@8.4.49)': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/hash': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/types': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + tsup: 7.2.0(@swc/core@1.9.1(@swc/helpers@0.5.13))(postcss@8.4.49)(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - '@swc/core' + - postcss + - supports-color + - ts-node + + '@plasmohq/parcel-resolver@0.14.1': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/hash': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/types': 2.9.3(@parcel/core@2.9.3) + fast-glob: 3.3.2 + fs-extra: 11.1.1 + got: 13.0.0 + + '@plasmohq/parcel-runtime@0.25.1': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@types/trusted-types': 2.0.7 + react-refresh: 0.14.0 + + '@plasmohq/parcel-transformer-inject-env@0.2.12': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/types': 2.9.3(@parcel/core@2.9.3) + + '@plasmohq/parcel-transformer-inline-css@0.3.11': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + browserslist: 4.22.1 + lightningcss: 1.21.8 + + '@plasmohq/parcel-transformer-manifest@0.20.1': + dependencies: + '@mischnic/json-sourcemap': 0.1.0 + '@parcel/core': 2.9.3 + '@parcel/diagnostic': 2.9.3 + '@parcel/fs': 2.9.3(@parcel/core@2.9.3) + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/types': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + content-security-policy-parser: 0.4.1 + json-schema-to-ts: 2.9.2 + nullthrows: 1.1.1 + + '@plasmohq/parcel-transformer-svelte@0.6.0': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/diagnostic': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.9.3 + svelte: 4.2.2 + + '@plasmohq/parcel-transformer-vue@0.5.0(lodash@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@parcel/core': 2.9.3 + '@parcel/diagnostic': 2.9.3 + '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + '@parcel/types': 2.9.3(@parcel/core@2.9.3) + '@parcel/utils': 2.9.3 + '@plasmohq/consolidate': 0.17.0(lodash@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@vue/compiler-sfc': 3.3.4 + nullthrows: 1.1.1 + semver: 7.5.4 + vue: 3.3.4 + transitivePeerDependencies: + - arc-templates + - atpl + - babel-core + - bracket-template + - coffeescript + - dot + - eco + - ect + - ejs + - haml-coffee + - hamlet + - hamljs + - handlebars + - hogan.js + - htmling + - jazz + - jqtpl + - just + - liquid + - liquor + - lodash + - marko + - mote + - mustache + - nunjucks + - plates + - pug + - qejs + - ractive + - razor-tmpl + - react + - react-dom + - slm + - squirrelly + - teacup + - templayed + - then-pug + - tinyliquid + - toffee + - twig + - twing + - underscore + - vash + - velocityjs + - walrus + - whiskers + + '@pnpm/config.env-replace@1.1.0': {} + + '@pnpm/network.ca-file@1.0.2': + dependencies: + graceful-fs: 4.2.10 + + '@pnpm/npm-conf@2.3.1': + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + + '@remix-run/router@1.21.0': {} + + '@sindresorhus/is@5.6.0': {} + + '@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + + '@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + + '@svgr/babel-plugin-svg-dynamic-title@6.5.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + + '@svgr/babel-plugin-svg-em-dimensions@6.5.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + + '@svgr/babel-plugin-transform-react-native-svg@6.5.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + + '@svgr/babel-plugin-transform-svg-component@6.5.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + + '@svgr/babel-preset@6.5.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@svgr/babel-plugin-add-jsx-attribute': 6.5.1(@babel/core@7.26.0) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.26.0) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.26.0) + '@svgr/babel-plugin-replace-jsx-attribute-value': 6.5.1(@babel/core@7.26.0) + '@svgr/babel-plugin-svg-dynamic-title': 6.5.1(@babel/core@7.26.0) + '@svgr/babel-plugin-svg-em-dimensions': 6.5.1(@babel/core@7.26.0) + '@svgr/babel-plugin-transform-react-native-svg': 6.5.1(@babel/core@7.26.0) + '@svgr/babel-plugin-transform-svg-component': 6.5.1(@babel/core@7.26.0) + + '@svgr/core@6.5.1': + dependencies: + '@babel/core': 7.26.0 + '@svgr/babel-preset': 6.5.1(@babel/core@7.26.0) + '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1) + camelcase: 6.3.0 + cosmiconfig: 7.1.0 + transitivePeerDependencies: + - supports-color + + '@svgr/hast-util-to-babel-ast@6.5.1': + dependencies: + '@babel/types': 7.26.0 + entities: 4.5.0 + + '@svgr/plugin-jsx@6.5.1(@svgr/core@6.5.1)': + dependencies: + '@babel/core': 7.26.0 + '@svgr/babel-preset': 6.5.1(@babel/core@7.26.0) + '@svgr/core': 6.5.1 + '@svgr/hast-util-to-babel-ast': 6.5.1 + svg-parser: 2.0.4 + transitivePeerDependencies: + - supports-color + + '@svgr/plugin-svgo@6.5.1(@svgr/core@6.5.1)': + dependencies: + '@svgr/core': 6.5.1 + cosmiconfig: 7.1.0 + deepmerge: 4.3.1 + svgo: 2.8.0 + + '@swc/core-darwin-arm64@1.3.96': + optional: true + + '@swc/core-darwin-arm64@1.9.1': + optional: true + + '@swc/core-darwin-x64@1.3.96': + optional: true + + '@swc/core-darwin-x64@1.9.1': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.3.96': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.9.1': + optional: true + + '@swc/core-linux-arm64-gnu@1.3.96': + optional: true + + '@swc/core-linux-arm64-gnu@1.9.1': + optional: true + + '@swc/core-linux-arm64-musl@1.3.96': + optional: true + + '@swc/core-linux-arm64-musl@1.9.1': + optional: true + + '@swc/core-linux-x64-gnu@1.3.96': + optional: true + + '@swc/core-linux-x64-gnu@1.9.1': + optional: true + + '@swc/core-linux-x64-musl@1.3.96': + optional: true + + '@swc/core-linux-x64-musl@1.9.1': + optional: true + + '@swc/core-win32-arm64-msvc@1.3.96': + optional: true + + '@swc/core-win32-arm64-msvc@1.9.1': + optional: true + + '@swc/core-win32-ia32-msvc@1.3.96': + optional: true + + '@swc/core-win32-ia32-msvc@1.9.1': + optional: true + + '@swc/core-win32-x64-msvc@1.3.96': + optional: true + + '@swc/core-win32-x64-msvc@1.9.1': + optional: true + + '@swc/core@1.3.96(@swc/helpers@0.5.13)': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.12 + optionalDependencies: + '@swc/core-darwin-arm64': 1.3.96 + '@swc/core-darwin-x64': 1.3.96 + '@swc/core-linux-arm-gnueabihf': 1.3.96 + '@swc/core-linux-arm64-gnu': 1.3.96 + '@swc/core-linux-arm64-musl': 1.3.96 + '@swc/core-linux-x64-gnu': 1.3.96 + '@swc/core-linux-x64-musl': 1.3.96 + '@swc/core-win32-arm64-msvc': 1.3.96 + '@swc/core-win32-ia32-msvc': 1.3.96 + '@swc/core-win32-x64-msvc': 1.3.96 + '@swc/helpers': 0.5.13 + + '@swc/core@1.9.1(@swc/helpers@0.5.13)': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.14 + optionalDependencies: + '@swc/core-darwin-arm64': 1.9.1 + '@swc/core-darwin-x64': 1.9.1 + '@swc/core-linux-arm-gnueabihf': 1.9.1 + '@swc/core-linux-arm64-gnu': 1.9.1 + '@swc/core-linux-arm64-musl': 1.9.1 + '@swc/core-linux-x64-gnu': 1.9.1 + '@swc/core-linux-x64-musl': 1.9.1 + '@swc/core-win32-arm64-msvc': 1.9.1 + '@swc/core-win32-ia32-msvc': 1.9.1 + '@swc/core-win32-x64-msvc': 1.9.1 + '@swc/helpers': 0.5.13 + + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.13': + dependencies: + tslib: 2.8.1 + + '@swc/types@0.1.12': + dependencies: + '@swc/counter': 0.1.3 + + '@swc/types@0.1.14': + dependencies: + '@swc/counter': 0.1.3 + + '@szmarczak/http-timer@5.0.1': + dependencies: + defer-to-connect: 2.0.1 + + '@trysound/sax@0.2.0': {} + + '@types/chrome@0.0.280': + dependencies: + '@types/filesystem': 0.0.36 + '@types/har-format': 1.2.16 + + '@types/estree@1.0.6': {} + + '@types/filesystem@0.0.36': + dependencies: + '@types/filewriter': 0.0.33 + + '@types/filewriter@0.0.33': {} + + '@types/har-format@1.2.16': {} + + '@types/http-cache-semantics@4.0.4': {} + + '@types/json-schema@7.0.15': {} + + '@types/node@20.16.14': + dependencies: + undici-types: 6.19.8 + + '@types/parse-json@4.0.2': {} + + '@types/prop-types@15.7.13': {} + + '@types/react-dom@18.3.1': + dependencies: + '@types/react': 18.3.12 + + '@types/react@18.3.12': + dependencies: + '@types/prop-types': 15.7.13 + csstype: 3.1.3 + + '@types/trusted-types@2.0.7': {} + + '@types/webextension-polyfill@0.12.1': {} + + '@vue/compiler-core@3.3.4': + dependencies: + '@babel/parser': 7.26.2 + '@vue/shared': 3.3.4 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.3.4': + dependencies: + '@vue/compiler-core': 3.3.4 + '@vue/shared': 3.3.4 + + '@vue/compiler-sfc@3.3.4': + dependencies: + '@babel/parser': 7.26.2 + '@vue/compiler-core': 3.3.4 + '@vue/compiler-dom': 3.3.4 + '@vue/compiler-ssr': 3.3.4 + '@vue/reactivity-transform': 3.3.4 + '@vue/shared': 3.3.4 + estree-walker: 2.0.2 + magic-string: 0.30.12 + postcss: 8.4.49 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.3.4': + dependencies: + '@vue/compiler-dom': 3.3.4 + '@vue/shared': 3.3.4 + + '@vue/reactivity-transform@3.3.4': + dependencies: + '@babel/parser': 7.26.2 + '@vue/compiler-core': 3.3.4 + '@vue/shared': 3.3.4 + estree-walker: 2.0.2 + magic-string: 0.30.12 + + '@vue/reactivity@3.3.4': + dependencies: + '@vue/shared': 3.3.4 + + '@vue/runtime-core@3.3.4': + dependencies: + '@vue/reactivity': 3.3.4 + '@vue/shared': 3.3.4 + + '@vue/runtime-dom@3.3.4': + dependencies: + '@vue/runtime-core': 3.3.4 + '@vue/shared': 3.3.4 + csstype: 3.1.3 + + '@vue/server-renderer@3.3.4(vue@3.3.4)': + dependencies: + '@vue/compiler-ssr': 3.3.4 + '@vue/shared': 3.3.4 + vue: 3.3.4 + + '@vue/shared@3.3.4': {} + + '@zxcvbn-ts/core@3.0.4': + dependencies: + fastest-levenshtein: 1.0.16 + + '@zxcvbn-ts/language-common@3.0.4': {} + + abortcontroller-polyfill@1.7.5: {} + + abortcontroller-polyfill@1.7.6: {} + + acorn@8.14.0: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@5.0.2: {} + + argparse@2.0.1: {} + + aria-query@5.3.2: {} + + array-union@2.1.0: {} + + axobject-query@3.2.4: {} + + b4a@1.6.7: {} + + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.26.0 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + + balanced-match@1.0.2: {} + + bare-events@2.5.0: + optional: true + + bare-fs@2.3.5: + dependencies: + bare-events: 2.5.0 + bare-path: 2.1.3 + bare-stream: 2.3.2 + optional: true + + bare-os@2.4.4: + optional: true + + bare-path@2.1.3: + dependencies: + bare-os: 2.4.4 + optional: true + + bare-stream@2.3.2: + dependencies: + streamx: 2.20.1 + optional: true + + base-x@3.0.10: + dependencies: + safe-buffer: 5.2.1 + + base64-js@1.5.1: {} + + binary-extensions@2.3.0: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + bluebird@3.7.2: {} + + boolbase@1.0.0: {} + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browser-tabs-lock@1.2.15: + dependencies: + lodash: 4.17.21 + + browserslist@4.22.1: + dependencies: + caniuse-lite: 1.0.30001678 + electron-to-chromium: 1.5.53 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.22.1) + + browserslist@4.24.2: + dependencies: + caniuse-lite: 1.0.30001678 + electron-to-chromium: 1.5.53 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bundle-require@4.2.1(esbuild@0.18.20): + dependencies: + esbuild: 0.18.20 + load-tsconfig: 0.2.5 + + cac@6.7.14: {} + + cacheable-lookup@7.0.0: {} + + cacheable-request@10.2.14: + dependencies: + '@types/http-cache-semantics': 4.0.4 + get-stream: 6.0.1 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.0.1 + responselike: 3.0.0 + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + callsites@3.1.0: {} + + camelcase-css@2.0.1: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001678: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + change-case@5.1.2: {} + + chardet@0.7.0: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@4.0.1: + dependencies: + readdirp: 4.0.2 + + chownr@1.1.4: {} + + chrome-trace-event@1.0.4: {} + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-spinners@2.9.2: {} + + cli-width@4.1.0: {} + + client-only@0.0.1: {} + + clone@1.0.4: {} + + clone@2.1.2: {} + + clsx@1.2.1: {} + + code-red@1.0.4: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + '@types/estree': 1.0.6 + acorn: 8.14.0 + estree-walker: 3.0.3 + periscopic: 3.1.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + + commander@4.1.1: {} + + commander@7.2.0: {} + + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + + content-security-policy-parser@0.4.1: {} + + convert-source-map@1.9.0: {} + + convert-source-map@2.0.0: {} + + copy-anything@2.0.6: + dependencies: + is-what: 3.14.1 + + copy-to-clipboard@3.3.3: + dependencies: + toggle-selection: 1.0.6 + + core-js@3.26.1: {} + + cosmiconfig@7.1.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + + cosmiconfig@9.0.0(typescript@5.2.2): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.2.2 + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cross-spawn@7.0.5: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypto-js@4.2.0: {} + + crypto-random-string@4.0.0: + dependencies: + type-fest: 1.4.0 + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-tree@1.1.3: + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.1 + + css-what@6.1.0: {} + + cssesc@3.0.0: {} + + csso@4.2.0: + dependencies: + css-tree: 1.1.3 + + csstype@3.1.1: {} + + csstype@3.1.3: {} + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + deep-extend@0.6.0: {} + + deepmerge@4.3.1: {} + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + defer-to-connect@2.0.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + dequal@2.0.3: {} + + detect-libc@1.0.3: {} + + detect-libc@2.0.3: {} + + didyoumean@1.2.2: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dlv@1.1.3: {} + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + domelementtype@2.3.0: {} + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + dotenv-expand@10.0.0: {} + + dotenv-expand@5.1.0: {} + + dotenv@16.3.1: {} + + dotenv@7.0.0: {} + + eastasianwidth@0.2.0: {} + + electron-to-chromium@1.5.53: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + entities@2.2.0: {} + + entities@3.0.1: {} + + entities@4.5.0: {} + + env-paths@2.2.1: {} + + errno@0.1.8: + dependencies: + prr: 1.0.1 + optional: true + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + esbuild@0.18.20: + 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 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 + + eventemitter3@5.0.1: {} + + events@3.3.0: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.5 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + expand-template@2.0.3: {} + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + fast-fifo@1.3.2: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fastest-levenshtein@1.0.16: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + fflate@0.8.1: {} + + figures@5.0.0: + dependencies: + escape-string-regexp: 5.0.0 + is-unicode-supported: 1.3.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-root@1.1.0: {} + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + form-data-encoder@2.1.4: {} + + fs-constants@1.0.0: {} + + fs-extra@11.1.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-port@7.0.0: {} + + get-stream@6.0.1: {} + + github-from-package@0.0.0: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + globals@11.12.0: {} + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + got@12.6.1: + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + + got@13.0.0: + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + + graceful-fs@4.2.10: {} + + graceful-fs@4.2.11: {} + + graphql-import-macro@1.0.0: + dependencies: + graphql: 15.9.0 + + graphql@15.9.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + + htmlnano@2.1.1(postcss@8.4.49)(svgo@2.8.0)(typescript@5.2.2): + dependencies: + cosmiconfig: 9.0.0(typescript@5.2.2) + posthtml: 0.16.6 + timsort: 0.3.0 + optionalDependencies: + postcss: 8.4.49 + svgo: 2.8.0 + transitivePeerDependencies: + - typescript + + htmlparser2@7.2.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 3.0.1 + + http-cache-semantics@4.1.1: {} + + http2-wrapper@2.2.1: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + human-signals@2.1.0: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + optional: true + + ieee754@1.2.1: {} + + ignore@5.2.4: {} + + image-size@0.5.5: + optional: true + + immutable@4.3.7: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + inquirer@9.2.12: + dependencies: + '@ljharb/through': 2.3.13 + ansi-escapes: 4.3.2 + chalk: 5.3.0 + cli-cursor: 3.1.0 + cli-width: 4.1.0 + external-editor: 3.1.0 + figures: 5.0.0 + lodash: 4.17.21 + mute-stream: 1.0.0 + ora: 5.4.1 + run-async: 3.0.0 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + + is-arrayish@0.2.1: {} + + is-arrayish@0.3.2: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-interactive@1.0.0: {} + + is-json@2.0.1: {} + + is-number@7.0.0: {} + + is-path-inside@4.0.0: {} + + is-reference@3.0.2: + dependencies: + '@types/estree': 1.0.6 + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + is-unicode-supported@0.1.0: {} + + is-unicode-supported@1.3.0: {} + + is-what@3.14.1: {} + + isbinaryfile@4.0.10: {} + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jiti@1.21.6: {} + + joycon@3.1.1: {} + + js-cookie@3.0.5: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.0.2: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-to-ts@2.9.2: + dependencies: + '@babel/runtime': 7.26.0 + '@types/json-schema': 7.0.15 + ts-algebra: 1.2.2 + + json5@2.2.3: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + keccak@3.0.4: + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.2 + readable-stream: 3.6.2 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + less@4.2.0: + dependencies: + copy-anything: 2.0.6 + parse-node-version: 1.0.1 + tslib: 2.8.1 + optionalDependencies: + errno: 0.1.8 + graceful-fs: 4.2.11 + image-size: 0.5.5 + make-dir: 2.1.0 + mime: 1.6.0 + needle: 3.3.1 + source-map: 0.6.1 + + lightningcss-darwin-arm64@1.21.8: + optional: true + + lightningcss-darwin-arm64@1.28.1: + optional: true + + lightningcss-darwin-x64@1.21.8: + optional: true + + lightningcss-darwin-x64@1.28.1: + optional: true + + lightningcss-freebsd-x64@1.21.8: + optional: true + + lightningcss-freebsd-x64@1.28.1: + optional: true + + lightningcss-linux-arm-gnueabihf@1.21.8: + optional: true + + lightningcss-linux-arm-gnueabihf@1.28.1: + optional: true + + lightningcss-linux-arm64-gnu@1.21.8: + optional: true + + lightningcss-linux-arm64-gnu@1.28.1: + optional: true + + lightningcss-linux-arm64-musl@1.21.8: + optional: true + + lightningcss-linux-arm64-musl@1.28.1: + optional: true + + lightningcss-linux-x64-gnu@1.21.8: + optional: true + + lightningcss-linux-x64-gnu@1.28.1: + optional: true + + lightningcss-linux-x64-musl@1.21.8: + optional: true + + lightningcss-linux-x64-musl@1.28.1: + optional: true + + lightningcss-win32-arm64-msvc@1.28.1: + optional: true + + lightningcss-win32-x64-msvc@1.21.8: + optional: true + + lightningcss-win32-x64-msvc@1.28.1: + optional: true + + lightningcss@1.21.8: + dependencies: + detect-libc: 1.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.21.8 + lightningcss-darwin-x64: 1.21.8 + lightningcss-freebsd-x64: 1.21.8 + lightningcss-linux-arm-gnueabihf: 1.21.8 + lightningcss-linux-arm64-gnu: 1.21.8 + lightningcss-linux-arm64-musl: 1.21.8 + lightningcss-linux-x64-gnu: 1.21.8 + lightningcss-linux-x64-musl: 1.21.8 + lightningcss-win32-x64-msvc: 1.21.8 + + lightningcss@1.28.1: + dependencies: + detect-libc: 1.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.28.1 + lightningcss-darwin-x64: 1.28.1 + lightningcss-freebsd-x64: 1.28.1 + lightningcss-linux-arm-gnueabihf: 1.28.1 + lightningcss-linux-arm64-gnu: 1.28.1 + lightningcss-linux-arm64-musl: 1.28.1 + lightningcss-linux-x64-gnu: 1.28.1 + lightningcss-linux-x64-musl: 1.28.1 + lightningcss-win32-arm64-msvc: 1.28.1 + lightningcss-win32-x64-msvc: 1.28.1 + + lilconfig@2.1.0: {} + + lilconfig@3.1.2: {} + + lines-and-columns@1.2.4: {} + + lmdb@2.5.2: + dependencies: + msgpackr: 1.11.2 + node-addon-api: 4.3.0 + node-gyp-build-optional-packages: 5.0.3 + ordered-binary: 1.5.3 + weak-lru-cache: 1.2.2 + optionalDependencies: + '@lmdb/lmdb-darwin-arm64': 2.5.2 + '@lmdb/lmdb-darwin-x64': 2.5.2 + '@lmdb/lmdb-linux-arm': 2.5.2 + '@lmdb/lmdb-linux-arm64': 2.5.2 + '@lmdb/lmdb-linux-x64': 2.5.2 + '@lmdb/lmdb-win32-x64': 2.5.2 + + lmdb@2.7.11: + dependencies: + msgpackr: 1.8.5 + node-addon-api: 4.3.0 + node-gyp-build-optional-packages: 5.0.6 + ordered-binary: 1.5.3 + weak-lru-cache: 1.2.2 + optionalDependencies: + '@lmdb/lmdb-darwin-arm64': 2.7.11 + '@lmdb/lmdb-darwin-x64': 2.7.11 + '@lmdb/lmdb-linux-arm': 2.7.11 + '@lmdb/lmdb-linux-arm64': 2.7.11 + '@lmdb/lmdb-linux-x64': 2.7.11 + '@lmdb/lmdb-win32-x64': 2.7.11 + + load-tsconfig@0.2.5: {} + + locate-character@3.0.0: {} + + lodash.sortby@4.7.0: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lowercase-keys@3.0.0: {} + + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + magic-string@0.30.12: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + make-dir@2.1.0: + dependencies: + pify: 4.0.1 + semver: 5.7.2 + optional: true + + mdn-data@2.0.14: {} + + mdn-data@2.0.30: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime@1.6.0: + optional: true + + mime@2.6.0: {} + + mimic-fn@2.1.0: {} + + mimic-response@3.1.0: {} + + mimic-response@4.0.0: {} + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + mkdirp-classic@0.5.3: {} + + mnemonic-id@3.2.7: {} + + ms@2.1.3: {} + + msgpackr-extract@3.0.3: + dependencies: + node-gyp-build-optional-packages: 5.2.2 + optionalDependencies: + '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 + optional: true + + msgpackr@1.11.2: + optionalDependencies: + msgpackr-extract: 3.0.3 + + msgpackr@1.8.5: + optionalDependencies: + msgpackr-extract: 3.0.3 + + mute-stream@1.0.0: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.7: {} + + napi-build-utils@1.0.2: {} + + needle@3.3.1: + dependencies: + iconv-lite: 0.6.3 + sax: 1.4.1 + optional: true + + node-abi@3.71.0: + dependencies: + semver: 7.5.4 + + node-addon-api@2.0.2: {} + + node-addon-api@4.3.0: {} + + node-addon-api@6.1.0: {} + + node-addon-api@7.1.1: {} + + node-gyp-build-optional-packages@5.0.3: {} + + node-gyp-build-optional-packages@5.0.6: {} + + node-gyp-build-optional-packages@5.2.2: + dependencies: + detect-libc: 2.0.3 + optional: true + + node-gyp-build@4.8.2: {} + + node-object-hash@3.0.0: {} + + node-releases@2.0.18: {} + + normalize-path@3.0.0: {} + + normalize-url@8.0.1: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + nullthrows@1.1.1: {} + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + ordered-binary@1.5.3: {} + + os-tmpdir@1.0.2: {} + + p-cancelable@3.0.0: {} + + package-json-from-dist@1.0.1: {} + + package-json@8.1.1: + dependencies: + got: 12.6.1 + registry-auth-token: 5.0.2 + registry-url: 6.0.1 + semver: 7.5.4 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-node-version@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-type@4.0.0: {} + + periscopic@3.1.0: + dependencies: + '@types/estree': 1.0.6 + estree-walker: 3.0.3 + is-reference: 3.0.2 + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pify@2.3.0: {} + + pify@4.0.1: + optional: true + + pirates@4.0.6: {} + + plasmo@0.89.4(@swc/core@1.9.1(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)(lodash@4.17.21)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@expo/spawn-async': 1.7.2 + '@parcel/core': 2.9.3 + '@parcel/fs': 2.9.3(@parcel/core@2.9.3) + '@parcel/package-manager': 2.9.3(@parcel/core@2.9.3) + '@parcel/watcher': 2.2.0 + '@plasmohq/init': 0.7.0 + '@plasmohq/parcel-config': 0.41.1(@swc/core@1.9.1(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)(lodash@4.17.21)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@plasmohq/parcel-core': 0.1.10 + buffer: 6.0.3 + chalk: 5.3.0 + change-case: 5.1.2 + dotenv: 16.3.1 + dotenv-expand: 10.0.0 + events: 3.3.0 + fast-glob: 3.3.2 + fflate: 0.8.1 + get-port: 7.0.0 + got: 13.0.0 + ignore: 5.2.4 + inquirer: 9.2.12 + is-path-inside: 4.0.0 + json5: 2.2.3 + mnemonic-id: 3.2.7 + node-object-hash: 3.0.0 + package-json: 8.1.1 + process: 0.11.10 + semver: 7.5.4 + sharp: 0.32.6 + tempy: 3.1.0 + typescript: 5.2.2 + transitivePeerDependencies: + - '@swc/core' + - '@swc/helpers' + - arc-templates + - atpl + - babel-core + - bracket-template + - coffeescript + - cssnano + - dot + - eco + - ect + - ejs + - haml-coffee + - hamlet + - hamljs + - handlebars + - hogan.js + - htmling + - jazz + - jqtpl + - just + - liquid + - liquor + - lodash + - marko + - mote + - mustache + - nunjucks + - plates + - postcss + - pug + - purgecss + - qejs + - ractive + - razor-tmpl + - react + - react-dom + - relateurl + - slm + - squirrelly + - srcset + - supports-color + - teacup + - templayed + - terser + - then-pug + - tinyliquid + - toffee + - ts-node + - twig + - twing + - uncss + - underscore + - vash + - velocityjs + - walrus + - whiskers + + postcss-import@15.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + + postcss-js@4.0.1(postcss@8.4.49): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.49 + + postcss-load-config@4.0.2(postcss@8.4.49): + dependencies: + lilconfig: 3.1.2 + yaml: 2.6.0 + optionalDependencies: + postcss: 8.4.49 + + postcss-nested@6.2.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.49: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + posthtml-parser@0.10.2: + dependencies: + htmlparser2: 7.2.0 + + posthtml-parser@0.11.0: + dependencies: + htmlparser2: 7.2.0 + + posthtml-render@3.0.0: + dependencies: + is-json: 2.0.1 + + posthtml@0.16.6: + dependencies: + posthtml-parser: 0.11.0 + posthtml-render: 3.0.0 + + preact@10.24.3: {} + + prebuild-install@7.1.2: + dependencies: + detect-libc: 2.0.3 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 1.0.2 + node-abi: 3.71.0 + pump: 3.0.2 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + + prettier-plugin-tailwindcss@0.6.8(prettier@3.3.3): + dependencies: + prettier: 3.3.3 + + prettier@3.3.3: {} + + process@0.11.10: {} + + proto-list@1.2.4: {} + + prr@1.0.1: + optional: true + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode@2.3.1: {} + + qrcode.react@3.1.0(react@18.3.1): + dependencies: + react: 18.3.1 + + queue-microtask@1.2.3: {} + + queue-tick@1.0.1: {} + + quick-lru@5.1.1: {} + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-error-overlay@6.0.9: {} + + react-is@16.13.1: {} + + react-refresh@0.14.0: {} + + react-refresh@0.9.0: {} + + react-router-dom@6.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@remix-run/router': 1.21.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-router: 6.28.0(react@18.3.1) + + react-router@6.28.0(react@18.3.1): + dependencies: + '@remix-run/router': 1.21.0 + react: 18.3.1 + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readdirp@4.0.2: {} + + regenerator-runtime@0.13.11: {} + + regenerator-runtime@0.14.1: {} + + registry-auth-token@5.0.2: + dependencies: + '@pnpm/npm-conf': 2.3.1 + + registry-url@6.0.1: + dependencies: + rc: 1.2.8 + + resolve-alpn@1.2.1: {} + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + responselike@3.0.0: + dependencies: + lowercase-keys: 3.0.0 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + reusify@1.0.4: {} + + rollup@3.29.5: + optionalDependencies: + fsevents: 2.3.3 + + run-async@3.0.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.1: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + sass@1.80.6: + dependencies: + chokidar: 4.0.1 + immutable: 4.3.7 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.0 + + sax@1.4.1: + optional: true + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + semver@5.7.2: {} + + semver@6.3.1: {} + + semver@7.5.4: + dependencies: + lru-cache: 6.0.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + sha.js@2.4.11: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + sharp@0.32.6: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + node-addon-api: 6.1.0 + prebuild-install: 7.1.2 + semver: 7.5.4 + simple-get: 4.0.1 + tar-fs: 3.0.6 + tunnel-agent: 0.6.0 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-concat@1.0.1: {} + + simple-get@4.0.1: + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + slash@3.0.0: {} + + source-map-js@1.2.1: {} + + source-map@0.5.7: {} + + source-map@0.6.1: {} + + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + + srcset@4.0.0: {} + + stable@0.1.8: {} + + std-env@3.7.0: {} + + streamx@2.20.1: + dependencies: + fast-fifo: 1.3.2 + queue-tick: 1.0.1 + text-decoder: 1.2.1 + optionalDependencies: + bare-events: 2.5.0 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-final-newline@2.0.0: {} + + strip-json-comments@2.0.1: {} + + stylis@4.2.0: {} + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svelte@4.2.2: + dependencies: + '@ampproject/remapping': 2.3.0 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + acorn: 8.14.0 + aria-query: 5.3.2 + axobject-query: 3.2.4 + code-red: 1.0.4 + css-tree: 2.3.1 + estree-walker: 3.0.3 + is-reference: 3.0.2 + locate-character: 3.0.0 + magic-string: 0.30.12 + periscopic: 3.1.0 + + svg-parser@2.0.4: {} + + svgo@2.8.0: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.1.1 + stable: 0.1.8 + + swr@2.2.5(react@18.3.1): + dependencies: + client-only: 0.0.1 + react: 18.3.1 + use-sync-external-store: 1.2.2(react@18.3.1) + + tabbable@6.2.0: {} + + tailwindcss@3.4.14: + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.6 + lilconfig: 2.1.0 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-import: 15.1.0(postcss@8.4.49) + postcss-js: 4.0.1(postcss@8.4.49) + postcss-load-config: 4.0.2(postcss@8.4.49) + postcss-nested: 6.2.0(postcss@8.4.49) + postcss-selector-parser: 6.1.2 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + tar-fs@2.1.1: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.2 + tar-stream: 2.2.0 + + tar-fs@3.0.6: + dependencies: + pump: 3.0.2 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 2.3.5 + bare-path: 2.1.3 + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.20.1 + + temp-dir@3.0.0: {} + + tempy@3.1.0: + dependencies: + is-stream: 3.0.0 + temp-dir: 3.0.0 + type-fest: 2.19.0 + unique-string: 3.0.0 + + text-decoder@1.2.1: {} + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + timsort@0.3.0: {} + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toggle-selection@1.0.6: {} + + tr46@1.0.1: + dependencies: + punycode: 2.3.1 + + tree-kill@1.2.2: {} + + ts-algebra@1.2.2: {} + + ts-interface-checker@0.1.13: {} + + tslib@2.4.1: {} + + tslib@2.8.1: {} + + tsup@7.2.0(@swc/core@1.9.1(@swc/helpers@0.5.13))(postcss@8.4.49)(typescript@5.2.2): + dependencies: + bundle-require: 4.2.1(esbuild@0.18.20) + cac: 6.7.14 + chokidar: 3.6.0 + debug: 4.3.7 + esbuild: 0.18.20 + execa: 5.1.1 + globby: 11.1.0 + joycon: 3.1.1 + postcss-load-config: 4.0.2(postcss@8.4.49) + resolve-from: 5.0.0 + rollup: 3.29.5 + source-map: 0.8.0-beta.0 + sucrase: 3.35.0 + tree-kill: 1.2.2 + optionalDependencies: + '@swc/core': 1.9.1(@swc/helpers@0.5.13) + postcss: 8.4.49 + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + - ts-node + + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + + type-fest@0.20.2: {} + + type-fest@0.21.3: {} + + type-fest@1.4.0: {} + + type-fest@2.19.0: {} + + typescript@5.2.2: {} + + typescript@5.6.3: {} + + undici-types@6.19.8: {} + + unique-string@3.0.0: + dependencies: + crypto-random-string: 4.0.0 + + universalify@2.0.1: {} + + update-browserslist-db@1.1.1(browserslist@4.22.1): + dependencies: + browserslist: 4.22.1 + escalade: 3.2.0 + picocolors: 1.1.1 + + update-browserslist-db@1.1.1(browserslist@4.24.2): + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + use-sync-external-store@1.2.2(react@18.3.1): + dependencies: + react: 18.3.1 + + util-deprecate@1.0.2: {} + + utility-types@3.11.0: {} + + vue@3.3.4: + dependencies: + '@vue/compiler-dom': 3.3.4 + '@vue/compiler-sfc': 3.3.4 + '@vue/runtime-dom': 3.3.4 + '@vue/server-renderer': 3.3.4(vue@3.3.4) + '@vue/shared': 3.3.4 + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + weak-lru-cache@1.2.2: {} + + webextension-polyfill@0.10.0: {} + + webextension-polyfill@0.12.0: {} + + webidl-conversions@4.0.2: {} + + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + xxhash-wasm@0.4.2: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yaml@1.10.2: {} + + yaml@2.6.0: {} diff --git a/playground/browser-extension/postcss.config.js b/playground/browser-extension/postcss.config.js new file mode 100644 index 0000000000..2484180d45 --- /dev/null +++ b/playground/browser-extension/postcss.config.js @@ -0,0 +1,8 @@ +/** + * @type {import('postcss').ProcessOptions} + */ +module.exports = { + plugins: { + tailwindcss: {} + } +} diff --git a/playground/browser-extension/src/background/index.ts b/playground/browser-extension/src/background/index.ts new file mode 100644 index 0000000000..229e330bdc --- /dev/null +++ b/playground/browser-extension/src/background/index.ts @@ -0,0 +1,34 @@ +import { createClerkClient } from '@clerk/chrome-extension/background'; + +console.log('Background Script w/ Clerk createClerkClient() demo loaded'); + +const publishableKey = process.env.PLASMO_PUBLIC_CLERK_PUBLISHABLE_KEY; +if (!publishableKey) { + throw new Error('Please add the PLASMO_PUBLIC_CLERK_PUBLISHABLE_KEY to the .env.development file'); +} + +async function getToken() { + const clerk = await createClerkClient({ + publishableKey, + syncHost: process.env.PLASMO_PUBLIC_CLERK_SYNC_HOST, + }); + + if (!clerk.session) { + return null; + } + + return await clerk.session?.getToken(); +} + +// create a listener to listen for messages from content scripts +// NOTE: A runtime listener cannot be async. +// It must return true, in order to keep the connection open and send a response later. +chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { + if (request.greeting === 'get-token') { + console.log("Handling request for the user's current token"); + getToken() + .then(token => sendResponse({ token })) + .catch(error => console.error(JSON.stringify(error))); + } + return true; +}); diff --git a/playground/browser-extension/src/content.tsx b/playground/browser-extension/src/content.tsx new file mode 100644 index 0000000000..7713a6a136 --- /dev/null +++ b/playground/browser-extension/src/content.tsx @@ -0,0 +1,24 @@ +import cssText from "data-text:~style.css" +import type { PlasmoCSConfig } from "plasmo" + +import { CountButton } from "~features/count-button" + +export const config: PlasmoCSConfig = { + matches: ["https://www.plasmo.com/*"] +} + +export const getStyle = () => { + const style = document.createElement("style") + style.textContent = cssText + return style +} + +const PlasmoOverlay = () => { + return ( +
+ +
+ ) +} + +export default PlasmoOverlay diff --git a/playground/browser-extension/src/features/count-button.tsx b/playground/browser-extension/src/features/count-button.tsx new file mode 100644 index 0000000000..9f7e987826 --- /dev/null +++ b/playground/browser-extension/src/features/count-button.tsx @@ -0,0 +1,19 @@ +import { useReducer } from "react" + +export const CountButton = () => { + const [count, increase] = useReducer((c) => c + 1, 0) + + return ( + + ) +} diff --git a/playground/browser-extension/src/popup/index.tsx b/playground/browser-extension/src/popup/index.tsx new file mode 100644 index 0000000000..cb3eef6c4a --- /dev/null +++ b/playground/browser-extension/src/popup/index.tsx @@ -0,0 +1,31 @@ +import '../style.css'; +import { RouterProvider, createMemoryRouter } from 'react-router-dom'; + +// Import the layouts +import { RootLayout } from './layouts/root-layout'; + +// Import the components +import { SignInPage } from './routes/sign-in'; +import { SignUpPage } from './routes/sign-up'; +import { Index } from './routes'; +import { Settings } from './routes/settings'; +import { SDKFeatures } from './routes/sdk-features'; + +// Create the router +// This removes the need for an App.tsx file +const router = createMemoryRouter([ + { + element: , + children: [ + { path: '/', element: }, + { path: '/sign-in', element: }, + { path: '/sign-up', element: }, + { path: '/settings', element: }, + { path: '/sdk-features', element: }, + ], + }, +]); + +export default function PopupIndex() { + return ; +} diff --git a/playground/browser-extension/src/popup/layouts/root-layout.tsx b/playground/browser-extension/src/popup/layouts/root-layout.tsx new file mode 100644 index 0000000000..95b7fd64c7 --- /dev/null +++ b/playground/browser-extension/src/popup/layouts/root-layout.tsx @@ -0,0 +1,47 @@ +import { ClerkProvider, SignedIn, SignedOut, UserButton } from '@clerk/chrome-extension'; +import { Link, Outlet, useLocation, useNavigate } from 'react-router-dom'; + +const PUBLISHABLE_KEY = process.env.PLASMO_PUBLIC_CLERK_PUBLISHABLE_KEY; +const SYNC_HOST = process.env.PLASMO_PUBLIC_CLERK_SYNC_HOST; + +if (!PUBLISHABLE_KEY) { + throw new Error('Please add the PLASMO_PUBLIC_CLERK_PUBLISHABLE_KEY to the .env.development file'); +} + +if (!SYNC_HOST) { + console.warn('Initialized without PLASMO_PUBLIC_CLERK_SYNC_HOST'); +} + +export const RootLayout = () => { + const navigate = useNavigate(); + const location = useLocation(); + + console.log('location', location); + return ( + navigate(to)} + routerReplace={to => navigate(to, { replace: true })} + publishableKey={PUBLISHABLE_KEY} + afterSignOutUrl='/' + syncHost={SYNC_HOST} + > +
+
+ +
+
+ + SDK Features + Settings + + + + Home + Sign In + Sign Up + +
+
+
+ ); +}; diff --git a/playground/browser-extension/src/popup/routes/index.tsx b/playground/browser-extension/src/popup/routes/index.tsx new file mode 100644 index 0000000000..627008e641 --- /dev/null +++ b/playground/browser-extension/src/popup/routes/index.tsx @@ -0,0 +1,7 @@ +export const Index = () => { + return ( + <> +

Clerk + Chrome Extension + React Router

+ + ); +}; diff --git a/playground/browser-extension/src/popup/routes/sdk-features.tsx b/playground/browser-extension/src/popup/routes/sdk-features.tsx new file mode 100644 index 0000000000..55c888d1bb --- /dev/null +++ b/playground/browser-extension/src/popup/routes/sdk-features.tsx @@ -0,0 +1,16 @@ +export const SDKFeatures = () => { + return ( + <> +

Background Worker

+ + + + ) +} diff --git a/playground/browser-extension/src/popup/routes/settings.tsx b/playground/browser-extension/src/popup/routes/settings.tsx new file mode 100644 index 0000000000..ff82f2f752 --- /dev/null +++ b/playground/browser-extension/src/popup/routes/settings.tsx @@ -0,0 +1,10 @@ +import { UserProfile } from "@clerk/chrome-extension"; + +export const Settings = () => { + return ( + <> +

Settings

+ + + ); +}; diff --git a/playground/browser-extension/src/popup/routes/sign-in.tsx b/playground/browser-extension/src/popup/routes/sign-in.tsx new file mode 100644 index 0000000000..3d80e58da1 --- /dev/null +++ b/playground/browser-extension/src/popup/routes/sign-in.tsx @@ -0,0 +1,10 @@ +import { SignIn } from "@clerk/chrome-extension"; + +export const SignInPage = () => { + return ( + <> +

Sign In

+ + + ); +}; diff --git a/playground/browser-extension/src/popup/routes/sign-up.tsx b/playground/browser-extension/src/popup/routes/sign-up.tsx new file mode 100644 index 0000000000..ceb3e3b9f6 --- /dev/null +++ b/playground/browser-extension/src/popup/routes/sign-up.tsx @@ -0,0 +1,10 @@ +import { SignUp } from "@clerk/chrome-extension"; + +export const SignUpPage = () => { + return ( + <> +

Sign Up

+ + + ); +}; diff --git a/playground/browser-extension/src/style.css b/playground/browser-extension/src/style.css new file mode 100644 index 0000000000..6e0335c910 --- /dev/null +++ b/playground/browser-extension/src/style.css @@ -0,0 +1,5 @@ +@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap"); + +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/playground/browser-extension/src/tabs/background-worker-demo.html b/playground/browser-extension/src/tabs/background-worker-demo.html new file mode 100644 index 0000000000..dde599a982 --- /dev/null +++ b/playground/browser-extension/src/tabs/background-worker-demo.html @@ -0,0 +1,12 @@ + + + + + Clerk Background Worker demo + + + + + + + diff --git a/playground/browser-extension/src/tabs/background-worker-demo.tsx b/playground/browser-extension/src/tabs/background-worker-demo.tsx new file mode 100644 index 0000000000..66c65a5f79 --- /dev/null +++ b/playground/browser-extension/src/tabs/background-worker-demo.tsx @@ -0,0 +1,37 @@ +import * as React from 'react'; + +export default function NewTab() { + const [token, setToken] = React.useState(null); + + const getToken = async (e: React.MouseEvent) => { + e.preventDefault(); + + // send a message to the background service worker + chrome.runtime.sendMessage({ greeting: 'get-token' }, response => { + console.log('MESSAGE RESPONSE', JSON.stringify(response)); + setToken(response.token); + }); + }; + + return ( +
+

Clerk Background Worker demo

+
+

This new tab simluates a content page where you might want to access user information, or make a request to your backend server and include a user token in the request.

+

Make sure that you are signed into the extension. You can have the popup closed.

+ + {token &&

Token: {token}

} +
+ +
+ ) +} + + + diff --git a/playground/browser-extension/tailwind.config.js b/playground/browser-extension/tailwind.config.js new file mode 100644 index 0000000000..564630220b --- /dev/null +++ b/playground/browser-extension/tailwind.config.js @@ -0,0 +1,6 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./src/**/*.{tsx,html}"], + darkMode: "media", + prefix: "plasmo-" +} diff --git a/playground/browser-extension/tsconfig.json b/playground/browser-extension/tsconfig.json new file mode 100644 index 0000000000..6603b5b31d --- /dev/null +++ b/playground/browser-extension/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "plasmo/templates/tsconfig.base", + "exclude": [ + "node_modules" + ], + "include": [ + ".plasmo/index.d.ts", + "./**/*.ts", + "./**/*.tsx" + ], + "compilerOptions": { + "jsx": "react-jsx", + "paths": { + "~*": [ + "./src/*" + ] + }, + "baseUrl": "." + } +} diff --git a/playground/chrome-extension/.env.example b/playground/chrome-extension/.env.example deleted file mode 100644 index 4f4796f3fc..0000000000 --- a/playground/chrome-extension/.env.example +++ /dev/null @@ -1 +0,0 @@ -VITE_CLERK_PUBLISHABLE_KEY=YOUR_CLERK_PUBLISHABLE_KEY_GOES_HERE diff --git a/playground/chrome-extension/.gitignore b/playground/chrome-extension/.gitignore deleted file mode 100644 index b780dd861d..0000000000 --- a/playground/chrome-extension/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -# dependencies -/node_modules - -# manifests -manifest.* -!manifest.*.example - -# production -/build -/dist - -# misc -.DS_Store -.env diff --git a/playground/chrome-extension/README.md b/playground/chrome-extension/README.md deleted file mode 100644 index d3f9dfd7ad..0000000000 --- a/playground/chrome-extension/README.md +++ /dev/null @@ -1,66 +0,0 @@ -

- - - - - - -
-

- -# Clerk Chrome Extension Starter - -This starter project shows how to use [Clerk](https://www.clerk.dev/?utm_source=github&utm_medium=starter_repos&utm_campaign=chrome_extension_start) authentication in a React based [Chrome Extension](https://developer.chrome.com/docs/extensions/). - -[![chat on Discord](https://img.shields.io/discord/856971667393609759.svg?logo=discord)](https://discord.com/invite/b5rXHjAg7A) -[![documentation](https://img.shields.io/badge/documentation-clerk-green.svg)](https://docs.clerk.dev) -[![twitter](https://img.shields.io/twitter/follow/ClerkDev?style=social)](https://twitter.com/intent/follow?screen_name=ClerkDev) - -If you run into issues, be sure to check our [main npm page](https://www.npmjs.com/package/@clerk/chrome-extension) for any updated settings/steps you may need to be aware of. - ---- - -**Clerk is Hiring!** - -Would you like to work on Open Source software and help maintain this repository? [Apply today!](https://apply.workable.com/clerk-dev/) - ---- - -## Introduction - -This project was bootstrapped with [Vite](https://vitejs.dev/) with [CRXJ](https://crxjs.dev/vite-plugin/). - -It's a kitchen-sink starter of how to use ClerkJS in a Chrome Extension either as a Standalone App or alongside a Web Application via WebSSO. - - - -It demonstrates a basic password or OTP flow using ClerkJS Components in the following extension contexts: - -- [x] Popup `action.*` -- [x] Chrome Pages - - [x] New Tab `chrome_url_overrides.newtab` - - [x] History `chrome_url_overrides.history` - - [x] Bookmark Manager `chrome_url_overrides.bookmarks` -- [x] Dev Tools `devtools_page` -- [x] Extension Options `options_ui` - -You may safely remove any of the above contexts from the `manifest.json` if you do not need them. - -This repo will be enhanced with examples of authentication redirection flows such as OAuth or Magic Links and advanced extension patterns. - -## Getting Started - -1. Sign up for a Clerk account at [https://clerk.com](https://dashboard.clerk.com/sign-up?utm_source=github&utm_medium=template_repos&utm_campaign=chrome_extension_template). -2. Go to the [Clerk dashboard](https://dashboard.clerk.com?utm_source=github&utm_medium=template_repos&utm_campaign=chrome_extension_template) and create an application. -3. Clone the repository `git clone https://github.com/clerkinc/clerk-chrome-extension-starter.git clerk-chrome-extension-starter` -4. Go to the project directory: cd clerk-chrome-extension-starter -5. Install dependencies: `npm install` -6. Copy example files and sent the required variables in each file: - - `cp .env.example .env` - - `cp manifest.json.example manifest.json` - - `cp manifest.dev.json.example manifest.dev.json` (The attributes in this file overwrite the attributes in `manifest.json` when running in development mode.) -7. Launch the development server: `pnpm dev` - -The files generated in the `dist` directory can be loaded as an unpacked extension in Chrome. - -PLEASE NOTE: Any changes to the manifest require a reload of the extension in [chrome://extensions/](chrome://extensions/). diff --git a/playground/chrome-extension/demo.png b/playground/chrome-extension/demo.png deleted file mode 100644 index 4f7f1975a5e279a4ec8f5e1bc3ad910d5eed7ebf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180543 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 zÐ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�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 FngBXNOBnzF diff --git a/playground/chrome-extension/manifest.dev.json.example b/playground/chrome-extension/manifest.dev.json.example deleted file mode 100644 index 4e80c18a70..0000000000 --- a/playground/chrome-extension/manifest.dev.json.example +++ /dev/null @@ -1,10 +0,0 @@ -{ - "host_permissions": [ - "*://localhost/*", - "https:///*" - ], - "icons": { - "32": "dev-icon-32.png", - "128": "dev-icon-128.png" - } -} diff --git a/playground/chrome-extension/manifest.json.example b/playground/chrome-extension/manifest.json.example deleted file mode 100644 index adf133812b..0000000000 --- a/playground/chrome-extension/manifest.json.example +++ /dev/null @@ -1,26 +0,0 @@ -{ - "manifest_version": 3, - "name": "Clerk Chrome Extension Playground", - "description": "Playground App for the Clerk Chrome Extension", - "action": { - "default_popup": "src/pages/popup/index.html" - }, - "chrome_url_overrides": { - "newtab": "src/pages/new-tab/index.html" - }, - "devtools_page": "src/pages/devtools/index.html", - "host_permissions": [ - "https:///*" - ], - "icons": { - "32": "icon-32.png", - "128": "icon-128.png" - }, - "options_ui": { - "page": "src/pages/options/index.html" - }, - "permissions": [ - "cookies", - "storage" - ] -} diff --git a/playground/chrome-extension/nodemon.json b/playground/chrome-extension/nodemon.json deleted file mode 100644 index 72faa88892..0000000000 --- a/playground/chrome-extension/nodemon.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "env": { - "__DEV__": "true" - }, - "watch": [ - ".yalc/**/*", "src", "utils", "vite.config.ts", "manifest.json", "manifest.dev.json", "node_modules/@clerk/**/*" - ], - "ext": "tsx,css,html,ts,json", - "ignore": [ - "src/**/*.spec.ts" - ], - "exec": "vite build", - "delay": "1000" -} diff --git a/playground/chrome-extension/package.json b/playground/chrome-extension/package.json deleted file mode 100644 index e2d3c219e1..0000000000 --- a/playground/chrome-extension/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "clerk-chrome-extension-starter", - "version": "0.1.0", - "private": true, - "type": "module", - "dependencies": { - "@clerk/chrome-extension": "file:.yalc/@clerk/chrome-extension", - "@clerk/clerk-js": "file:.yalc/@clerk/clerk-js", - "@clerk/clerk-react": "file:.yalc/@clerk/clerk-react", - "@clerk/localizations": "file:.yalc/@clerk/localizations", - "@clerk/shared": "file:.yalc/@clerk/shared", - "@clerk/themes": "file:.yalc/@clerk/themes", - "@clerk/types": "file:.yalc/@clerk/types", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-router-dom": "^6.23.1", - "webextension-polyfill": "^0.12.0" - }, - "devDependencies": { - "@crxjs/vite-plugin": "^1.0.14", - "@types/chrome": "^0.0.268", - "@types/node": "^18.17.1", - "@types/react": "^18.2.39", - "@types/react-dom": "^18.2.17", - "@types/webextension-polyfill": "^0.10.0", - "@vitejs/plugin-react-swc": "^3.0.1", - "autoprefixer": "^10.4.19", - "nodemon": "^2.0.20", - "postcss": "^8.4.38", - "ts-node": "^10.9.2", - "typescript": "^4.9.4", - "vite": "^4.5.0" - }, - "scripts": { - "build": "vite build", - "dev": "pnpm yalc:add && nodemon", - "yalc:add": "pnpm yalc add -- @clerk/chrome-extension @clerk/clerk-react @clerk/clerk-js @clerk/localizations @clerk/themes @clerk/types @clerk/shared" - } -} diff --git a/playground/chrome-extension/public/dev-icon-128.png b/playground/chrome-extension/public/dev-icon-128.png deleted file mode 100644 index 2272f3c2883630770b174305587971dc83712f0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16876 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 diff --git a/playground/chrome-extension/public/dev-icon-32.png b/playground/chrome-extension/public/dev-icon-32.png deleted file mode 100644 index 2b72ebdb2ced5484f58647dc0f46ffb9b2e9b1d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2529 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 { - console.log('TESTING onInstalled'); -}); - -async function getToken() { - const clerk = await __unstable__createClerkClient({ publishableKey, syncSessionWithTab: true }); - return await clerk.session?.getToken(); -} - -chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { - console.log(sender.tab ? `from a content script: ${sender.tab.url}` : 'from the extension'); - - if (request.greeting === 'hello') { - getToken().then(token => { - console.log('Background Token:', token); - sendResponse({ token }); - }); - } - - return true; -}); diff --git a/playground/chrome-extension/src/components/CurrentUser.tsx b/playground/chrome-extension/src/components/CurrentUser.tsx deleted file mode 100644 index 5b8d5ddb79..0000000000 --- a/playground/chrome-extension/src/components/CurrentUser.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { useEffect, useState } from 'react'; -import { useAuth, useUser } from "@clerk/chrome-extension"; - -export function CurrentUser() { - const [sessionToken, setSessionToken] = useState(""); - const { isSignedIn, user } = useUser(); - const { getToken, signOut } = useAuth(); - - useEffect(() => { - const scheduler = setInterval(async () => { - const token = await getToken(); - setSessionToken(token as string); - }, 1000); - - return () => clearInterval(scheduler); - }, []); - - if (!isSignedIn) { - return null; - } - - const email = user.primaryEmailAddress?.emailAddress; - - return ( -
-

Hi, {email ? `${email}!` : ''}

- -
-

Clerk Session Token:

-
{sessionToken}
-
- - -
- ); -} diff --git a/playground/chrome-extension/src/components/SharedApp.tsx b/playground/chrome-extension/src/components/SharedApp.tsx deleted file mode 100644 index 76350ce7ff..0000000000 --- a/playground/chrome-extension/src/components/SharedApp.tsx +++ /dev/null @@ -1,130 +0,0 @@ -import { ClerkProvider, type ChromeExtensionClerkProviderProps } from '@clerk/chrome-extension'; -import { Routes, Route, useNavigate } from 'react-router-dom'; -import { SignedIn, SignedOut, SignIn, SignUp } from '@clerk/chrome-extension'; - -import '@/assets/styles/index.css'; - -import { CurrentUser } from '@/components/CurrentUser'; - -const publishableKey = import.meta.env.VITE_CLERK_PUBLISHABLE_KEY || ''; - -export type SharedAppProps = Pick & { - className?: string; -}; - -export function SharedApp({ className, ...rest }: SharedAppProps) { - const navigate = useNavigate(); - - const onClick = e => { - e.preventDefault(); - - chrome.runtime.sendMessage({ greeting: 'hello' }, response => { - console.log('MESSAGE RESPONSE', response); - }); - }; - - return ( - navigate(to)} - routerReplace={to => navigate(to, { replace: true })} - extensionFeatures={{ - sync: true, - }} - {...rest} - > -
-
- ); -} diff --git a/playground/chrome-extension/src/global.d.ts b/playground/chrome-extension/src/global.d.ts deleted file mode 100644 index 7ad3edd14d..0000000000 --- a/playground/chrome-extension/src/global.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -declare module '*.svg' { - import React = require('react'); - export const ReactComponent: React.SFC>; - const src: string; - export default src; -} - -declare module '*.json' { - const content: string; - export default content; -} diff --git a/playground/chrome-extension/src/pages/background/index.ts b/playground/chrome-extension/src/pages/background/index.ts deleted file mode 100644 index def0db5c2c..0000000000 --- a/playground/chrome-extension/src/pages/background/index.ts +++ /dev/null @@ -1 +0,0 @@ -console.log('background script loaded'); diff --git a/playground/chrome-extension/src/pages/content/index.tsx b/playground/chrome-extension/src/pages/content/index.tsx deleted file mode 100644 index de0869e401..0000000000 --- a/playground/chrome-extension/src/pages/content/index.tsx +++ /dev/null @@ -1 +0,0 @@ -console.log('content script loaded') diff --git a/playground/chrome-extension/src/pages/devtools/index.html b/playground/chrome-extension/src/pages/devtools/index.html deleted file mode 100644 index 666bb682e3..0000000000 --- a/playground/chrome-extension/src/pages/devtools/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - Devtools - - - - - diff --git a/playground/chrome-extension/src/pages/devtools/index.ts b/playground/chrome-extension/src/pages/devtools/index.ts deleted file mode 100644 index cf2258c594..0000000000 --- a/playground/chrome-extension/src/pages/devtools/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import browser from 'webextension-polyfill'; - -browser - .devtools - .panels - .create('Clerk Starter', 'icon-32.png', 'src/pages/panel/index.html'); diff --git a/playground/chrome-extension/src/pages/new-tab/index.html b/playground/chrome-extension/src/pages/new-tab/index.html deleted file mode 100644 index e794ed94ac..0000000000 --- a/playground/chrome-extension/src/pages/new-tab/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - New tab - - - -
- - - diff --git a/playground/chrome-extension/src/pages/new-tab/index.tsx b/playground/chrome-extension/src/pages/new-tab/index.tsx deleted file mode 100644 index 48b5565878..0000000000 --- a/playground/chrome-extension/src/pages/new-tab/index.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { createRoot } from 'react-dom/client'; -import NewTab from './new-tab'; - -function init() { - const rootContainer = document.querySelector("#__root"); - if (!rootContainer) throw new Error("Can't find NewTab root element"); - const root = createRoot(rootContainer); - root.render(); -} - -init(); diff --git a/playground/chrome-extension/src/pages/new-tab/new-tab.tsx b/playground/chrome-extension/src/pages/new-tab/new-tab.tsx deleted file mode 100644 index aeb1cd4b2d..0000000000 --- a/playground/chrome-extension/src/pages/new-tab/new-tab.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { MemoryRouter } from "react-router-dom"; -import { SharedApp } from '@/components/SharedApp'; - -function NewTab() { - return ( - - - - ) -} - -export default NewTab; diff --git a/playground/chrome-extension/src/pages/options/Options.tsx b/playground/chrome-extension/src/pages/options/Options.tsx deleted file mode 100644 index f2b20d9fed..0000000000 --- a/playground/chrome-extension/src/pages/options/Options.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { MemoryRouter } from "react-router-dom"; -import { SharedApp } from '@/components/SharedApp'; - -function Options() { - return ( - - - - ) -} - -export default Options; diff --git a/playground/chrome-extension/src/pages/options/index.html b/playground/chrome-extension/src/pages/options/index.html deleted file mode 100644 index db5fa745af..0000000000 --- a/playground/chrome-extension/src/pages/options/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - Options - - - -
- - - diff --git a/playground/chrome-extension/src/pages/options/index.tsx b/playground/chrome-extension/src/pages/options/index.tsx deleted file mode 100644 index 48630999fb..0000000000 --- a/playground/chrome-extension/src/pages/options/index.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { createRoot } from 'react-dom/client'; -import Options from './options'; - -function init() { - const rootContainer = document.querySelector("#__root"); - if (!rootContainer) throw new Error("Can't find Options root element"); - const root = createRoot(rootContainer); - root.render(); -} - -init(); diff --git a/playground/chrome-extension/src/pages/panel/Panel.tsx b/playground/chrome-extension/src/pages/panel/Panel.tsx deleted file mode 100644 index a2ae4f3cb0..0000000000 --- a/playground/chrome-extension/src/pages/panel/Panel.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { MemoryRouter } from "react-router-dom"; -import { SharedApp } from '@/components/SharedApp'; - -function Panel() { - return ( - - - - ) -} - -export default Panel; diff --git a/playground/chrome-extension/src/pages/panel/index.html b/playground/chrome-extension/src/pages/panel/index.html deleted file mode 100644 index 7aa306d0ca..0000000000 --- a/playground/chrome-extension/src/pages/panel/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - Devtools Panel - - - -
- - - diff --git a/playground/chrome-extension/src/pages/panel/index.tsx b/playground/chrome-extension/src/pages/panel/index.tsx deleted file mode 100644 index 88ce49ce79..0000000000 --- a/playground/chrome-extension/src/pages/panel/index.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { createRoot } from 'react-dom/client'; -import Panel from './panel'; - -function init() { - const rootContainer = document.querySelector("#__root"); - if (!rootContainer) throw new Error("Can't find Panel root element"); - const root = createRoot(rootContainer); - root.render(); -} - -init(); diff --git a/playground/chrome-extension/src/pages/popup/Popup.tsx b/playground/chrome-extension/src/pages/popup/Popup.tsx deleted file mode 100644 index f3fa747061..0000000000 --- a/playground/chrome-extension/src/pages/popup/Popup.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { MemoryRouter } from "react-router-dom"; -import { SharedApp } from '@/components/SharedApp'; - -function Popup() { - return ( - - - - ) -} - -export default Popup; diff --git a/playground/chrome-extension/src/pages/popup/index.html b/playground/chrome-extension/src/pages/popup/index.html deleted file mode 100644 index b60f054fce..0000000000 --- a/playground/chrome-extension/src/pages/popup/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - Popup - - - -
- - - diff --git a/playground/chrome-extension/src/pages/popup/index.tsx b/playground/chrome-extension/src/pages/popup/index.tsx deleted file mode 100644 index 695a35a37d..0000000000 --- a/playground/chrome-extension/src/pages/popup/index.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { createRoot } from 'react-dom/client'; -import Popup from './popup'; - -function init() { - const rootContainer = document.querySelector("#__root"); - if (!rootContainer) throw new Error("Can't find Popup root element"); - const root = createRoot(rootContainer); - root.render(); -} - -init(); diff --git a/playground/chrome-extension/src/vite-env.d.ts b/playground/chrome-extension/src/vite-env.d.ts deleted file mode 100644 index 11f02fe2a0..0000000000 --- a/playground/chrome-extension/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/playground/chrome-extension/tsconfig.json b/playground/chrome-extension/tsconfig.json deleted file mode 100644 index 5dd3152768..0000000000 --- a/playground/chrome-extension/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "target": "esnext", - "types": ["vite/client", "node", "chrome"], - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noFallthroughCasesInSwitch": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "noEmit": true, - "jsx": "react-jsx", - "baseUrl": ".", - "paths": { - "@/*": ["src/*"] - } - }, - "include": ["src", "vite.config.ts"], -} diff --git a/playground/chrome-extension/vite.config.ts b/playground/chrome-extension/vite.config.ts deleted file mode 100644 index 0e40558bb7..0000000000 --- a/playground/chrome-extension/vite.config.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { fileURLToPath, URL } from 'url'; -import { resolve } from 'path'; - -import react from '@vitejs/plugin-react-swc'; -import { crx, ManifestV3Export } from '@crxjs/vite-plugin'; -import { defineConfig } from 'vite'; - -import manifest from './manifest.json'; -import devManifest from './manifest.dev.json'; -import pkg from './package.json'; - -const isDev = process.env.__DEV__ === 'true'; - -const extensionManifest = { - ...manifest, - ...(isDev ? devManifest : {} as ManifestV3Export), - name: isDev ? `[DEV] ${manifest.name}` : manifest.name, - version: pkg.version, -}; - -const crxPlugin = crx({ - manifest: extensionManifest as ManifestV3Export, - contentScripts: { - injectCss: true, - } -}) - -export default defineConfig({ - resolve: { - alias: [ - { find: '@/', replacement: fileURLToPath(new URL('./src/', import.meta.url)) }, - ], - }, - plugins: [ - react(), - crxPlugin, - ], - publicDir: resolve(__dirname, 'public'), - build: { - emptyOutDir: !isDev, - outDir: resolve(__dirname, 'dist'), - minify: !isDev, - sourcemap: isDev, - rollupOptions: { - input: { - panel: 'src/pages/panel/index.html', - }, - }, - }, -}); diff --git a/turbo.json b/turbo.json index d6503add92..ea27da6e51 100644 --- a/turbo.json +++ b/turbo.json @@ -18,6 +18,7 @@ "globalEnv": [ "CLERK_*", "NEXT_PUBLIC_CLERK_*", + "PLASMO_PUBLIC_CLERK_*", "PUBLIC_CLERK_*", "NODE_ENV", "NODE_VERSION",