From 5e3b8dbd7e68f3238c73750b5b2edaac31ceda86 Mon Sep 17 00:00:00 2001 From: Aneurin Barker Snook Date: Thu, 3 Sep 2026 18:12:31 +0100 Subject: [PATCH] Add stage 2: Vue/TypeScript PWA shell with auth-gated routing Backend: new migration adds users.email_verified_at (null = unverified); registration leaves it null, and the register/login/me payloads now expose email_verified and email_verified_at. Frontend (web/): Vite + Vue 3 + TypeScript PWA (vite-plugin-pwa). Pinia auth store keeps the token in localStorage and validates it via GET /api/me on load. vue-router guards redirect unauthenticated visitors to /login, preserving the intended path; /register creates an account and signs in immediately (with the email unverified). Placeholder home page, minimal styling, generated icons. Dev server proxies /api to the API. docker-compose.yml gains an optional "web" service (profile: frontend) so `docker compose --profile frontend up -d` runs the dev server alongside the API; `docker compose up -d` still starts the API alone. Co-Authored-By: Claude Sonnet 5 --- README.md | 53 +- docker-compose.yml | 20 + .../002_add_email_verification_to_users.sql | 3 + src/Http/Controllers/AuthController.php | 10 +- src/Repository/UserRepository.php | 2 +- tests/AuthTest.php | 2 + web/.dockerignore | 7 + web/.env.example | 10 + web/.gitignore | 27 + web/.vscode/extensions.json | 3 + web/Dockerfile | 15 + web/README.md | 55 + web/index.html | 16 + web/package-lock.json | 6470 +++++++++++++++++ web/package.json | 25 + web/public/apple-touch-icon.png | Bin 0 -> 13398 bytes web/public/favicon.svg | 6 + web/public/pwa-192x192.png | Bin 0 -> 14239 bytes web/public/pwa-512x512.png | Bin 0 -> 21979 bytes web/public/pwa-maskable-512x512.png | Bin 0 -> 37690 bytes web/src/App.vue | 30 + web/src/lib/api.ts | 65 + web/src/main.ts | 17 + web/src/router/index.ts | 44 + web/src/stores/auth.ts | 92 + web/src/style.css | 188 + web/src/types.ts | 21 + web/src/views/HomeView.vue | 35 + web/src/views/LoginView.vue | 65 + web/src/views/RegisterView.vue | 75 + web/src/vite-env.d.ts | 11 + web/tsconfig.app.json | 15 + web/tsconfig.json | 7 + web/tsconfig.node.json | 23 + web/vite.config.ts | 52 + 35 files changed, 7454 insertions(+), 10 deletions(-) create mode 100644 migrations/002_add_email_verification_to_users.sql create mode 100644 web/.dockerignore create mode 100644 web/.env.example create mode 100644 web/.gitignore create mode 100644 web/.vscode/extensions.json create mode 100644 web/Dockerfile create mode 100644 web/README.md create mode 100644 web/index.html create mode 100644 web/package-lock.json create mode 100644 web/package.json create mode 100644 web/public/apple-touch-icon.png create mode 100644 web/public/favicon.svg create mode 100644 web/public/pwa-192x192.png create mode 100644 web/public/pwa-512x512.png create mode 100644 web/public/pwa-maskable-512x512.png create mode 100644 web/src/App.vue create mode 100644 web/src/lib/api.ts create mode 100644 web/src/main.ts create mode 100644 web/src/router/index.ts create mode 100644 web/src/stores/auth.ts create mode 100644 web/src/style.css create mode 100644 web/src/types.ts create mode 100644 web/src/views/HomeView.vue create mode 100644 web/src/views/LoginView.vue create mode 100644 web/src/views/RegisterView.vue create mode 100644 web/src/vite-env.d.ts create mode 100644 web/tsconfig.app.json create mode 100644 web/tsconfig.json create mode 100644 web/tsconfig.node.json create mode 100644 web/vite.config.ts diff --git a/README.md b/README.md index 353a498..96c680a 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,19 @@ # PHP Todo List A small todo-list application: a REST API written in PHP (Slim 4) backed by an -SQLite file, plus a single-page frontend (added in a later stage). +SQLite file, plus a Vue 3 + TypeScript PWA frontend in [web/](web/). ## Status | Stage | Scope | State | |-------|-------|-------| | 1 | Auth API — register, login, `GET /me` | ✅ done | -| 2 | Todo CRUD API | planned | -| 3 | Single-page frontend | planned | +| 2 | Frontend shell — Vite PWA, auth-gated routing, register/login pages | ✅ done | +| 3 | Todo CRUD (API + UI) | planned | + +Registration signs the user in immediately, with the account's email marked +unverified (`user.email_verified` is `false` until a future stage adds a +verification endpoint). ## Run with Docker @@ -62,6 +66,26 @@ composer serve # http://localhost:8080 (php -S localhost:8080 -t pub Any web server can serve the app as long as the document root is `public/` and unknown paths fall through to `public/index.php`. +## Frontend + +The Vue/TypeScript PWA lives in [web/](web/) and talks to this API. With the API +running (`docker compose up -d`): + +```bash +cd web +npm install +npm run dev # http://localhost:5173, proxies /api to localhost:8080 +``` + +Or run it inside Compose alongside the API: + +```bash +docker compose --profile frontend up -d +``` + +Unauthenticated visitors are redirected to `/login`; `/register` creates an +account and signs in immediately. See [web/README.md](web/README.md). + ## Configuration All settings are optional environment variables (read from `.env` or the real @@ -97,12 +121,20 @@ Request: ```json { - "user": { "id": 1, "email": "ada@example.com", "created_at": "2026-09-03T12:00:00Z" }, + "user": { + "id": 1, + "email": "ada@example.com", + "email_verified": false, + "email_verified_at": null, + "created_at": "2026-09-03T12:00:00Z" + }, "token": "", "expires_at": "2026-09-04T12:00:00+00:00" } ``` +New accounts are created with an unverified email (`email_verified: false`). + Errors: `422` invalid input, `409` email already registered. Validation: `email` must be a valid address (≤ 255 chars); `password` must be @@ -126,7 +158,15 @@ Requires `Authorization: Bearer `. `200 OK`: ```json -{ "user": { "id": 1, "email": "ada@example.com", "created_at": "2026-09-03T12:00:00Z" } } +{ + "user": { + "id": 1, + "email": "ada@example.com", + "email_verified": false, + "email_verified_at": null, + "created_at": "2026-09-03T12:00:00Z" + } +} ``` `401` if the header is missing, malformed, or the token is invalid/expired. @@ -178,8 +218,9 @@ src/Http/Controllers/ Request handlers src/Repository/ Database access migrations/*.sql Schema, applied by bin/migrate.php Dockerfile PHP 8.3 + Apache image -docker-compose.yml One-command local stack +docker-compose.yml One-command local stack (API; web via --profile frontend) docker/ Apache vhost + container entrypoint +web/ Vue 3 + TypeScript + Vite PWA frontend ``` ## Provenance diff --git a/docker-compose.yml b/docker-compose.yml index b7ef2d3..a366697 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,5 +19,25 @@ services: - storage:/var/www/storage restart: unless-stopped + # Optional Vite dev server. Start it with: docker compose --profile frontend up -d + # Without the profile, `docker compose up -d` runs the API alone. + web: + build: ./web + image: php-todo-web + profiles: ["frontend"] + ports: + - "5173:5173" + environment: + # /api is proxied to the API container on the compose network. + VITE_PROXY_TARGET: "http://app:80" + volumes: + - ./web:/app + # Keep the image's platform-specific node_modules; don't let the host's shadow them. + - web_node_modules:/app/node_modules + depends_on: + - app + restart: unless-stopped + volumes: storage: + web_node_modules: diff --git a/migrations/002_add_email_verification_to_users.sql b/migrations/002_add_email_verification_to_users.sql new file mode 100644 index 0000000..0c2aed3 --- /dev/null +++ b/migrations/002_add_email_verification_to_users.sql @@ -0,0 +1,3 @@ +-- Null means the email address has not been verified yet. New accounts start +-- unverified; a later stage will add the endpoint that sets this timestamp. +ALTER TABLE users ADD COLUMN email_verified_at TEXT NULL; diff --git a/src/Http/Controllers/AuthController.php b/src/Http/Controllers/AuthController.php index 04d92ca..076dbdc 100644 --- a/src/Http/Controllers/AuthController.php +++ b/src/Http/Controllers/AuthController.php @@ -64,7 +64,7 @@ final class AuthController extends Controller */ public function me(Request $request, Response $response): Response { - /** @var array{id: int, email: string, created_at: string} $user */ + /** @var array{id: int, email: string, email_verified_at: string|null, created_at: string} $user */ $user = $request->getAttribute('user'); return $this->json($response, ['user' => $this->presentUser($user)]); @@ -110,7 +110,7 @@ final class AuthController extends Controller /** * Build the standard authentication payload returned by register and login. * - * @param array{id: int, email: string, created_at: string} $user + * @param array{id: int, email: string, email_verified_at: string|null, created_at: string} $user * @return array */ private function session(array $user): array @@ -125,14 +125,18 @@ final class AuthController extends Controller } /** - * @param array{id: int, email: string, created_at?: string} $user + * @param array{id: int, email: string, email_verified_at?: string|null, created_at?: string} $user * @return array */ private function presentUser(array $user): array { + $verifiedAt = $user['email_verified_at'] ?? null; + return [ 'id' => (int) $user['id'], 'email' => $user['email'], + 'email_verified' => $verifiedAt !== null, + 'email_verified_at' => $verifiedAt, 'created_at' => $user['created_at'] ?? null, ]; } diff --git a/src/Repository/UserRepository.php b/src/Repository/UserRepository.php index 0cf6cac..0aafafa 100644 --- a/src/Repository/UserRepository.php +++ b/src/Repository/UserRepository.php @@ -9,7 +9,7 @@ use PDO; /** * Data access for the `users` table. Rows are returned as associative arrays. * - * @phpstan-type UserRow array{id: int, email: string, password_hash: string, created_at: string, updated_at: string} + * @phpstan-type UserRow array{id: int, email: string, password_hash: string, email_verified_at: string|null, created_at: string, updated_at: string} */ final class UserRepository { diff --git a/tests/AuthTest.php b/tests/AuthTest.php index c49709a..ebcdf2e 100644 --- a/tests/AuthTest.php +++ b/tests/AuthTest.php @@ -47,6 +47,8 @@ final class AuthTest extends TestCase $body = $this->decode($response); self::assertSame('ada@example.com', $body['user']['email']); + self::assertFalse($body['user']['email_verified']); + self::assertNull($body['user']['email_verified_at']); self::assertArrayNotHasKey('password_hash', $body['user']); self::assertNotEmpty($body['token']); } diff --git a/web/.dockerignore b/web/.dockerignore new file mode 100644 index 0000000..cc7afb1 --- /dev/null +++ b/web/.dockerignore @@ -0,0 +1,7 @@ +node_modules +dist +dist-ssr +.env +.env.local +*.local +.vscode diff --git a/web/.env.example b/web/.env.example new file mode 100644 index 0000000..83184a3 --- /dev/null +++ b/web/.env.example @@ -0,0 +1,10 @@ +# Copy to .env.local to override. Both values have working defaults. + +# Base URL the SPA uses for REST API calls. +# Default: /api (relative — served through the dev-server proxy below) +VITE_API_BASE_URL=/api + +# Where the Vite dev server forwards /api requests. +# Default: http://localhost:8080 (the Dockerised API published on the host) +# The compose "frontend" profile sets this to http://app:80 instead. +VITE_PROXY_TARGET=http://localhost:8080 diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 0000000..376c8af --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,27 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# vite-plugin-pwa dev output +dev-dist diff --git a/web/.vscode/extensions.json b/web/.vscode/extensions.json new file mode 100644 index 0000000..a7cea0b --- /dev/null +++ b/web/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar"] +} diff --git a/web/Dockerfile b/web/Dockerfile new file mode 100644 index 0000000..750b234 --- /dev/null +++ b/web/Dockerfile @@ -0,0 +1,15 @@ +# Development image: runs the Vite dev server. A production build image is a +# later concern. +FROM node:24-alpine + +WORKDIR /app + +# Install dependencies against this image's platform (musl), kept in a volume +# by docker-compose so the host's node_modules never shadow them. +COPY package.json package-lock.json ./ +RUN npm ci + +COPY . . + +EXPOSE 5173 +CMD ["npm", "run", "dev"] diff --git a/web/README.md b/web/README.md new file mode 100644 index 0000000..4f22be3 --- /dev/null +++ b/web/README.md @@ -0,0 +1,55 @@ +# Todo List — web + +Vue 3 + TypeScript + Vite PWA. Talks to the REST API in the parent directory. + +## Develop on the host + +```bash +npm install +npm run dev # http://localhost:5173 +``` + +The dev server proxies `/api` to `http://localhost:8080` (the Dockerised API — +run `docker compose up -d` in the parent directory first). Override the target +with `VITE_PROXY_TARGET`, or point the app at a different API entirely with +`VITE_API_BASE_URL` (see [.env.example](.env.example)). + +## Develop in Docker + +From the parent directory: + +```bash +docker compose --profile frontend up -d +``` + +Runs this dev server alongside the API. `/api` is proxied to the `app` container. +After changing `package.json`, rebuild: `docker compose build web`. + +## Build + +```bash +npm run build # type-checks, then emits dist/ +npm run preview +``` + +## Layout + +``` +src/main.ts App bootstrap; resolves the stored session before mount +src/router/index.ts Routes + guard (redirects to /login when unauthenticated) +src/stores/auth.ts Pinia store: token in localStorage, register/login/fetchMe +src/lib/api.ts fetch wrapper, bearer token, typed ApiError +src/views/ HomeView (placeholder), LoginView, RegisterView +``` + +## Auth flow + +- The token from `POST /api/auth/register` or `/login` is kept in `localStorage` + and sent as `Authorization: Bearer …`. +- On load, `fetchMe()` validates the stored token via `GET /api/me`; a failure + clears it. +- Routes with `meta.requiresAuth` redirect to `/login` (preserving the intended + path) when there is no authenticated user. +- Registration signs the user in immediately; the new account's email is + unverified (`user.email_verified === false`), surfaced in the header and on the + home page. diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..2706ba9 --- /dev/null +++ b/web/index.html @@ -0,0 +1,16 @@ + + + + + + + + + + Todo List + + +
+ + + diff --git a/web/package-lock.json b/web/package-lock.json new file mode 100644 index 0000000..f9f679b --- /dev/null +++ b/web/package-lock.json @@ -0,0 +1,6470 @@ +{ + "name": "web", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "web", + "version": "0.0.0", + "dependencies": { + "pinia": "^4.0.3", + "vue": "^3.5.41", + "vue-router": "^4.6.4" + }, + "devDependencies": { + "@types/node": "^24.13.3", + "@vitejs/plugin-vue": "^6.0.8", + "@vue/tsconfig": "^0.9.1", + "typescript": "~6.0.2", + "vite": "^8.2.2", + "vite-plugin-pwa": "^1.3.0", + "vue-tsc": "^3.3.11" + } + }, + "node_modules/@apideck/better-ajv-errors": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.7.tgz", + "integrity": "sha512-TajUJwGWbDwkCx/CZi7tRE8PVB7simCvKJfHUsSdvps+aTM/PDPP4gkLmKnc+x3CE//y9i/nj74GqdL/hwk7Iw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonpointer": "^5.0.1", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz", + "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz", + "integrity": "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/traverse": "^7.29.7", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz", + "integrity": "sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "regexpu-core": "^6.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", + "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.11" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz", + "integrity": "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz", + "integrity": "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz", + "integrity": "sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-wrap-function": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz", + "integrity": "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz", + "integrity": "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz", + "integrity": "sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.29.7.tgz", + "integrity": "sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.29.7.tgz", + "integrity": "sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.29.7.tgz", + "integrity": "sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.7.tgz", + "integrity": "sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.29.7.tgz", + "integrity": "sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.29.7.tgz", + "integrity": "sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.29.7.tgz", + "integrity": "sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz", + "integrity": "sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.7.tgz", + "integrity": "sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.29.7.tgz", + "integrity": "sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.29.7.tgz", + "integrity": "sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.7.tgz", + "integrity": "sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.29.7.tgz", + "integrity": "sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.29.7.tgz", + "integrity": "sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.29.7.tgz", + "integrity": "sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz", + "integrity": "sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/template": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz", + "integrity": "sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.29.7.tgz", + "integrity": "sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.29.7.tgz", + "integrity": "sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.29.7.tgz", + "integrity": "sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.29.7.tgz", + "integrity": "sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.29.7.tgz", + "integrity": "sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.29.7.tgz", + "integrity": "sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz", + "integrity": "sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz", + "integrity": "sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.29.7.tgz", + "integrity": "sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz", + "integrity": "sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.29.7.tgz", + "integrity": "sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.29.7.tgz", + "integrity": "sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.29.7.tgz", + "integrity": "sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.29.7.tgz", + "integrity": "sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.8.tgz", + "integrity": "sha512-6iSnEK0zlkLKU4heofK/AdmRD4e2SHVpJMtrwnTCzhnaM98ria4rTrOXBBi45BTTYnJtO8txnPsX4fChYXkmeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.29.7.tgz", + "integrity": "sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.29.7.tgz", + "integrity": "sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.29.7.tgz", + "integrity": "sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.29.7.tgz", + "integrity": "sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.29.7.tgz", + "integrity": "sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.29.7.tgz", + "integrity": "sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.29.7.tgz", + "integrity": "sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.29.7.tgz", + "integrity": "sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz", + "integrity": "sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.29.7.tgz", + "integrity": "sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.29.7.tgz", + "integrity": "sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.29.7.tgz", + "integrity": "sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.8.tgz", + "integrity": "sha512-0UpIXPtdDtMXfnV2OJAVMLpj3H/92vmkA6lpSRakmycJvj3VUy6Xs1dM8tXRugupykr5WB+LpiVl0J8LMVg2mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.29.7.tgz", + "integrity": "sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.29.7.tgz", + "integrity": "sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.29.7.tgz", + "integrity": "sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.8.tgz", + "integrity": "sha512-4S9ksMGVWUshvgK0mKfvZky7leuG5/uoFVwMpAomJ8bMoDJiNHRVmc1EglwW/CmGVSqqWpEbXm9FmbRit22qoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz", + "integrity": "sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.29.7.tgz", + "integrity": "sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.29.7.tgz", + "integrity": "sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.29.7.tgz", + "integrity": "sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.29.7.tgz", + "integrity": "sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.29.7.tgz", + "integrity": "sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.29.7.tgz", + "integrity": "sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.7.tgz", + "integrity": "sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.29.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.29.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.29.7", + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.29.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.29.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.29.7", + "@babel/plugin-syntax-import-attributes": "^7.29.7", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.29.7", + "@babel/plugin-transform-async-generator-functions": "^7.29.7", + "@babel/plugin-transform-async-to-generator": "^7.29.7", + "@babel/plugin-transform-block-scoped-functions": "^7.29.7", + "@babel/plugin-transform-block-scoping": "^7.29.7", + "@babel/plugin-transform-class-properties": "^7.29.7", + "@babel/plugin-transform-class-static-block": "^7.29.7", + "@babel/plugin-transform-classes": "^7.29.7", + "@babel/plugin-transform-computed-properties": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-dotall-regex": "^7.29.7", + "@babel/plugin-transform-duplicate-keys": "^7.29.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-dynamic-import": "^7.29.7", + "@babel/plugin-transform-explicit-resource-management": "^7.29.7", + "@babel/plugin-transform-exponentiation-operator": "^7.29.7", + "@babel/plugin-transform-export-namespace-from": "^7.29.7", + "@babel/plugin-transform-for-of": "^7.29.7", + "@babel/plugin-transform-function-name": "^7.29.7", + "@babel/plugin-transform-json-strings": "^7.29.7", + "@babel/plugin-transform-literals": "^7.29.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.29.7", + "@babel/plugin-transform-member-expression-literals": "^7.29.7", + "@babel/plugin-transform-modules-amd": "^7.29.7", + "@babel/plugin-transform-modules-commonjs": "^7.29.7", + "@babel/plugin-transform-modules-systemjs": "^7.29.7", + "@babel/plugin-transform-modules-umd": "^7.29.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-new-target": "^7.29.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.29.7", + "@babel/plugin-transform-numeric-separator": "^7.29.7", + "@babel/plugin-transform-object-rest-spread": "^7.29.7", + "@babel/plugin-transform-object-super": "^7.29.7", + "@babel/plugin-transform-optional-catch-binding": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/plugin-transform-private-methods": "^7.29.7", + "@babel/plugin-transform-private-property-in-object": "^7.29.7", + "@babel/plugin-transform-property-literals": "^7.29.7", + "@babel/plugin-transform-regenerator": "^7.29.7", + "@babel/plugin-transform-regexp-modifiers": "^7.29.7", + "@babel/plugin-transform-reserved-words": "^7.29.7", + "@babel/plugin-transform-shorthand-properties": "^7.29.7", + "@babel/plugin-transform-spread": "^7.29.7", + "@babel/plugin-transform-sticky-regex": "^7.29.7", + "@babel/plugin-transform-template-literals": "^7.29.7", + "@babel/plugin-transform-typeof-symbol": "^7.29.7", + "@babel/plugin-transform-unicode-escapes": "^7.29.7", + "@babel/plugin-transform-unicode-property-regex": "^7.29.7", + "@babel/plugin-transform-unicode-regex": "^7.29.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.29.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.148.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.148.0.tgz", + "integrity": "sha512-Nm4s/jB+4FpFsPhWGEC4h7rzksesmtnMXomo6rCMcg/b8zLQuOziRgkCS1fxDCXOlJB/6Q8oABOZ/OP6RIPj9A==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/oxc-project" + } + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.7.tgz", + "integrity": "sha512-EypzgnYCwyVY4NDHKzGmNJT5b+XaQEBniHxsMdeIQLB/tcCzZnhqrzHpZFbX9iaxx+5RiB8caATBtfvZP7zVxQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.7.tgz", + "integrity": "sha512-l17HE9EweWaqJZhuUuNBN/FzM62xw+DECVnJyvMsxn8vJFAGLy5QfLDoYAcronkAN8VxKZHezDpulHDPx95vFw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.7.tgz", + "integrity": "sha512-8ED8ELFvHXc6OCETIn4gXObPiaR6bckM/ipXtbzlPVDRMBfEGjCKgO90F9YtfdpDatVx/ZQw7aZ1vUMf/+T3Mw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.7.tgz", + "integrity": "sha512-/WPripjtiAIZ2tWY7ddijORT0Ujg87wxWW/qcoFVCKAWVDPhtY0xr7Dj0M3GyNGz60jGwTElhro/mkF9dT7dDQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.7.tgz", + "integrity": "sha512-14DI4NcqpvbICxSnGLx3PmtDaWqRP/KGSGb6C+JLLVPeZRl6dKdHba3pGsqT3vpdTqhEYIPG0MMQ8c0xYqoJxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.7.tgz", + "integrity": "sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.7.tgz", + "integrity": "sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.7.tgz", + "integrity": "sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.7.tgz", + "integrity": "sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.7.tgz", + "integrity": "sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.7.tgz", + "integrity": "sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.7.tgz", + "integrity": "sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.7.tgz", + "integrity": "sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.7.tgz", + "integrity": "sha512-e3Gu3WxbNk/UqQhxqU7YIYO+9ZBvWNz3U+h/qRFosscMFzdRPbXYSaSWgSnklv2fz1TgzBTcti2z35c/7irsHw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.7.tgz", + "integrity": "sha512-W/jg5qoRSqjsEv0+dZi4e687mcHqmVuU0P4fK6qS/xjetW2Gmc1W8j//z5nAeNcC8Ttm0hV46IjcYeuVwYhuiw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/plugin-babel": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.1.0.tgz", + "integrity": "sha512-dFZNuFD2YRcoomP4oYf+DvQNSUA9ih+A3vUqopQx5EdtPGo3WBnQcI/S8pwpz91UsGfL0HsMSOlaMld8HrbubA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz", + "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.3.tgz", + "integrity": "sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-1.0.0.tgz", + "integrity": "sha512-FnCxhTBx6bMOYQrar6C8h3scPt8/JwIzw3+AJ2K++6guogH5fYaIFia+zZuhqv0eo1RN7W1Pz630SyvLbDjhtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "serialize-javascript": "^7.0.3", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", + "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.1.tgz", + "integrity": "sha512-UZ8sUxPTiHWYX9QNdJedb1kDZSpS1t/VPWBWGSgqHNi9w3Cu6IXvu2mzbhiTiPvtrqgTQJ+zqiAq2iPIPilpaQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.1.tgz", + "integrity": "sha512-cQ4nFQABN5cDvDpbvJ7bMStCpnaVxynZrRMfUJYgxcIk9Sh54FIO1vtfkg0B69REjER77ioZ/ov+eAApx/KmLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.1.tgz", + "integrity": "sha512-FQNqd1lRy/0QhDk3xeRIkSBiCpXCiDnZO3YLVdcDKN1UBiKToNftCzcXYNLshmPDUMlu2TdeS8tGcsU6f3YF1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.1.tgz", + "integrity": "sha512-pvD16V939D3CloK0+qikpGaxiPrDUXTe7Y5cWOMkMSy7m1cawa8EGy/kXYi/G/cKAC4HDAbSnzCIk1WmsoOKXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.1.tgz", + "integrity": "sha512-pcFGeL2345VwdTnJhA6zLbew+YgWB0qBG2+dMtXjCicf6+rm6kO6cOoh5VnTe0ZMrMRgRyuHmCJxZWrIdzYuOw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.1.tgz", + "integrity": "sha512-mRJlqSRulVzcKq/LKA6ICSIc3K/l4fzlVn/gePn2nXIHy8seRi5z/eeRE0d/XMBxcMldiXtQTSpRj0tkkC3g8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.1.tgz", + "integrity": "sha512-YDUNvVM85TI3g/1OpnqKP1h4NeW/j64DfWMf+G3M809xNk1bJSnpFp4sh83NpmVE5DXnkh8ULor4LTVZKoYLHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.1.tgz", + "integrity": "sha512-7Mcn71p9ZuQFAj+h+dhQXy/yeLePRS2yKRnmW1DijA9thKO5qap0GNOIQK4yQ6iP3SU0Mrb/yWo8h8vgRba8lw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.1.tgz", + "integrity": "sha512-4YiLQTX6U4CSl0L9cluep9A9W6UmTfqBDc2/CH6wlu54pl4E7Jn3cOD8oxzvBDEGk/JMKgJ47C8g+radF7mwvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.1.tgz", + "integrity": "sha512-2ra8F7w8OquwZN9z2/fKFnli69wa8PLwaVzRMIPGb13ByMJwC28Fbp8YcVGoUhlYMTt7j5j9bNgpysrN2UM+vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.1.tgz", + "integrity": "sha512-Sy20ncyhjmBP0Ml+UvQbimjlk6VFgjW5uNP+qqwHB00mTE8Bl2C1TuHTlRwK2YoXeZbee5lP2XevBWVkAQAtSQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.1.tgz", + "integrity": "sha512-noITLp8oNjYliPnGWmLyelIHwULGqbHloQHGw1rtxbWhTuWooRpnZarZQJ1y9EUC4szuCusCc+HEpUtxpIwYvA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.1.tgz", + "integrity": "sha512-hlxxXd+F1mWiAcaFR7Sv9ZQT6m6UfI8+Vy/kFJzztq2pDMU/0wZ9sish0iszNZvsQDo8Gc0i5yuFEOz5dDf6fA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.1.tgz", + "integrity": "sha512-EF7OpqQTQ/BvGqLzUi4rEHuagCV9MugAUXSHemwPW5vxZ75RR+jxO/2j95Ph2dalMpFHSVECjRoioHZgA9zOYA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.1.tgz", + "integrity": "sha512-wQO3JesW9PRkwlabQ27y7sPfVOOTLRG73I4F2UYHG5PXun3J9U3y+b7ezVKSYbsvSKGQ1k1cq8Qlun4C9kLt3w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.1.tgz", + "integrity": "sha512-ouAGwhO6wHRXdnOVCOsB0tRFkA7nhNB2Nwax6oECXN0YiN8EYUTBAOudADOB1PI+yDL61TeNx/u7MVCzksNbkQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.1.tgz", + "integrity": "sha512-q2R38Sn+1J8RxhfJ+T54wSWmyKXWec+9jgDfqO2AtArEqHO5R2aeayp5H5OYLr5UYDVGsVaZPEFUooMhYCdz5A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.1.tgz", + "integrity": "sha512-gfI5T24WLLuFfSKw7Go/zDXjAAV0fny0swTaDv+WjK7vqcw4cRhFfdsyKL1n+ukI+ooBxn3bVQnyrn06WpI50w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.1.tgz", + "integrity": "sha512-4h6XqthmB4Hspji84wvgk+ElodTsGj+dbZqHJHHtKxj4mYq0ANSEEPX9ys3moJueqsRjwpaJYH7874Itwnj2ow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.1.tgz", + "integrity": "sha512-dlfCOa87o1VAYegLQ9EKilx2JCeRofiyPGhTCmqnuXZ6bMPiycO1rq1+sKoulAp7pGLIsTIw+1x5R+zgh5LhhA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.1.tgz", + "integrity": "sha512-cjkLbOlfcm3QGhMM1J5zaZjsw1GggbN6rw9UTSSRrPrR1KkcXnN7Uq9rPw34xImQ9VOY9GN+6u2Zj80B9ptkcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.1.tgz", + "integrity": "sha512-Li1KdUnWGE4N3e1F/B4RTB1ms+nG4WBgjByO46pkeBVX/2UBsY53xf5vK9WygVmnH3RwncIST7lkSdLSY6P9lg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.1.tgz", + "integrity": "sha512-t4ZYOSoLTgwhuFMrmTMLx/+i1DQVK7HYqMc6kY46EApwi8X0nIVphzdNoThU3xt6n+N5urG1/gxBdCaKDLavfg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.1.tgz", + "integrity": "sha512-RgroPfMmKlD1RzSDxvwgcPiy2HNQKoYV7OmwIXDsk73uKW5t6B/V8KIy27SMv/FNXFo/oSBtWc9J0X7t91ezZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.1.tgz", + "integrity": "sha512-at8QVep6S3h5Y6gSbdGU06bRY5WJkf6WUduM9YtvYMbYhB1MOFfUgc6kehitQXzOtMSaT70q7f9ydPhpqu821w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@trickfilm400/rollup-plugin-off-main-thread": { + "version": "3.0.0-pre1", + "resolved": "https://registry.npmjs.org/@trickfilm400/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-3.0.0-pre1.tgz", + "integrity": "sha512-/67zpWDBLV+oYAEL682s1ktXL0HgqX76f6gaVGkGnVZlBbm1zd0v4Bz8MFF2GGhoX9rvfq3KSQHubFHwa6w6/Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "ejs": "^3.1.10", + "json5": "^2.2.3", + "magic-string": "^0.30.21", + "string.prototype.matchall": "^4.0.12" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz", + "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.8.tgz", + "integrity": "sha512-0ZjgOg7oO6farnNGup7yvoM/YXZV84OZxHAwtflItNa/6zzQyVb5LNxyea3FEKEX2XlagIKzrlH7wwxkKgtiew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.28" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.28.tgz", + "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.42.tgz", + "integrity": "sha512-2Ye1ilMtKXxl8qZUrQ5j0CdgenFp/HFQmta6rfRyfEsTG69L6Wk+tWuNoHYHMx9E8tF2Slvdg1FuwDvAXdy1LQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@vue/shared": "3.5.42", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.42.tgz", + "integrity": "sha512-qbhQZEFmycr+ni/qyuccS4sucNN7VAbDfbkvNxWOX2VfgFm90MNs3/UhRNKoPMEIVn0F8gdlYjLPvqxHwHeQOA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.42", + "@vue/shared": "3.5.42" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.42.tgz", + "integrity": "sha512-fkCAFB4okcAANGMThboWnScp/gzWjU0ZSkVnjTIiplmMDq2uq0tIB3j+xVu4rhv5rvOgBySCysudmbMd6xRRqw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@vue/compiler-core": "3.5.42", + "@vue/compiler-dom": "3.5.42", + "@vue/compiler-ssr": "3.5.42", + "@vue/shared": "3.5.42", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.19", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.42.tgz", + "integrity": "sha512-xmLk3wLkbizPAiLyomjgFFosf2ys9b5Ghb+oh/k2tnvipNz8OFrQOiTcWCzyK7MpBp9KkyGtfvgfLUivbmuGYA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.42", + "@vue/shared": "3.5.42" + } + }, + "node_modules/@vue/devtools-api": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-8.2.1.tgz", + "integrity": "sha512-6u4vXBlIBAC1wMplIZgpyPn7uh/s4Bf6F5bMzvLv+EdJ0aHs/+4B7Ygv864EStQSjRbsRzTko/kUG1A1IejQ3A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/devtools-kit": "^8.2.1" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.2.1.tgz", + "integrity": "sha512-FIGIuq3AWReEpbAHY/cRGeHDfI0qOb8OCQ3YjbEAX04uaxIDbGc9rhkbVcG7rnfHPXE3RsU5KrWOu9V/okd8AQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/devtools-shared": "^8.2.1", + "birpc": "^2.6.1", + "hookable": "^5.5.3", + "perfect-debounce": "^2.0.0" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.2.1.tgz", + "integrity": "sha512-Fkac7lUdGReh6pVOi3AYPRGe82LQqRmAfThW7RRligOAP0ZA/Z1z9XLHDM9dv34pV2HRc79DK8uKPeG2fLnA/g==", + "license": "MIT", + "peer": true + }, + "node_modules/@vue/language-core": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.3.11.tgz", + "integrity": "sha512-QJmpliwAVpC/OxubIByPAhNzsQPRc8/gxlN2qnVzVfIMjMDz/9RnXRFoetjz5yEgXVXyp4LqhXq3V53PjmNzFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "@vue/compiler-dom": "^3.5.0", + "@vue/shared": "^3.5.0", + "alien-signals": "^3.2.1", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.4" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.42.tgz", + "integrity": "sha512-TzNNfKpb7hDxbQltwAut8VDQA5YP+BuRlxntHUuRjyKwlMvmAPbs3unhCvieijifY6vFfVBwsS7wG/C7uq+bEQ==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.42" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.42.tgz", + "integrity": "sha512-9uACtuHs7vJGkm5Bp3xu4xRDLFTIYy5DgxpToVjqGIAhAEKwQfsaLvKINhM6nFVp6bZPRFGdDqd1g52MqKsotA==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.42", + "@vue/shared": "3.5.42" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.42.tgz", + "integrity": "sha512-rsCmhiWLaRxGltLwhlCWyYkFn7WAbKRh0q17eZ1A6Dq6eqc2ACQ61IIryxz0LrsvCzHSilLA9JHovVwM8CNE2g==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.42", + "@vue/runtime-core": "3.5.42", + "@vue/shared": "3.5.42", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.42.tgz", + "integrity": "sha512-2++5dUyYS4gvo7xQXSECUDhB7TS0aOl5SeVfC5qSq1Jgfhjvegw1zqhwTIR3imZ+QYPJQw9gfcFvXGAjGZ7ajQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.42", + "@vue/runtime-dom": "3.5.42", + "@vue/shared": "3.5.42" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.42.tgz", + "integrity": "sha512-2rPxex1jQf4jvl9MOHl6YaXCPcrNqz/FstMOEh3QWY+/OME9nQTvl9WYeCwhW7AFjaR0SnngZGlp/wkR6rkI6g==", + "license": "MIT" + }, + "node_modules/@vue/tsconfig": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.9.1.tgz", + "integrity": "sha512-buvjm+9NzLCJL29KY1j1991YYJ5e6275OiK+G4jtmfIb+z4POywbdm0wXusT9adVWqe0xqg70TbI7+mRx4uU9w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": ">= 5.8", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/alien-signals": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.2.1.tgz", + "integrity": "sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.8", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz", + "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.20", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.20.tgz", + "integrity": "sha512-H0ulySigv6icDJ1F7SjtdCD6PrhTpdYCmP0CactWy1+ekh0AFd0o1Wn5T8b+hnTmdBx19u9yhL6wvCylXMY7zw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/browserslist": { + "version": "4.28.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", + "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.11.12", + "caniuse-lite": "^1.0.30001809", + "electron-to-chromium": "^1.5.402", + "node-releases": "^2.0.53", + "update-browserslist-db": "^1.3.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", + "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.50.0.tgz", + "integrity": "sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.7" + }, + "engines": { + "node": ">=6.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.420", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.420.tgz", + "integrity": "sha512-2yD6XreGusOfNV+dUcvipJEXc3n/n7fgr7996aszTG+YY5E4mqM4tOq/3uhP129cazL9YHbVWSpc79ePotWtPA==", + "dev": true, + "license": "ISC" + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract-get": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-abstract-get/-/es-abstract-get-1.0.0.tgz", + "integrity": "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.2", + "is-callable": "^1.2.7", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.4.tgz", + "integrity": "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-abstract-get": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "is-callable": "^1.2.7", + "is-date-object": "^1.1.0", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-4.6.0.tgz", + "integrity": "sha512-lW6is4T1NFOYnmqGZIfvixqj7A7sSvScF+DN8EK6K58xI5MZ5UvYe0GjopxOXQtZvUn4eDdVuZ8XSoYWTMEKwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/bgub/eta?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.7.tgz", + "integrity": "sha512-dOvZVzjdZdz7phd9v6jCbwxrBW3fK6n8Rc0CtdmM4bumzMnxywBYhuph6J819RRw/ku+rLbelwfMunktuzVVHg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/filelist": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.2.0.tgz", + "integrity": "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2", + "hasown": "^2.0.4", + "is-callable": "^1.2.7", + "is-document.all": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true, + "license": "ISC" + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT", + "peer": true + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-document.all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-document.all/-/is-document.all-1.0.0.tgz", + "integrity": "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", + "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^9.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.54", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.54.tgz", + "integrity": "sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/nostics": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/nostics/-/nostics-1.2.0.tgz", + "integrity": "sha512-FGqEfhQjrvo1lL8KFifdTQiNwwQHJxC1jtYE1Rc54qF/jxONUNL+kC9gS1krX8Q65PgrQ5fCqH/I4NhWBvdSqg==", + "license": "MIT" + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/own-keys": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.2.tgz", + "integrity": "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/perfect-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", + "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", + "license": "MIT", + "peer": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-4.0.3.tgz", + "integrity": "sha512-XMQqpvjgG7LMqVhhFUzKLT4KEbsYbfZZ0CZU9PgdFm1O2VKBmIkykL8+SfNhOaT7sR0wT6BEgKT0YNDYWgmVRA==", + "license": "MIT", + "dependencies": { + "nostics": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/devtools-api": "^8.1.5", + "typescript": ">=5.6.0", + "vue": "^3.5.11" + }, + "peerDependenciesMeta": { + "@vue/devtools-api": { + "optional": false + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", + "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.18", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pretty-bytes": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", + "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.2.tgz", + "integrity": "sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rolldown": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.7.tgz", + "integrity": "sha512-g0EtLvBjTUB7jhyV0S/TCup3v/XSVl45vUIGbOGU4QPiyjTenCe4mKuFvW9fEgYmS2Fo42AUssRmNuMziXdrig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.148.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.7", + "@rolldown/binding-android-arm64": "1.2.7", + "@rolldown/binding-darwin-arm64": "1.2.7", + "@rolldown/binding-darwin-x64": "1.2.7", + "@rolldown/binding-freebsd-x64": "1.2.7", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.7", + "@rolldown/binding-linux-arm64-gnu": "1.2.7", + "@rolldown/binding-linux-arm64-musl": "1.2.7", + "@rolldown/binding-linux-ppc64-gnu": "1.2.7", + "@rolldown/binding-linux-s390x-gnu": "1.2.7", + "@rolldown/binding-linux-x64-gnu": "1.2.7", + "@rolldown/binding-linux-x64-musl": "1.2.7", + "@rolldown/binding-openharmony-arm64": "1.2.7", + "@rolldown/binding-win32-arm64-msvc": "1.2.7", + "@rolldown/binding-win32-x64-msvc": "1.2.7" + } + }, + "node_modules/rollup": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.1.tgz", + "integrity": "sha512-3Df9jsstwhccuEfmAMi9l8XUh/GOkVObmFTU7CCVBysEbcOZLl84jCtaAZMcPiMz2EGKsATzQcU+Xr3n/wU6cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.63.1", + "@rollup/rollup-android-arm64": "4.63.1", + "@rollup/rollup-darwin-arm64": "4.63.1", + "@rollup/rollup-darwin-x64": "4.63.1", + "@rollup/rollup-freebsd-arm64": "4.63.1", + "@rollup/rollup-freebsd-x64": "4.63.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.63.1", + "@rollup/rollup-linux-arm-musleabihf": "4.63.1", + "@rollup/rollup-linux-arm64-gnu": "4.63.1", + "@rollup/rollup-linux-arm64-musl": "4.63.1", + "@rollup/rollup-linux-loong64-gnu": "4.63.1", + "@rollup/rollup-linux-loong64-musl": "4.63.1", + "@rollup/rollup-linux-ppc64-gnu": "4.63.1", + "@rollup/rollup-linux-ppc64-musl": "4.63.1", + "@rollup/rollup-linux-riscv64-gnu": "4.63.1", + "@rollup/rollup-linux-riscv64-musl": "4.63.1", + "@rollup/rollup-linux-s390x-gnu": "4.63.1", + "@rollup/rollup-linux-x64-gnu": "4.63.1", + "@rollup/rollup-linux-x64-musl": "4.63.1", + "@rollup/rollup-openbsd-x64": "4.63.1", + "@rollup/rollup-openharmony-arm64": "4.63.1", + "@rollup/rollup-win32-arm64-msvc": "4.63.1", + "@rollup/rollup-win32-ia32-msvc": "4.63.1", + "@rollup/rollup-win32-x64-gnu": "4.63.1", + "@rollup/rollup-win32-x64-msvc": "4.63.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.1.1.tgz", + "integrity": "sha512-k3CMsaIvvdSwm8oLB4MXSl0wH2/cwlH7xGcnRd2DaeRmBkbzYmyT8j0tsX60DwD1eRwHTpNpH8ljKu9oUT1MeQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/smob": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.6.2.tgz", + "integrity": "sha512-RQsvleCbF8cVHEv+xuDGaA4pOizFqJ0GgjtMSRo6oP8pnN7WsigHgVGey6aILRBKv4W2YOMHLqbKdnB6hpB9fw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0.tgz", + "integrity": "sha512-d8EqvL+k/SOXCreS/SUzg2ciyHqBBLcN/yuRjFsbvVhHTE2pgei7oAhmPM7kWFbkX6OSMQfUq4KbkF3au9lhYQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.1.0.tgz", + "integrity": "sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.2", + "get-intrinsic": "^1.3.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.4", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz", + "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2", + "has-property-descriptors": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz", + "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.51.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.51.2.tgz", + "integrity": "sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz", + "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "is-typed-array": "^1.1.15", + "possible-typed-array-names": "^1.1.0", + "reflect.getprototypeof": "^1.0.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.2.tgz", + "integrity": "sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz", + "integrity": "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.26", + "rolldown": "~1.2.4", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.4.0 || ^0.5.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-pwa": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-1.3.0.tgz", + "integrity": "sha512-c5kMgN+ITrOtHXp8PAtk2uOIEea6XjP/unCGxOWWBzQ6qa65qj/awHg0wf+QF9E/2u9vh86LqxPwzEPNbM2r5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.6", + "pretty-bytes": "^6.1.1", + "tinyglobby": "^0.2.10", + "workbox-build": "^7.4.1", + "workbox-window": "^7.4.1" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vite-pwa/assets-generator": "^1.0.0", + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "workbox-build": "^7.4.1", + "workbox-window": "^7.4.1" + }, + "peerDependenciesMeta": { + "@vite-pwa/assets-generator": { + "optional": true + } + } + }, + "node_modules/vscode-uri": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.2.0.tgz", + "integrity": "sha512-m2gXo3bn0G1kT9InzMf07fTbqMbGtyckj3bH5ktLO+1Ssv+yiATZ4dhwaQv9UZWxJh6E9IFGnQyjgWVDWVBDrg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.42.tgz", + "integrity": "sha512-4RyHQTbQvOPs3MfvUO1Sg0YRrKNnA0mAVtvpd12Tg1fKDN7OHBUl1IqSn8zGJjK9nI3NkNp8cgTpVrSZC5TTcA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.42", + "@vue/compiler-sfc": "3.5.42", + "@vue/runtime-dom": "3.5.42", + "@vue/server-renderer": "3.5.42", + "@vue/shared": "3.5.42" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz", + "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/vue-tsc": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.3.11.tgz", + "integrity": "sha512-gOb0B9rtU2+f1dszwPqSH5kAieIF9ReeLhD3kSRNHv5WZZUQz/JdVXW0RTdqhNTMlQkqKzrTTviqKr/4FYZraQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.28", + "@vue/language-core": "3.3.11" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz", + "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/workbox-background-sync": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.4.1.tgz", + "integrity": "sha512-HhT7KE8tOWDm02wRNshXUnUPofMlhenF2DBdUnDPOubhizzPeItkYTmAB6td1Z2cjYPa98vzEiPLEuzn5hN66g==", + "dev": true, + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.4.1.tgz", + "integrity": "sha512-uAlgslKLvbQY+suirIdnBCSYrcgBhjp81Nj4l1lj/Jmj0MJO2CJERnCJjT0GFVwmReV0N+zs78K6gqd5gr9/+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-build": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.4.1.tgz", + "integrity": "sha512-SDhxIvEAde9Gy/5w4Yo1Jh/M49Z0qE3q0oteyE8zGq0DScxFqVBcCtIXFuLtmtxRQZCMbf0prco4VyEu3KBQuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.24.4", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", + "@rollup/plugin-replace": "^6.0.3", + "@rollup/plugin-terser": "^1.0.0", + "@trickfilm400/rollup-plugin-off-main-thread": "^3.0.0-pre1", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "eta": "^4.5.1", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^11.0.1", + "pretty-bytes": "^5.3.0", + "rollup": "^4.53.3", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "7.4.1", + "workbox-broadcast-update": "7.4.1", + "workbox-cacheable-response": "7.4.1", + "workbox-core": "7.4.1", + "workbox-expiration": "7.4.1", + "workbox-google-analytics": "7.4.1", + "workbox-navigation-preload": "7.4.1", + "workbox-precaching": "7.4.1", + "workbox-range-requests": "7.4.1", + "workbox-recipes": "7.4.1", + "workbox-routing": "7.4.1", + "workbox-strategies": "7.4.1", + "workbox-streams": "7.4.1", + "workbox-sw": "7.4.1", + "workbox-window": "7.4.1" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/workbox-build/node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.4.1.tgz", + "integrity": "sha512-8xaFoJdDc2OjrlbbL3gEeBO1WKcMwRqwLRupgqahYXu75yXajPLuwrbXMrIGZuWYXrQwk0xDjOxZ/ujCy/oJYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-core": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.4.1.tgz", + "integrity": "sha512-DT+vu46eh/2vRsSHTY4Xmc32Z1rr9PRlQUXr1Dx30ZuXRWwOsvZgGgcwxcasubQLQmbTNYZjv44LkBAQ4tT5tQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/workbox-expiration": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.4.1.tgz", + "integrity": "sha512-lRKUF7b+OGbeXkQk1s6MHXOa3d7Xxf7Of31W6c6hCfipfIyrtdWZ89stq21AHZMaoG7VNFoHply4Ox+rU31TWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-google-analytics": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.4.1.tgz", + "integrity": "sha512-Mks1JwLEt++ZAkF6sS1OpSh9RtAMIsiDgRpK+codiHGIPXeaUOgi4cPc3GFadUl8V5QPeypEk8Oxgl3HlwVzHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-background-sync": "7.4.1", + "workbox-core": "7.4.1", + "workbox-routing": "7.4.1", + "workbox-strategies": "7.4.1" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.4.1.tgz", + "integrity": "sha512-C4KVsjPcYKJOhr631AxR9XoG2rLF3QiTk5aMv36MXOjtWvm8axwNFAtKUPGsWUwLXXAMgYM1En7fsvndaXeXRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-precaching": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.4.1.tgz", + "integrity": "sha512-cdr/9qByww7yzEp7zg/qI4ukUrrNjQLgN+ONQRpjy/VqGQXwkgHwr00KksGJK8v0VifwDXBb8a4cWNZH71jn3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.1", + "workbox-routing": "7.4.1", + "workbox-strategies": "7.4.1" + } + }, + "node_modules/workbox-range-requests": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.4.1.tgz", + "integrity": "sha512-7i2oxAUE82gHdAJBCAQ04JzNOdRPqzuOzGfoUyJpFSmeqBNYGPrAH8GPoPjUQTfp+NycwrD2H68VtuF8qxv0vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-recipes": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.4.1.tgz", + "integrity": "sha512-gnbVfmV4/TtmQaM4x9AtuXhcdstJsep3XMVeztOrQVPT+R6+6DeBjGTCQ7fFCXm+4GEHUA5VEBTyi5+4gWGeog==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-cacheable-response": "7.4.1", + "workbox-core": "7.4.1", + "workbox-expiration": "7.4.1", + "workbox-precaching": "7.4.1", + "workbox-routing": "7.4.1", + "workbox-strategies": "7.4.1" + } + }, + "node_modules/workbox-routing": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.4.1.tgz", + "integrity": "sha512-yubJGErZOusuidAenaL5ypfhQOa7urxP/f8E0ws7FPb4039RiWXUWBAyUkmUoOL/BcQGen3h0J8872d51IYxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-strategies": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.4.1.tgz", + "integrity": "sha512-GZxpaw9NbmOelj7667uZ2kpk5BFpOGbO4X0qjwh5ls8XQ8C+Lha5LQchTiUzsTFSS+NlUpftYAyOVXvQUrcqOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-streams": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.4.1.tgz", + "integrity": "sha512-HWWtraKUbJknd9kgqGcpQ3G114HOPYvqs8HaJMDs2ebLNAimDkVDaWfAXE6Ybl+m8U6KsCE6pWyLYuigWmnAXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.1", + "workbox-routing": "7.4.1" + } + }, + "node_modules/workbox-sw": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.4.1.tgz", + "integrity": "sha512-fez5f2DUlDJWTFYkCWQpY10N8gtztd849NswCbVFk0QlcSM4HT5A8x4g4ii650yem4I8tHY0R7JZahwp3ltIPw==", + "dev": true, + "license": "MIT" + }, + "node_modules/workbox-window": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.4.1.tgz", + "integrity": "sha512-notZDH2u8VXaqyuD7xaqIfEFi6SRM4SUSd7ewe9PDsVqADuepxX2ZMY3uvuZGxzY5ZOsGC/vD3A/3smFtJt4/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "7.4.1" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/web/package.json b/web/package.json new file mode 100644 index 0000000..e3c7d89 --- /dev/null +++ b/web/package.json @@ -0,0 +1,25 @@ +{ + "name": "web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "pinia": "^4.0.3", + "vue": "^3.5.41", + "vue-router": "^4.6.4" + }, + "devDependencies": { + "@types/node": "^24.13.3", + "@vitejs/plugin-vue": "^6.0.8", + "@vue/tsconfig": "^0.9.1", + "typescript": "~6.0.2", + "vite": "^8.2.2", + "vite-plugin-pwa": "^1.3.0", + "vue-tsc": "^3.3.11" + } +} diff --git a/web/public/apple-touch-icon.png b/web/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8678b1fea108136f38da9cd056ccbfa06ef224f1 GIT binary patch literal 13398 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 L5UUn34EjF+uKdCX literal 0 HcmV?d00001 diff --git a/web/public/favicon.svg b/web/public/favicon.svg new file mode 100644 index 0000000..44a5e87 --- /dev/null +++ b/web/public/favicon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/web/public/pwa-192x192.png b/web/public/pwa-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..e028552637afd30a24aaab9c69fc9e7eee87bc2b GIT binary patch literal 14239 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 NJYD@<);T3K0RY3x5*7de literal 0 HcmV?d00001 diff --git a/web/public/pwa-maskable-512x512.png b/web/public/pwa-maskable-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..7d805fff613799450436a56d755592b804d70534 GIT binary patch literal 37690 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 VHRTEI|H;J}J8P#K4VHIP{sDcITEhSU literal 0 HcmV?d00001 diff --git a/web/src/App.vue b/web/src/App.vue new file mode 100644 index 0000000..88fe5fc --- /dev/null +++ b/web/src/App.vue @@ -0,0 +1,30 @@ + + + diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts new file mode 100644 index 0000000..06e60d1 --- /dev/null +++ b/web/src/lib/api.ts @@ -0,0 +1,65 @@ +import type { ApiErrorBody } from '../types' + +const BASE_URL = import.meta.env.VITE_API_BASE_URL ?? '/api' + +let authToken: string | null = null + +/** Set (or clear) the bearer token sent with subsequent requests. */ +export function setAuthToken(token: string | null): void { + authToken = token +} + +export class ApiError extends Error { + readonly status: number + readonly details: Record + + constructor(message: string, status: number, details: Record = {}) { + super(message) + this.name = 'ApiError' + this.status = status + this.details = details + } + + /** First validation message for a field, if any. */ + fieldError(field: string): string | undefined { + return this.details[field]?.[0] + } +} + +interface RequestOptions { + method?: string + body?: unknown + auth?: boolean +} + +export async function apiRequest(path: string, options: RequestOptions = {}): Promise { + const { method = 'GET', body, auth = false } = options + + const headers: Record = { Accept: 'application/json' } + if (body !== undefined) headers['Content-Type'] = 'application/json' + if (auth && authToken) headers['Authorization'] = `Bearer ${authToken}` + + let response: Response + try { + response = await fetch(`${BASE_URL}${path}`, { + method, + headers, + body: body === undefined ? undefined : JSON.stringify(body), + }) + } catch { + throw new ApiError('Could not reach the server.', 0) + } + + const payload = await response.json().catch(() => null) + + if (!response.ok) { + const err = (payload as ApiErrorBody | null)?.error + throw new ApiError( + err?.message ?? `Request failed (${response.status}).`, + response.status, + err?.details ?? {}, + ) + } + + return payload as T +} diff --git a/web/src/main.ts b/web/src/main.ts new file mode 100644 index 0000000..451556c --- /dev/null +++ b/web/src/main.ts @@ -0,0 +1,17 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import './style.css' +import App from './App.vue' +import router from './router' +import { useAuthStore } from './stores/auth' + +const app = createApp(App) + +app.use(createPinia()) + +// Resolve the stored session before the first navigation so route guards see a +// settled auth state. +await useAuthStore().fetchMe() + +app.use(router) +app.mount('#app') diff --git a/web/src/router/index.ts b/web/src/router/index.ts new file mode 100644 index 0000000..49444dd --- /dev/null +++ b/web/src/router/index.ts @@ -0,0 +1,44 @@ +import { createRouter, createWebHistory } from 'vue-router' +import { useAuthStore } from '../stores/auth' + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + name: 'home', + component: () => import('../views/HomeView.vue'), + meta: { requiresAuth: true }, + }, + { + path: '/login', + name: 'login', + component: () => import('../views/LoginView.vue'), + meta: { guestOnly: true }, + }, + { + path: '/register', + name: 'register', + component: () => import('../views/RegisterView.vue'), + meta: { guestOnly: true }, + }, + { path: '/:pathMatch(.*)*', redirect: { name: 'home' } }, + ], +}) + +router.beforeEach((to) => { + const auth = useAuthStore() + + if (to.meta.requiresAuth && !auth.isAuthenticated) { + return { + name: 'login', + query: to.fullPath === '/' ? {} : { redirect: to.fullPath }, + } + } + + if (to.meta.guestOnly && auth.isAuthenticated) { + return { name: 'home' } + } +}) + +export default router diff --git a/web/src/stores/auth.ts b/web/src/stores/auth.ts new file mode 100644 index 0000000..9784477 --- /dev/null +++ b/web/src/stores/auth.ts @@ -0,0 +1,92 @@ +import { defineStore } from 'pinia' +import { computed, ref } from 'vue' +import { apiRequest, setAuthToken } from '../lib/api' +import type { AuthResponse, User } from '../types' + +const TOKEN_KEY = 'todo.token' + +function readStoredToken(): string | null { + try { + return localStorage.getItem(TOKEN_KEY) + } catch { + return null + } +} + +export const useAuthStore = defineStore('auth', () => { + const token = ref(readStoredToken()) + const user = ref(null) + /** True until the initial `fetchMe()` on app start has settled. */ + const loading = ref(false) + + setAuthToken(token.value) + + const isAuthenticated = computed(() => token.value !== null && user.value !== null) + const emailVerified = computed(() => user.value?.email_verified ?? false) + + function setToken(value: string | null): void { + token.value = value + setAuthToken(value) + try { + if (value) localStorage.setItem(TOKEN_KEY, value) + else localStorage.removeItem(TOKEN_KEY) + } catch { + /* storage unavailable — session stays in memory only */ + } + } + + function adopt(response: AuthResponse): void { + setToken(response.token) + user.value = response.user + } + + async function register(email: string, password: string): Promise { + adopt( + await apiRequest('/auth/register', { + method: 'POST', + body: { email, password }, + }), + ) + } + + async function login(email: string, password: string): Promise { + adopt( + await apiRequest('/auth/login', { + method: 'POST', + body: { email, password }, + }), + ) + } + + function logout(): void { + setToken(null) + user.value = null + } + + /** Resolve the current user from a stored token; clears it if invalid. */ + async function fetchMe(): Promise { + if (!token.value) return + + loading.value = true + try { + const { user: me } = await apiRequest<{ user: User }>('/me', { auth: true }) + user.value = me + } catch { + logout() + } finally { + loading.value = false + } + } + + return { + token, + user, + loading, + isAuthenticated, + emailVerified, + register, + login, + logout, + fetchMe, + } +}) diff --git a/web/src/style.css b/web/src/style.css new file mode 100644 index 0000000..9bed167 --- /dev/null +++ b/web/src/style.css @@ -0,0 +1,188 @@ +/* Placeholder styling only — just enough to be legible. */ + +:root { + --bg: #f7f7f8; + --surface: #ffffff; + --border: #e2e2e5; + --text: #1c1c1f; + --muted: #6b6b73; + --accent: #4f46e5; + --accent-text: #ffffff; + --warn-bg: #fff4e5; + --warn-border: #f0c48a; + --error: #b3261e; + color-scheme: light dark; +} + +@media (prefers-color-scheme: dark) { + :root { + --bg: #16161a; + --surface: #1f1f24; + --border: #33333a; + --text: #ececf1; + --muted: #9a9aa6; + --warn-bg: #2e2415; + --warn-border: #6b5220; + --error: #f2b8b5; + } +} + +* { + box-sizing: border-box; +} + +body { + margin: 0; + font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; + background: var(--bg); + color: var(--text); + line-height: 1.5; +} + +.app__bar { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1rem; + padding: 0.75rem 1.25rem; + background: var(--surface); + border-bottom: 1px solid var(--border); +} + +.app__brand { + font-weight: 600; +} + +.app__account { + display: flex; + align-items: center; + gap: 0.75rem; + font-size: 0.9rem; +} + +.app__email { + color: var(--muted); +} + +.app__main { + max-width: 32rem; + margin: 2.5rem auto; + padding: 0 1.25rem; +} + +.card { + background: var(--surface); + border: 1px solid var(--border); + border-radius: 12px; + padding: 1.75rem; +} + +h1 { + margin: 0 0 0.75rem; + font-size: 1.4rem; +} + +.muted { + color: var(--muted); + font-size: 0.95rem; +} + +.notice { + margin: 1rem 0; + padding: 0.75rem 1rem; + background: var(--warn-bg); + border: 1px solid var(--warn-border); + border-radius: 8px; + font-size: 0.9rem; +} + +.badge { + padding: 0.1rem 0.45rem; + border-radius: 999px; + font-size: 0.75rem; + border: 1px solid var(--warn-border); + background: var(--warn-bg); +} + +.facts { + margin: 1.25rem 0 0; + display: grid; + gap: 0.75rem; +} + +.facts div { + display: flex; + justify-content: space-between; + gap: 1rem; + border-top: 1px solid var(--border); + padding-top: 0.6rem; +} + +.facts dt { + color: var(--muted); +} + +.facts dd { + margin: 0; + text-align: right; + word-break: break-all; +} + +.form { + display: grid; + gap: 1rem; + margin: 1.25rem 0; +} + +.form label { + display: grid; + gap: 0.3rem; + font-size: 0.9rem; +} + +.form input { + padding: 0.55rem 0.7rem; + border: 1px solid var(--border); + border-radius: 8px; + background: var(--bg); + color: var(--text); + font-size: 1rem; +} + +button[type="submit"] { + padding: 0.6rem 1rem; + border: none; + border-radius: 8px; + background: var(--accent); + color: var(--accent-text); + font-size: 1rem; + cursor: pointer; +} + +button[type="submit"]:disabled { + opacity: 0.6; + cursor: progress; +} + +.link { + border: none; + background: none; + color: var(--accent); + cursor: pointer; + font: inherit; + padding: 0; +} + +a { + color: var(--accent); +} + +.hint { + color: var(--muted); +} + +.field-error, +.form-error { + color: var(--error); + font-size: 0.85rem; +} diff --git a/web/src/types.ts b/web/src/types.ts new file mode 100644 index 0000000..a6b4b76 --- /dev/null +++ b/web/src/types.ts @@ -0,0 +1,21 @@ +export interface User { + id: number + email: string + email_verified: boolean + email_verified_at: string | null + created_at: string | null +} + +export interface AuthResponse { + user: User + token: string + expires_at: string +} + +/** Shape of every error body returned by the API. */ +export interface ApiErrorBody { + error: { + message: string + details?: Record + } +} diff --git a/web/src/views/HomeView.vue b/web/src/views/HomeView.vue new file mode 100644 index 0000000..15017d6 --- /dev/null +++ b/web/src/views/HomeView.vue @@ -0,0 +1,35 @@ + + + diff --git a/web/src/views/LoginView.vue b/web/src/views/LoginView.vue new file mode 100644 index 0000000..da461e4 --- /dev/null +++ b/web/src/views/LoginView.vue @@ -0,0 +1,65 @@ + + + diff --git a/web/src/views/RegisterView.vue b/web/src/views/RegisterView.vue new file mode 100644 index 0000000..73c3ec1 --- /dev/null +++ b/web/src/views/RegisterView.vue @@ -0,0 +1,75 @@ + + + diff --git a/web/src/vite-env.d.ts b/web/src/vite-env.d.ts new file mode 100644 index 0000000..099cebe --- /dev/null +++ b/web/src/vite-env.d.ts @@ -0,0 +1,11 @@ +/// +/// + +interface ImportMetaEnv { + /** Base URL for REST API calls. Defaults to `/api` (proxied by the dev server). */ + readonly VITE_API_BASE_URL?: string +} + +interface ImportMeta { + readonly env: ImportMetaEnv +} diff --git a/web/tsconfig.app.json b/web/tsconfig.app.json new file mode 100644 index 0000000..d72aa75 --- /dev/null +++ b/web/tsconfig.app.json @@ -0,0 +1,15 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "types": ["vite/client"], + "allowArbitraryExtensions": true, + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] +} diff --git a/web/tsconfig.json b/web/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/web/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/web/tsconfig.node.json b/web/tsconfig.node.json new file mode 100644 index 0000000..8455dcb --- /dev/null +++ b/web/tsconfig.node.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "es2023", + "lib": ["ES2023"], + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "module": "nodenext", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/web/vite.config.ts b/web/vite.config.ts new file mode 100644 index 0000000..d0af5b4 --- /dev/null +++ b/web/vite.config.ts @@ -0,0 +1,52 @@ +import vue from '@vitejs/plugin-vue' +import { defineConfig } from 'vite' +import { VitePWA } from 'vite-plugin-pwa' + +// The API the dev server proxies `/api` to. Defaults to the Dockerised API on +// the host; the compose `web` service overrides it to the internal address. +const proxyTarget = process.env.VITE_PROXY_TARGET ?? 'http://localhost:8080' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + VitePWA({ + registerType: 'autoUpdate', + includeAssets: ['favicon.svg', 'apple-touch-icon.png'], + manifest: { + name: 'Todo List', + short_name: 'Todo', + description: 'A simple todo list.', + theme_color: '#4f46e5', + background_color: '#ffffff', + display: 'standalone', + start_url: '/', + icons: [ + { src: 'pwa-192x192.png', sizes: '192x192', type: 'image/png' }, + { src: 'pwa-512x512.png', sizes: '512x512', type: 'image/png' }, + { + src: 'pwa-maskable-512x512.png', + sizes: '512x512', + type: 'image/png', + purpose: 'maskable', + }, + ], + }, + devOptions: { + // Let the service worker run under `npm run dev` too. + enabled: true, + }, + }), + ], + server: { + host: true, + port: 5173, + strictPort: true, + proxy: { + '/api': { + target: proxyTarget, + changeOrigin: true, + }, + }, + }, +})