├── .npmrc ├── .gitattributes ├── src ├── index.ts ├── types.d.ts ├── commands │ └── index.ts ├── plugin.ts └── fixtures │ ├── preview.ts │ ├── webcontainer.ts │ ├── index.ts │ ├── file-system.ts │ └── process.ts ├── test ├── fixtures │ ├── mount-example │ │ ├── file-1.ts │ │ ├── nested │ │ │ └── file-2.ts │ │ └── image.png │ └── starter-vite │ │ ├── package.json │ │ ├── src │ │ ├── counter.js │ │ ├── main.js │ │ ├── javascript.svg │ │ └── style.css │ │ ├── index.html │ │ ├── public │ │ └── vite.svg │ │ └── package-lock.json ├── hooks.test.ts ├── timeouts.test.ts ├── setup.test.ts ├── preview.test.ts ├── file-system.test.ts ├── run-command.test.ts └── mount.test.ts ├── .gitignore ├── tsconfig.json ├── tsup.config.ts ├── eslint.config.mjs ├── vitest.config.ts ├── LICENSE ├── .github ├── workflows │ ├── publish.yml │ └── ci.yml └── actions │ └── setup-and-cache │ └── action.yml ├── package.json ├── README.md └── pnpm-lock.yaml /.npmrc: -------------------------------------------------------------------------------- 1 | shell-emulator=true 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export { test, type TestContext } from "./fixtures"; 2 | -------------------------------------------------------------------------------- /test/fixtures/mount-example/file-1.ts: -------------------------------------------------------------------------------- 1 | export default "Hello world"; 2 | -------------------------------------------------------------------------------- /test/fixtures/mount-example/nested/file-2.ts: -------------------------------------------------------------------------------- 1 | export default "Hello from nested file"; 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | __screenshots__ 5 | 6 | # Generated on CI 7 | .cache 8 | -------------------------------------------------------------------------------- /test/fixtures/mount-example/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stackblitz/webcontainer-test/main/test/fixtures/mount-example/image.png -------------------------------------------------------------------------------- /src/types.d.ts: -------------------------------------------------------------------------------- 1 | import type {} from "vitest/browser"; 2 | 3 | declare module "vitest/browser" { 4 | interface BrowserCommands { 5 | readDirectory: (directory: string) => Promise; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "module": "ESNext", 5 | "target": "ESNext", 6 | "moduleResolution": "bundler", 7 | "skipLibCheck": true, 8 | "stripInternal": true 9 | }, 10 | "include": ["src", "test"] 11 | } 12 | -------------------------------------------------------------------------------- /test/fixtures/starter-vite/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-starter", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview" 10 | }, 11 | "devDependencies": { 12 | "vite": "^6.2.2" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /test/fixtures/starter-vite/src/counter.js: -------------------------------------------------------------------------------- 1 | export function setupCounter(element) { 2 | let counter = 0; 3 | 4 | const setCounter = (count) => { 5 | counter = count; 6 | element.innerHTML = `count is ${counter}`; 7 | }; 8 | element.addEventListener("click", () => setCounter(counter + 1)); 9 | setCounter(0); 10 | } 11 | -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "tsup"; 2 | 3 | export default defineConfig({ 4 | entry: { 5 | index: "src/index.ts", 6 | plugin: "src/plugin.ts", 7 | }, 8 | outDir: "dist", 9 | format: ["esm"], 10 | tsconfig: "./tsconfig.json", 11 | target: "esnext", 12 | clean: true, 13 | dts: true, 14 | }); 15 | -------------------------------------------------------------------------------- /test/fixtures/starter-vite/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite App 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import blitzPlugin from "@blitz/eslint-plugin"; 2 | import { jsFileExtensions } from "@blitz/eslint-plugin/dist/configs/javascript.js"; 3 | import { tsFileExtensions } from "@blitz/eslint-plugin/dist/configs/typescript.js"; 4 | 5 | export default [ 6 | { ignores: ["**/dist", "**/node_modules", ".cache"] }, 7 | 8 | ...blitzPlugin.configs.recommended(), 9 | 10 | { 11 | files: [...tsFileExtensions, ...jsFileExtensions], 12 | }, 13 | ]; 14 | -------------------------------------------------------------------------------- /test/hooks.test.ts: -------------------------------------------------------------------------------- 1 | import { afterEach, beforeEach, expect } from "vitest"; 2 | import { test, type TestContext } from "../src"; 3 | 4 | beforeEach(({ preview, webcontainer }) => { 5 | expect(preview.getByRole).toBeTypeOf("function"); 6 | expect(webcontainer.mount).toBeTypeOf("function"); 7 | }); 8 | 9 | afterEach(({ preview, webcontainer }) => { 10 | expect(preview.getByRole).toBeTypeOf("function"); 11 | expect(webcontainer.mount).toBeTypeOf("function"); 12 | }); 13 | 14 | test("fixtures are available in hooks", () => { 15 | // no-op 16 | }); 17 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { playwright } from "@vitest/browser-playwright"; 2 | import { defineConfig } from "vitest/config"; 3 | import { vitestWebContainers } from "./src/plugin"; 4 | 5 | export default defineConfig({ 6 | plugins: [vitestWebContainers()], 7 | 8 | test: { 9 | reporters: "verbose", 10 | 11 | // browser instances are running parallel, so they take 200% of the CPU count. Lower the amount to reduce resource usage 12 | maxWorkers: "50%", 13 | 14 | browser: { 15 | enabled: true, 16 | provider: playwright(), 17 | instances: [ 18 | { browser: "chromium", name: "Chromium" }, 19 | { browser: "firefox", name: "Firefox" }, 20 | ], 21 | headless: true, 22 | }, 23 | }, 24 | }); 25 | -------------------------------------------------------------------------------- /test/timeouts.test.ts: -------------------------------------------------------------------------------- 1 | import { WebContainer as WebContainerApi } from "@webcontainer/api"; 2 | import { expect, onTestFinished, test, vi } from "vitest"; 3 | 4 | import { WebContainer } from "../src/fixtures/webcontainer"; 5 | 6 | test("throws when WebContainer boot timeouts", async () => { 7 | onTestFinished(() => { 8 | vi.restoreAllMocks(); 9 | vi.useRealTimers(); 10 | }); 11 | 12 | vi.spyOn(WebContainerApi, "boot").mockReturnValue(new Promise(() => null)); 13 | vi.useFakeTimers(); 14 | 15 | const webcontainer = new WebContainer(); 16 | vi.advanceTimersByTime(30_000); 17 | 18 | await expect(webcontainer.wait()).rejects.toThrowErrorMatchingInlineSnapshot( 19 | `[Error: WebContainer boot timed out in 30s]`, 20 | ); 21 | }); 22 | -------------------------------------------------------------------------------- /test/setup.test.ts: -------------------------------------------------------------------------------- 1 | import { beforeEach, expect } from "vitest"; 2 | import { test, type TestContext } from "../src"; 3 | 4 | const counts = { setup: 0, beforeEach: 0 }; 5 | 6 | beforeEach(async ({ setup, webcontainer }) => { 7 | await setup(async () => { 8 | await webcontainer.writeFile("./example", "Hello world"); 9 | counts.setup++; 10 | }); 11 | 12 | counts.beforeEach++; 13 | }); 14 | 15 | test.for([1, 2, 3])("state is restored %d", async (count, { webcontainer }) => { 16 | await expect(webcontainer.readFile("example")).resolves.toBe("Hello world"); 17 | 18 | // setup should always be called just once as it's cached 19 | expect(counts.setup).toBe(1); 20 | 21 | // hook itself is called each time 22 | expect(counts.beforeEach).toBe(count); 23 | }); 24 | -------------------------------------------------------------------------------- /test/fixtures/starter-vite/src/main.js: -------------------------------------------------------------------------------- 1 | import "./style.css"; 2 | import { setupCounter } from "./counter.js"; 3 | import javascriptLogo from "./javascript.svg"; 4 | import viteLogo from "/vite.svg"; 5 | 6 | document.querySelector("#app").innerHTML = ` 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |

Hello Vite!

15 |
16 | 17 |
18 |

19 | Click on the Vite logo to learn more 20 |

21 |
22 | `; 23 | 24 | setupCounter(document.querySelector("#counter")); 25 | -------------------------------------------------------------------------------- /src/commands/index.ts: -------------------------------------------------------------------------------- 1 | import { resolve } from "node:path"; 2 | import { snapshot } from "@webcontainer/snapshot"; 3 | import type { BrowserCommand } from "vitest/node"; 4 | 5 | // custom command to read directories from browser context. Used for mounting directories inside webcontainer 6 | export const readDirectory: BrowserCommand<[directory: string]> = async ( 7 | context, 8 | directory, 9 | ): Promise => { 10 | const root = context.project.config.root; 11 | const resolved = resolve(root, directory); 12 | 13 | if (!resolved.startsWith(root)) { 14 | throw new Error( 15 | `[vitest:webcontainers] Cannot read files outside project root:\n${JSON.stringify( 16 | { directory, resolved }, 17 | null, 18 | 2, 19 | )}`, 20 | ); 21 | } 22 | 23 | const tree = await snapshot(directory); 24 | 25 | return tree.toString("base64"); 26 | }; 27 | -------------------------------------------------------------------------------- /test/fixtures/starter-vite/src/javascript.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 StackBlitz 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /test/preview.test.ts: -------------------------------------------------------------------------------- 1 | import { test } from "../src"; 2 | 3 | test("user can see server output in preview", async ({ 4 | webcontainer, 5 | preview, 6 | }) => { 7 | await webcontainer.mount("test/fixtures/starter-vite"); 8 | await webcontainer.runCommand("npm", ["install"]); 9 | 10 | const { exit } = webcontainer.runCommand("npm", ["run", "dev"]); 11 | 12 | await preview.getByRole("heading", { level: 1, name: "Hello Vite!" }); 13 | await exit(); 14 | }); 15 | 16 | test("user can see HMR changes in preview", async ({ 17 | webcontainer, 18 | preview, 19 | }) => { 20 | await webcontainer.mount("test/fixtures/starter-vite"); 21 | await webcontainer.runCommand("npm", ["install"]); 22 | 23 | const { exit } = webcontainer.runCommand("npm", ["run", "dev"]); 24 | await preview.getByRole("heading", { level: 1, name: "Hello Vite!" }); 25 | 26 | const content = await webcontainer.readFile("/src/main.js"); 27 | await webcontainer.writeFile( 28 | "/src/main.js", 29 | content.replace("Hello Vite!", "Modified title!"), 30 | ); 31 | 32 | await preview.getByRole("heading", { level: 1, name: "Modified title!" }); 33 | await exit(); 34 | }); 35 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | release-type: 7 | type: choice 8 | description: Type of the release 9 | options: 10 | - patch 11 | - minor 12 | - major 13 | 14 | env: 15 | PLAYWRIGHT_BROWSERS_PATH: ${{ github.workspace }}/.cache/ms-playwright 16 | 17 | jobs: 18 | build: 19 | runs-on: ubuntu-latest 20 | permissions: 21 | contents: write 22 | id-token: write 23 | steps: 24 | - uses: actions/checkout@v4 25 | 26 | - uses: ./.github/actions/setup-and-cache 27 | with: 28 | node-version: 22 29 | 30 | - name: Install & Build 31 | run: | 32 | pnpm install 33 | pnpm build 34 | 35 | - name: Configure github-actions git 36 | run: | 37 | git config --global user.name 'github-actions' 38 | git config --global user.email 'github-actions@users.noreply.github.com' 39 | 40 | - name: Bump version 41 | run: pnpm version ${{ github.event.inputs.release-type }} 42 | 43 | - name: Push release tag 44 | run: git push origin main --follow-tags 45 | 46 | - name: Publish to npm 47 | run: pnpm publish --provenance --access public 48 | env: 49 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 50 | -------------------------------------------------------------------------------- /test/file-system.test.ts: -------------------------------------------------------------------------------- 1 | import { expect } from "vitest"; 2 | import { test } from "../src"; 3 | 4 | test("user can create files and folders into webcontainer", async ({ 5 | webcontainer, 6 | }) => { 7 | await webcontainer.writeFile("/example", "Hello world"); 8 | await webcontainer.mkdir("/folder"); 9 | 10 | await expect(webcontainer.readdir("/")).resolves.toStrictEqual([ 11 | "example", 12 | "folder", 13 | ]); 14 | await expect(webcontainer.readFile("/example")).resolves.toBe("Hello world"); 15 | }); 16 | 17 | test("user can rename files and folders in webcontainer", async ({ 18 | webcontainer, 19 | }) => { 20 | await webcontainer.writeFile("/example", "Hello world"); 21 | await webcontainer.mkdir("/folder"); 22 | 23 | await webcontainer.rename("/example", "/example-2"); 24 | await webcontainer.rename("/folder", "/folder-2"); 25 | 26 | await expect(webcontainer.readdir("/")).resolves.toStrictEqual([ 27 | "example-2", 28 | "folder-2", 29 | ]); 30 | }); 31 | 32 | test("user can remove files from webcontainer", async ({ webcontainer }) => { 33 | await webcontainer.writeFile("/first", "1"); 34 | await webcontainer.writeFile("/second", "2"); 35 | await webcontainer.writeFile("/third", "3"); 36 | 37 | await webcontainer.rm("/second"); 38 | await expect(webcontainer.readdir("/")).resolves.toStrictEqual([ 39 | "first", 40 | "third", 41 | ]); 42 | }); 43 | -------------------------------------------------------------------------------- /src/plugin.ts: -------------------------------------------------------------------------------- 1 | import type {} from "vitest/config"; 2 | import type { Vite } from "vitest/node"; 3 | import { readDirectory } from "./commands"; 4 | 5 | const COEP = "Cross-Origin-Embedder-Policy"; 6 | const COOP = "Cross-Origin-Opener-Policy"; 7 | 8 | /** 9 | * Vitest [plugin](https://vitest.dev/advanced/api/plugin.html#plugin-api) for configuring 10 | * WebContainer related options. 11 | */ 12 | export function vitestWebContainers(): Vite.Plugin { 13 | return { 14 | name: "vitest:webcontainers", 15 | config(config, env) { 16 | if (env.mode !== "test") { 17 | return; 18 | } 19 | 20 | config.test ||= {}; 21 | config.test.browser ||= {}; 22 | config.test.browser.commands ||= {}; 23 | config.test.browser.commands.readDirectory = readDirectory; 24 | 25 | config.server ||= {}; 26 | config.server.headers ||= {}; 27 | 28 | const headers = config.server.headers; 29 | 30 | if (headers[COEP] && headers[COEP] !== "require-corp") { 31 | console.warn( 32 | `[vitest:webcontainers] Overriding ${COEP} header during test run`, 33 | ); 34 | } 35 | 36 | if (headers[COOP] && headers[COOP] !== "same-origin") { 37 | console.warn( 38 | `[vitest:webcontainers] Overriding ${COOP} header during test run`, 39 | ); 40 | } 41 | 42 | headers[COEP] = "require-corp"; 43 | headers[COOP] = "same-origin"; 44 | }, 45 | }; 46 | } 47 | -------------------------------------------------------------------------------- /test/fixtures/starter-vite/public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/fixtures/preview.ts: -------------------------------------------------------------------------------- 1 | import { type Locator, page } from "vitest/browser"; 2 | 3 | const TEST_ID = "webcontainers-iframe"; 4 | 5 | export class Preview { 6 | /** @internal */ 7 | private _preview: Locator; 8 | 9 | /** @internal */ 10 | private _iframe?: HTMLIFrameElement; 11 | 12 | constructor() { 13 | this._preview = page.getByTestId(TEST_ID); 14 | } 15 | 16 | /** @internal */ 17 | async setup(url: string) { 18 | const iframe = document.createElement("iframe"); 19 | iframe.setAttribute("src", url); 20 | iframe.setAttribute("style", "height: 100vh; width: 100vw;"); 21 | iframe.setAttribute("data-testid", TEST_ID); 22 | 23 | document.body.appendChild(iframe); 24 | 25 | this._iframe = iframe; 26 | } 27 | 28 | /** @internal */ 29 | async teardown() { 30 | if (this._iframe) { 31 | document.body.removeChild(this._iframe); 32 | } 33 | } 34 | 35 | /** 36 | * Vitest's [`getByRole`](https://vitest.dev/guide/browser/locators.html#getbyrole) that's scoped to the preview window. 37 | */ 38 | async getByRole(...options: Parameters) { 39 | return this._preview.getByRole(...options); 40 | } 41 | 42 | /** 43 | * Vitest's [`getByText`](https://vitest.dev/guide/browser/locators.html#getbytext) that's scoped to the preview window. 44 | */ 45 | async getByText(...options: Parameters) { 46 | return this._preview.getByText(...options); 47 | } 48 | 49 | /** 50 | * Vitest's [`locator`](https://vitest.dev/guide/browser/locators.html) of the preview window. 51 | */ 52 | get locator() { 53 | return this._preview; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | workflow_dispatch: 9 | 10 | env: 11 | PLAYWRIGHT_BROWSERS_PATH: ${{ github.workspace }}/.cache/ms-playwright 12 | 13 | jobs: 14 | test: 15 | runs-on: ubuntu-latest 16 | 17 | strategy: 18 | fail-fast: false 19 | matrix: 20 | node-version: [20, 22] 21 | 22 | steps: 23 | - uses: actions/checkout@v4 24 | 25 | - uses: ./.github/actions/setup-and-cache 26 | with: 27 | node-version: ${{ matrix.node-version }} 28 | 29 | - name: Install 30 | run: pnpm install 31 | 32 | - name: Build 33 | run: pnpm build 34 | 35 | - name: Lint 36 | run: pnpm lint 37 | 38 | - name: Typecheck 39 | run: pnpm typecheck 40 | 41 | - name: Install Playwright Dependencies 42 | run: pnpm exec playwright install chromium firefox --with-deps --only-shell 43 | 44 | - name: Test 45 | run: pnpm test 46 | 47 | - name: Upload screenshots 48 | uses: actions/upload-artifact@v4 49 | if: failure() 50 | with: 51 | name: vitest-screenshots-${{ matrix.node-version }} 52 | path: test/__screenshots__ 53 | retention-days: 30 54 | 55 | publish-preview: 56 | runs-on: ubuntu-latest 57 | 58 | steps: 59 | - uses: actions/checkout@v4 60 | 61 | - name: Install pnpm 62 | uses: pnpm/action-setup@v2 63 | 64 | - uses: ./.github/actions/setup-and-cache 65 | with: 66 | node-version: 22 67 | 68 | - name: Install & Build & Publish 69 | run: | 70 | pnpm install 71 | pnpm build 72 | npx pkg-pr-new publish --compact 73 | -------------------------------------------------------------------------------- /test/run-command.test.ts: -------------------------------------------------------------------------------- 1 | import { expect } from "vitest"; 2 | 3 | import { test } from "../src"; 4 | 5 | test( 6 | "user can run commands inside webcontainer", 7 | { retry: 3 }, 8 | async ({ webcontainer }) => { 9 | const output = await webcontainer.runCommand("node", ["--version"]); 10 | 11 | expect(output).toContain("v20"); 12 | }, 13 | ); 14 | 15 | test("user can run interactive commands inside webcontainer", async ({ 16 | webcontainer, 17 | }) => { 18 | const { exit, waitForText, write } = webcontainer.runCommand("node"); 19 | await waitForText("Welcome to Node.js v20"); 20 | 21 | await write("console.log(20 + 19)\n"); 22 | await waitForText("39"); 23 | 24 | await write("console.log(os.platform(), os.arch())\n"); 25 | await waitForText("linux x64"); 26 | 27 | await exit(); 28 | }); 29 | 30 | test("user can see timeout errors with clear description", async ({ 31 | webcontainer, 32 | }) => { 33 | const { exit, waitForText, isDone } = webcontainer.runCommand("ls", ["/"]); 34 | 35 | await isDone; 36 | 37 | await expect(waitForText("This won't match anything", 10)).rejects 38 | .toThrowErrorMatchingInlineSnapshot(` 39 | [Error: Timeout when waiting for text "This won't match anything". 40 | Received: 41 | bin dev etc home tmp usr] 42 | `); 43 | 44 | await exit(); 45 | }); 46 | 47 | test("user can listen for stream's chunks", async ({ webcontainer }) => { 48 | const { isDone, onData } = webcontainer.runCommand("node", [ 49 | "--eval", 50 | "console.log('First'); setTimeout(() => console.log('Second'), 1_000);", 51 | ]); 52 | 53 | const data: string[] = []; 54 | onData((chunk) => data.push(chunk.trim())); 55 | 56 | await isDone; 57 | 58 | expect(data).toMatchInlineSnapshot(` 59 | [ 60 | "First", 61 | "Second", 62 | ] 63 | `); 64 | }); 65 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@webcontainer/test", 3 | "version": "0.3.0", 4 | "description": "Utilities for testing applications in WebContainers", 5 | "author": "StackBlitz Inc.", 6 | "license": "MIT", 7 | "type": "module", 8 | "types": "./dist/index.d.ts", 9 | "exports": { 10 | ".": { 11 | "import": { 12 | "types": "./dist/index.d.ts", 13 | "default": "./dist/index.js" 14 | } 15 | }, 16 | "./plugin": { 17 | "import": { 18 | "types": "./dist/plugin.d.ts", 19 | "default": "./dist/plugin.js" 20 | } 21 | } 22 | }, 23 | "files": [ 24 | "dist" 25 | ], 26 | "homepage": "https://github.com/stackblitz/webcontainer-test", 27 | "bugs": "https://github.com/stackblitz/webcontainer-test", 28 | "repository": { 29 | "type": "git", 30 | "url": "git+https://github.com/stackblitz/webcontainer-test.git" 31 | }, 32 | "keywords": [ 33 | "testing", 34 | "webcontainer", 35 | "playwright", 36 | "vitest" 37 | ], 38 | "packageManager": "pnpm@10.4.1", 39 | "scripts": { 40 | "build": "tsup", 41 | "dev": "tsup --watch --sourcemap", 42 | "test": "vitest run", 43 | "test:watch": "vitest --project Chromium --browser.provider preview --browser.headless=false", 44 | "lint": "eslint --cache --cache-location ./node_modules/.cache/eslint .", 45 | "typecheck": "tsc --noEmit" 46 | }, 47 | "dependencies": { 48 | "@webcontainer/api": "^1.6.1", 49 | "@webcontainer/snapshot": "^0.1.0" 50 | }, 51 | "peerDependencies": { 52 | "vitest": "^4" 53 | }, 54 | "devDependencies": { 55 | "@blitz/eslint-plugin": "^0.1.4", 56 | "@types/node": "^22.14.0", 57 | "@vitest/browser-playwright": "^4.0.14", 58 | "eslint": "^9.24.0", 59 | "playwright": "^1.52.0", 60 | "prettier": "^3.5.3", 61 | "tsup": "^8.4.0", 62 | "typescript": "^5.8.3", 63 | "vitest": "^4.0.14" 64 | }, 65 | "prettier": {} 66 | } 67 | -------------------------------------------------------------------------------- /test/fixtures/starter-vite/src/style.css: -------------------------------------------------------------------------------- 1 | :root { 2 | font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; 3 | line-height: 1.5; 4 | font-weight: 400; 5 | 6 | color-scheme: light dark; 7 | color: rgba(255, 255, 255, 0.87); 8 | background-color: #242424; 9 | 10 | font-synthesis: none; 11 | text-rendering: optimizeLegibility; 12 | -webkit-font-smoothing: antialiased; 13 | -moz-osx-font-smoothing: grayscale; 14 | } 15 | 16 | a { 17 | font-weight: 500; 18 | color: #646cff; 19 | text-decoration: inherit; 20 | } 21 | a:hover { 22 | color: #535bf2; 23 | } 24 | 25 | body { 26 | margin: 0; 27 | display: flex; 28 | place-items: center; 29 | min-width: 320px; 30 | min-height: 100vh; 31 | } 32 | 33 | h1 { 34 | font-size: 3.2em; 35 | line-height: 1.1; 36 | } 37 | 38 | #app { 39 | max-width: 1280px; 40 | margin: 0 auto; 41 | padding: 2rem; 42 | text-align: center; 43 | } 44 | 45 | .logo { 46 | height: 6em; 47 | padding: 1.5em; 48 | will-change: filter; 49 | transition: filter 300ms; 50 | } 51 | .logo:hover { 52 | filter: drop-shadow(0 0 2em #646cffaa); 53 | } 54 | .logo.vanilla:hover { 55 | filter: drop-shadow(0 0 2em #f7df1eaa); 56 | } 57 | 58 | .card { 59 | padding: 2em; 60 | } 61 | 62 | .read-the-docs { 63 | color: #888; 64 | } 65 | 66 | button { 67 | border-radius: 8px; 68 | border: 1px solid transparent; 69 | padding: 0.6em 1.2em; 70 | font-size: 1em; 71 | font-weight: 500; 72 | font-family: inherit; 73 | background-color: #1a1a1a; 74 | cursor: pointer; 75 | transition: border-color 0.25s; 76 | } 77 | button:hover { 78 | border-color: #646cff; 79 | } 80 | button:focus, 81 | button:focus-visible { 82 | outline: 4px auto -webkit-focus-ring-color; 83 | } 84 | 85 | @media (prefers-color-scheme: light) { 86 | :root { 87 | color: #213547; 88 | background-color: #ffffff; 89 | } 90 | a:hover { 91 | color: #747bff; 92 | } 93 | button { 94 | background-color: #f9f9f9; 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /src/fixtures/webcontainer.ts: -------------------------------------------------------------------------------- 1 | import { WebContainer as WebContainerApi } from "@webcontainer/api"; 2 | 3 | import { FileSystem } from "./file-system"; 4 | import { ProcessWrap } from "./process"; 5 | 6 | export class WebContainer extends FileSystem { 7 | /** @internal */ 8 | private _instancePromise?: WebContainerApi; 9 | 10 | /** @internal */ 11 | private _isReady: Promise; 12 | 13 | /** @internal */ 14 | private _onExit: (() => Promise)[] = []; 15 | 16 | constructor() { 17 | super(); 18 | 19 | this._isReady = new Promise((resolve, reject) => { 20 | const timeout = setTimeout(() => { 21 | reject(new Error("WebContainer boot timed out in 30s")); 22 | }, 30_000); 23 | 24 | WebContainerApi.boot({}).then((instance) => { 25 | clearTimeout(timeout); 26 | this._instancePromise = instance; 27 | resolve(); 28 | }); 29 | }); 30 | } 31 | 32 | /** @internal */ 33 | protected get _instance(): WebContainerApi { 34 | if (!this._instancePromise) { 35 | throw new Error( 36 | "Webcontainer is not yet ready, make sure to call wait() after creation", 37 | ); 38 | } 39 | 40 | return this._instancePromise; 41 | } 42 | 43 | /** @internal */ 44 | async wait() { 45 | await this._isReady; 46 | } 47 | 48 | /** @internal */ 49 | onServerReady(callback: (options: { port: number; url: string }) => void) { 50 | this._instance.on("server-ready", (port, url) => { 51 | callback({ port, url }); 52 | }); 53 | } 54 | 55 | /** @internal */ 56 | async teardown() { 57 | await Promise.all(this._onExit.map((fn) => fn())); 58 | 59 | // @ts-ignore -- internal 60 | await this._instance._instance.teardown(); 61 | 62 | this._instance.teardown(); 63 | this._instancePromise = undefined; 64 | } 65 | 66 | /** 67 | * Run command inside WebContainer. 68 | * See [`runCommand` documentation](https://github.com/stackblitz/webcontainer-test#runcommand) for usage examples. 69 | */ 70 | runCommand( 71 | command: string, 72 | args: string[] = [], 73 | ): PromiseLike & ProcessWrap { 74 | const proc = new ProcessWrap( 75 | this._instance.spawn(command, args, { output: true }), 76 | ); 77 | 78 | this._onExit.push(() => proc.exit()); 79 | 80 | return proc; 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /.github/actions/setup-and-cache/action.yml: -------------------------------------------------------------------------------- 1 | name: "Setup-node and cache" 2 | description: "Base setup for each action" 3 | inputs: 4 | node-version: 5 | required: false 6 | description: "Node version for setup-node" 7 | default: "20" 8 | 9 | runs: 10 | using: "composite" 11 | steps: 12 | - name: Install pnpm 13 | uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 14 | 15 | - name: Set node version to ${{ inputs.node-version }} 16 | uses: actions/setup-node@v4 17 | with: 18 | node-version: ${{ inputs.node-version }} 19 | registry-url: "https://registry.npmjs.org" 20 | 21 | - name: Resolve package versions 22 | id: resolve-package-versions 23 | shell: bash 24 | run: > 25 | echo "$( 26 | node -e " 27 | const fs = require('fs'); 28 | const lockfile = fs.readFileSync('./pnpm-lock.yaml', 'utf8'); 29 | const pattern = (name) => new RegExp(name + ':\\\s+specifier: [\\\s\\\w\\\.^]+version: (\\\d+\\\.\\\d+\\\.\\\d+)'); 30 | const playwrightVersion = lockfile.match(pattern('playwright'))[1]; 31 | console.log('PLAYWRIGHT_VERSION=' + playwrightVersion); 32 | " 33 | )" >> $GITHUB_OUTPUT 34 | 35 | - name: Print versions 36 | shell: bash 37 | run: echo "${{ toJson(steps.resolve-package-versions.outputs) }}" 38 | 39 | - name: Check resolved package versions 40 | shell: bash 41 | if: | 42 | contains(fromJSON('[null, "", "undefined"]'), steps.resolve-package-versions.outputs.PLAYWRIGHT_VERSION) 43 | run: echo "Failed to resolve package versions. See log above." && exit 1 44 | 45 | - name: Cache Playwright v${{ steps.resolve-package-versions.outputs.PLAYWRIGHT_VERSION }} 46 | uses: actions/cache@v4 47 | id: playwright-cache 48 | with: 49 | path: ${{ env.PLAYWRIGHT_BROWSERS_PATH }} 50 | key: ${{ runner.os }}-playwright-${{ steps.resolve-package-versions.outputs.PLAYWRIGHT_VERSION }} 51 | restore-keys: | 52 | ${{ runner.os }}-playwright- 53 | 54 | - uses: actions/cache@v4 55 | with: 56 | path: | 57 | ~/.pnpm-store 58 | **/node_modules 59 | key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} 60 | restore-keys: | 61 | ${{ runner.os }} 62 | -------------------------------------------------------------------------------- /src/fixtures/index.ts: -------------------------------------------------------------------------------- 1 | import { test as base } from "vitest"; 2 | 3 | import { Preview } from "./preview"; 4 | import { WebContainer } from "./webcontainer"; 5 | 6 | export interface TestContext { 7 | preview: Preview; 8 | webcontainer: WebContainer; 9 | setup: (callback: () => Promise) => Promise; 10 | 11 | /** @internal */ 12 | _internalState: { current: Uint8Array | undefined }; 13 | } 14 | 15 | /** 16 | * Pre-defined [`test()` function](https://vitest.dev/guide/test-context.html#extend-test-context) with WebContainer fixtures. 17 | * 18 | * @example 19 | * ```ts 20 | * import { test } from "@webcontainer/test"; 21 | * 22 | * test("run development server inside webcontainer", async ({ 23 | * webcontainer, 24 | * preview, 25 | * }) => { 26 | * await webcontainer.mount("path/to/project"); 27 | * 28 | * await webcontainer.runCommand("npm", ["install"]); 29 | * const { exit } = webcontainer.runCommand("npm", ["run", "dev"]); 30 | * 31 | * await preview.getByRole("heading", { level: 1, name: "Hello Vite!" }); 32 | * await exit(); 33 | * }); 34 | * ``` 35 | */ 36 | export const test = base.extend>({ 37 | // @ts-ignore -- intentionally untyped, excluded from public API 38 | _internalState: { current: undefined }, 39 | 40 | preview: async ({ webcontainer }, use) => { 41 | await webcontainer.wait(); 42 | 43 | const preview = new Preview(); 44 | webcontainer.onServerReady((options) => preview.setup(options.url)); 45 | 46 | await use(preview); 47 | 48 | await preview.teardown(); 49 | }, 50 | 51 | webcontainer: async ({}, use) => { 52 | const webcontainer = new WebContainer(); 53 | await webcontainer.wait(); 54 | 55 | await use(webcontainer); 56 | 57 | addEventListener("unhandledrejection", (event) => { 58 | if ( 59 | event.reason instanceof Error && 60 | event.reason.message === "Process aborted" 61 | ) { 62 | return event.preventDefault(); 63 | } 64 | 65 | return Promise.reject(event.reason); 66 | }); 67 | 68 | await webcontainer.teardown(); 69 | }, 70 | 71 | // @ts-ignore -- intentionally untyped, excluded from public API 72 | setup: async ({ webcontainer, _internalState }, use) => { 73 | const internalState = _internalState as TestContext["_internalState"]; 74 | 75 | await use(async (callback) => { 76 | if (internalState.current) { 77 | await webcontainer.restore(internalState.current); 78 | return; 79 | } 80 | 81 | await callback(); 82 | 83 | // save current state in fixture 84 | internalState.current = await webcontainer.export(); 85 | }); 86 | }, 87 | }); 88 | -------------------------------------------------------------------------------- /src/fixtures/file-system.ts: -------------------------------------------------------------------------------- 1 | import type { 2 | FileSystemTree, 3 | BufferEncoding, 4 | WebContainer, 5 | } from "@webcontainer/api"; 6 | import { commands } from "vitest/browser"; 7 | 8 | export class FileSystem { 9 | /** @internal */ 10 | protected get _instance(): WebContainer { 11 | throw new Error("_instance should be overwritten"); 12 | } 13 | 14 | /** 15 | * Mount file directory into WebContainer. 16 | * `string` arguments are considered paths that are relative to [`root`](https://vitest.dev/config/#root) 17 | */ 18 | async mount(filesOrPath: string | FileSystemTree) { 19 | if (typeof filesOrPath === "string") { 20 | const tree = await commands.readDirectory(filesOrPath); 21 | const binary = Uint8Array.from(atob(tree), (c) => c.charCodeAt(0)); 22 | 23 | return await this._instance.mount(binary); 24 | } 25 | 26 | return await this._instance.mount(filesOrPath); 27 | } 28 | 29 | /** 30 | * WebContainer's [`readFile`](https://webcontainers.io/guides/working-with-the-file-system#readfile) method. 31 | */ 32 | async readFile(path: string, encoding: BufferEncoding = "utf8") { 33 | return this._instance.fs.readFile(path, encoding); 34 | } 35 | 36 | /** 37 | * WebContainer's [`writeFile`](https://webcontainers.io/guides/working-with-the-file-system#writefile) method. 38 | */ 39 | async writeFile(path: string, data: string, encoding = "utf8") { 40 | return this._instance.fs.writeFile(path, data, { encoding }); 41 | } 42 | 43 | /** 44 | * WebContainer's [`rename`](https://webcontainers.io/guides/working-with-the-file-system#rename) method. 45 | */ 46 | async rename(oldPath: string, newPath: string) { 47 | return this._instance.fs.rename(oldPath, newPath); 48 | } 49 | 50 | /** 51 | * WebContainer's [`mkdir`](https://webcontainers.io/guides/working-with-the-file-system#mkdir) method. 52 | */ 53 | async mkdir(path: string) { 54 | return this._instance.fs.mkdir(path); 55 | } 56 | 57 | /** 58 | * WebContainer's [`readdir`](https://webcontainers.io/guides/working-with-the-file-system#readdir) method. 59 | */ 60 | async readdir(path: string) { 61 | return this._instance.fs.readdir(path); 62 | } 63 | 64 | /** 65 | * WebContainer's [`rm`](https://webcontainers.io/guides/working-with-the-file-system#rm) method. 66 | */ 67 | async rm(path: string) { 68 | return this._instance.fs.rm(path); 69 | } 70 | 71 | /** @internal */ 72 | async export() { 73 | return await this._instance.export("./", { format: "binary" }); 74 | } 75 | 76 | /** @internal */ 77 | async restore(snapshot: Uint8Array) { 78 | return await this._instance.mount(new Uint8Array(snapshot)); 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /test/mount.test.ts: -------------------------------------------------------------------------------- 1 | import { expect } from "vitest"; 2 | import { test } from "../src"; 3 | 4 | test( 5 | "user can mount directories from file-system to webcontainer", 6 | { retry: 3 }, 7 | async ({ webcontainer }) => { 8 | await webcontainer.mount("test/fixtures/mount-example"); 9 | 10 | const ls = await webcontainer.runCommand("ls"); 11 | expect(ls).toMatchInlineSnapshot(`"file-1.ts image.png nested"`); 12 | 13 | const lsNested = await webcontainer.runCommand("ls", ["nested"]); 14 | expect(lsNested).toMatchInlineSnapshot(`"file-2.ts"`); 15 | 16 | const catFile = await webcontainer.runCommand("cat", ["file-1.ts"]); 17 | expect(catFile).toMatchInlineSnapshot(`"export default "Hello world";"`); 18 | 19 | const catNestedFile = await webcontainer.runCommand("cat", [ 20 | "nested/file-2.ts", 21 | ]); 22 | expect(catNestedFile).toMatchInlineSnapshot( 23 | `"export default "Hello from nested file";"`, 24 | ); 25 | 26 | // TODO: Once WebcontainerProcess output resolving is visible, assert whole png content 27 | const pngFile = await webcontainer.runCommand("xxd", ["image.png"]); 28 | expect(pngFile).toContain( 29 | "00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR", 30 | ); 31 | }, 32 | ); 33 | 34 | test("user can mount inlined FileSystemTree to webcontainer", async ({ 35 | webcontainer, 36 | }) => { 37 | await webcontainer.mount({ 38 | "file-1.ts": { 39 | file: { contents: 'export default "Hello world";' }, 40 | }, 41 | nested: { 42 | directory: { 43 | "file-2.ts": { 44 | file: { contents: 'export default "Hello from nested file";' }, 45 | }, 46 | }, 47 | }, 48 | }); 49 | 50 | const ls = await webcontainer.runCommand("ls"); 51 | expect(ls).toMatchInlineSnapshot(`"file-1.ts nested"`); 52 | 53 | const lsNested = await webcontainer.runCommand("ls", ["nested"]); 54 | expect(lsNested).toMatchInlineSnapshot(`"file-2.ts"`); 55 | 56 | const catFile = await webcontainer.runCommand("cat", ["file-1.ts"]); 57 | expect(catFile).toMatchInlineSnapshot(`"export default "Hello world";"`); 58 | 59 | const catNestedFile = await webcontainer.runCommand("cat", [ 60 | "nested/file-2.ts", 61 | ]); 62 | expect(catNestedFile).toMatchInlineSnapshot( 63 | `"export default "Hello from nested file";"`, 64 | ); 65 | }); 66 | 67 | test("user should see error when attemping to mount files outside project root", async ({ 68 | webcontainer, 69 | }) => { 70 | await expect(() => webcontainer.mount("/home/non-existing")).rejects 71 | .toThrowErrorMatchingInlineSnapshot(` 72 | [Error: [vitest:webcontainers] Cannot read files outside project root: 73 | { 74 | "directory": "/home/non-existing", 75 | "resolved": "/home/non-existing" 76 | }] 77 | `); 78 | 79 | await expect(() => webcontainer.mount("/../../non-existing")).rejects 80 | .toThrowErrorMatchingInlineSnapshot(` 81 | [Error: [vitest:webcontainers] Cannot read files outside project root: 82 | { 83 | "directory": "/../../non-existing", 84 | "resolved": "/non-existing" 85 | }] 86 | `); 87 | }); 88 | -------------------------------------------------------------------------------- /src/fixtures/process.ts: -------------------------------------------------------------------------------- 1 | import { WebContainerProcess } from "@webcontainer/api"; 2 | 3 | export class ProcessWrap { 4 | /** @internal */ 5 | private _webcontainerProcess!: WebContainerProcess; 6 | 7 | /** @internal */ 8 | private _isReady: Promise; 9 | 10 | /** @internal */ 11 | private _output: string = ""; 12 | 13 | /** @internal */ 14 | private _listeners: ((chunk: string) => void)[] = []; 15 | 16 | /** @internal */ 17 | private _writer?: ReturnType; 18 | 19 | /** 20 | * Wait for process to exit. 21 | */ 22 | isDone: Promise; 23 | 24 | constructor(promise: Promise) { 25 | let isExitted = false; 26 | let setDone: () => void = () => undefined; 27 | 28 | this.isDone = new Promise((resolve) => { 29 | setDone = () => { 30 | resolve(); 31 | isExitted = true; 32 | }; 33 | }); 34 | 35 | this._isReady = promise.then((webcontainerProcess) => { 36 | this._webcontainerProcess = webcontainerProcess; 37 | this._writer = webcontainerProcess.input.getWriter(); 38 | 39 | webcontainerProcess.exit.then(setDone); 40 | 41 | const reader = this._webcontainerProcess.output.getReader(); 42 | 43 | const read = async () => { 44 | while (true) { 45 | const { done, value } = await reader.read(); 46 | 47 | if (isExitted && !done) { 48 | console.warn( 49 | `[webcontainer-test]: Closed process keeps writing to output. Closing reader forcefully. \n` + 50 | ` Received: "${value}".`, 51 | ); 52 | await reader.cancel(); 53 | break; 54 | } 55 | 56 | // webcontainer process never reaches here, but for future-proofing let's exit 57 | if (done) { 58 | break; 59 | } 60 | 61 | this._output += value; 62 | this._listeners.forEach((fn) => fn(value)); 63 | } 64 | }; 65 | 66 | void read(); 67 | }); 68 | } 69 | 70 | then( 71 | onfulfilled?: ((value: string) => TResult1 | PromiseLike) | null, 72 | onrejected?: ((reason: unknown) => TResult2 | PromiseLike) | null, 73 | ): Promise { 74 | return this.isDone 75 | .then(() => this._output.trim()) 76 | .then(onfulfilled, onrejected); 77 | } 78 | 79 | /** 80 | * Write command into the process. 81 | */ 82 | write = async (text: string) => { 83 | await this._isReady; 84 | 85 | this.resetCapturedText(); 86 | 87 | if (!this._writer) { 88 | throw new Error("Process setup failed, writer not initialized"); 89 | } 90 | 91 | return this._writer.write(text); 92 | }; 93 | 94 | /** 95 | * Reset captured output, so that `waitForText` does not match previous captured outputs. 96 | */ 97 | resetCapturedText = () => { 98 | this._output = ""; 99 | }; 100 | 101 | /** 102 | * Wait for process to output expected text. 103 | */ 104 | waitForText = async (expected: string, timeoutMs = 10_000) => { 105 | const error = new Error("Timeout"); 106 | 107 | if ("captureStackTrace" in Error) { 108 | Error.captureStackTrace(error, this.waitForText); 109 | } 110 | 111 | await this._isReady; 112 | 113 | return new Promise((resolve, reject) => { 114 | if (this._output.includes(expected)) { 115 | resolve(); 116 | return; 117 | } 118 | 119 | const timeout = setTimeout(() => { 120 | error.message = `Timeout when waiting for text "${expected}".\nReceived:\n${this._output.trim()}`; 121 | reject(error); 122 | }, timeoutMs); 123 | 124 | const listener = () => { 125 | if (this._output.includes(expected)) { 126 | clearTimeout(timeout); 127 | this._listeners.splice(this._listeners.indexOf(listener), 1); 128 | 129 | resolve(); 130 | } 131 | }; 132 | 133 | this._listeners.push(listener); 134 | }); 135 | }; 136 | 137 | /** 138 | * Listen for data stream chunks. 139 | */ 140 | onData = (listener: (chunk: string) => void) => { 141 | this._listeners.push(listener); 142 | }; 143 | 144 | /** 145 | * Exit the process. 146 | */ 147 | exit = async () => { 148 | await this._isReady; 149 | 150 | this._webcontainerProcess.kill(); 151 | this._listeners.splice(0); 152 | 153 | return this.isDone; 154 | }; 155 | } 156 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # @webcontainer/test 2 | 3 | [![Version][version-badge]][npm-url] 4 | 5 | > Utilities for testing applications in WebContainers 6 | 7 | [Installation](#installation) | [Configuration](#configuration) | [API](#api) 8 | 9 | --- 10 | 11 | Test your applications and packages inside WebContainers. 12 | 13 | ## Installation 14 | 15 | Add `@webcontainer/test` to your development dependencies. 16 | 17 | ```sh 18 | $ npm install --save-dev @webcontainer/test 19 | ``` 20 | 21 | Vitest is also required as peer dependency. 22 | 23 | ```sh 24 | $ npm install --save-dev vitest 25 | ``` 26 | 27 | ## Configuration 28 | 29 | Add `vitestWebContainers` plugin in your Vitest config and [enable browser mode](https://vitest.dev/guide/browser/#manual-installation): 30 | 31 | ```ts 32 | import { defineConfig } from "vitest/config"; 33 | import { vitestWebContainers } from "@webcontainer/test/plugin"; 34 | 35 | export default defineConfig({ 36 | plugins: [vitestWebContainers()], 37 | test: { 38 | browser: { 39 | enabled: true, 40 | }, 41 | }, 42 | }); 43 | ``` 44 | 45 | ## API 46 | 47 | Webcontainer utilities are exposed as [test fixtures](https://vitest.dev/guide/test-context.html#test-extend): 48 | 49 | - [`preview`](#preview) 50 | - [`webcontainer`](#webcontainer) 51 | - [`setup`](#setup) 52 | 53 | ```ts 54 | import { test } from "@webcontainer/test"; 55 | 56 | test("run development server inside webcontainer", async ({ 57 | webcontainer, 58 | preview, 59 | }) => { 60 | await webcontainer.mount("path/to/project"); 61 | 62 | await webcontainer.runCommand("npm", ["install"]); 63 | const { exit } = webcontainer.runCommand("npm", ["run", "dev"]); 64 | 65 | await preview.getByRole("heading", { level: 1, name: "Hello Vite!" }); 66 | await exit(); 67 | }); 68 | ``` 69 | 70 | To use test hooks, you can import fixture typings: 71 | 72 | ```ts 73 | import { test, type TestContext } from "@webcontainer/test"; 74 | import { beforeEach } from "vitest"; 75 | 76 | // Mount project before each test 77 | beforeEach(({ webcontainer }) => { 78 | await webcontainer.mount("projects/example"); 79 | }); 80 | ``` 81 | 82 | #### `preview` 83 | 84 | ##### `getByRole` 85 | 86 | Vitest's [`getByRole`](https://vitest.dev/guide/browser/locators.html#getbyrole) that's scoped to the preview window. 87 | 88 | ```ts 89 | await preview.getByRole("heading", { level: 1, name: "Hello Vite!" }); 90 | ``` 91 | 92 | ##### `getByText` 93 | 94 | Vitest's [`getByText`](https://vitest.dev/guide/browser/locators.html#getbytext) that's scoped to the preview window. 95 | 96 | ```ts 97 | await preview.getByText("Hello Vite!"); 98 | ``` 99 | 100 | ##### `locator` 101 | 102 | Vitest's [`locator`](https://vitest.dev/guide/browser/locators.html) of the preview window. 103 | 104 | ```ts 105 | await preview.locator.hover(); 106 | ``` 107 | 108 | #### `webcontainer` 109 | 110 | ##### `mount` 111 | 112 | Mount file system inside webcontainer. 113 | 114 | Accepts a path that is relative to the [project root](https://vitest.dev/config/#root), or inlined [`FileSystemTree`](https://webcontainers.io/api#filesystemtree). 115 | 116 | ```ts 117 | await webcontainer.mount("/path/to/project"); 118 | 119 | await webcontainer.mount({ 120 | "package.json": { file: { contents: '{ "name": "example-project" }' } }, 121 | src: { 122 | directory: { 123 | "index.ts": { file: { contents: "export default 'Hello!';" } }, 124 | }, 125 | }, 126 | }); 127 | ``` 128 | 129 | ##### `runCommand` 130 | 131 | Run command inside webcontainer. 132 | 133 | ```ts 134 | await webcontainer.runCommand("npm", ["install"]); 135 | ``` 136 | 137 | Calling `await` on the result resolves into the command output: 138 | 139 | ```ts 140 | const files = await webcontainer.runCommand("ls", ["-l"]); 141 | ``` 142 | 143 | To write into the output stream, use `write` method of the non-awaited output. 144 | 145 | To verify output of continuous stream, use `waitForText()`: 146 | 147 | ```ts 148 | const { write, waitForText, exit } = webcontainer.runCommand("npm", [ 149 | "create", 150 | "vite", 151 | ]); 152 | 153 | await waitForText("What would you like to call your project?"); 154 | await write("Example Project\n"); 155 | 156 | await waitForText("Where should the project be created?"); 157 | await write("./example-project\n"); 158 | 159 | await exit(); 160 | ``` 161 | 162 | To capture each output chunk one-by-one, you can use `onData` callback. 163 | This can be useful when debugging output of the stream. 164 | 165 | ```ts 166 | const { isDone, onData } = webcontainer.runCommand("npm", ["run", "build"]); 167 | 168 | onData((chunk) => console.log(chunk)); 169 | 170 | await isDone; 171 | ``` 172 | 173 | ##### `readFile` 174 | 175 | WebContainer's [`readFile`](https://webcontainers.io/guides/working-with-the-file-system#readfile) method. 176 | 177 | ```ts 178 | const content = await webcontainer.readFile("/package.json"); 179 | ``` 180 | 181 | ##### `writeFile` 182 | 183 | WebContainer's [`writeFile`](https://webcontainers.io/guides/working-with-the-file-system#writefile) method. 184 | 185 | ```ts 186 | await webcontainer.writeFile("/main.ts", "console.log('Hello world!')"); 187 | ``` 188 | 189 | ##### `rename` 190 | 191 | WebContainer's [`rename`](https://webcontainers.io/guides/working-with-the-file-system#rename) method. 192 | 193 | ```ts 194 | await webcontainer.rename("/before.ts", "/after.ts"); 195 | ``` 196 | 197 | ##### `mkdir` 198 | 199 | WebContainer's [`mkdir`](https://webcontainers.io/guides/working-with-the-file-system#mkdir) method. 200 | 201 | ```ts 202 | await webcontainer.mkdir("/src/components"); 203 | ``` 204 | 205 | ##### `readdir` 206 | 207 | WebContainer's [`readdir`](https://webcontainers.io/guides/working-with-the-file-system#readdir) method. 208 | 209 | ```ts 210 | const contents = await webcontainer.readdir("/src"); 211 | ``` 212 | 213 | ##### `rm` 214 | 215 | WebContainer's [`rm`](https://webcontainers.io/guides/working-with-the-file-system#rm) method. 216 | 217 | ```ts 218 | await webcontainer.rm("/node_modules"); 219 | ``` 220 | 221 | ### `setup` 222 | 223 | If you have repetitive steps that are needed by multiple test cases, you can improve test performance by using `setup`. 224 | 225 | It calls the given function once, saves WebContainer state in a snapshot, and restores that snapshot before each test. 226 | 227 | ```ts 228 | import { test, type TestContext } from "@webcontainer/test"; 229 | import { beforeEach, expect, onTestFinished } from "vitest"; 230 | 231 | beforeEach(async ({ webcontainer, setup }) => { 232 | // This is run once and cached for each next run 233 | await setup(async () => { 234 | await webcontainer.mount("./svelte-project"); 235 | await webcontainer.runCommand("npm", ["install"]); 236 | }); 237 | }); 238 | 239 | // No need to re-mount file system or re-run install in test cases 240 | test("user can build project", async ({ webcontainer }) => { 241 | await webcontainer.runCommand("npm", ["run", "build"]); 242 | }); 243 | 244 | test("user can start project", async ({ webcontainer, preview }) => { 245 | void webcontainer.runCommand("npm", ["run", "dev"]); 246 | await preview.getByRole("heading", { name: "Welcome to SvelteKit" }); 247 | }); 248 | ``` 249 | 250 | [version-badge]: https://img.shields.io/npm/v/@webcontainer/test 251 | [npm-url]: https://www.npmjs.com/package/@webcontainer/test 252 | -------------------------------------------------------------------------------- /test/fixtures/starter-vite/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-starter", 3 | "version": "0.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "vite-starter", 9 | "version": "0.0.0", 10 | "devDependencies": { 11 | "vite": "^6.2.2" 12 | } 13 | }, 14 | "node_modules/@esbuild/aix-ppc64": { 15 | "version": "0.25.2", 16 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", 17 | "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", 18 | "cpu": [ 19 | "ppc64" 20 | ], 21 | "dev": true, 22 | "optional": true, 23 | "os": [ 24 | "aix" 25 | ], 26 | "engines": { 27 | "node": ">=18" 28 | } 29 | }, 30 | "node_modules/@esbuild/android-arm": { 31 | "version": "0.25.2", 32 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", 33 | "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", 34 | "cpu": [ 35 | "arm" 36 | ], 37 | "dev": true, 38 | "optional": true, 39 | "os": [ 40 | "android" 41 | ], 42 | "engines": { 43 | "node": ">=18" 44 | } 45 | }, 46 | "node_modules/@esbuild/android-arm64": { 47 | "version": "0.25.2", 48 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", 49 | "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", 50 | "cpu": [ 51 | "arm64" 52 | ], 53 | "dev": true, 54 | "optional": true, 55 | "os": [ 56 | "android" 57 | ], 58 | "engines": { 59 | "node": ">=18" 60 | } 61 | }, 62 | "node_modules/@esbuild/android-x64": { 63 | "version": "0.25.2", 64 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", 65 | "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", 66 | "cpu": [ 67 | "x64" 68 | ], 69 | "dev": true, 70 | "optional": true, 71 | "os": [ 72 | "android" 73 | ], 74 | "engines": { 75 | "node": ">=18" 76 | } 77 | }, 78 | "node_modules/@esbuild/darwin-arm64": { 79 | "version": "0.25.2", 80 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", 81 | "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", 82 | "cpu": [ 83 | "arm64" 84 | ], 85 | "dev": true, 86 | "optional": true, 87 | "os": [ 88 | "darwin" 89 | ], 90 | "engines": { 91 | "node": ">=18" 92 | } 93 | }, 94 | "node_modules/@esbuild/darwin-x64": { 95 | "version": "0.25.2", 96 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", 97 | "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", 98 | "cpu": [ 99 | "x64" 100 | ], 101 | "dev": true, 102 | "optional": true, 103 | "os": [ 104 | "darwin" 105 | ], 106 | "engines": { 107 | "node": ">=18" 108 | } 109 | }, 110 | "node_modules/@esbuild/freebsd-arm64": { 111 | "version": "0.25.2", 112 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", 113 | "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", 114 | "cpu": [ 115 | "arm64" 116 | ], 117 | "dev": true, 118 | "optional": true, 119 | "os": [ 120 | "freebsd" 121 | ], 122 | "engines": { 123 | "node": ">=18" 124 | } 125 | }, 126 | "node_modules/@esbuild/freebsd-x64": { 127 | "version": "0.25.2", 128 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", 129 | "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", 130 | "cpu": [ 131 | "x64" 132 | ], 133 | "dev": true, 134 | "optional": true, 135 | "os": [ 136 | "freebsd" 137 | ], 138 | "engines": { 139 | "node": ">=18" 140 | } 141 | }, 142 | "node_modules/@esbuild/linux-arm": { 143 | "version": "0.25.2", 144 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", 145 | "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", 146 | "cpu": [ 147 | "arm" 148 | ], 149 | "dev": true, 150 | "optional": true, 151 | "os": [ 152 | "linux" 153 | ], 154 | "engines": { 155 | "node": ">=18" 156 | } 157 | }, 158 | "node_modules/@esbuild/linux-arm64": { 159 | "version": "0.25.2", 160 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", 161 | "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", 162 | "cpu": [ 163 | "arm64" 164 | ], 165 | "dev": true, 166 | "optional": true, 167 | "os": [ 168 | "linux" 169 | ], 170 | "engines": { 171 | "node": ">=18" 172 | } 173 | }, 174 | "node_modules/@esbuild/linux-ia32": { 175 | "version": "0.25.2", 176 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", 177 | "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", 178 | "cpu": [ 179 | "ia32" 180 | ], 181 | "dev": true, 182 | "optional": true, 183 | "os": [ 184 | "linux" 185 | ], 186 | "engines": { 187 | "node": ">=18" 188 | } 189 | }, 190 | "node_modules/@esbuild/linux-loong64": { 191 | "version": "0.25.2", 192 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", 193 | "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", 194 | "cpu": [ 195 | "loong64" 196 | ], 197 | "dev": true, 198 | "optional": true, 199 | "os": [ 200 | "linux" 201 | ], 202 | "engines": { 203 | "node": ">=18" 204 | } 205 | }, 206 | "node_modules/@esbuild/linux-mips64el": { 207 | "version": "0.25.2", 208 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", 209 | "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", 210 | "cpu": [ 211 | "mips64el" 212 | ], 213 | "dev": true, 214 | "optional": true, 215 | "os": [ 216 | "linux" 217 | ], 218 | "engines": { 219 | "node": ">=18" 220 | } 221 | }, 222 | "node_modules/@esbuild/linux-ppc64": { 223 | "version": "0.25.2", 224 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", 225 | "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", 226 | "cpu": [ 227 | "ppc64" 228 | ], 229 | "dev": true, 230 | "optional": true, 231 | "os": [ 232 | "linux" 233 | ], 234 | "engines": { 235 | "node": ">=18" 236 | } 237 | }, 238 | "node_modules/@esbuild/linux-riscv64": { 239 | "version": "0.25.2", 240 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", 241 | "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", 242 | "cpu": [ 243 | "riscv64" 244 | ], 245 | "dev": true, 246 | "optional": true, 247 | "os": [ 248 | "linux" 249 | ], 250 | "engines": { 251 | "node": ">=18" 252 | } 253 | }, 254 | "node_modules/@esbuild/linux-s390x": { 255 | "version": "0.25.2", 256 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", 257 | "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", 258 | "cpu": [ 259 | "s390x" 260 | ], 261 | "dev": true, 262 | "optional": true, 263 | "os": [ 264 | "linux" 265 | ], 266 | "engines": { 267 | "node": ">=18" 268 | } 269 | }, 270 | "node_modules/@esbuild/linux-x64": { 271 | "version": "0.25.2", 272 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", 273 | "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", 274 | "cpu": [ 275 | "x64" 276 | ], 277 | "dev": true, 278 | "optional": true, 279 | "os": [ 280 | "linux" 281 | ], 282 | "engines": { 283 | "node": ">=18" 284 | } 285 | }, 286 | "node_modules/@esbuild/netbsd-arm64": { 287 | "version": "0.25.2", 288 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", 289 | "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", 290 | "cpu": [ 291 | "arm64" 292 | ], 293 | "dev": true, 294 | "optional": true, 295 | "os": [ 296 | "netbsd" 297 | ], 298 | "engines": { 299 | "node": ">=18" 300 | } 301 | }, 302 | "node_modules/@esbuild/netbsd-x64": { 303 | "version": "0.25.2", 304 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", 305 | "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", 306 | "cpu": [ 307 | "x64" 308 | ], 309 | "dev": true, 310 | "optional": true, 311 | "os": [ 312 | "netbsd" 313 | ], 314 | "engines": { 315 | "node": ">=18" 316 | } 317 | }, 318 | "node_modules/@esbuild/openbsd-arm64": { 319 | "version": "0.25.2", 320 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", 321 | "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", 322 | "cpu": [ 323 | "arm64" 324 | ], 325 | "dev": true, 326 | "optional": true, 327 | "os": [ 328 | "openbsd" 329 | ], 330 | "engines": { 331 | "node": ">=18" 332 | } 333 | }, 334 | "node_modules/@esbuild/openbsd-x64": { 335 | "version": "0.25.2", 336 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", 337 | "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", 338 | "cpu": [ 339 | "x64" 340 | ], 341 | "dev": true, 342 | "optional": true, 343 | "os": [ 344 | "openbsd" 345 | ], 346 | "engines": { 347 | "node": ">=18" 348 | } 349 | }, 350 | "node_modules/@esbuild/sunos-x64": { 351 | "version": "0.25.2", 352 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", 353 | "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", 354 | "cpu": [ 355 | "x64" 356 | ], 357 | "dev": true, 358 | "optional": true, 359 | "os": [ 360 | "sunos" 361 | ], 362 | "engines": { 363 | "node": ">=18" 364 | } 365 | }, 366 | "node_modules/@esbuild/win32-arm64": { 367 | "version": "0.25.2", 368 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", 369 | "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", 370 | "cpu": [ 371 | "arm64" 372 | ], 373 | "dev": true, 374 | "optional": true, 375 | "os": [ 376 | "win32" 377 | ], 378 | "engines": { 379 | "node": ">=18" 380 | } 381 | }, 382 | "node_modules/@esbuild/win32-ia32": { 383 | "version": "0.25.2", 384 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", 385 | "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", 386 | "cpu": [ 387 | "ia32" 388 | ], 389 | "dev": true, 390 | "optional": true, 391 | "os": [ 392 | "win32" 393 | ], 394 | "engines": { 395 | "node": ">=18" 396 | } 397 | }, 398 | "node_modules/@esbuild/win32-x64": { 399 | "version": "0.25.2", 400 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", 401 | "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", 402 | "cpu": [ 403 | "x64" 404 | ], 405 | "dev": true, 406 | "optional": true, 407 | "os": [ 408 | "win32" 409 | ], 410 | "engines": { 411 | "node": ">=18" 412 | } 413 | }, 414 | "node_modules/@rollup/rollup-android-arm-eabi": { 415 | "version": "4.39.0", 416 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.39.0.tgz", 417 | "integrity": "sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==", 418 | "cpu": [ 419 | "arm" 420 | ], 421 | "dev": true, 422 | "optional": true, 423 | "os": [ 424 | "android" 425 | ] 426 | }, 427 | "node_modules/@rollup/rollup-android-arm64": { 428 | "version": "4.39.0", 429 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.39.0.tgz", 430 | "integrity": "sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==", 431 | "cpu": [ 432 | "arm64" 433 | ], 434 | "dev": true, 435 | "optional": true, 436 | "os": [ 437 | "android" 438 | ] 439 | }, 440 | "node_modules/@rollup/rollup-darwin-arm64": { 441 | "version": "4.39.0", 442 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.39.0.tgz", 443 | "integrity": "sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==", 444 | "cpu": [ 445 | "arm64" 446 | ], 447 | "dev": true, 448 | "optional": true, 449 | "os": [ 450 | "darwin" 451 | ] 452 | }, 453 | "node_modules/@rollup/rollup-darwin-x64": { 454 | "version": "4.39.0", 455 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.39.0.tgz", 456 | "integrity": "sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==", 457 | "cpu": [ 458 | "x64" 459 | ], 460 | "dev": true, 461 | "optional": true, 462 | "os": [ 463 | "darwin" 464 | ] 465 | }, 466 | "node_modules/@rollup/rollup-freebsd-arm64": { 467 | "version": "4.39.0", 468 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.39.0.tgz", 469 | "integrity": "sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==", 470 | "cpu": [ 471 | "arm64" 472 | ], 473 | "dev": true, 474 | "optional": true, 475 | "os": [ 476 | "freebsd" 477 | ] 478 | }, 479 | "node_modules/@rollup/rollup-freebsd-x64": { 480 | "version": "4.39.0", 481 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.39.0.tgz", 482 | "integrity": "sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==", 483 | "cpu": [ 484 | "x64" 485 | ], 486 | "dev": true, 487 | "optional": true, 488 | "os": [ 489 | "freebsd" 490 | ] 491 | }, 492 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 493 | "version": "4.39.0", 494 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.39.0.tgz", 495 | "integrity": "sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==", 496 | "cpu": [ 497 | "arm" 498 | ], 499 | "dev": true, 500 | "optional": true, 501 | "os": [ 502 | "linux" 503 | ] 504 | }, 505 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 506 | "version": "4.39.0", 507 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.39.0.tgz", 508 | "integrity": "sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==", 509 | "cpu": [ 510 | "arm" 511 | ], 512 | "dev": true, 513 | "optional": true, 514 | "os": [ 515 | "linux" 516 | ] 517 | }, 518 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 519 | "version": "4.39.0", 520 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.39.0.tgz", 521 | "integrity": "sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==", 522 | "cpu": [ 523 | "arm64" 524 | ], 525 | "dev": true, 526 | "optional": true, 527 | "os": [ 528 | "linux" 529 | ] 530 | }, 531 | "node_modules/@rollup/rollup-linux-arm64-musl": { 532 | "version": "4.39.0", 533 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.39.0.tgz", 534 | "integrity": "sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==", 535 | "cpu": [ 536 | "arm64" 537 | ], 538 | "dev": true, 539 | "optional": true, 540 | "os": [ 541 | "linux" 542 | ] 543 | }, 544 | "node_modules/@rollup/rollup-linux-loongarch64-gnu": { 545 | "version": "4.39.0", 546 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.39.0.tgz", 547 | "integrity": "sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==", 548 | "cpu": [ 549 | "loong64" 550 | ], 551 | "dev": true, 552 | "optional": true, 553 | "os": [ 554 | "linux" 555 | ] 556 | }, 557 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 558 | "version": "4.39.0", 559 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.39.0.tgz", 560 | "integrity": "sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==", 561 | "cpu": [ 562 | "ppc64" 563 | ], 564 | "dev": true, 565 | "optional": true, 566 | "os": [ 567 | "linux" 568 | ] 569 | }, 570 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 571 | "version": "4.39.0", 572 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.39.0.tgz", 573 | "integrity": "sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==", 574 | "cpu": [ 575 | "riscv64" 576 | ], 577 | "dev": true, 578 | "optional": true, 579 | "os": [ 580 | "linux" 581 | ] 582 | }, 583 | "node_modules/@rollup/rollup-linux-riscv64-musl": { 584 | "version": "4.39.0", 585 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.39.0.tgz", 586 | "integrity": "sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==", 587 | "cpu": [ 588 | "riscv64" 589 | ], 590 | "dev": true, 591 | "optional": true, 592 | "os": [ 593 | "linux" 594 | ] 595 | }, 596 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 597 | "version": "4.39.0", 598 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.39.0.tgz", 599 | "integrity": "sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==", 600 | "cpu": [ 601 | "s390x" 602 | ], 603 | "dev": true, 604 | "optional": true, 605 | "os": [ 606 | "linux" 607 | ] 608 | }, 609 | "node_modules/@rollup/rollup-linux-x64-gnu": { 610 | "version": "4.39.0", 611 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz", 612 | "integrity": "sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==", 613 | "cpu": [ 614 | "x64" 615 | ], 616 | "dev": true, 617 | "optional": true, 618 | "os": [ 619 | "linux" 620 | ] 621 | }, 622 | "node_modules/@rollup/rollup-linux-x64-musl": { 623 | "version": "4.39.0", 624 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.39.0.tgz", 625 | "integrity": "sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==", 626 | "cpu": [ 627 | "x64" 628 | ], 629 | "dev": true, 630 | "optional": true, 631 | "os": [ 632 | "linux" 633 | ] 634 | }, 635 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 636 | "version": "4.39.0", 637 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.39.0.tgz", 638 | "integrity": "sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==", 639 | "cpu": [ 640 | "arm64" 641 | ], 642 | "dev": true, 643 | "optional": true, 644 | "os": [ 645 | "win32" 646 | ] 647 | }, 648 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 649 | "version": "4.39.0", 650 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.39.0.tgz", 651 | "integrity": "sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==", 652 | "cpu": [ 653 | "ia32" 654 | ], 655 | "dev": true, 656 | "optional": true, 657 | "os": [ 658 | "win32" 659 | ] 660 | }, 661 | "node_modules/@rollup/rollup-win32-x64-msvc": { 662 | "version": "4.39.0", 663 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.39.0.tgz", 664 | "integrity": "sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==", 665 | "cpu": [ 666 | "x64" 667 | ], 668 | "dev": true, 669 | "optional": true, 670 | "os": [ 671 | "win32" 672 | ] 673 | }, 674 | "node_modules/@types/estree": { 675 | "version": "1.0.7", 676 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", 677 | "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", 678 | "dev": true 679 | }, 680 | "node_modules/esbuild": { 681 | "version": "0.25.2", 682 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", 683 | "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", 684 | "dev": true, 685 | "hasInstallScript": true, 686 | "bin": { 687 | "esbuild": "bin/esbuild" 688 | }, 689 | "engines": { 690 | "node": ">=18" 691 | }, 692 | "optionalDependencies": { 693 | "@esbuild/aix-ppc64": "0.25.2", 694 | "@esbuild/android-arm": "0.25.2", 695 | "@esbuild/android-arm64": "0.25.2", 696 | "@esbuild/android-x64": "0.25.2", 697 | "@esbuild/darwin-arm64": "0.25.2", 698 | "@esbuild/darwin-x64": "0.25.2", 699 | "@esbuild/freebsd-arm64": "0.25.2", 700 | "@esbuild/freebsd-x64": "0.25.2", 701 | "@esbuild/linux-arm": "0.25.2", 702 | "@esbuild/linux-arm64": "0.25.2", 703 | "@esbuild/linux-ia32": "0.25.2", 704 | "@esbuild/linux-loong64": "0.25.2", 705 | "@esbuild/linux-mips64el": "0.25.2", 706 | "@esbuild/linux-ppc64": "0.25.2", 707 | "@esbuild/linux-riscv64": "0.25.2", 708 | "@esbuild/linux-s390x": "0.25.2", 709 | "@esbuild/linux-x64": "0.25.2", 710 | "@esbuild/netbsd-arm64": "0.25.2", 711 | "@esbuild/netbsd-x64": "0.25.2", 712 | "@esbuild/openbsd-arm64": "0.25.2", 713 | "@esbuild/openbsd-x64": "0.25.2", 714 | "@esbuild/sunos-x64": "0.25.2", 715 | "@esbuild/win32-arm64": "0.25.2", 716 | "@esbuild/win32-ia32": "0.25.2", 717 | "@esbuild/win32-x64": "0.25.2" 718 | } 719 | }, 720 | "node_modules/fsevents": { 721 | "version": "2.3.3", 722 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 723 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 724 | "dev": true, 725 | "hasInstallScript": true, 726 | "optional": true, 727 | "os": [ 728 | "darwin" 729 | ], 730 | "engines": { 731 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 732 | } 733 | }, 734 | "node_modules/nanoid": { 735 | "version": "3.3.11", 736 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 737 | "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 738 | "dev": true, 739 | "funding": [ 740 | { 741 | "type": "github", 742 | "url": "https://github.com/sponsors/ai" 743 | } 744 | ], 745 | "bin": { 746 | "nanoid": "bin/nanoid.cjs" 747 | }, 748 | "engines": { 749 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 750 | } 751 | }, 752 | "node_modules/picocolors": { 753 | "version": "1.1.1", 754 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 755 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 756 | "dev": true 757 | }, 758 | "node_modules/postcss": { 759 | "version": "8.5.3", 760 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", 761 | "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", 762 | "dev": true, 763 | "funding": [ 764 | { 765 | "type": "opencollective", 766 | "url": "https://opencollective.com/postcss/" 767 | }, 768 | { 769 | "type": "tidelift", 770 | "url": "https://tidelift.com/funding/github/npm/postcss" 771 | }, 772 | { 773 | "type": "github", 774 | "url": "https://github.com/sponsors/ai" 775 | } 776 | ], 777 | "dependencies": { 778 | "nanoid": "^3.3.8", 779 | "picocolors": "^1.1.1", 780 | "source-map-js": "^1.2.1" 781 | }, 782 | "engines": { 783 | "node": "^10 || ^12 || >=14" 784 | } 785 | }, 786 | "node_modules/rollup": { 787 | "version": "4.39.0", 788 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.39.0.tgz", 789 | "integrity": "sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==", 790 | "dev": true, 791 | "dependencies": { 792 | "@types/estree": "1.0.7" 793 | }, 794 | "bin": { 795 | "rollup": "dist/bin/rollup" 796 | }, 797 | "engines": { 798 | "node": ">=18.0.0", 799 | "npm": ">=8.0.0" 800 | }, 801 | "optionalDependencies": { 802 | "@rollup/rollup-android-arm-eabi": "4.39.0", 803 | "@rollup/rollup-android-arm64": "4.39.0", 804 | "@rollup/rollup-darwin-arm64": "4.39.0", 805 | "@rollup/rollup-darwin-x64": "4.39.0", 806 | "@rollup/rollup-freebsd-arm64": "4.39.0", 807 | "@rollup/rollup-freebsd-x64": "4.39.0", 808 | "@rollup/rollup-linux-arm-gnueabihf": "4.39.0", 809 | "@rollup/rollup-linux-arm-musleabihf": "4.39.0", 810 | "@rollup/rollup-linux-arm64-gnu": "4.39.0", 811 | "@rollup/rollup-linux-arm64-musl": "4.39.0", 812 | "@rollup/rollup-linux-loongarch64-gnu": "4.39.0", 813 | "@rollup/rollup-linux-powerpc64le-gnu": "4.39.0", 814 | "@rollup/rollup-linux-riscv64-gnu": "4.39.0", 815 | "@rollup/rollup-linux-riscv64-musl": "4.39.0", 816 | "@rollup/rollup-linux-s390x-gnu": "4.39.0", 817 | "@rollup/rollup-linux-x64-gnu": "4.39.0", 818 | "@rollup/rollup-linux-x64-musl": "4.39.0", 819 | "@rollup/rollup-win32-arm64-msvc": "4.39.0", 820 | "@rollup/rollup-win32-ia32-msvc": "4.39.0", 821 | "@rollup/rollup-win32-x64-msvc": "4.39.0", 822 | "fsevents": "~2.3.2" 823 | } 824 | }, 825 | "node_modules/source-map-js": { 826 | "version": "1.2.1", 827 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 828 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 829 | "dev": true, 830 | "engines": { 831 | "node": ">=0.10.0" 832 | } 833 | }, 834 | "node_modules/vite": { 835 | "version": "6.2.6", 836 | "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.6.tgz", 837 | "integrity": "sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==", 838 | "dev": true, 839 | "dependencies": { 840 | "esbuild": "^0.25.0", 841 | "postcss": "^8.5.3", 842 | "rollup": "^4.30.1" 843 | }, 844 | "bin": { 845 | "vite": "bin/vite.js" 846 | }, 847 | "engines": { 848 | "node": "^18.0.0 || ^20.0.0 || >=22.0.0" 849 | }, 850 | "funding": { 851 | "url": "https://github.com/vitejs/vite?sponsor=1" 852 | }, 853 | "optionalDependencies": { 854 | "fsevents": "~2.3.3" 855 | }, 856 | "peerDependencies": { 857 | "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", 858 | "jiti": ">=1.21.0", 859 | "less": "*", 860 | "lightningcss": "^1.21.0", 861 | "sass": "*", 862 | "sass-embedded": "*", 863 | "stylus": "*", 864 | "sugarss": "*", 865 | "terser": "^5.16.0", 866 | "tsx": "^4.8.1", 867 | "yaml": "^2.4.2" 868 | }, 869 | "peerDependenciesMeta": { 870 | "@types/node": { 871 | "optional": true 872 | }, 873 | "jiti": { 874 | "optional": true 875 | }, 876 | "less": { 877 | "optional": true 878 | }, 879 | "lightningcss": { 880 | "optional": true 881 | }, 882 | "sass": { 883 | "optional": true 884 | }, 885 | "sass-embedded": { 886 | "optional": true 887 | }, 888 | "stylus": { 889 | "optional": true 890 | }, 891 | "sugarss": { 892 | "optional": true 893 | }, 894 | "terser": { 895 | "optional": true 896 | }, 897 | "tsx": { 898 | "optional": true 899 | }, 900 | "yaml": { 901 | "optional": true 902 | } 903 | } 904 | } 905 | }, 906 | "dependencies": { 907 | "@esbuild/aix-ppc64": { 908 | "version": "0.25.2", 909 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", 910 | "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", 911 | "dev": true, 912 | "optional": true 913 | }, 914 | "@esbuild/android-arm": { 915 | "version": "0.25.2", 916 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", 917 | "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", 918 | "dev": true, 919 | "optional": true 920 | }, 921 | "@esbuild/android-arm64": { 922 | "version": "0.25.2", 923 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", 924 | "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", 925 | "dev": true, 926 | "optional": true 927 | }, 928 | "@esbuild/android-x64": { 929 | "version": "0.25.2", 930 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", 931 | "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", 932 | "dev": true, 933 | "optional": true 934 | }, 935 | "@esbuild/darwin-arm64": { 936 | "version": "0.25.2", 937 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", 938 | "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", 939 | "dev": true, 940 | "optional": true 941 | }, 942 | "@esbuild/darwin-x64": { 943 | "version": "0.25.2", 944 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", 945 | "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", 946 | "dev": true, 947 | "optional": true 948 | }, 949 | "@esbuild/freebsd-arm64": { 950 | "version": "0.25.2", 951 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", 952 | "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", 953 | "dev": true, 954 | "optional": true 955 | }, 956 | "@esbuild/freebsd-x64": { 957 | "version": "0.25.2", 958 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", 959 | "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", 960 | "dev": true, 961 | "optional": true 962 | }, 963 | "@esbuild/linux-arm": { 964 | "version": "0.25.2", 965 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", 966 | "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", 967 | "dev": true, 968 | "optional": true 969 | }, 970 | "@esbuild/linux-arm64": { 971 | "version": "0.25.2", 972 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", 973 | "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", 974 | "dev": true, 975 | "optional": true 976 | }, 977 | "@esbuild/linux-ia32": { 978 | "version": "0.25.2", 979 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", 980 | "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", 981 | "dev": true, 982 | "optional": true 983 | }, 984 | "@esbuild/linux-loong64": { 985 | "version": "0.25.2", 986 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", 987 | "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", 988 | "dev": true, 989 | "optional": true 990 | }, 991 | "@esbuild/linux-mips64el": { 992 | "version": "0.25.2", 993 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", 994 | "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", 995 | "dev": true, 996 | "optional": true 997 | }, 998 | "@esbuild/linux-ppc64": { 999 | "version": "0.25.2", 1000 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", 1001 | "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", 1002 | "dev": true, 1003 | "optional": true 1004 | }, 1005 | "@esbuild/linux-riscv64": { 1006 | "version": "0.25.2", 1007 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", 1008 | "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", 1009 | "dev": true, 1010 | "optional": true 1011 | }, 1012 | "@esbuild/linux-s390x": { 1013 | "version": "0.25.2", 1014 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", 1015 | "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", 1016 | "dev": true, 1017 | "optional": true 1018 | }, 1019 | "@esbuild/linux-x64": { 1020 | "version": "0.25.2", 1021 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", 1022 | "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", 1023 | "dev": true, 1024 | "optional": true 1025 | }, 1026 | "@esbuild/netbsd-arm64": { 1027 | "version": "0.25.2", 1028 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", 1029 | "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", 1030 | "dev": true, 1031 | "optional": true 1032 | }, 1033 | "@esbuild/netbsd-x64": { 1034 | "version": "0.25.2", 1035 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", 1036 | "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", 1037 | "dev": true, 1038 | "optional": true 1039 | }, 1040 | "@esbuild/openbsd-arm64": { 1041 | "version": "0.25.2", 1042 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", 1043 | "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", 1044 | "dev": true, 1045 | "optional": true 1046 | }, 1047 | "@esbuild/openbsd-x64": { 1048 | "version": "0.25.2", 1049 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", 1050 | "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", 1051 | "dev": true, 1052 | "optional": true 1053 | }, 1054 | "@esbuild/sunos-x64": { 1055 | "version": "0.25.2", 1056 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", 1057 | "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", 1058 | "dev": true, 1059 | "optional": true 1060 | }, 1061 | "@esbuild/win32-arm64": { 1062 | "version": "0.25.2", 1063 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", 1064 | "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", 1065 | "dev": true, 1066 | "optional": true 1067 | }, 1068 | "@esbuild/win32-ia32": { 1069 | "version": "0.25.2", 1070 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", 1071 | "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", 1072 | "dev": true, 1073 | "optional": true 1074 | }, 1075 | "@esbuild/win32-x64": { 1076 | "version": "0.25.2", 1077 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", 1078 | "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", 1079 | "dev": true, 1080 | "optional": true 1081 | }, 1082 | "@rollup/rollup-android-arm-eabi": { 1083 | "version": "4.39.0", 1084 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.39.0.tgz", 1085 | "integrity": "sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==", 1086 | "dev": true, 1087 | "optional": true 1088 | }, 1089 | "@rollup/rollup-android-arm64": { 1090 | "version": "4.39.0", 1091 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.39.0.tgz", 1092 | "integrity": "sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==", 1093 | "dev": true, 1094 | "optional": true 1095 | }, 1096 | "@rollup/rollup-darwin-arm64": { 1097 | "version": "4.39.0", 1098 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.39.0.tgz", 1099 | "integrity": "sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==", 1100 | "dev": true, 1101 | "optional": true 1102 | }, 1103 | "@rollup/rollup-darwin-x64": { 1104 | "version": "4.39.0", 1105 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.39.0.tgz", 1106 | "integrity": "sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==", 1107 | "dev": true, 1108 | "optional": true 1109 | }, 1110 | "@rollup/rollup-freebsd-arm64": { 1111 | "version": "4.39.0", 1112 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.39.0.tgz", 1113 | "integrity": "sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==", 1114 | "dev": true, 1115 | "optional": true 1116 | }, 1117 | "@rollup/rollup-freebsd-x64": { 1118 | "version": "4.39.0", 1119 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.39.0.tgz", 1120 | "integrity": "sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==", 1121 | "dev": true, 1122 | "optional": true 1123 | }, 1124 | "@rollup/rollup-linux-arm-gnueabihf": { 1125 | "version": "4.39.0", 1126 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.39.0.tgz", 1127 | "integrity": "sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==", 1128 | "dev": true, 1129 | "optional": true 1130 | }, 1131 | "@rollup/rollup-linux-arm-musleabihf": { 1132 | "version": "4.39.0", 1133 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.39.0.tgz", 1134 | "integrity": "sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==", 1135 | "dev": true, 1136 | "optional": true 1137 | }, 1138 | "@rollup/rollup-linux-arm64-gnu": { 1139 | "version": "4.39.0", 1140 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.39.0.tgz", 1141 | "integrity": "sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==", 1142 | "dev": true, 1143 | "optional": true 1144 | }, 1145 | "@rollup/rollup-linux-arm64-musl": { 1146 | "version": "4.39.0", 1147 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.39.0.tgz", 1148 | "integrity": "sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==", 1149 | "dev": true, 1150 | "optional": true 1151 | }, 1152 | "@rollup/rollup-linux-loongarch64-gnu": { 1153 | "version": "4.39.0", 1154 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.39.0.tgz", 1155 | "integrity": "sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==", 1156 | "dev": true, 1157 | "optional": true 1158 | }, 1159 | "@rollup/rollup-linux-powerpc64le-gnu": { 1160 | "version": "4.39.0", 1161 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.39.0.tgz", 1162 | "integrity": "sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==", 1163 | "dev": true, 1164 | "optional": true 1165 | }, 1166 | "@rollup/rollup-linux-riscv64-gnu": { 1167 | "version": "4.39.0", 1168 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.39.0.tgz", 1169 | "integrity": "sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==", 1170 | "dev": true, 1171 | "optional": true 1172 | }, 1173 | "@rollup/rollup-linux-riscv64-musl": { 1174 | "version": "4.39.0", 1175 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.39.0.tgz", 1176 | "integrity": "sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==", 1177 | "dev": true, 1178 | "optional": true 1179 | }, 1180 | "@rollup/rollup-linux-s390x-gnu": { 1181 | "version": "4.39.0", 1182 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.39.0.tgz", 1183 | "integrity": "sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==", 1184 | "dev": true, 1185 | "optional": true 1186 | }, 1187 | "@rollup/rollup-linux-x64-gnu": { 1188 | "version": "4.39.0", 1189 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz", 1190 | "integrity": "sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==", 1191 | "dev": true, 1192 | "optional": true 1193 | }, 1194 | "@rollup/rollup-linux-x64-musl": { 1195 | "version": "4.39.0", 1196 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.39.0.tgz", 1197 | "integrity": "sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==", 1198 | "dev": true, 1199 | "optional": true 1200 | }, 1201 | "@rollup/rollup-win32-arm64-msvc": { 1202 | "version": "4.39.0", 1203 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.39.0.tgz", 1204 | "integrity": "sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==", 1205 | "dev": true, 1206 | "optional": true 1207 | }, 1208 | "@rollup/rollup-win32-ia32-msvc": { 1209 | "version": "4.39.0", 1210 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.39.0.tgz", 1211 | "integrity": "sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==", 1212 | "dev": true, 1213 | "optional": true 1214 | }, 1215 | "@rollup/rollup-win32-x64-msvc": { 1216 | "version": "4.39.0", 1217 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.39.0.tgz", 1218 | "integrity": "sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==", 1219 | "dev": true, 1220 | "optional": true 1221 | }, 1222 | "@types/estree": { 1223 | "version": "1.0.7", 1224 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", 1225 | "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", 1226 | "dev": true 1227 | }, 1228 | "esbuild": { 1229 | "version": "0.25.2", 1230 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", 1231 | "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", 1232 | "dev": true, 1233 | "requires": { 1234 | "@esbuild/aix-ppc64": "0.25.2", 1235 | "@esbuild/android-arm": "0.25.2", 1236 | "@esbuild/android-arm64": "0.25.2", 1237 | "@esbuild/android-x64": "0.25.2", 1238 | "@esbuild/darwin-arm64": "0.25.2", 1239 | "@esbuild/darwin-x64": "0.25.2", 1240 | "@esbuild/freebsd-arm64": "0.25.2", 1241 | "@esbuild/freebsd-x64": "0.25.2", 1242 | "@esbuild/linux-arm": "0.25.2", 1243 | "@esbuild/linux-arm64": "0.25.2", 1244 | "@esbuild/linux-ia32": "0.25.2", 1245 | "@esbuild/linux-loong64": "0.25.2", 1246 | "@esbuild/linux-mips64el": "0.25.2", 1247 | "@esbuild/linux-ppc64": "0.25.2", 1248 | "@esbuild/linux-riscv64": "0.25.2", 1249 | "@esbuild/linux-s390x": "0.25.2", 1250 | "@esbuild/linux-x64": "0.25.2", 1251 | "@esbuild/netbsd-arm64": "0.25.2", 1252 | "@esbuild/netbsd-x64": "0.25.2", 1253 | "@esbuild/openbsd-arm64": "0.25.2", 1254 | "@esbuild/openbsd-x64": "0.25.2", 1255 | "@esbuild/sunos-x64": "0.25.2", 1256 | "@esbuild/win32-arm64": "0.25.2", 1257 | "@esbuild/win32-ia32": "0.25.2", 1258 | "@esbuild/win32-x64": "0.25.2" 1259 | } 1260 | }, 1261 | "fsevents": { 1262 | "version": "2.3.3", 1263 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1264 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1265 | "dev": true, 1266 | "optional": true 1267 | }, 1268 | "nanoid": { 1269 | "version": "3.3.11", 1270 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 1271 | "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 1272 | "dev": true 1273 | }, 1274 | "picocolors": { 1275 | "version": "1.1.1", 1276 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1277 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1278 | "dev": true 1279 | }, 1280 | "postcss": { 1281 | "version": "8.5.3", 1282 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", 1283 | "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", 1284 | "dev": true, 1285 | "requires": { 1286 | "nanoid": "^3.3.8", 1287 | "picocolors": "^1.1.1", 1288 | "source-map-js": "^1.2.1" 1289 | } 1290 | }, 1291 | "rollup": { 1292 | "version": "4.39.0", 1293 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.39.0.tgz", 1294 | "integrity": "sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==", 1295 | "dev": true, 1296 | "requires": { 1297 | "@rollup/rollup-android-arm-eabi": "4.39.0", 1298 | "@rollup/rollup-android-arm64": "4.39.0", 1299 | "@rollup/rollup-darwin-arm64": "4.39.0", 1300 | "@rollup/rollup-darwin-x64": "4.39.0", 1301 | "@rollup/rollup-freebsd-arm64": "4.39.0", 1302 | "@rollup/rollup-freebsd-x64": "4.39.0", 1303 | "@rollup/rollup-linux-arm-gnueabihf": "4.39.0", 1304 | "@rollup/rollup-linux-arm-musleabihf": "4.39.0", 1305 | "@rollup/rollup-linux-arm64-gnu": "4.39.0", 1306 | "@rollup/rollup-linux-arm64-musl": "4.39.0", 1307 | "@rollup/rollup-linux-loongarch64-gnu": "4.39.0", 1308 | "@rollup/rollup-linux-powerpc64le-gnu": "4.39.0", 1309 | "@rollup/rollup-linux-riscv64-gnu": "4.39.0", 1310 | "@rollup/rollup-linux-riscv64-musl": "4.39.0", 1311 | "@rollup/rollup-linux-s390x-gnu": "4.39.0", 1312 | "@rollup/rollup-linux-x64-gnu": "4.39.0", 1313 | "@rollup/rollup-linux-x64-musl": "4.39.0", 1314 | "@rollup/rollup-win32-arm64-msvc": "4.39.0", 1315 | "@rollup/rollup-win32-ia32-msvc": "4.39.0", 1316 | "@rollup/rollup-win32-x64-msvc": "4.39.0", 1317 | "@types/estree": "1.0.7", 1318 | "fsevents": "~2.3.2" 1319 | } 1320 | }, 1321 | "source-map-js": { 1322 | "version": "1.2.1", 1323 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 1324 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 1325 | "dev": true 1326 | }, 1327 | "vite": { 1328 | "version": "6.2.6", 1329 | "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.6.tgz", 1330 | "integrity": "sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==", 1331 | "dev": true, 1332 | "requires": { 1333 | "esbuild": "^0.25.0", 1334 | "fsevents": "~2.3.3", 1335 | "postcss": "^8.5.3", 1336 | "rollup": "^4.30.1" 1337 | } 1338 | } 1339 | } 1340 | } 1341 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@webcontainer/api': 12 | specifier: ^1.6.1 13 | version: 1.6.1 14 | '@webcontainer/snapshot': 15 | specifier: ^0.1.0 16 | version: 0.1.0 17 | devDependencies: 18 | '@blitz/eslint-plugin': 19 | specifier: ^0.1.4 20 | version: 0.1.4(prettier@3.5.3)(typescript@5.8.3) 21 | '@types/node': 22 | specifier: ^22.14.0 23 | version: 22.14.0 24 | '@vitest/browser-playwright': 25 | specifier: ^4.0.14 26 | version: 4.0.14(playwright@1.52.0)(vite@6.2.6(@types/node@22.14.0))(vitest@4.0.14) 27 | eslint: 28 | specifier: ^9.24.0 29 | version: 9.24.0 30 | playwright: 31 | specifier: ^1.52.0 32 | version: 1.52.0 33 | prettier: 34 | specifier: ^3.5.3 35 | version: 3.5.3 36 | tsup: 37 | specifier: ^8.4.0 38 | version: 8.4.0(postcss@8.5.3)(typescript@5.8.3) 39 | typescript: 40 | specifier: ^5.8.3 41 | version: 5.8.3 42 | vitest: 43 | specifier: ^4.0.14 44 | version: 4.0.14(@types/node@22.14.0)(@vitest/browser-playwright@4.0.14) 45 | 46 | packages: 47 | 48 | '@babel/code-frame@7.26.2': 49 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 50 | engines: {node: '>=6.9.0'} 51 | 52 | '@babel/helper-validator-identifier@7.25.9': 53 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 54 | engines: {node: '>=6.9.0'} 55 | 56 | '@blitz/eslint-plugin@0.1.4': 57 | resolution: {integrity: sha512-0E+XnXdrya+OvKj6nYg4ioHndLlEEntrRqsje7Bc1c7bSejzNp8sE/kGd0tD+fYQAQZapZPqT3/s8R6fGzq4Zg==} 58 | engines: {node: ^18.0.0 || ^20.0.0} 59 | 60 | '@esbuild/aix-ppc64@0.25.2': 61 | resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} 62 | engines: {node: '>=18'} 63 | cpu: [ppc64] 64 | os: [aix] 65 | 66 | '@esbuild/android-arm64@0.25.2': 67 | resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==} 68 | engines: {node: '>=18'} 69 | cpu: [arm64] 70 | os: [android] 71 | 72 | '@esbuild/android-arm@0.25.2': 73 | resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==} 74 | engines: {node: '>=18'} 75 | cpu: [arm] 76 | os: [android] 77 | 78 | '@esbuild/android-x64@0.25.2': 79 | resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==} 80 | engines: {node: '>=18'} 81 | cpu: [x64] 82 | os: [android] 83 | 84 | '@esbuild/darwin-arm64@0.25.2': 85 | resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==} 86 | engines: {node: '>=18'} 87 | cpu: [arm64] 88 | os: [darwin] 89 | 90 | '@esbuild/darwin-x64@0.25.2': 91 | resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==} 92 | engines: {node: '>=18'} 93 | cpu: [x64] 94 | os: [darwin] 95 | 96 | '@esbuild/freebsd-arm64@0.25.2': 97 | resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==} 98 | engines: {node: '>=18'} 99 | cpu: [arm64] 100 | os: [freebsd] 101 | 102 | '@esbuild/freebsd-x64@0.25.2': 103 | resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==} 104 | engines: {node: '>=18'} 105 | cpu: [x64] 106 | os: [freebsd] 107 | 108 | '@esbuild/linux-arm64@0.25.2': 109 | resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==} 110 | engines: {node: '>=18'} 111 | cpu: [arm64] 112 | os: [linux] 113 | 114 | '@esbuild/linux-arm@0.25.2': 115 | resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==} 116 | engines: {node: '>=18'} 117 | cpu: [arm] 118 | os: [linux] 119 | 120 | '@esbuild/linux-ia32@0.25.2': 121 | resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==} 122 | engines: {node: '>=18'} 123 | cpu: [ia32] 124 | os: [linux] 125 | 126 | '@esbuild/linux-loong64@0.25.2': 127 | resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==} 128 | engines: {node: '>=18'} 129 | cpu: [loong64] 130 | os: [linux] 131 | 132 | '@esbuild/linux-mips64el@0.25.2': 133 | resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==} 134 | engines: {node: '>=18'} 135 | cpu: [mips64el] 136 | os: [linux] 137 | 138 | '@esbuild/linux-ppc64@0.25.2': 139 | resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==} 140 | engines: {node: '>=18'} 141 | cpu: [ppc64] 142 | os: [linux] 143 | 144 | '@esbuild/linux-riscv64@0.25.2': 145 | resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==} 146 | engines: {node: '>=18'} 147 | cpu: [riscv64] 148 | os: [linux] 149 | 150 | '@esbuild/linux-s390x@0.25.2': 151 | resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==} 152 | engines: {node: '>=18'} 153 | cpu: [s390x] 154 | os: [linux] 155 | 156 | '@esbuild/linux-x64@0.25.2': 157 | resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==} 158 | engines: {node: '>=18'} 159 | cpu: [x64] 160 | os: [linux] 161 | 162 | '@esbuild/netbsd-arm64@0.25.2': 163 | resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==} 164 | engines: {node: '>=18'} 165 | cpu: [arm64] 166 | os: [netbsd] 167 | 168 | '@esbuild/netbsd-x64@0.25.2': 169 | resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==} 170 | engines: {node: '>=18'} 171 | cpu: [x64] 172 | os: [netbsd] 173 | 174 | '@esbuild/openbsd-arm64@0.25.2': 175 | resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==} 176 | engines: {node: '>=18'} 177 | cpu: [arm64] 178 | os: [openbsd] 179 | 180 | '@esbuild/openbsd-x64@0.25.2': 181 | resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==} 182 | engines: {node: '>=18'} 183 | cpu: [x64] 184 | os: [openbsd] 185 | 186 | '@esbuild/sunos-x64@0.25.2': 187 | resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==} 188 | engines: {node: '>=18'} 189 | cpu: [x64] 190 | os: [sunos] 191 | 192 | '@esbuild/win32-arm64@0.25.2': 193 | resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==} 194 | engines: {node: '>=18'} 195 | cpu: [arm64] 196 | os: [win32] 197 | 198 | '@esbuild/win32-ia32@0.25.2': 199 | resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==} 200 | engines: {node: '>=18'} 201 | cpu: [ia32] 202 | os: [win32] 203 | 204 | '@esbuild/win32-x64@0.25.2': 205 | resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==} 206 | engines: {node: '>=18'} 207 | cpu: [x64] 208 | os: [win32] 209 | 210 | '@eslint-community/eslint-utils@4.5.1': 211 | resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} 212 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 213 | peerDependencies: 214 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 215 | 216 | '@eslint-community/regexpp@4.12.1': 217 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 218 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 219 | 220 | '@eslint/config-array@0.20.0': 221 | resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} 222 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 223 | 224 | '@eslint/config-helpers@0.2.1': 225 | resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} 226 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 227 | 228 | '@eslint/core@0.12.0': 229 | resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} 230 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 231 | 232 | '@eslint/core@0.13.0': 233 | resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} 234 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 235 | 236 | '@eslint/eslintrc@3.3.1': 237 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 238 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 239 | 240 | '@eslint/js@9.24.0': 241 | resolution: {integrity: sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==} 242 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 243 | 244 | '@eslint/object-schema@2.1.6': 245 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 246 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 247 | 248 | '@eslint/plugin-kit@0.2.8': 249 | resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} 250 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 251 | 252 | '@humanfs/core@0.19.1': 253 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 254 | engines: {node: '>=18.18.0'} 255 | 256 | '@humanfs/node@0.16.6': 257 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 258 | engines: {node: '>=18.18.0'} 259 | 260 | '@humanwhocodes/module-importer@1.0.1': 261 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 262 | engines: {node: '>=12.22'} 263 | 264 | '@humanwhocodes/retry@0.3.1': 265 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 266 | engines: {node: '>=18.18'} 267 | 268 | '@humanwhocodes/retry@0.4.2': 269 | resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} 270 | engines: {node: '>=18.18'} 271 | 272 | '@isaacs/cliui@8.0.2': 273 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 274 | engines: {node: '>=12'} 275 | 276 | '@jridgewell/gen-mapping@0.3.8': 277 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 278 | engines: {node: '>=6.0.0'} 279 | 280 | '@jridgewell/resolve-uri@3.1.2': 281 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 282 | engines: {node: '>=6.0.0'} 283 | 284 | '@jridgewell/set-array@1.2.1': 285 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 286 | engines: {node: '>=6.0.0'} 287 | 288 | '@jridgewell/sourcemap-codec@1.5.0': 289 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 290 | 291 | '@jridgewell/sourcemap-codec@1.5.5': 292 | resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 293 | 294 | '@jridgewell/trace-mapping@0.3.25': 295 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 296 | 297 | '@msgpack/msgpack@3.1.1': 298 | resolution: {integrity: sha512-DnBpqkMOUGayNVKyTLlkM6ILmU/m/+VUxGkuQlPQVAcvreLz5jn1OlQnWd8uHKL/ZSiljpM12rjRhr51VtvJUQ==} 299 | engines: {node: '>= 18'} 300 | 301 | '@nodelib/fs.scandir@2.1.5': 302 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 303 | engines: {node: '>= 8'} 304 | 305 | '@nodelib/fs.stat@2.0.5': 306 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 307 | engines: {node: '>= 8'} 308 | 309 | '@nodelib/fs.walk@1.2.8': 310 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 311 | engines: {node: '>= 8'} 312 | 313 | '@pkgjs/parseargs@0.11.0': 314 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 315 | engines: {node: '>=14'} 316 | 317 | '@pkgr/core@0.2.2': 318 | resolution: {integrity: sha512-25L86MyPvnlQoX2MTIV2OiUcb6vJ6aRbFa9pbwByn95INKD5mFH2smgjDhq+fwJoqAgvgbdJLj6Tz7V9X5CFAQ==} 319 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 320 | 321 | '@polka/url@1.0.0-next.29': 322 | resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} 323 | 324 | '@rollup/rollup-android-arm-eabi@4.39.0': 325 | resolution: {integrity: sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==} 326 | cpu: [arm] 327 | os: [android] 328 | 329 | '@rollup/rollup-android-arm64@4.39.0': 330 | resolution: {integrity: sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==} 331 | cpu: [arm64] 332 | os: [android] 333 | 334 | '@rollup/rollup-darwin-arm64@4.39.0': 335 | resolution: {integrity: sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==} 336 | cpu: [arm64] 337 | os: [darwin] 338 | 339 | '@rollup/rollup-darwin-x64@4.39.0': 340 | resolution: {integrity: sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==} 341 | cpu: [x64] 342 | os: [darwin] 343 | 344 | '@rollup/rollup-freebsd-arm64@4.39.0': 345 | resolution: {integrity: sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==} 346 | cpu: [arm64] 347 | os: [freebsd] 348 | 349 | '@rollup/rollup-freebsd-x64@4.39.0': 350 | resolution: {integrity: sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==} 351 | cpu: [x64] 352 | os: [freebsd] 353 | 354 | '@rollup/rollup-linux-arm-gnueabihf@4.39.0': 355 | resolution: {integrity: sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==} 356 | cpu: [arm] 357 | os: [linux] 358 | 359 | '@rollup/rollup-linux-arm-musleabihf@4.39.0': 360 | resolution: {integrity: sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==} 361 | cpu: [arm] 362 | os: [linux] 363 | 364 | '@rollup/rollup-linux-arm64-gnu@4.39.0': 365 | resolution: {integrity: sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==} 366 | cpu: [arm64] 367 | os: [linux] 368 | 369 | '@rollup/rollup-linux-arm64-musl@4.39.0': 370 | resolution: {integrity: sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==} 371 | cpu: [arm64] 372 | os: [linux] 373 | 374 | '@rollup/rollup-linux-loongarch64-gnu@4.39.0': 375 | resolution: {integrity: sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==} 376 | cpu: [loong64] 377 | os: [linux] 378 | 379 | '@rollup/rollup-linux-powerpc64le-gnu@4.39.0': 380 | resolution: {integrity: sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==} 381 | cpu: [ppc64] 382 | os: [linux] 383 | 384 | '@rollup/rollup-linux-riscv64-gnu@4.39.0': 385 | resolution: {integrity: sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==} 386 | cpu: [riscv64] 387 | os: [linux] 388 | 389 | '@rollup/rollup-linux-riscv64-musl@4.39.0': 390 | resolution: {integrity: sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==} 391 | cpu: [riscv64] 392 | os: [linux] 393 | 394 | '@rollup/rollup-linux-s390x-gnu@4.39.0': 395 | resolution: {integrity: sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==} 396 | cpu: [s390x] 397 | os: [linux] 398 | 399 | '@rollup/rollup-linux-x64-gnu@4.39.0': 400 | resolution: {integrity: sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==} 401 | cpu: [x64] 402 | os: [linux] 403 | 404 | '@rollup/rollup-linux-x64-musl@4.39.0': 405 | resolution: {integrity: sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==} 406 | cpu: [x64] 407 | os: [linux] 408 | 409 | '@rollup/rollup-win32-arm64-msvc@4.39.0': 410 | resolution: {integrity: sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==} 411 | cpu: [arm64] 412 | os: [win32] 413 | 414 | '@rollup/rollup-win32-ia32-msvc@4.39.0': 415 | resolution: {integrity: sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==} 416 | cpu: [ia32] 417 | os: [win32] 418 | 419 | '@rollup/rollup-win32-x64-msvc@4.39.0': 420 | resolution: {integrity: sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==} 421 | cpu: [x64] 422 | os: [win32] 423 | 424 | '@standard-schema/spec@1.0.0': 425 | resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} 426 | 427 | '@stylistic/eslint-plugin-ts@2.13.0': 428 | resolution: {integrity: sha512-nooe1oTwz60T4wQhZ+5u0/GAu3ygkKF9vPPZeRn/meG71ntQ0EZXVOKEonluAYl/+CV2T+nN0dknHa4evAW13Q==} 429 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 430 | peerDependencies: 431 | eslint: '>=8.40.0' 432 | 433 | '@types/chai@5.2.2': 434 | resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} 435 | 436 | '@types/deep-eql@4.0.2': 437 | resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} 438 | 439 | '@types/estree@1.0.7': 440 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 441 | 442 | '@types/json-schema@7.0.15': 443 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 444 | 445 | '@types/node@22.14.0': 446 | resolution: {integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==} 447 | 448 | '@types/normalize-package-data@2.4.4': 449 | resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} 450 | 451 | '@typescript-eslint/eslint-plugin@8.29.1': 452 | resolution: {integrity: sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg==} 453 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 454 | peerDependencies: 455 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 456 | eslint: ^8.57.0 || ^9.0.0 457 | typescript: '>=4.8.4 <5.9.0' 458 | 459 | '@typescript-eslint/parser@8.29.1': 460 | resolution: {integrity: sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==} 461 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 462 | peerDependencies: 463 | eslint: ^8.57.0 || ^9.0.0 464 | typescript: '>=4.8.4 <5.9.0' 465 | 466 | '@typescript-eslint/scope-manager@7.18.0': 467 | resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} 468 | engines: {node: ^18.18.0 || >=20.0.0} 469 | 470 | '@typescript-eslint/scope-manager@8.29.1': 471 | resolution: {integrity: sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==} 472 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 473 | 474 | '@typescript-eslint/type-utils@8.29.1': 475 | resolution: {integrity: sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw==} 476 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 477 | peerDependencies: 478 | eslint: ^8.57.0 || ^9.0.0 479 | typescript: '>=4.8.4 <5.9.0' 480 | 481 | '@typescript-eslint/types@7.18.0': 482 | resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} 483 | engines: {node: ^18.18.0 || >=20.0.0} 484 | 485 | '@typescript-eslint/types@8.29.1': 486 | resolution: {integrity: sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==} 487 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 488 | 489 | '@typescript-eslint/typescript-estree@7.18.0': 490 | resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} 491 | engines: {node: ^18.18.0 || >=20.0.0} 492 | peerDependencies: 493 | typescript: '*' 494 | peerDependenciesMeta: 495 | typescript: 496 | optional: true 497 | 498 | '@typescript-eslint/typescript-estree@8.29.1': 499 | resolution: {integrity: sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==} 500 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 501 | peerDependencies: 502 | typescript: '>=4.8.4 <5.9.0' 503 | 504 | '@typescript-eslint/utils@7.18.0': 505 | resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} 506 | engines: {node: ^18.18.0 || >=20.0.0} 507 | peerDependencies: 508 | eslint: ^8.56.0 509 | 510 | '@typescript-eslint/utils@8.29.1': 511 | resolution: {integrity: sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA==} 512 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 513 | peerDependencies: 514 | eslint: ^8.57.0 || ^9.0.0 515 | typescript: '>=4.8.4 <5.9.0' 516 | 517 | '@typescript-eslint/visitor-keys@7.18.0': 518 | resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} 519 | engines: {node: ^18.18.0 || >=20.0.0} 520 | 521 | '@typescript-eslint/visitor-keys@8.29.1': 522 | resolution: {integrity: sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==} 523 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 524 | 525 | '@vitest/browser-playwright@4.0.14': 526 | resolution: {integrity: sha512-rUvyz6wX6wDjcYzf/7fgXYfca2bAu0Axoq/v9LYdELzcBSS9UKjnZ7MaMY4UDP78HHHCdmdtceuSao1s51ON8A==} 527 | peerDependencies: 528 | playwright: '*' 529 | vitest: 4.0.14 530 | 531 | '@vitest/browser@4.0.14': 532 | resolution: {integrity: sha512-vO0uqR8SnPTd8ykp14yaIuUyMZ9HEBYuoZrVdUp7RrEp76VEnkrX9fDkGnK0NyBdfWXB6cqp7BmqVekd8yKHFQ==} 533 | peerDependencies: 534 | vitest: 4.0.14 535 | 536 | '@vitest/expect@4.0.14': 537 | resolution: {integrity: sha512-RHk63V3zvRiYOWAV0rGEBRO820ce17hz7cI2kDmEdfQsBjT2luEKB5tCOc91u1oSQoUOZkSv3ZyzkdkSLD7lKw==} 538 | 539 | '@vitest/mocker@4.0.14': 540 | resolution: {integrity: sha512-RzS5NujlCzeRPF1MK7MXLiEFpkIXeMdQ+rN3Kk3tDI9j0mtbr7Nmuq67tpkOJQpgyClbOltCXMjLZicJHsH5Cg==} 541 | peerDependencies: 542 | msw: ^2.4.9 543 | vite: ^6.0.0 || ^7.0.0-0 544 | peerDependenciesMeta: 545 | msw: 546 | optional: true 547 | vite: 548 | optional: true 549 | 550 | '@vitest/pretty-format@4.0.14': 551 | resolution: {integrity: sha512-SOYPgujB6TITcJxgd3wmsLl+wZv+fy3av2PpiPpsWPZ6J1ySUYfScfpIt2Yv56ShJXR2MOA6q2KjKHN4EpdyRQ==} 552 | 553 | '@vitest/runner@4.0.14': 554 | resolution: {integrity: sha512-BsAIk3FAqxICqREbX8SetIteT8PiaUL/tgJjmhxJhCsigmzzH8xeadtp7LRnTpCVzvf0ib9BgAfKJHuhNllKLw==} 555 | 556 | '@vitest/snapshot@4.0.14': 557 | resolution: {integrity: sha512-aQVBfT1PMzDSA16Y3Fp45a0q8nKexx6N5Amw3MX55BeTeZpoC08fGqEZqVmPcqN0ueZsuUQ9rriPMhZ3Mu19Ag==} 558 | 559 | '@vitest/spy@4.0.14': 560 | resolution: {integrity: sha512-JmAZT1UtZooO0tpY3GRyiC/8W7dCs05UOq9rfsUUgEZEdq+DuHLmWhPsrTt0TiW7WYeL/hXpaE07AZ2RCk44hg==} 561 | 562 | '@vitest/utils@4.0.14': 563 | resolution: {integrity: sha512-hLqXZKAWNg8pI+SQXyXxWCTOpA3MvsqcbVeNgSi8x/CSN2wi26dSzn1wrOhmCmFjEvN9p8/kLFRHa6PI8jHazw==} 564 | 565 | '@webcontainer/api@1.6.1': 566 | resolution: {integrity: sha512-2RS2KiIw32BY1Icf6M1DvqSmcon9XICZCDgS29QJb2NmF12ZY2V5Ia+949hMKB3Wno+P/Y8W+sPP59PZeXSELg==} 567 | 568 | '@webcontainer/snapshot@0.1.0': 569 | resolution: {integrity: sha512-PTIGQ3osUpTbK/dqB8RYbcZGv8IK+DJACx709z5sFbeIlngB3hUFpTEYFYs1SbUvr/AEQqvd0/bhc4ectrPRRw==} 570 | engines: {node: '>=16'} 571 | 572 | acorn-jsx@5.3.2: 573 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 574 | peerDependencies: 575 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 576 | 577 | acorn@8.14.1: 578 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} 579 | engines: {node: '>=0.4.0'} 580 | hasBin: true 581 | 582 | ajv@6.12.6: 583 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 584 | 585 | ansi-regex@5.0.1: 586 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 587 | engines: {node: '>=8'} 588 | 589 | ansi-regex@6.1.0: 590 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 591 | engines: {node: '>=12'} 592 | 593 | ansi-styles@4.3.0: 594 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 595 | engines: {node: '>=8'} 596 | 597 | ansi-styles@6.2.1: 598 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 599 | engines: {node: '>=12'} 600 | 601 | any-promise@1.3.0: 602 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 603 | 604 | argparse@2.0.1: 605 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 606 | 607 | array-union@2.1.0: 608 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 609 | engines: {node: '>=8'} 610 | 611 | balanced-match@1.0.2: 612 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 613 | 614 | brace-expansion@1.1.11: 615 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 616 | 617 | brace-expansion@2.0.1: 618 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 619 | 620 | braces@3.0.3: 621 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 622 | engines: {node: '>=8'} 623 | 624 | browserslist@4.24.4: 625 | resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} 626 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 627 | hasBin: true 628 | 629 | builtin-modules@3.3.0: 630 | resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} 631 | engines: {node: '>=6'} 632 | 633 | bundle-require@5.1.0: 634 | resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} 635 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 636 | peerDependencies: 637 | esbuild: '>=0.18' 638 | 639 | cac@6.7.14: 640 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 641 | engines: {node: '>=8'} 642 | 643 | callsites@3.1.0: 644 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 645 | engines: {node: '>=6'} 646 | 647 | caniuse-lite@1.0.30001713: 648 | resolution: {integrity: sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q==} 649 | 650 | chai@6.2.1: 651 | resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==} 652 | engines: {node: '>=18'} 653 | 654 | chalk@4.1.2: 655 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 656 | engines: {node: '>=10'} 657 | 658 | chokidar@4.0.3: 659 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 660 | engines: {node: '>= 14.16.0'} 661 | 662 | ci-info@4.2.0: 663 | resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} 664 | engines: {node: '>=8'} 665 | 666 | clean-regexp@1.0.0: 667 | resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} 668 | engines: {node: '>=4'} 669 | 670 | color-convert@2.0.1: 671 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 672 | engines: {node: '>=7.0.0'} 673 | 674 | color-name@1.1.4: 675 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 676 | 677 | commander@4.1.1: 678 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 679 | engines: {node: '>= 6'} 680 | 681 | common-tags@1.8.2: 682 | resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} 683 | engines: {node: '>=4.0.0'} 684 | 685 | concat-map@0.0.1: 686 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 687 | 688 | consola@3.4.2: 689 | resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} 690 | engines: {node: ^14.18.0 || >=16.10.0} 691 | 692 | core-js-compat@3.41.0: 693 | resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==} 694 | 695 | cross-spawn@7.0.6: 696 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 697 | engines: {node: '>= 8'} 698 | 699 | debug@3.2.7: 700 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 701 | peerDependencies: 702 | supports-color: '*' 703 | peerDependenciesMeta: 704 | supports-color: 705 | optional: true 706 | 707 | debug@4.4.0: 708 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 709 | engines: {node: '>=6.0'} 710 | peerDependencies: 711 | supports-color: '*' 712 | peerDependenciesMeta: 713 | supports-color: 714 | optional: true 715 | 716 | deep-is@0.1.4: 717 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 718 | 719 | dir-glob@3.0.1: 720 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 721 | engines: {node: '>=8'} 722 | 723 | doctrine@3.0.0: 724 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 725 | engines: {node: '>=6.0.0'} 726 | 727 | eastasianwidth@0.2.0: 728 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 729 | 730 | electron-to-chromium@1.5.136: 731 | resolution: {integrity: sha512-kL4+wUTD7RSA5FHx5YwWtjDnEEkIIikFgWHR4P6fqjw1PPLlqYkxeOb++wAauAssat0YClCy8Y3C5SxgSkjibQ==} 732 | 733 | emoji-regex@8.0.0: 734 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 735 | 736 | emoji-regex@9.2.2: 737 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 738 | 739 | error-ex@1.3.2: 740 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 741 | 742 | es-module-lexer@1.7.0: 743 | resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} 744 | 745 | esbuild@0.25.2: 746 | resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==} 747 | engines: {node: '>=18'} 748 | hasBin: true 749 | 750 | escalade@3.2.0: 751 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 752 | engines: {node: '>=6'} 753 | 754 | escape-string-regexp@1.0.5: 755 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 756 | engines: {node: '>=0.8.0'} 757 | 758 | escape-string-regexp@4.0.0: 759 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 760 | engines: {node: '>=10'} 761 | 762 | eslint-compat-utils@0.6.5: 763 | resolution: {integrity: sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==} 764 | engines: {node: '>=12'} 765 | peerDependencies: 766 | eslint: '>=6.0.0' 767 | 768 | eslint-config-prettier@9.1.0: 769 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} 770 | hasBin: true 771 | peerDependencies: 772 | eslint: '>=7.0.0' 773 | 774 | eslint-import-resolver-node@0.3.9: 775 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 776 | 777 | eslint-json-compat-utils@0.2.1: 778 | resolution: {integrity: sha512-YzEodbDyW8DX8bImKhAcCeu/L31Dd/70Bidx2Qex9OFUtgzXLqtfWL4Hr5fM/aCCB8QUZLuJur0S9k6UfgFkfg==} 779 | engines: {node: '>=12'} 780 | peerDependencies: 781 | '@eslint/json': '*' 782 | eslint: '*' 783 | jsonc-eslint-parser: ^2.4.0 784 | peerDependenciesMeta: 785 | '@eslint/json': 786 | optional: true 787 | 788 | eslint-plugin-import-x@3.1.0: 789 | resolution: {integrity: sha512-/UbPA+bYY7nIxcjL3kpcDY3UNdoLHFhyBFzHox2M0ypcUoueTn6woZUUmzzi5et/dXChksasYYFeKE2wshOrhg==} 790 | engines: {node: '>=16'} 791 | peerDependencies: 792 | eslint: ^8.56.0 || ^9.0.0-0 793 | 794 | eslint-plugin-jsonc@2.20.0: 795 | resolution: {integrity: sha512-FRgCn9Hzk5eKboCbVMrr9QrhM0eO4G+WKH8IFXoaeqhM/2kuWzbStJn4kkr0VWL8J5H8RYZF+Aoam1vlBaZVkw==} 796 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 797 | peerDependencies: 798 | eslint: '>=6.0.0' 799 | 800 | eslint-plugin-prettier@5.2.6: 801 | resolution: {integrity: sha512-mUcf7QG2Tjk7H055Jk0lGBjbgDnfrvqjhXh9t2xLMSCjZVcw9Rb1V6sVNXO0th3jgeO7zllWPTNRil3JW94TnQ==} 802 | engines: {node: ^14.18.0 || >=16.0.0} 803 | peerDependencies: 804 | '@types/eslint': '>=8.0.0' 805 | eslint: '>=8.0.0' 806 | eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' 807 | prettier: '>=3.0.0' 808 | peerDependenciesMeta: 809 | '@types/eslint': 810 | optional: true 811 | eslint-config-prettier: 812 | optional: true 813 | 814 | eslint-plugin-unicorn@55.0.0: 815 | resolution: {integrity: sha512-n3AKiVpY2/uDcGrS3+QsYDkjPfaOrNrsfQxU9nt5nitd9KuvVXrfAvgCO9DYPSfap+Gqjw9EOrXIsBp5tlHZjA==} 816 | engines: {node: '>=18.18'} 817 | peerDependencies: 818 | eslint: '>=8.56.0' 819 | 820 | eslint-scope@8.3.0: 821 | resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} 822 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 823 | 824 | eslint-visitor-keys@3.4.3: 825 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 826 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 827 | 828 | eslint-visitor-keys@4.2.0: 829 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 830 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 831 | 832 | eslint@9.24.0: 833 | resolution: {integrity: sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==} 834 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 835 | hasBin: true 836 | peerDependencies: 837 | jiti: '*' 838 | peerDependenciesMeta: 839 | jiti: 840 | optional: true 841 | 842 | espree@10.3.0: 843 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 844 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 845 | 846 | espree@9.6.1: 847 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 848 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 849 | 850 | esquery@1.6.0: 851 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 852 | engines: {node: '>=0.10'} 853 | 854 | esrecurse@4.3.0: 855 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 856 | engines: {node: '>=4.0'} 857 | 858 | estraverse@5.3.0: 859 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 860 | engines: {node: '>=4.0'} 861 | 862 | estree-walker@3.0.3: 863 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 864 | 865 | esutils@2.0.3: 866 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 867 | engines: {node: '>=0.10.0'} 868 | 869 | expect-type@1.2.2: 870 | resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} 871 | engines: {node: '>=12.0.0'} 872 | 873 | fast-deep-equal@3.1.3: 874 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 875 | 876 | fast-diff@1.3.0: 877 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 878 | 879 | fast-glob@3.3.3: 880 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 881 | engines: {node: '>=8.6.0'} 882 | 883 | fast-json-stable-stringify@2.1.0: 884 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 885 | 886 | fast-levenshtein@2.0.6: 887 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 888 | 889 | fastq@1.19.1: 890 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 891 | 892 | fdir@6.4.3: 893 | resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} 894 | peerDependencies: 895 | picomatch: ^3 || ^4 896 | peerDependenciesMeta: 897 | picomatch: 898 | optional: true 899 | 900 | fdir@6.5.0: 901 | resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 902 | engines: {node: '>=12.0.0'} 903 | peerDependencies: 904 | picomatch: ^3 || ^4 905 | peerDependenciesMeta: 906 | picomatch: 907 | optional: true 908 | 909 | file-entry-cache@8.0.0: 910 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 911 | engines: {node: '>=16.0.0'} 912 | 913 | fill-range@7.1.1: 914 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 915 | engines: {node: '>=8'} 916 | 917 | find-up@4.1.0: 918 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 919 | engines: {node: '>=8'} 920 | 921 | find-up@5.0.0: 922 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 923 | engines: {node: '>=10'} 924 | 925 | flat-cache@4.0.1: 926 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 927 | engines: {node: '>=16'} 928 | 929 | flatted@3.3.3: 930 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 931 | 932 | foreground-child@3.3.1: 933 | resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} 934 | engines: {node: '>=14'} 935 | 936 | fsevents@2.3.2: 937 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 938 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 939 | os: [darwin] 940 | 941 | fsevents@2.3.3: 942 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 943 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 944 | os: [darwin] 945 | 946 | function-bind@1.1.2: 947 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 948 | 949 | get-tsconfig@4.10.0: 950 | resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} 951 | 952 | glob-parent@5.1.2: 953 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 954 | engines: {node: '>= 6'} 955 | 956 | glob-parent@6.0.2: 957 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 958 | engines: {node: '>=10.13.0'} 959 | 960 | glob@10.4.5: 961 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 962 | hasBin: true 963 | 964 | globals@14.0.0: 965 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 966 | engines: {node: '>=18'} 967 | 968 | globals@15.15.0: 969 | resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} 970 | engines: {node: '>=18'} 971 | 972 | globby@11.1.0: 973 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 974 | engines: {node: '>=10'} 975 | 976 | graphemer@1.4.0: 977 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 978 | 979 | has-flag@4.0.0: 980 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 981 | engines: {node: '>=8'} 982 | 983 | hasown@2.0.2: 984 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 985 | engines: {node: '>= 0.4'} 986 | 987 | hosted-git-info@2.8.9: 988 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 989 | 990 | ignore@5.3.2: 991 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 992 | engines: {node: '>= 4'} 993 | 994 | import-fresh@3.3.1: 995 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 996 | engines: {node: '>=6'} 997 | 998 | imurmurhash@0.1.4: 999 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1000 | engines: {node: '>=0.8.19'} 1001 | 1002 | indent-string@4.0.0: 1003 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 1004 | engines: {node: '>=8'} 1005 | 1006 | is-arrayish@0.2.1: 1007 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1008 | 1009 | is-builtin-module@3.2.1: 1010 | resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} 1011 | engines: {node: '>=6'} 1012 | 1013 | is-core-module@2.16.1: 1014 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 1015 | engines: {node: '>= 0.4'} 1016 | 1017 | is-extglob@2.1.1: 1018 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1019 | engines: {node: '>=0.10.0'} 1020 | 1021 | is-fullwidth-code-point@3.0.0: 1022 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1023 | engines: {node: '>=8'} 1024 | 1025 | is-glob@4.0.3: 1026 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1027 | engines: {node: '>=0.10.0'} 1028 | 1029 | is-number@7.0.0: 1030 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1031 | engines: {node: '>=0.12.0'} 1032 | 1033 | isexe@2.0.0: 1034 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1035 | 1036 | jackspeak@3.4.3: 1037 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 1038 | 1039 | joycon@3.1.1: 1040 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 1041 | engines: {node: '>=10'} 1042 | 1043 | js-tokens@4.0.0: 1044 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1045 | 1046 | js-yaml@4.1.0: 1047 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1048 | hasBin: true 1049 | 1050 | jsesc@0.5.0: 1051 | resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} 1052 | hasBin: true 1053 | 1054 | jsesc@3.1.0: 1055 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 1056 | engines: {node: '>=6'} 1057 | hasBin: true 1058 | 1059 | json-buffer@3.0.1: 1060 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1061 | 1062 | json-parse-even-better-errors@2.3.1: 1063 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1064 | 1065 | json-schema-traverse@0.4.1: 1066 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1067 | 1068 | json-stable-stringify-without-jsonify@1.0.1: 1069 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1070 | 1071 | jsonc-eslint-parser@2.4.0: 1072 | resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} 1073 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1074 | 1075 | keyv@4.5.4: 1076 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1077 | 1078 | levn@0.4.1: 1079 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1080 | engines: {node: '>= 0.8.0'} 1081 | 1082 | lilconfig@3.1.3: 1083 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 1084 | engines: {node: '>=14'} 1085 | 1086 | lines-and-columns@1.2.4: 1087 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1088 | 1089 | load-tsconfig@0.2.5: 1090 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 1091 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1092 | 1093 | locate-path@5.0.0: 1094 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1095 | engines: {node: '>=8'} 1096 | 1097 | locate-path@6.0.0: 1098 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1099 | engines: {node: '>=10'} 1100 | 1101 | lodash.merge@4.6.2: 1102 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1103 | 1104 | lodash.sortby@4.7.0: 1105 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 1106 | 1107 | lru-cache@10.4.3: 1108 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1109 | 1110 | magic-string@0.30.21: 1111 | resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 1112 | 1113 | merge2@1.4.1: 1114 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1115 | engines: {node: '>= 8'} 1116 | 1117 | micromatch@4.0.8: 1118 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1119 | engines: {node: '>=8.6'} 1120 | 1121 | min-indent@1.0.1: 1122 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 1123 | engines: {node: '>=4'} 1124 | 1125 | minimatch@3.1.2: 1126 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1127 | 1128 | minimatch@9.0.5: 1129 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1130 | engines: {node: '>=16 || 14 >=14.17'} 1131 | 1132 | minipass@7.1.2: 1133 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1134 | engines: {node: '>=16 || 14 >=14.17'} 1135 | 1136 | mrmime@2.0.1: 1137 | resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} 1138 | engines: {node: '>=10'} 1139 | 1140 | ms@2.1.3: 1141 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1142 | 1143 | mz@2.7.0: 1144 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1145 | 1146 | nanoid@3.3.11: 1147 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 1148 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1149 | hasBin: true 1150 | 1151 | natural-compare@1.4.0: 1152 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1153 | 1154 | node-releases@2.0.19: 1155 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} 1156 | 1157 | normalize-package-data@2.5.0: 1158 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 1159 | 1160 | object-assign@4.1.1: 1161 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1162 | engines: {node: '>=0.10.0'} 1163 | 1164 | obug@2.1.1: 1165 | resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} 1166 | 1167 | optionator@0.9.4: 1168 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1169 | engines: {node: '>= 0.8.0'} 1170 | 1171 | p-limit@2.3.0: 1172 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1173 | engines: {node: '>=6'} 1174 | 1175 | p-limit@3.1.0: 1176 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1177 | engines: {node: '>=10'} 1178 | 1179 | p-locate@4.1.0: 1180 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1181 | engines: {node: '>=8'} 1182 | 1183 | p-locate@5.0.0: 1184 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1185 | engines: {node: '>=10'} 1186 | 1187 | p-try@2.2.0: 1188 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1189 | engines: {node: '>=6'} 1190 | 1191 | package-json-from-dist@1.0.1: 1192 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1193 | 1194 | parent-module@1.0.1: 1195 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1196 | engines: {node: '>=6'} 1197 | 1198 | parse-json@5.2.0: 1199 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1200 | engines: {node: '>=8'} 1201 | 1202 | path-exists@4.0.0: 1203 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1204 | engines: {node: '>=8'} 1205 | 1206 | path-key@3.1.1: 1207 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1208 | engines: {node: '>=8'} 1209 | 1210 | path-parse@1.0.7: 1211 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1212 | 1213 | path-scurry@1.11.1: 1214 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1215 | engines: {node: '>=16 || 14 >=14.18'} 1216 | 1217 | path-type@4.0.0: 1218 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1219 | engines: {node: '>=8'} 1220 | 1221 | pathe@2.0.3: 1222 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 1223 | 1224 | picocolors@1.1.1: 1225 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1226 | 1227 | picomatch@2.3.1: 1228 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1229 | engines: {node: '>=8.6'} 1230 | 1231 | picomatch@4.0.2: 1232 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1233 | engines: {node: '>=12'} 1234 | 1235 | picomatch@4.0.3: 1236 | resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 1237 | engines: {node: '>=12'} 1238 | 1239 | pirates@4.0.7: 1240 | resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} 1241 | engines: {node: '>= 6'} 1242 | 1243 | pixelmatch@7.1.0: 1244 | resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==} 1245 | hasBin: true 1246 | 1247 | playwright-core@1.52.0: 1248 | resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==} 1249 | engines: {node: '>=18'} 1250 | hasBin: true 1251 | 1252 | playwright@1.52.0: 1253 | resolution: {integrity: sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==} 1254 | engines: {node: '>=18'} 1255 | hasBin: true 1256 | 1257 | pluralize@8.0.0: 1258 | resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} 1259 | engines: {node: '>=4'} 1260 | 1261 | pngjs@7.0.0: 1262 | resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} 1263 | engines: {node: '>=14.19.0'} 1264 | 1265 | postcss-load-config@6.0.1: 1266 | resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} 1267 | engines: {node: '>= 18'} 1268 | peerDependencies: 1269 | jiti: '>=1.21.0' 1270 | postcss: '>=8.0.9' 1271 | tsx: ^4.8.1 1272 | yaml: ^2.4.2 1273 | peerDependenciesMeta: 1274 | jiti: 1275 | optional: true 1276 | postcss: 1277 | optional: true 1278 | tsx: 1279 | optional: true 1280 | yaml: 1281 | optional: true 1282 | 1283 | postcss@8.5.3: 1284 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} 1285 | engines: {node: ^10 || ^12 || >=14} 1286 | 1287 | prelude-ls@1.2.1: 1288 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1289 | engines: {node: '>= 0.8.0'} 1290 | 1291 | prettier-linter-helpers@1.0.0: 1292 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1293 | engines: {node: '>=6.0.0'} 1294 | 1295 | prettier@3.5.3: 1296 | resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} 1297 | engines: {node: '>=14'} 1298 | hasBin: true 1299 | 1300 | punycode@2.3.1: 1301 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1302 | engines: {node: '>=6'} 1303 | 1304 | queue-microtask@1.2.3: 1305 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1306 | 1307 | read-pkg-up@7.0.1: 1308 | resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} 1309 | engines: {node: '>=8'} 1310 | 1311 | read-pkg@5.2.0: 1312 | resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} 1313 | engines: {node: '>=8'} 1314 | 1315 | readdirp@4.1.2: 1316 | resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 1317 | engines: {node: '>= 14.18.0'} 1318 | 1319 | regexp-tree@0.1.27: 1320 | resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} 1321 | hasBin: true 1322 | 1323 | regjsparser@0.10.0: 1324 | resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} 1325 | hasBin: true 1326 | 1327 | resolve-from@4.0.0: 1328 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1329 | engines: {node: '>=4'} 1330 | 1331 | resolve-from@5.0.0: 1332 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1333 | engines: {node: '>=8'} 1334 | 1335 | resolve-pkg-maps@1.0.0: 1336 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1337 | 1338 | resolve@1.22.10: 1339 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1340 | engines: {node: '>= 0.4'} 1341 | hasBin: true 1342 | 1343 | reusify@1.1.0: 1344 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1345 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1346 | 1347 | rollup@4.39.0: 1348 | resolution: {integrity: sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==} 1349 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1350 | hasBin: true 1351 | 1352 | run-parallel@1.2.0: 1353 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1354 | 1355 | semver@5.7.2: 1356 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 1357 | hasBin: true 1358 | 1359 | semver@7.7.1: 1360 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 1361 | engines: {node: '>=10'} 1362 | hasBin: true 1363 | 1364 | shebang-command@2.0.0: 1365 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1366 | engines: {node: '>=8'} 1367 | 1368 | shebang-regex@3.0.0: 1369 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1370 | engines: {node: '>=8'} 1371 | 1372 | siginfo@2.0.0: 1373 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1374 | 1375 | signal-exit@4.1.0: 1376 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1377 | engines: {node: '>=14'} 1378 | 1379 | sirv@3.0.2: 1380 | resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} 1381 | engines: {node: '>=18'} 1382 | 1383 | slash@3.0.0: 1384 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1385 | engines: {node: '>=8'} 1386 | 1387 | source-map-js@1.2.1: 1388 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1389 | engines: {node: '>=0.10.0'} 1390 | 1391 | source-map@0.8.0-beta.0: 1392 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 1393 | engines: {node: '>= 8'} 1394 | 1395 | spdx-correct@3.2.0: 1396 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 1397 | 1398 | spdx-exceptions@2.5.0: 1399 | resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} 1400 | 1401 | spdx-expression-parse@3.0.1: 1402 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 1403 | 1404 | spdx-license-ids@3.0.21: 1405 | resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} 1406 | 1407 | stable-hash@0.0.4: 1408 | resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} 1409 | 1410 | stackback@0.0.2: 1411 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1412 | 1413 | std-env@3.10.0: 1414 | resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} 1415 | 1416 | string-width@4.2.3: 1417 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1418 | engines: {node: '>=8'} 1419 | 1420 | string-width@5.1.2: 1421 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1422 | engines: {node: '>=12'} 1423 | 1424 | strip-ansi@6.0.1: 1425 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1426 | engines: {node: '>=8'} 1427 | 1428 | strip-ansi@7.1.0: 1429 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1430 | engines: {node: '>=12'} 1431 | 1432 | strip-indent@3.0.0: 1433 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 1434 | engines: {node: '>=8'} 1435 | 1436 | strip-json-comments@3.1.1: 1437 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1438 | engines: {node: '>=8'} 1439 | 1440 | sucrase@3.35.0: 1441 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1442 | engines: {node: '>=16 || 14 >=14.17'} 1443 | hasBin: true 1444 | 1445 | supports-color@7.2.0: 1446 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1447 | engines: {node: '>=8'} 1448 | 1449 | supports-preserve-symlinks-flag@1.0.0: 1450 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1451 | engines: {node: '>= 0.4'} 1452 | 1453 | synckit@0.10.3: 1454 | resolution: {integrity: sha512-R1urvuyiTaWfeCggqEvpDJwAlDVdsT9NM+IP//Tk2x7qHCkSvBk/fwFgw/TLAHzZlrAnnazMcRw0ZD8HlYFTEQ==} 1455 | engines: {node: ^14.18.0 || >=16.0.0} 1456 | 1457 | synckit@0.11.3: 1458 | resolution: {integrity: sha512-szhWDqNNI9etJUvbZ1/cx1StnZx8yMmFxme48SwR4dty4ioSY50KEZlpv0qAfgc1fpRzuh9hBXEzoCpJ779dLg==} 1459 | engines: {node: ^14.18.0 || >=16.0.0} 1460 | 1461 | thenify-all@1.6.0: 1462 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1463 | engines: {node: '>=0.8'} 1464 | 1465 | thenify@3.3.1: 1466 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1467 | 1468 | tinybench@2.9.0: 1469 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 1470 | 1471 | tinyexec@0.3.2: 1472 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 1473 | 1474 | tinyglobby@0.2.12: 1475 | resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} 1476 | engines: {node: '>=12.0.0'} 1477 | 1478 | tinyglobby@0.2.15: 1479 | resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 1480 | engines: {node: '>=12.0.0'} 1481 | 1482 | tinyrainbow@3.0.3: 1483 | resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} 1484 | engines: {node: '>=14.0.0'} 1485 | 1486 | to-regex-range@5.0.1: 1487 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1488 | engines: {node: '>=8.0'} 1489 | 1490 | totalist@3.0.1: 1491 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 1492 | engines: {node: '>=6'} 1493 | 1494 | tr46@1.0.1: 1495 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 1496 | 1497 | tree-kill@1.2.2: 1498 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 1499 | hasBin: true 1500 | 1501 | ts-api-utils@1.4.3: 1502 | resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} 1503 | engines: {node: '>=16'} 1504 | peerDependencies: 1505 | typescript: '>=4.2.0' 1506 | 1507 | ts-api-utils@2.1.0: 1508 | resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} 1509 | engines: {node: '>=18.12'} 1510 | peerDependencies: 1511 | typescript: '>=4.8.4' 1512 | 1513 | ts-interface-checker@0.1.13: 1514 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1515 | 1516 | tslib@2.8.1: 1517 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1518 | 1519 | tsup@8.4.0: 1520 | resolution: {integrity: sha512-b+eZbPCjz10fRryaAA7C8xlIHnf8VnsaRqydheLIqwG/Mcpfk8Z5zp3HayX7GaTygkigHl5cBUs+IhcySiIexQ==} 1521 | engines: {node: '>=18'} 1522 | hasBin: true 1523 | peerDependencies: 1524 | '@microsoft/api-extractor': ^7.36.0 1525 | '@swc/core': ^1 1526 | postcss: ^8.4.12 1527 | typescript: '>=4.5.0' 1528 | peerDependenciesMeta: 1529 | '@microsoft/api-extractor': 1530 | optional: true 1531 | '@swc/core': 1532 | optional: true 1533 | postcss: 1534 | optional: true 1535 | typescript: 1536 | optional: true 1537 | 1538 | type-check@0.4.0: 1539 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1540 | engines: {node: '>= 0.8.0'} 1541 | 1542 | type-fest@0.6.0: 1543 | resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} 1544 | engines: {node: '>=8'} 1545 | 1546 | type-fest@0.8.1: 1547 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 1548 | engines: {node: '>=8'} 1549 | 1550 | typescript-eslint@8.29.1: 1551 | resolution: {integrity: sha512-f8cDkvndhbQMPcysk6CUSGBWV+g1utqdn71P5YKwMumVMOG/5k7cHq0KyG4O52nB0oKS4aN2Tp5+wB4APJGC+w==} 1552 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1553 | peerDependencies: 1554 | eslint: ^8.57.0 || ^9.0.0 1555 | typescript: '>=4.8.4 <5.9.0' 1556 | 1557 | typescript@5.8.3: 1558 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 1559 | engines: {node: '>=14.17'} 1560 | hasBin: true 1561 | 1562 | undici-types@6.21.0: 1563 | resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} 1564 | 1565 | update-browserslist-db@1.1.3: 1566 | resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} 1567 | hasBin: true 1568 | peerDependencies: 1569 | browserslist: '>= 4.21.0' 1570 | 1571 | uri-js@4.4.1: 1572 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1573 | 1574 | validate-npm-package-license@3.0.4: 1575 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 1576 | 1577 | vite@6.2.6: 1578 | resolution: {integrity: sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==} 1579 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1580 | hasBin: true 1581 | peerDependencies: 1582 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1583 | jiti: '>=1.21.0' 1584 | less: '*' 1585 | lightningcss: ^1.21.0 1586 | sass: '*' 1587 | sass-embedded: '*' 1588 | stylus: '*' 1589 | sugarss: '*' 1590 | terser: ^5.16.0 1591 | tsx: ^4.8.1 1592 | yaml: ^2.4.2 1593 | peerDependenciesMeta: 1594 | '@types/node': 1595 | optional: true 1596 | jiti: 1597 | optional: true 1598 | less: 1599 | optional: true 1600 | lightningcss: 1601 | optional: true 1602 | sass: 1603 | optional: true 1604 | sass-embedded: 1605 | optional: true 1606 | stylus: 1607 | optional: true 1608 | sugarss: 1609 | optional: true 1610 | terser: 1611 | optional: true 1612 | tsx: 1613 | optional: true 1614 | yaml: 1615 | optional: true 1616 | 1617 | vitest@4.0.14: 1618 | resolution: {integrity: sha512-d9B2J9Cm9dN9+6nxMnnNJKJCtcyKfnHj15N6YNJfaFHRLua/d3sRKU9RuKmO9mB0XdFtUizlxfz/VPbd3OxGhw==} 1619 | engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} 1620 | hasBin: true 1621 | peerDependencies: 1622 | '@edge-runtime/vm': '*' 1623 | '@opentelemetry/api': ^1.9.0 1624 | '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 1625 | '@vitest/browser-playwright': 4.0.14 1626 | '@vitest/browser-preview': 4.0.14 1627 | '@vitest/browser-webdriverio': 4.0.14 1628 | '@vitest/ui': 4.0.14 1629 | happy-dom: '*' 1630 | jsdom: '*' 1631 | peerDependenciesMeta: 1632 | '@edge-runtime/vm': 1633 | optional: true 1634 | '@opentelemetry/api': 1635 | optional: true 1636 | '@types/node': 1637 | optional: true 1638 | '@vitest/browser-playwright': 1639 | optional: true 1640 | '@vitest/browser-preview': 1641 | optional: true 1642 | '@vitest/browser-webdriverio': 1643 | optional: true 1644 | '@vitest/ui': 1645 | optional: true 1646 | happy-dom: 1647 | optional: true 1648 | jsdom: 1649 | optional: true 1650 | 1651 | webidl-conversions@4.0.2: 1652 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 1653 | 1654 | whatwg-url@7.1.0: 1655 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 1656 | 1657 | which@2.0.2: 1658 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1659 | engines: {node: '>= 8'} 1660 | hasBin: true 1661 | 1662 | why-is-node-running@2.3.0: 1663 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 1664 | engines: {node: '>=8'} 1665 | hasBin: true 1666 | 1667 | word-wrap@1.2.5: 1668 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1669 | engines: {node: '>=0.10.0'} 1670 | 1671 | wrap-ansi@7.0.0: 1672 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1673 | engines: {node: '>=10'} 1674 | 1675 | wrap-ansi@8.1.0: 1676 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1677 | engines: {node: '>=12'} 1678 | 1679 | ws@8.18.3: 1680 | resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} 1681 | engines: {node: '>=10.0.0'} 1682 | peerDependencies: 1683 | bufferutil: ^4.0.1 1684 | utf-8-validate: '>=5.0.2' 1685 | peerDependenciesMeta: 1686 | bufferutil: 1687 | optional: true 1688 | utf-8-validate: 1689 | optional: true 1690 | 1691 | yocto-queue@0.1.0: 1692 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1693 | engines: {node: '>=10'} 1694 | 1695 | snapshots: 1696 | 1697 | '@babel/code-frame@7.26.2': 1698 | dependencies: 1699 | '@babel/helper-validator-identifier': 7.25.9 1700 | js-tokens: 4.0.0 1701 | picocolors: 1.1.1 1702 | 1703 | '@babel/helper-validator-identifier@7.25.9': {} 1704 | 1705 | '@blitz/eslint-plugin@0.1.4(prettier@3.5.3)(typescript@5.8.3)': 1706 | dependencies: 1707 | '@stylistic/eslint-plugin-ts': 2.13.0(eslint@9.24.0)(typescript@5.8.3) 1708 | '@typescript-eslint/eslint-plugin': 8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.24.0)(typescript@5.8.3))(eslint@9.24.0)(typescript@5.8.3) 1709 | '@typescript-eslint/parser': 8.29.1(eslint@9.24.0)(typescript@5.8.3) 1710 | '@typescript-eslint/utils': 8.29.1(eslint@9.24.0)(typescript@5.8.3) 1711 | common-tags: 1.8.2 1712 | eslint: 9.24.0 1713 | eslint-config-prettier: 9.1.0(eslint@9.24.0) 1714 | eslint-plugin-import-x: 3.1.0(eslint@9.24.0)(typescript@5.8.3) 1715 | eslint-plugin-jsonc: 2.20.0(eslint@9.24.0) 1716 | eslint-plugin-prettier: 5.2.6(eslint-config-prettier@9.1.0(eslint@9.24.0))(eslint@9.24.0)(prettier@3.5.3) 1717 | eslint-plugin-unicorn: 55.0.0(eslint@9.24.0) 1718 | globals: 15.15.0 1719 | typescript-eslint: 8.29.1(eslint@9.24.0)(typescript@5.8.3) 1720 | transitivePeerDependencies: 1721 | - '@eslint/json' 1722 | - '@types/eslint' 1723 | - jiti 1724 | - prettier 1725 | - supports-color 1726 | - typescript 1727 | 1728 | '@esbuild/aix-ppc64@0.25.2': 1729 | optional: true 1730 | 1731 | '@esbuild/android-arm64@0.25.2': 1732 | optional: true 1733 | 1734 | '@esbuild/android-arm@0.25.2': 1735 | optional: true 1736 | 1737 | '@esbuild/android-x64@0.25.2': 1738 | optional: true 1739 | 1740 | '@esbuild/darwin-arm64@0.25.2': 1741 | optional: true 1742 | 1743 | '@esbuild/darwin-x64@0.25.2': 1744 | optional: true 1745 | 1746 | '@esbuild/freebsd-arm64@0.25.2': 1747 | optional: true 1748 | 1749 | '@esbuild/freebsd-x64@0.25.2': 1750 | optional: true 1751 | 1752 | '@esbuild/linux-arm64@0.25.2': 1753 | optional: true 1754 | 1755 | '@esbuild/linux-arm@0.25.2': 1756 | optional: true 1757 | 1758 | '@esbuild/linux-ia32@0.25.2': 1759 | optional: true 1760 | 1761 | '@esbuild/linux-loong64@0.25.2': 1762 | optional: true 1763 | 1764 | '@esbuild/linux-mips64el@0.25.2': 1765 | optional: true 1766 | 1767 | '@esbuild/linux-ppc64@0.25.2': 1768 | optional: true 1769 | 1770 | '@esbuild/linux-riscv64@0.25.2': 1771 | optional: true 1772 | 1773 | '@esbuild/linux-s390x@0.25.2': 1774 | optional: true 1775 | 1776 | '@esbuild/linux-x64@0.25.2': 1777 | optional: true 1778 | 1779 | '@esbuild/netbsd-arm64@0.25.2': 1780 | optional: true 1781 | 1782 | '@esbuild/netbsd-x64@0.25.2': 1783 | optional: true 1784 | 1785 | '@esbuild/openbsd-arm64@0.25.2': 1786 | optional: true 1787 | 1788 | '@esbuild/openbsd-x64@0.25.2': 1789 | optional: true 1790 | 1791 | '@esbuild/sunos-x64@0.25.2': 1792 | optional: true 1793 | 1794 | '@esbuild/win32-arm64@0.25.2': 1795 | optional: true 1796 | 1797 | '@esbuild/win32-ia32@0.25.2': 1798 | optional: true 1799 | 1800 | '@esbuild/win32-x64@0.25.2': 1801 | optional: true 1802 | 1803 | '@eslint-community/eslint-utils@4.5.1(eslint@9.24.0)': 1804 | dependencies: 1805 | eslint: 9.24.0 1806 | eslint-visitor-keys: 3.4.3 1807 | 1808 | '@eslint-community/regexpp@4.12.1': {} 1809 | 1810 | '@eslint/config-array@0.20.0': 1811 | dependencies: 1812 | '@eslint/object-schema': 2.1.6 1813 | debug: 4.4.0 1814 | minimatch: 3.1.2 1815 | transitivePeerDependencies: 1816 | - supports-color 1817 | 1818 | '@eslint/config-helpers@0.2.1': {} 1819 | 1820 | '@eslint/core@0.12.0': 1821 | dependencies: 1822 | '@types/json-schema': 7.0.15 1823 | 1824 | '@eslint/core@0.13.0': 1825 | dependencies: 1826 | '@types/json-schema': 7.0.15 1827 | 1828 | '@eslint/eslintrc@3.3.1': 1829 | dependencies: 1830 | ajv: 6.12.6 1831 | debug: 4.4.0 1832 | espree: 10.3.0 1833 | globals: 14.0.0 1834 | ignore: 5.3.2 1835 | import-fresh: 3.3.1 1836 | js-yaml: 4.1.0 1837 | minimatch: 3.1.2 1838 | strip-json-comments: 3.1.1 1839 | transitivePeerDependencies: 1840 | - supports-color 1841 | 1842 | '@eslint/js@9.24.0': {} 1843 | 1844 | '@eslint/object-schema@2.1.6': {} 1845 | 1846 | '@eslint/plugin-kit@0.2.8': 1847 | dependencies: 1848 | '@eslint/core': 0.13.0 1849 | levn: 0.4.1 1850 | 1851 | '@humanfs/core@0.19.1': {} 1852 | 1853 | '@humanfs/node@0.16.6': 1854 | dependencies: 1855 | '@humanfs/core': 0.19.1 1856 | '@humanwhocodes/retry': 0.3.1 1857 | 1858 | '@humanwhocodes/module-importer@1.0.1': {} 1859 | 1860 | '@humanwhocodes/retry@0.3.1': {} 1861 | 1862 | '@humanwhocodes/retry@0.4.2': {} 1863 | 1864 | '@isaacs/cliui@8.0.2': 1865 | dependencies: 1866 | string-width: 5.1.2 1867 | string-width-cjs: string-width@4.2.3 1868 | strip-ansi: 7.1.0 1869 | strip-ansi-cjs: strip-ansi@6.0.1 1870 | wrap-ansi: 8.1.0 1871 | wrap-ansi-cjs: wrap-ansi@7.0.0 1872 | 1873 | '@jridgewell/gen-mapping@0.3.8': 1874 | dependencies: 1875 | '@jridgewell/set-array': 1.2.1 1876 | '@jridgewell/sourcemap-codec': 1.5.0 1877 | '@jridgewell/trace-mapping': 0.3.25 1878 | 1879 | '@jridgewell/resolve-uri@3.1.2': {} 1880 | 1881 | '@jridgewell/set-array@1.2.1': {} 1882 | 1883 | '@jridgewell/sourcemap-codec@1.5.0': {} 1884 | 1885 | '@jridgewell/sourcemap-codec@1.5.5': {} 1886 | 1887 | '@jridgewell/trace-mapping@0.3.25': 1888 | dependencies: 1889 | '@jridgewell/resolve-uri': 3.1.2 1890 | '@jridgewell/sourcemap-codec': 1.5.0 1891 | 1892 | '@msgpack/msgpack@3.1.1': {} 1893 | 1894 | '@nodelib/fs.scandir@2.1.5': 1895 | dependencies: 1896 | '@nodelib/fs.stat': 2.0.5 1897 | run-parallel: 1.2.0 1898 | 1899 | '@nodelib/fs.stat@2.0.5': {} 1900 | 1901 | '@nodelib/fs.walk@1.2.8': 1902 | dependencies: 1903 | '@nodelib/fs.scandir': 2.1.5 1904 | fastq: 1.19.1 1905 | 1906 | '@pkgjs/parseargs@0.11.0': 1907 | optional: true 1908 | 1909 | '@pkgr/core@0.2.2': {} 1910 | 1911 | '@polka/url@1.0.0-next.29': {} 1912 | 1913 | '@rollup/rollup-android-arm-eabi@4.39.0': 1914 | optional: true 1915 | 1916 | '@rollup/rollup-android-arm64@4.39.0': 1917 | optional: true 1918 | 1919 | '@rollup/rollup-darwin-arm64@4.39.0': 1920 | optional: true 1921 | 1922 | '@rollup/rollup-darwin-x64@4.39.0': 1923 | optional: true 1924 | 1925 | '@rollup/rollup-freebsd-arm64@4.39.0': 1926 | optional: true 1927 | 1928 | '@rollup/rollup-freebsd-x64@4.39.0': 1929 | optional: true 1930 | 1931 | '@rollup/rollup-linux-arm-gnueabihf@4.39.0': 1932 | optional: true 1933 | 1934 | '@rollup/rollup-linux-arm-musleabihf@4.39.0': 1935 | optional: true 1936 | 1937 | '@rollup/rollup-linux-arm64-gnu@4.39.0': 1938 | optional: true 1939 | 1940 | '@rollup/rollup-linux-arm64-musl@4.39.0': 1941 | optional: true 1942 | 1943 | '@rollup/rollup-linux-loongarch64-gnu@4.39.0': 1944 | optional: true 1945 | 1946 | '@rollup/rollup-linux-powerpc64le-gnu@4.39.0': 1947 | optional: true 1948 | 1949 | '@rollup/rollup-linux-riscv64-gnu@4.39.0': 1950 | optional: true 1951 | 1952 | '@rollup/rollup-linux-riscv64-musl@4.39.0': 1953 | optional: true 1954 | 1955 | '@rollup/rollup-linux-s390x-gnu@4.39.0': 1956 | optional: true 1957 | 1958 | '@rollup/rollup-linux-x64-gnu@4.39.0': 1959 | optional: true 1960 | 1961 | '@rollup/rollup-linux-x64-musl@4.39.0': 1962 | optional: true 1963 | 1964 | '@rollup/rollup-win32-arm64-msvc@4.39.0': 1965 | optional: true 1966 | 1967 | '@rollup/rollup-win32-ia32-msvc@4.39.0': 1968 | optional: true 1969 | 1970 | '@rollup/rollup-win32-x64-msvc@4.39.0': 1971 | optional: true 1972 | 1973 | '@standard-schema/spec@1.0.0': {} 1974 | 1975 | '@stylistic/eslint-plugin-ts@2.13.0(eslint@9.24.0)(typescript@5.8.3)': 1976 | dependencies: 1977 | '@typescript-eslint/utils': 8.29.1(eslint@9.24.0)(typescript@5.8.3) 1978 | eslint: 9.24.0 1979 | eslint-visitor-keys: 4.2.0 1980 | espree: 10.3.0 1981 | transitivePeerDependencies: 1982 | - supports-color 1983 | - typescript 1984 | 1985 | '@types/chai@5.2.2': 1986 | dependencies: 1987 | '@types/deep-eql': 4.0.2 1988 | 1989 | '@types/deep-eql@4.0.2': {} 1990 | 1991 | '@types/estree@1.0.7': {} 1992 | 1993 | '@types/json-schema@7.0.15': {} 1994 | 1995 | '@types/node@22.14.0': 1996 | dependencies: 1997 | undici-types: 6.21.0 1998 | 1999 | '@types/normalize-package-data@2.4.4': {} 2000 | 2001 | '@typescript-eslint/eslint-plugin@8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.24.0)(typescript@5.8.3))(eslint@9.24.0)(typescript@5.8.3)': 2002 | dependencies: 2003 | '@eslint-community/regexpp': 4.12.1 2004 | '@typescript-eslint/parser': 8.29.1(eslint@9.24.0)(typescript@5.8.3) 2005 | '@typescript-eslint/scope-manager': 8.29.1 2006 | '@typescript-eslint/type-utils': 8.29.1(eslint@9.24.0)(typescript@5.8.3) 2007 | '@typescript-eslint/utils': 8.29.1(eslint@9.24.0)(typescript@5.8.3) 2008 | '@typescript-eslint/visitor-keys': 8.29.1 2009 | eslint: 9.24.0 2010 | graphemer: 1.4.0 2011 | ignore: 5.3.2 2012 | natural-compare: 1.4.0 2013 | ts-api-utils: 2.1.0(typescript@5.8.3) 2014 | typescript: 5.8.3 2015 | transitivePeerDependencies: 2016 | - supports-color 2017 | 2018 | '@typescript-eslint/parser@8.29.1(eslint@9.24.0)(typescript@5.8.3)': 2019 | dependencies: 2020 | '@typescript-eslint/scope-manager': 8.29.1 2021 | '@typescript-eslint/types': 8.29.1 2022 | '@typescript-eslint/typescript-estree': 8.29.1(typescript@5.8.3) 2023 | '@typescript-eslint/visitor-keys': 8.29.1 2024 | debug: 4.4.0 2025 | eslint: 9.24.0 2026 | typescript: 5.8.3 2027 | transitivePeerDependencies: 2028 | - supports-color 2029 | 2030 | '@typescript-eslint/scope-manager@7.18.0': 2031 | dependencies: 2032 | '@typescript-eslint/types': 7.18.0 2033 | '@typescript-eslint/visitor-keys': 7.18.0 2034 | 2035 | '@typescript-eslint/scope-manager@8.29.1': 2036 | dependencies: 2037 | '@typescript-eslint/types': 8.29.1 2038 | '@typescript-eslint/visitor-keys': 8.29.1 2039 | 2040 | '@typescript-eslint/type-utils@8.29.1(eslint@9.24.0)(typescript@5.8.3)': 2041 | dependencies: 2042 | '@typescript-eslint/typescript-estree': 8.29.1(typescript@5.8.3) 2043 | '@typescript-eslint/utils': 8.29.1(eslint@9.24.0)(typescript@5.8.3) 2044 | debug: 4.4.0 2045 | eslint: 9.24.0 2046 | ts-api-utils: 2.1.0(typescript@5.8.3) 2047 | typescript: 5.8.3 2048 | transitivePeerDependencies: 2049 | - supports-color 2050 | 2051 | '@typescript-eslint/types@7.18.0': {} 2052 | 2053 | '@typescript-eslint/types@8.29.1': {} 2054 | 2055 | '@typescript-eslint/typescript-estree@7.18.0(typescript@5.8.3)': 2056 | dependencies: 2057 | '@typescript-eslint/types': 7.18.0 2058 | '@typescript-eslint/visitor-keys': 7.18.0 2059 | debug: 4.4.0 2060 | globby: 11.1.0 2061 | is-glob: 4.0.3 2062 | minimatch: 9.0.5 2063 | semver: 7.7.1 2064 | ts-api-utils: 1.4.3(typescript@5.8.3) 2065 | optionalDependencies: 2066 | typescript: 5.8.3 2067 | transitivePeerDependencies: 2068 | - supports-color 2069 | 2070 | '@typescript-eslint/typescript-estree@8.29.1(typescript@5.8.3)': 2071 | dependencies: 2072 | '@typescript-eslint/types': 8.29.1 2073 | '@typescript-eslint/visitor-keys': 8.29.1 2074 | debug: 4.4.0 2075 | fast-glob: 3.3.3 2076 | is-glob: 4.0.3 2077 | minimatch: 9.0.5 2078 | semver: 7.7.1 2079 | ts-api-utils: 2.1.0(typescript@5.8.3) 2080 | typescript: 5.8.3 2081 | transitivePeerDependencies: 2082 | - supports-color 2083 | 2084 | '@typescript-eslint/utils@7.18.0(eslint@9.24.0)(typescript@5.8.3)': 2085 | dependencies: 2086 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0) 2087 | '@typescript-eslint/scope-manager': 7.18.0 2088 | '@typescript-eslint/types': 7.18.0 2089 | '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) 2090 | eslint: 9.24.0 2091 | transitivePeerDependencies: 2092 | - supports-color 2093 | - typescript 2094 | 2095 | '@typescript-eslint/utils@8.29.1(eslint@9.24.0)(typescript@5.8.3)': 2096 | dependencies: 2097 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0) 2098 | '@typescript-eslint/scope-manager': 8.29.1 2099 | '@typescript-eslint/types': 8.29.1 2100 | '@typescript-eslint/typescript-estree': 8.29.1(typescript@5.8.3) 2101 | eslint: 9.24.0 2102 | typescript: 5.8.3 2103 | transitivePeerDependencies: 2104 | - supports-color 2105 | 2106 | '@typescript-eslint/visitor-keys@7.18.0': 2107 | dependencies: 2108 | '@typescript-eslint/types': 7.18.0 2109 | eslint-visitor-keys: 3.4.3 2110 | 2111 | '@typescript-eslint/visitor-keys@8.29.1': 2112 | dependencies: 2113 | '@typescript-eslint/types': 8.29.1 2114 | eslint-visitor-keys: 4.2.0 2115 | 2116 | '@vitest/browser-playwright@4.0.14(playwright@1.52.0)(vite@6.2.6(@types/node@22.14.0))(vitest@4.0.14)': 2117 | dependencies: 2118 | '@vitest/browser': 4.0.14(vite@6.2.6(@types/node@22.14.0))(vitest@4.0.14) 2119 | '@vitest/mocker': 4.0.14(vite@6.2.6(@types/node@22.14.0)) 2120 | playwright: 1.52.0 2121 | tinyrainbow: 3.0.3 2122 | vitest: 4.0.14(@types/node@22.14.0)(@vitest/browser-playwright@4.0.14) 2123 | transitivePeerDependencies: 2124 | - bufferutil 2125 | - msw 2126 | - utf-8-validate 2127 | - vite 2128 | 2129 | '@vitest/browser@4.0.14(vite@6.2.6(@types/node@22.14.0))(vitest@4.0.14)': 2130 | dependencies: 2131 | '@vitest/mocker': 4.0.14(vite@6.2.6(@types/node@22.14.0)) 2132 | '@vitest/utils': 4.0.14 2133 | magic-string: 0.30.21 2134 | pixelmatch: 7.1.0 2135 | pngjs: 7.0.0 2136 | sirv: 3.0.2 2137 | tinyrainbow: 3.0.3 2138 | vitest: 4.0.14(@types/node@22.14.0)(@vitest/browser-playwright@4.0.14) 2139 | ws: 8.18.3 2140 | transitivePeerDependencies: 2141 | - bufferutil 2142 | - msw 2143 | - utf-8-validate 2144 | - vite 2145 | 2146 | '@vitest/expect@4.0.14': 2147 | dependencies: 2148 | '@standard-schema/spec': 1.0.0 2149 | '@types/chai': 5.2.2 2150 | '@vitest/spy': 4.0.14 2151 | '@vitest/utils': 4.0.14 2152 | chai: 6.2.1 2153 | tinyrainbow: 3.0.3 2154 | 2155 | '@vitest/mocker@4.0.14(vite@6.2.6(@types/node@22.14.0))': 2156 | dependencies: 2157 | '@vitest/spy': 4.0.14 2158 | estree-walker: 3.0.3 2159 | magic-string: 0.30.21 2160 | optionalDependencies: 2161 | vite: 6.2.6(@types/node@22.14.0) 2162 | 2163 | '@vitest/pretty-format@4.0.14': 2164 | dependencies: 2165 | tinyrainbow: 3.0.3 2166 | 2167 | '@vitest/runner@4.0.14': 2168 | dependencies: 2169 | '@vitest/utils': 4.0.14 2170 | pathe: 2.0.3 2171 | 2172 | '@vitest/snapshot@4.0.14': 2173 | dependencies: 2174 | '@vitest/pretty-format': 4.0.14 2175 | magic-string: 0.30.21 2176 | pathe: 2.0.3 2177 | 2178 | '@vitest/spy@4.0.14': {} 2179 | 2180 | '@vitest/utils@4.0.14': 2181 | dependencies: 2182 | '@vitest/pretty-format': 4.0.14 2183 | tinyrainbow: 3.0.3 2184 | 2185 | '@webcontainer/api@1.6.1': {} 2186 | 2187 | '@webcontainer/snapshot@0.1.0': 2188 | dependencies: 2189 | '@msgpack/msgpack': 3.1.1 2190 | 2191 | acorn-jsx@5.3.2(acorn@8.14.1): 2192 | dependencies: 2193 | acorn: 8.14.1 2194 | 2195 | acorn@8.14.1: {} 2196 | 2197 | ajv@6.12.6: 2198 | dependencies: 2199 | fast-deep-equal: 3.1.3 2200 | fast-json-stable-stringify: 2.1.0 2201 | json-schema-traverse: 0.4.1 2202 | uri-js: 4.4.1 2203 | 2204 | ansi-regex@5.0.1: {} 2205 | 2206 | ansi-regex@6.1.0: {} 2207 | 2208 | ansi-styles@4.3.0: 2209 | dependencies: 2210 | color-convert: 2.0.1 2211 | 2212 | ansi-styles@6.2.1: {} 2213 | 2214 | any-promise@1.3.0: {} 2215 | 2216 | argparse@2.0.1: {} 2217 | 2218 | array-union@2.1.0: {} 2219 | 2220 | balanced-match@1.0.2: {} 2221 | 2222 | brace-expansion@1.1.11: 2223 | dependencies: 2224 | balanced-match: 1.0.2 2225 | concat-map: 0.0.1 2226 | 2227 | brace-expansion@2.0.1: 2228 | dependencies: 2229 | balanced-match: 1.0.2 2230 | 2231 | braces@3.0.3: 2232 | dependencies: 2233 | fill-range: 7.1.1 2234 | 2235 | browserslist@4.24.4: 2236 | dependencies: 2237 | caniuse-lite: 1.0.30001713 2238 | electron-to-chromium: 1.5.136 2239 | node-releases: 2.0.19 2240 | update-browserslist-db: 1.1.3(browserslist@4.24.4) 2241 | 2242 | builtin-modules@3.3.0: {} 2243 | 2244 | bundle-require@5.1.0(esbuild@0.25.2): 2245 | dependencies: 2246 | esbuild: 0.25.2 2247 | load-tsconfig: 0.2.5 2248 | 2249 | cac@6.7.14: {} 2250 | 2251 | callsites@3.1.0: {} 2252 | 2253 | caniuse-lite@1.0.30001713: {} 2254 | 2255 | chai@6.2.1: {} 2256 | 2257 | chalk@4.1.2: 2258 | dependencies: 2259 | ansi-styles: 4.3.0 2260 | supports-color: 7.2.0 2261 | 2262 | chokidar@4.0.3: 2263 | dependencies: 2264 | readdirp: 4.1.2 2265 | 2266 | ci-info@4.2.0: {} 2267 | 2268 | clean-regexp@1.0.0: 2269 | dependencies: 2270 | escape-string-regexp: 1.0.5 2271 | 2272 | color-convert@2.0.1: 2273 | dependencies: 2274 | color-name: 1.1.4 2275 | 2276 | color-name@1.1.4: {} 2277 | 2278 | commander@4.1.1: {} 2279 | 2280 | common-tags@1.8.2: {} 2281 | 2282 | concat-map@0.0.1: {} 2283 | 2284 | consola@3.4.2: {} 2285 | 2286 | core-js-compat@3.41.0: 2287 | dependencies: 2288 | browserslist: 4.24.4 2289 | 2290 | cross-spawn@7.0.6: 2291 | dependencies: 2292 | path-key: 3.1.1 2293 | shebang-command: 2.0.0 2294 | which: 2.0.2 2295 | 2296 | debug@3.2.7: 2297 | dependencies: 2298 | ms: 2.1.3 2299 | 2300 | debug@4.4.0: 2301 | dependencies: 2302 | ms: 2.1.3 2303 | 2304 | deep-is@0.1.4: {} 2305 | 2306 | dir-glob@3.0.1: 2307 | dependencies: 2308 | path-type: 4.0.0 2309 | 2310 | doctrine@3.0.0: 2311 | dependencies: 2312 | esutils: 2.0.3 2313 | 2314 | eastasianwidth@0.2.0: {} 2315 | 2316 | electron-to-chromium@1.5.136: {} 2317 | 2318 | emoji-regex@8.0.0: {} 2319 | 2320 | emoji-regex@9.2.2: {} 2321 | 2322 | error-ex@1.3.2: 2323 | dependencies: 2324 | is-arrayish: 0.2.1 2325 | 2326 | es-module-lexer@1.7.0: {} 2327 | 2328 | esbuild@0.25.2: 2329 | optionalDependencies: 2330 | '@esbuild/aix-ppc64': 0.25.2 2331 | '@esbuild/android-arm': 0.25.2 2332 | '@esbuild/android-arm64': 0.25.2 2333 | '@esbuild/android-x64': 0.25.2 2334 | '@esbuild/darwin-arm64': 0.25.2 2335 | '@esbuild/darwin-x64': 0.25.2 2336 | '@esbuild/freebsd-arm64': 0.25.2 2337 | '@esbuild/freebsd-x64': 0.25.2 2338 | '@esbuild/linux-arm': 0.25.2 2339 | '@esbuild/linux-arm64': 0.25.2 2340 | '@esbuild/linux-ia32': 0.25.2 2341 | '@esbuild/linux-loong64': 0.25.2 2342 | '@esbuild/linux-mips64el': 0.25.2 2343 | '@esbuild/linux-ppc64': 0.25.2 2344 | '@esbuild/linux-riscv64': 0.25.2 2345 | '@esbuild/linux-s390x': 0.25.2 2346 | '@esbuild/linux-x64': 0.25.2 2347 | '@esbuild/netbsd-arm64': 0.25.2 2348 | '@esbuild/netbsd-x64': 0.25.2 2349 | '@esbuild/openbsd-arm64': 0.25.2 2350 | '@esbuild/openbsd-x64': 0.25.2 2351 | '@esbuild/sunos-x64': 0.25.2 2352 | '@esbuild/win32-arm64': 0.25.2 2353 | '@esbuild/win32-ia32': 0.25.2 2354 | '@esbuild/win32-x64': 0.25.2 2355 | 2356 | escalade@3.2.0: {} 2357 | 2358 | escape-string-regexp@1.0.5: {} 2359 | 2360 | escape-string-regexp@4.0.0: {} 2361 | 2362 | eslint-compat-utils@0.6.5(eslint@9.24.0): 2363 | dependencies: 2364 | eslint: 9.24.0 2365 | semver: 7.7.1 2366 | 2367 | eslint-config-prettier@9.1.0(eslint@9.24.0): 2368 | dependencies: 2369 | eslint: 9.24.0 2370 | 2371 | eslint-import-resolver-node@0.3.9: 2372 | dependencies: 2373 | debug: 3.2.7 2374 | is-core-module: 2.16.1 2375 | resolve: 1.22.10 2376 | transitivePeerDependencies: 2377 | - supports-color 2378 | 2379 | eslint-json-compat-utils@0.2.1(eslint@9.24.0)(jsonc-eslint-parser@2.4.0): 2380 | dependencies: 2381 | eslint: 9.24.0 2382 | esquery: 1.6.0 2383 | jsonc-eslint-parser: 2.4.0 2384 | 2385 | eslint-plugin-import-x@3.1.0(eslint@9.24.0)(typescript@5.8.3): 2386 | dependencies: 2387 | '@typescript-eslint/utils': 7.18.0(eslint@9.24.0)(typescript@5.8.3) 2388 | debug: 4.4.0 2389 | doctrine: 3.0.0 2390 | eslint: 9.24.0 2391 | eslint-import-resolver-node: 0.3.9 2392 | get-tsconfig: 4.10.0 2393 | is-glob: 4.0.3 2394 | minimatch: 9.0.5 2395 | semver: 7.7.1 2396 | stable-hash: 0.0.4 2397 | tslib: 2.8.1 2398 | transitivePeerDependencies: 2399 | - supports-color 2400 | - typescript 2401 | 2402 | eslint-plugin-jsonc@2.20.0(eslint@9.24.0): 2403 | dependencies: 2404 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0) 2405 | eslint: 9.24.0 2406 | eslint-compat-utils: 0.6.5(eslint@9.24.0) 2407 | eslint-json-compat-utils: 0.2.1(eslint@9.24.0)(jsonc-eslint-parser@2.4.0) 2408 | espree: 10.3.0 2409 | graphemer: 1.4.0 2410 | jsonc-eslint-parser: 2.4.0 2411 | natural-compare: 1.4.0 2412 | synckit: 0.10.3 2413 | transitivePeerDependencies: 2414 | - '@eslint/json' 2415 | 2416 | eslint-plugin-prettier@5.2.6(eslint-config-prettier@9.1.0(eslint@9.24.0))(eslint@9.24.0)(prettier@3.5.3): 2417 | dependencies: 2418 | eslint: 9.24.0 2419 | prettier: 3.5.3 2420 | prettier-linter-helpers: 1.0.0 2421 | synckit: 0.11.3 2422 | optionalDependencies: 2423 | eslint-config-prettier: 9.1.0(eslint@9.24.0) 2424 | 2425 | eslint-plugin-unicorn@55.0.0(eslint@9.24.0): 2426 | dependencies: 2427 | '@babel/helper-validator-identifier': 7.25.9 2428 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0) 2429 | ci-info: 4.2.0 2430 | clean-regexp: 1.0.0 2431 | core-js-compat: 3.41.0 2432 | eslint: 9.24.0 2433 | esquery: 1.6.0 2434 | globals: 15.15.0 2435 | indent-string: 4.0.0 2436 | is-builtin-module: 3.2.1 2437 | jsesc: 3.1.0 2438 | pluralize: 8.0.0 2439 | read-pkg-up: 7.0.1 2440 | regexp-tree: 0.1.27 2441 | regjsparser: 0.10.0 2442 | semver: 7.7.1 2443 | strip-indent: 3.0.0 2444 | 2445 | eslint-scope@8.3.0: 2446 | dependencies: 2447 | esrecurse: 4.3.0 2448 | estraverse: 5.3.0 2449 | 2450 | eslint-visitor-keys@3.4.3: {} 2451 | 2452 | eslint-visitor-keys@4.2.0: {} 2453 | 2454 | eslint@9.24.0: 2455 | dependencies: 2456 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0) 2457 | '@eslint-community/regexpp': 4.12.1 2458 | '@eslint/config-array': 0.20.0 2459 | '@eslint/config-helpers': 0.2.1 2460 | '@eslint/core': 0.12.0 2461 | '@eslint/eslintrc': 3.3.1 2462 | '@eslint/js': 9.24.0 2463 | '@eslint/plugin-kit': 0.2.8 2464 | '@humanfs/node': 0.16.6 2465 | '@humanwhocodes/module-importer': 1.0.1 2466 | '@humanwhocodes/retry': 0.4.2 2467 | '@types/estree': 1.0.7 2468 | '@types/json-schema': 7.0.15 2469 | ajv: 6.12.6 2470 | chalk: 4.1.2 2471 | cross-spawn: 7.0.6 2472 | debug: 4.4.0 2473 | escape-string-regexp: 4.0.0 2474 | eslint-scope: 8.3.0 2475 | eslint-visitor-keys: 4.2.0 2476 | espree: 10.3.0 2477 | esquery: 1.6.0 2478 | esutils: 2.0.3 2479 | fast-deep-equal: 3.1.3 2480 | file-entry-cache: 8.0.0 2481 | find-up: 5.0.0 2482 | glob-parent: 6.0.2 2483 | ignore: 5.3.2 2484 | imurmurhash: 0.1.4 2485 | is-glob: 4.0.3 2486 | json-stable-stringify-without-jsonify: 1.0.1 2487 | lodash.merge: 4.6.2 2488 | minimatch: 3.1.2 2489 | natural-compare: 1.4.0 2490 | optionator: 0.9.4 2491 | transitivePeerDependencies: 2492 | - supports-color 2493 | 2494 | espree@10.3.0: 2495 | dependencies: 2496 | acorn: 8.14.1 2497 | acorn-jsx: 5.3.2(acorn@8.14.1) 2498 | eslint-visitor-keys: 4.2.0 2499 | 2500 | espree@9.6.1: 2501 | dependencies: 2502 | acorn: 8.14.1 2503 | acorn-jsx: 5.3.2(acorn@8.14.1) 2504 | eslint-visitor-keys: 3.4.3 2505 | 2506 | esquery@1.6.0: 2507 | dependencies: 2508 | estraverse: 5.3.0 2509 | 2510 | esrecurse@4.3.0: 2511 | dependencies: 2512 | estraverse: 5.3.0 2513 | 2514 | estraverse@5.3.0: {} 2515 | 2516 | estree-walker@3.0.3: 2517 | dependencies: 2518 | '@types/estree': 1.0.7 2519 | 2520 | esutils@2.0.3: {} 2521 | 2522 | expect-type@1.2.2: {} 2523 | 2524 | fast-deep-equal@3.1.3: {} 2525 | 2526 | fast-diff@1.3.0: {} 2527 | 2528 | fast-glob@3.3.3: 2529 | dependencies: 2530 | '@nodelib/fs.stat': 2.0.5 2531 | '@nodelib/fs.walk': 1.2.8 2532 | glob-parent: 5.1.2 2533 | merge2: 1.4.1 2534 | micromatch: 4.0.8 2535 | 2536 | fast-json-stable-stringify@2.1.0: {} 2537 | 2538 | fast-levenshtein@2.0.6: {} 2539 | 2540 | fastq@1.19.1: 2541 | dependencies: 2542 | reusify: 1.1.0 2543 | 2544 | fdir@6.4.3(picomatch@4.0.2): 2545 | optionalDependencies: 2546 | picomatch: 4.0.2 2547 | 2548 | fdir@6.5.0(picomatch@4.0.3): 2549 | optionalDependencies: 2550 | picomatch: 4.0.3 2551 | 2552 | file-entry-cache@8.0.0: 2553 | dependencies: 2554 | flat-cache: 4.0.1 2555 | 2556 | fill-range@7.1.1: 2557 | dependencies: 2558 | to-regex-range: 5.0.1 2559 | 2560 | find-up@4.1.0: 2561 | dependencies: 2562 | locate-path: 5.0.0 2563 | path-exists: 4.0.0 2564 | 2565 | find-up@5.0.0: 2566 | dependencies: 2567 | locate-path: 6.0.0 2568 | path-exists: 4.0.0 2569 | 2570 | flat-cache@4.0.1: 2571 | dependencies: 2572 | flatted: 3.3.3 2573 | keyv: 4.5.4 2574 | 2575 | flatted@3.3.3: {} 2576 | 2577 | foreground-child@3.3.1: 2578 | dependencies: 2579 | cross-spawn: 7.0.6 2580 | signal-exit: 4.1.0 2581 | 2582 | fsevents@2.3.2: 2583 | optional: true 2584 | 2585 | fsevents@2.3.3: 2586 | optional: true 2587 | 2588 | function-bind@1.1.2: {} 2589 | 2590 | get-tsconfig@4.10.0: 2591 | dependencies: 2592 | resolve-pkg-maps: 1.0.0 2593 | 2594 | glob-parent@5.1.2: 2595 | dependencies: 2596 | is-glob: 4.0.3 2597 | 2598 | glob-parent@6.0.2: 2599 | dependencies: 2600 | is-glob: 4.0.3 2601 | 2602 | glob@10.4.5: 2603 | dependencies: 2604 | foreground-child: 3.3.1 2605 | jackspeak: 3.4.3 2606 | minimatch: 9.0.5 2607 | minipass: 7.1.2 2608 | package-json-from-dist: 1.0.1 2609 | path-scurry: 1.11.1 2610 | 2611 | globals@14.0.0: {} 2612 | 2613 | globals@15.15.0: {} 2614 | 2615 | globby@11.1.0: 2616 | dependencies: 2617 | array-union: 2.1.0 2618 | dir-glob: 3.0.1 2619 | fast-glob: 3.3.3 2620 | ignore: 5.3.2 2621 | merge2: 1.4.1 2622 | slash: 3.0.0 2623 | 2624 | graphemer@1.4.0: {} 2625 | 2626 | has-flag@4.0.0: {} 2627 | 2628 | hasown@2.0.2: 2629 | dependencies: 2630 | function-bind: 1.1.2 2631 | 2632 | hosted-git-info@2.8.9: {} 2633 | 2634 | ignore@5.3.2: {} 2635 | 2636 | import-fresh@3.3.1: 2637 | dependencies: 2638 | parent-module: 1.0.1 2639 | resolve-from: 4.0.0 2640 | 2641 | imurmurhash@0.1.4: {} 2642 | 2643 | indent-string@4.0.0: {} 2644 | 2645 | is-arrayish@0.2.1: {} 2646 | 2647 | is-builtin-module@3.2.1: 2648 | dependencies: 2649 | builtin-modules: 3.3.0 2650 | 2651 | is-core-module@2.16.1: 2652 | dependencies: 2653 | hasown: 2.0.2 2654 | 2655 | is-extglob@2.1.1: {} 2656 | 2657 | is-fullwidth-code-point@3.0.0: {} 2658 | 2659 | is-glob@4.0.3: 2660 | dependencies: 2661 | is-extglob: 2.1.1 2662 | 2663 | is-number@7.0.0: {} 2664 | 2665 | isexe@2.0.0: {} 2666 | 2667 | jackspeak@3.4.3: 2668 | dependencies: 2669 | '@isaacs/cliui': 8.0.2 2670 | optionalDependencies: 2671 | '@pkgjs/parseargs': 0.11.0 2672 | 2673 | joycon@3.1.1: {} 2674 | 2675 | js-tokens@4.0.0: {} 2676 | 2677 | js-yaml@4.1.0: 2678 | dependencies: 2679 | argparse: 2.0.1 2680 | 2681 | jsesc@0.5.0: {} 2682 | 2683 | jsesc@3.1.0: {} 2684 | 2685 | json-buffer@3.0.1: {} 2686 | 2687 | json-parse-even-better-errors@2.3.1: {} 2688 | 2689 | json-schema-traverse@0.4.1: {} 2690 | 2691 | json-stable-stringify-without-jsonify@1.0.1: {} 2692 | 2693 | jsonc-eslint-parser@2.4.0: 2694 | dependencies: 2695 | acorn: 8.14.1 2696 | eslint-visitor-keys: 3.4.3 2697 | espree: 9.6.1 2698 | semver: 7.7.1 2699 | 2700 | keyv@4.5.4: 2701 | dependencies: 2702 | json-buffer: 3.0.1 2703 | 2704 | levn@0.4.1: 2705 | dependencies: 2706 | prelude-ls: 1.2.1 2707 | type-check: 0.4.0 2708 | 2709 | lilconfig@3.1.3: {} 2710 | 2711 | lines-and-columns@1.2.4: {} 2712 | 2713 | load-tsconfig@0.2.5: {} 2714 | 2715 | locate-path@5.0.0: 2716 | dependencies: 2717 | p-locate: 4.1.0 2718 | 2719 | locate-path@6.0.0: 2720 | dependencies: 2721 | p-locate: 5.0.0 2722 | 2723 | lodash.merge@4.6.2: {} 2724 | 2725 | lodash.sortby@4.7.0: {} 2726 | 2727 | lru-cache@10.4.3: {} 2728 | 2729 | magic-string@0.30.21: 2730 | dependencies: 2731 | '@jridgewell/sourcemap-codec': 1.5.5 2732 | 2733 | merge2@1.4.1: {} 2734 | 2735 | micromatch@4.0.8: 2736 | dependencies: 2737 | braces: 3.0.3 2738 | picomatch: 2.3.1 2739 | 2740 | min-indent@1.0.1: {} 2741 | 2742 | minimatch@3.1.2: 2743 | dependencies: 2744 | brace-expansion: 1.1.11 2745 | 2746 | minimatch@9.0.5: 2747 | dependencies: 2748 | brace-expansion: 2.0.1 2749 | 2750 | minipass@7.1.2: {} 2751 | 2752 | mrmime@2.0.1: {} 2753 | 2754 | ms@2.1.3: {} 2755 | 2756 | mz@2.7.0: 2757 | dependencies: 2758 | any-promise: 1.3.0 2759 | object-assign: 4.1.1 2760 | thenify-all: 1.6.0 2761 | 2762 | nanoid@3.3.11: {} 2763 | 2764 | natural-compare@1.4.0: {} 2765 | 2766 | node-releases@2.0.19: {} 2767 | 2768 | normalize-package-data@2.5.0: 2769 | dependencies: 2770 | hosted-git-info: 2.8.9 2771 | resolve: 1.22.10 2772 | semver: 5.7.2 2773 | validate-npm-package-license: 3.0.4 2774 | 2775 | object-assign@4.1.1: {} 2776 | 2777 | obug@2.1.1: {} 2778 | 2779 | optionator@0.9.4: 2780 | dependencies: 2781 | deep-is: 0.1.4 2782 | fast-levenshtein: 2.0.6 2783 | levn: 0.4.1 2784 | prelude-ls: 1.2.1 2785 | type-check: 0.4.0 2786 | word-wrap: 1.2.5 2787 | 2788 | p-limit@2.3.0: 2789 | dependencies: 2790 | p-try: 2.2.0 2791 | 2792 | p-limit@3.1.0: 2793 | dependencies: 2794 | yocto-queue: 0.1.0 2795 | 2796 | p-locate@4.1.0: 2797 | dependencies: 2798 | p-limit: 2.3.0 2799 | 2800 | p-locate@5.0.0: 2801 | dependencies: 2802 | p-limit: 3.1.0 2803 | 2804 | p-try@2.2.0: {} 2805 | 2806 | package-json-from-dist@1.0.1: {} 2807 | 2808 | parent-module@1.0.1: 2809 | dependencies: 2810 | callsites: 3.1.0 2811 | 2812 | parse-json@5.2.0: 2813 | dependencies: 2814 | '@babel/code-frame': 7.26.2 2815 | error-ex: 1.3.2 2816 | json-parse-even-better-errors: 2.3.1 2817 | lines-and-columns: 1.2.4 2818 | 2819 | path-exists@4.0.0: {} 2820 | 2821 | path-key@3.1.1: {} 2822 | 2823 | path-parse@1.0.7: {} 2824 | 2825 | path-scurry@1.11.1: 2826 | dependencies: 2827 | lru-cache: 10.4.3 2828 | minipass: 7.1.2 2829 | 2830 | path-type@4.0.0: {} 2831 | 2832 | pathe@2.0.3: {} 2833 | 2834 | picocolors@1.1.1: {} 2835 | 2836 | picomatch@2.3.1: {} 2837 | 2838 | picomatch@4.0.2: {} 2839 | 2840 | picomatch@4.0.3: {} 2841 | 2842 | pirates@4.0.7: {} 2843 | 2844 | pixelmatch@7.1.0: 2845 | dependencies: 2846 | pngjs: 7.0.0 2847 | 2848 | playwright-core@1.52.0: {} 2849 | 2850 | playwright@1.52.0: 2851 | dependencies: 2852 | playwright-core: 1.52.0 2853 | optionalDependencies: 2854 | fsevents: 2.3.2 2855 | 2856 | pluralize@8.0.0: {} 2857 | 2858 | pngjs@7.0.0: {} 2859 | 2860 | postcss-load-config@6.0.1(postcss@8.5.3): 2861 | dependencies: 2862 | lilconfig: 3.1.3 2863 | optionalDependencies: 2864 | postcss: 8.5.3 2865 | 2866 | postcss@8.5.3: 2867 | dependencies: 2868 | nanoid: 3.3.11 2869 | picocolors: 1.1.1 2870 | source-map-js: 1.2.1 2871 | 2872 | prelude-ls@1.2.1: {} 2873 | 2874 | prettier-linter-helpers@1.0.0: 2875 | dependencies: 2876 | fast-diff: 1.3.0 2877 | 2878 | prettier@3.5.3: {} 2879 | 2880 | punycode@2.3.1: {} 2881 | 2882 | queue-microtask@1.2.3: {} 2883 | 2884 | read-pkg-up@7.0.1: 2885 | dependencies: 2886 | find-up: 4.1.0 2887 | read-pkg: 5.2.0 2888 | type-fest: 0.8.1 2889 | 2890 | read-pkg@5.2.0: 2891 | dependencies: 2892 | '@types/normalize-package-data': 2.4.4 2893 | normalize-package-data: 2.5.0 2894 | parse-json: 5.2.0 2895 | type-fest: 0.6.0 2896 | 2897 | readdirp@4.1.2: {} 2898 | 2899 | regexp-tree@0.1.27: {} 2900 | 2901 | regjsparser@0.10.0: 2902 | dependencies: 2903 | jsesc: 0.5.0 2904 | 2905 | resolve-from@4.0.0: {} 2906 | 2907 | resolve-from@5.0.0: {} 2908 | 2909 | resolve-pkg-maps@1.0.0: {} 2910 | 2911 | resolve@1.22.10: 2912 | dependencies: 2913 | is-core-module: 2.16.1 2914 | path-parse: 1.0.7 2915 | supports-preserve-symlinks-flag: 1.0.0 2916 | 2917 | reusify@1.1.0: {} 2918 | 2919 | rollup@4.39.0: 2920 | dependencies: 2921 | '@types/estree': 1.0.7 2922 | optionalDependencies: 2923 | '@rollup/rollup-android-arm-eabi': 4.39.0 2924 | '@rollup/rollup-android-arm64': 4.39.0 2925 | '@rollup/rollup-darwin-arm64': 4.39.0 2926 | '@rollup/rollup-darwin-x64': 4.39.0 2927 | '@rollup/rollup-freebsd-arm64': 4.39.0 2928 | '@rollup/rollup-freebsd-x64': 4.39.0 2929 | '@rollup/rollup-linux-arm-gnueabihf': 4.39.0 2930 | '@rollup/rollup-linux-arm-musleabihf': 4.39.0 2931 | '@rollup/rollup-linux-arm64-gnu': 4.39.0 2932 | '@rollup/rollup-linux-arm64-musl': 4.39.0 2933 | '@rollup/rollup-linux-loongarch64-gnu': 4.39.0 2934 | '@rollup/rollup-linux-powerpc64le-gnu': 4.39.0 2935 | '@rollup/rollup-linux-riscv64-gnu': 4.39.0 2936 | '@rollup/rollup-linux-riscv64-musl': 4.39.0 2937 | '@rollup/rollup-linux-s390x-gnu': 4.39.0 2938 | '@rollup/rollup-linux-x64-gnu': 4.39.0 2939 | '@rollup/rollup-linux-x64-musl': 4.39.0 2940 | '@rollup/rollup-win32-arm64-msvc': 4.39.0 2941 | '@rollup/rollup-win32-ia32-msvc': 4.39.0 2942 | '@rollup/rollup-win32-x64-msvc': 4.39.0 2943 | fsevents: 2.3.3 2944 | 2945 | run-parallel@1.2.0: 2946 | dependencies: 2947 | queue-microtask: 1.2.3 2948 | 2949 | semver@5.7.2: {} 2950 | 2951 | semver@7.7.1: {} 2952 | 2953 | shebang-command@2.0.0: 2954 | dependencies: 2955 | shebang-regex: 3.0.0 2956 | 2957 | shebang-regex@3.0.0: {} 2958 | 2959 | siginfo@2.0.0: {} 2960 | 2961 | signal-exit@4.1.0: {} 2962 | 2963 | sirv@3.0.2: 2964 | dependencies: 2965 | '@polka/url': 1.0.0-next.29 2966 | mrmime: 2.0.1 2967 | totalist: 3.0.1 2968 | 2969 | slash@3.0.0: {} 2970 | 2971 | source-map-js@1.2.1: {} 2972 | 2973 | source-map@0.8.0-beta.0: 2974 | dependencies: 2975 | whatwg-url: 7.1.0 2976 | 2977 | spdx-correct@3.2.0: 2978 | dependencies: 2979 | spdx-expression-parse: 3.0.1 2980 | spdx-license-ids: 3.0.21 2981 | 2982 | spdx-exceptions@2.5.0: {} 2983 | 2984 | spdx-expression-parse@3.0.1: 2985 | dependencies: 2986 | spdx-exceptions: 2.5.0 2987 | spdx-license-ids: 3.0.21 2988 | 2989 | spdx-license-ids@3.0.21: {} 2990 | 2991 | stable-hash@0.0.4: {} 2992 | 2993 | stackback@0.0.2: {} 2994 | 2995 | std-env@3.10.0: {} 2996 | 2997 | string-width@4.2.3: 2998 | dependencies: 2999 | emoji-regex: 8.0.0 3000 | is-fullwidth-code-point: 3.0.0 3001 | strip-ansi: 6.0.1 3002 | 3003 | string-width@5.1.2: 3004 | dependencies: 3005 | eastasianwidth: 0.2.0 3006 | emoji-regex: 9.2.2 3007 | strip-ansi: 7.1.0 3008 | 3009 | strip-ansi@6.0.1: 3010 | dependencies: 3011 | ansi-regex: 5.0.1 3012 | 3013 | strip-ansi@7.1.0: 3014 | dependencies: 3015 | ansi-regex: 6.1.0 3016 | 3017 | strip-indent@3.0.0: 3018 | dependencies: 3019 | min-indent: 1.0.1 3020 | 3021 | strip-json-comments@3.1.1: {} 3022 | 3023 | sucrase@3.35.0: 3024 | dependencies: 3025 | '@jridgewell/gen-mapping': 0.3.8 3026 | commander: 4.1.1 3027 | glob: 10.4.5 3028 | lines-and-columns: 1.2.4 3029 | mz: 2.7.0 3030 | pirates: 4.0.7 3031 | ts-interface-checker: 0.1.13 3032 | 3033 | supports-color@7.2.0: 3034 | dependencies: 3035 | has-flag: 4.0.0 3036 | 3037 | supports-preserve-symlinks-flag@1.0.0: {} 3038 | 3039 | synckit@0.10.3: 3040 | dependencies: 3041 | '@pkgr/core': 0.2.2 3042 | tslib: 2.8.1 3043 | 3044 | synckit@0.11.3: 3045 | dependencies: 3046 | '@pkgr/core': 0.2.2 3047 | tslib: 2.8.1 3048 | 3049 | thenify-all@1.6.0: 3050 | dependencies: 3051 | thenify: 3.3.1 3052 | 3053 | thenify@3.3.1: 3054 | dependencies: 3055 | any-promise: 1.3.0 3056 | 3057 | tinybench@2.9.0: {} 3058 | 3059 | tinyexec@0.3.2: {} 3060 | 3061 | tinyglobby@0.2.12: 3062 | dependencies: 3063 | fdir: 6.4.3(picomatch@4.0.2) 3064 | picomatch: 4.0.2 3065 | 3066 | tinyglobby@0.2.15: 3067 | dependencies: 3068 | fdir: 6.5.0(picomatch@4.0.3) 3069 | picomatch: 4.0.3 3070 | 3071 | tinyrainbow@3.0.3: {} 3072 | 3073 | to-regex-range@5.0.1: 3074 | dependencies: 3075 | is-number: 7.0.0 3076 | 3077 | totalist@3.0.1: {} 3078 | 3079 | tr46@1.0.1: 3080 | dependencies: 3081 | punycode: 2.3.1 3082 | 3083 | tree-kill@1.2.2: {} 3084 | 3085 | ts-api-utils@1.4.3(typescript@5.8.3): 3086 | dependencies: 3087 | typescript: 5.8.3 3088 | 3089 | ts-api-utils@2.1.0(typescript@5.8.3): 3090 | dependencies: 3091 | typescript: 5.8.3 3092 | 3093 | ts-interface-checker@0.1.13: {} 3094 | 3095 | tslib@2.8.1: {} 3096 | 3097 | tsup@8.4.0(postcss@8.5.3)(typescript@5.8.3): 3098 | dependencies: 3099 | bundle-require: 5.1.0(esbuild@0.25.2) 3100 | cac: 6.7.14 3101 | chokidar: 4.0.3 3102 | consola: 3.4.2 3103 | debug: 4.4.0 3104 | esbuild: 0.25.2 3105 | joycon: 3.1.1 3106 | picocolors: 1.1.1 3107 | postcss-load-config: 6.0.1(postcss@8.5.3) 3108 | resolve-from: 5.0.0 3109 | rollup: 4.39.0 3110 | source-map: 0.8.0-beta.0 3111 | sucrase: 3.35.0 3112 | tinyexec: 0.3.2 3113 | tinyglobby: 0.2.12 3114 | tree-kill: 1.2.2 3115 | optionalDependencies: 3116 | postcss: 8.5.3 3117 | typescript: 5.8.3 3118 | transitivePeerDependencies: 3119 | - jiti 3120 | - supports-color 3121 | - tsx 3122 | - yaml 3123 | 3124 | type-check@0.4.0: 3125 | dependencies: 3126 | prelude-ls: 1.2.1 3127 | 3128 | type-fest@0.6.0: {} 3129 | 3130 | type-fest@0.8.1: {} 3131 | 3132 | typescript-eslint@8.29.1(eslint@9.24.0)(typescript@5.8.3): 3133 | dependencies: 3134 | '@typescript-eslint/eslint-plugin': 8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.24.0)(typescript@5.8.3))(eslint@9.24.0)(typescript@5.8.3) 3135 | '@typescript-eslint/parser': 8.29.1(eslint@9.24.0)(typescript@5.8.3) 3136 | '@typescript-eslint/utils': 8.29.1(eslint@9.24.0)(typescript@5.8.3) 3137 | eslint: 9.24.0 3138 | typescript: 5.8.3 3139 | transitivePeerDependencies: 3140 | - supports-color 3141 | 3142 | typescript@5.8.3: {} 3143 | 3144 | undici-types@6.21.0: {} 3145 | 3146 | update-browserslist-db@1.1.3(browserslist@4.24.4): 3147 | dependencies: 3148 | browserslist: 4.24.4 3149 | escalade: 3.2.0 3150 | picocolors: 1.1.1 3151 | 3152 | uri-js@4.4.1: 3153 | dependencies: 3154 | punycode: 2.3.1 3155 | 3156 | validate-npm-package-license@3.0.4: 3157 | dependencies: 3158 | spdx-correct: 3.2.0 3159 | spdx-expression-parse: 3.0.1 3160 | 3161 | vite@6.2.6(@types/node@22.14.0): 3162 | dependencies: 3163 | esbuild: 0.25.2 3164 | postcss: 8.5.3 3165 | rollup: 4.39.0 3166 | optionalDependencies: 3167 | '@types/node': 22.14.0 3168 | fsevents: 2.3.3 3169 | 3170 | vitest@4.0.14(@types/node@22.14.0)(@vitest/browser-playwright@4.0.14): 3171 | dependencies: 3172 | '@vitest/expect': 4.0.14 3173 | '@vitest/mocker': 4.0.14(vite@6.2.6(@types/node@22.14.0)) 3174 | '@vitest/pretty-format': 4.0.14 3175 | '@vitest/runner': 4.0.14 3176 | '@vitest/snapshot': 4.0.14 3177 | '@vitest/spy': 4.0.14 3178 | '@vitest/utils': 4.0.14 3179 | es-module-lexer: 1.7.0 3180 | expect-type: 1.2.2 3181 | magic-string: 0.30.21 3182 | obug: 2.1.1 3183 | pathe: 2.0.3 3184 | picomatch: 4.0.3 3185 | std-env: 3.10.0 3186 | tinybench: 2.9.0 3187 | tinyexec: 0.3.2 3188 | tinyglobby: 0.2.15 3189 | tinyrainbow: 3.0.3 3190 | vite: 6.2.6(@types/node@22.14.0) 3191 | why-is-node-running: 2.3.0 3192 | optionalDependencies: 3193 | '@types/node': 22.14.0 3194 | '@vitest/browser-playwright': 4.0.14(playwright@1.52.0)(vite@6.2.6(@types/node@22.14.0))(vitest@4.0.14) 3195 | transitivePeerDependencies: 3196 | - jiti 3197 | - less 3198 | - lightningcss 3199 | - msw 3200 | - sass 3201 | - sass-embedded 3202 | - stylus 3203 | - sugarss 3204 | - terser 3205 | - tsx 3206 | - yaml 3207 | 3208 | webidl-conversions@4.0.2: {} 3209 | 3210 | whatwg-url@7.1.0: 3211 | dependencies: 3212 | lodash.sortby: 4.7.0 3213 | tr46: 1.0.1 3214 | webidl-conversions: 4.0.2 3215 | 3216 | which@2.0.2: 3217 | dependencies: 3218 | isexe: 2.0.0 3219 | 3220 | why-is-node-running@2.3.0: 3221 | dependencies: 3222 | siginfo: 2.0.0 3223 | stackback: 0.0.2 3224 | 3225 | word-wrap@1.2.5: {} 3226 | 3227 | wrap-ansi@7.0.0: 3228 | dependencies: 3229 | ansi-styles: 4.3.0 3230 | string-width: 4.2.3 3231 | strip-ansi: 6.0.1 3232 | 3233 | wrap-ansi@8.1.0: 3234 | dependencies: 3235 | ansi-styles: 6.2.1 3236 | string-width: 5.1.2 3237 | strip-ansi: 7.1.0 3238 | 3239 | ws@8.18.3: {} 3240 | 3241 | yocto-queue@0.1.0: {} 3242 | --------------------------------------------------------------------------------