├── frontend ├── .npmrc ├── project.inlang │ ├── .gitignore │ ├── project_id │ └── settings.json ├── src │ ├── app.css │ ├── lib │ │ ├── index.ts │ │ ├── components │ │ │ └── WebSocketStatus.svelte │ │ ├── assets │ │ │ └── favicon.svg │ │ └── websocket.ts │ ├── hooks.ts │ ├── routes │ │ ├── +layout.svelte │ │ ├── api │ │ │ └── ws │ │ │ │ └── connect │ │ │ │ └── +server.ts │ │ ├── +page.server.ts │ │ └── +page.svelte │ ├── app.html │ ├── hooks.server.ts │ └── app.d.ts ├── static │ ├── .assetsignore │ └── robots.txt ├── messages │ ├── de.json │ └── en.json ├── .gitignore ├── svelte.config.js ├── tsconfig.json ├── vite.config.ts ├── README.md ├── package.json ├── wrangler.jsonc └── pnpm-lock.yaml ├── backend ├── test │ ├── env.d.ts │ ├── tsconfig.json │ └── index.spec.ts ├── .prettierrc ├── .editorconfig ├── vitest.config.mts ├── package.json ├── src │ ├── test-do.ts │ ├── index.ts │ ├── message-coordinator.ts │ └── countdown-timer.ts ├── tsconfig.json ├── wrangler.jsonc ├── .gitignore └── pnpm-lock.yaml ├── .gitignore └── README.md /frontend/.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /frontend/project.inlang/.gitignore: -------------------------------------------------------------------------------- 1 | cache -------------------------------------------------------------------------------- /frontend/src/app.css: -------------------------------------------------------------------------------- 1 | @import 'tailwindcss'; 2 | -------------------------------------------------------------------------------- /frontend/project.inlang/project_id: -------------------------------------------------------------------------------- 1 | KaDM7azm9YwNLyRoRW -------------------------------------------------------------------------------- /frontend/static/.assetsignore: -------------------------------------------------------------------------------- 1 | _worker.js 2 | _routes.json -------------------------------------------------------------------------------- /frontend/static/robots.txt: -------------------------------------------------------------------------------- 1 | # allow crawling everything by default 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /backend/test/env.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'cloudflare:test' { 2 | interface ProvidedEnv extends Env {} 3 | } 4 | -------------------------------------------------------------------------------- /frontend/src/lib/index.ts: -------------------------------------------------------------------------------- 1 | // place files you want to import through the `$lib` alias in this folder. 2 | -------------------------------------------------------------------------------- /backend/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 140, 3 | "singleQuote": true, 4 | "semi": true, 5 | "useTabs": true 6 | } 7 | -------------------------------------------------------------------------------- /frontend/messages/de.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://inlang.com/schema/inlang-message-format", 3 | "example_message": "Guten Tag {username}" 4 | } -------------------------------------------------------------------------------- /frontend/messages/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://inlang.com/schema/inlang-message-format", 3 | "example_message": "Hello world {username}" 4 | } -------------------------------------------------------------------------------- /frontend/src/hooks.ts: -------------------------------------------------------------------------------- 1 | import type { Reroute } from '@sveltejs/kit'; 2 | import { deLocalizeUrl } from '$lib/paraglide/runtime'; 3 | 4 | export const reroute: Reroute = (request) => { 5 | return deLocalizeUrl(request.url).pathname; 6 | }; -------------------------------------------------------------------------------- /backend/test/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "types": ["@cloudflare/vitest-pool-workers"] 5 | }, 6 | "include": ["./**/*.ts", "../worker-configuration.d.ts"], 7 | "exclude": [] 8 | } 9 | -------------------------------------------------------------------------------- /backend/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = tab 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.yml] 12 | indent_style = space 13 | -------------------------------------------------------------------------------- /backend/vitest.config.mts: -------------------------------------------------------------------------------- 1 | import { defineWorkersConfig } from '@cloudflare/vitest-pool-workers/config'; 2 | 3 | export default defineWorkersConfig({ 4 | test: { 5 | poolOptions: { 6 | workers: { 7 | wrangler: { configPath: './wrangler.jsonc' }, 8 | }, 9 | }, 10 | }, 11 | }); 12 | -------------------------------------------------------------------------------- /frontend/src/routes/+layout.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | 12 | {@render children()} 13 | -------------------------------------------------------------------------------- /frontend/src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | %sveltekit.head% 7 | 8 | 9 |
%sveltekit.body%
10 | 11 | 12 | -------------------------------------------------------------------------------- /frontend/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | # Output 4 | .output 5 | .vercel 6 | .netlify 7 | .wrangler 8 | /.svelte-kit 9 | /build 10 | 11 | # OS 12 | .DS_Store 13 | Thumbs.db 14 | 15 | # Env 16 | .env 17 | .env.* 18 | !.env.example 19 | !.env.test 20 | 21 | # Vite 22 | vite.config.js.timestamp-* 23 | vite.config.ts.timestamp-* 24 | 25 | .dev.vars* 26 | !.dev.vars.example 27 | worker-configuration.d.ts 28 | -------------------------------------------------------------------------------- /backend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "deploy": "wrangler deploy", 7 | "dev": "wrangler dev", 8 | "start": "wrangler dev", 9 | "test": "vitest", 10 | "cf-typegen": "wrangler types" 11 | }, 12 | "devDependencies": { 13 | "@cloudflare/vitest-pool-workers": "^0.8.19", 14 | "typescript": "^5.5.2", 15 | "vitest": "~3.2.0", 16 | "wrangler": "^4.51.0" 17 | } 18 | } -------------------------------------------------------------------------------- /frontend/project.inlang/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://inlang.com/schema/project-settings", 3 | "baseLocale": "en", 4 | "locales": [ 5 | "en", 6 | "de" 7 | ], 8 | "modules": [ 9 | "https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@4/dist/index.js", 10 | "https://cdn.jsdelivr.net/npm/@inlang/plugin-m-function-matcher@2/dist/index.js" 11 | ], 12 | "plugin.inlang.messageFormat": { 13 | "pathPattern": "./messages/{locale}.json" 14 | } 15 | } -------------------------------------------------------------------------------- /frontend/src/hooks.server.ts: -------------------------------------------------------------------------------- 1 | import type { Handle } from '@sveltejs/kit'; 2 | import { paraglideMiddleware } from '$lib/paraglide/server'; 3 | 4 | // creating a handle to use the paraglide middleware 5 | const paraglideHandle: Handle = ({ event, resolve }) => 6 | paraglideMiddleware(event.request, ({ request: localizedRequest, locale }) => { 7 | event.request = localizedRequest; 8 | return resolve(event, { 9 | transformPageChunk: ({ html }) => { 10 | return html.replace('%lang%', locale); 11 | } 12 | }); 13 | }); 14 | 15 | export const handle: Handle = paraglideHandle; -------------------------------------------------------------------------------- /backend/src/test-do.ts: -------------------------------------------------------------------------------- 1 | import { DurableObject } from 'cloudflare:workers'; 2 | 3 | export class TestDurableObject extends DurableObject { 4 | 5 | constructor(state: DurableObjectState, env: Env) { 6 | super(state, env); 7 | console.log('[TestDurableObject] Constructor called'); 8 | } 9 | 10 | async fetch(request: Request) { 11 | console.log('[TestDurableObject] fetch called', { 12 | method: request.method, 13 | url: request.url 14 | }); 15 | return new Response(JSON.stringify({ message: 'Hello from a Durable Object' }), { 16 | headers: { 'Content-Type': 'application/json' } 17 | }); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /frontend/src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://svelte.dev/docs/kit/types#app.d.ts 2 | // for information about these interfaces 3 | 4 | export interface Env { 5 | TEST_DO: DurableObjectNamespace; 6 | MESSAGE_COORDINATOR: DurableObjectNamespace; 7 | COUNTDOWN_TIMER: DurableObjectNamespace; 8 | } 9 | declare global { 10 | namespace App { 11 | interface Platform { 12 | env: Env; 13 | cf: CfProperties; 14 | ctx: ExecutionContext; 15 | } 16 | } 17 | } 18 | 19 | /// 20 | 21 | interface ImportMetaEnv { 22 | readonly VITE_WS_HOST?: string; 23 | readonly VITE_WS_PATH?: string; 24 | } 25 | 26 | export {}; -------------------------------------------------------------------------------- /frontend/svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from "@sveltejs/adapter-cloudflare"; 2 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | // Consult https://svelte.dev/docs/kit/integrations 7 | // for more information about preprocessors 8 | preprocess: vitePreprocess(), 9 | 10 | kit: { 11 | // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list. 12 | // If your environment is not supported, or you settled on a specific environment, switch out the adapter. 13 | // See https://svelte.dev/docs/kit/adapters for more information about adapters. 14 | adapter: adapter() 15 | } 16 | }; 17 | 18 | export default config; -------------------------------------------------------------------------------- /frontend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowImportingTsExtensions": true, 5 | "allowJs": true, 6 | "checkJs": true, 7 | "esModuleInterop": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "resolveJsonModule": true, 10 | "skipLibCheck": true, 11 | "sourceMap": true, 12 | "strict": true, 13 | "moduleResolution": "bundler", 14 | "types": [ 15 | "./src/worker-configuration.d.ts" 16 | ] 17 | } 18 | // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias 19 | // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files 20 | // 21 | // To make changes to top-level options such as include and exclude, we recommend extending 22 | // the generated config; see https://svelte.dev/docs/kit/configuration#typescript 23 | } 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | node_modules/ 3 | .pnp 4 | .pnp.js 5 | 6 | # Build outputs 7 | dist/ 8 | build/ 9 | .output/ 10 | .svelte-kit/ 11 | .wrangler/ 12 | .next/ 13 | out/ 14 | .nuxt/ 15 | 16 | # Environment variables 17 | .env 18 | .env.* 19 | !.env.example 20 | .dev.vars* 21 | !.dev.vars.example 22 | 23 | # Logs 24 | logs/ 25 | *.log 26 | npm-debug.log* 27 | yarn-debug.log* 28 | yarn-error.log* 29 | pnpm-debug.log* 30 | lerna-debug.log* 31 | 32 | # OS 33 | .DS_Store 34 | .DS_Store? 35 | ._* 36 | .Spotlight-V100 37 | .Trashes 38 | ehthumbs.db 39 | Thumbs.db 40 | 41 | # IDE 42 | .vscode/ 43 | .idea/ 44 | *.swp 45 | *.swo 46 | *~ 47 | 48 | # Testing 49 | coverage/ 50 | .nyc_output/ 51 | *.lcov 52 | 53 | # Cache 54 | .cache/ 55 | .parcel-cache/ 56 | .eslintcache 57 | .stylelintcache 58 | *.tsbuildinfo 59 | 60 | # Deployment 61 | .vercel/ 62 | .netlify/ 63 | 64 | 65 | -------------------------------------------------------------------------------- /frontend/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { paraglideVitePlugin } from '@inlang/paraglide-js' 2 | import { sveltekit } from "@sveltejs/kit/vite"; 3 | import { cloudflare } from "@cloudflare/vite-plugin"; 4 | import { defineConfig} from "vite"; 5 | import devtoolsJson from "vite-plugin-devtools-json"; 6 | import tailwindcss from "@tailwindcss/vite"; 7 | 8 | export default defineConfig({ 9 | plugins: [ 10 | tailwindcss() as any, 11 | sveltekit(), 12 | paraglideVitePlugin({ 13 | project: "./project.inlang", 14 | outdir: "./src/lib/paraglide", 15 | strategy: ["url", "cookie", "baseLocale"], 16 | }), 17 | cloudflare({ 18 | configPath: "./wrangler.jsonc", 19 | auxiliaryWorkers: [ 20 | { 21 | configPath: "../backend/wrangler.jsonc", 22 | }, 23 | ], 24 | }), 25 | devtoolsJson(), 26 | ], 27 | }); 28 | 29 | -------------------------------------------------------------------------------- /frontend/README.md: -------------------------------------------------------------------------------- 1 | # sv 2 | 3 | Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli). 4 | 5 | ## Creating a project 6 | 7 | If you're seeing this, you've probably already done this step. Congrats! 8 | 9 | ```sh 10 | # create a new project in the current directory 11 | npx sv create 12 | 13 | # create a new project in my-app 14 | npx sv create my-app 15 | ``` 16 | 17 | ## Developing 18 | 19 | Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: 20 | 21 | ```sh 22 | npm run dev 23 | 24 | # or start the server and open the app in a new browser tab 25 | npm run dev -- --open 26 | ``` 27 | 28 | ## Building 29 | 30 | To create a production version of your app: 31 | 32 | ```sh 33 | npm run build 34 | ``` 35 | 36 | You can preview the production build with `npm run preview`. 37 | 38 | > To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment. 39 | -------------------------------------------------------------------------------- /backend/test/index.spec.ts: -------------------------------------------------------------------------------- 1 | import { env, createExecutionContext, waitOnExecutionContext, SELF } from 'cloudflare:test'; 2 | import { describe, it, expect } from 'vitest'; 3 | import worker from '../src/index'; 4 | 5 | // For now, you'll need to do something like this to get a correctly-typed 6 | // `Request` to pass to `worker.fetch()`. 7 | const IncomingRequest = Request; 8 | 9 | describe('Worker', () => { 10 | it('responds with correct message (unit style)', async () => { 11 | const request = new IncomingRequest('http://example.com'); 12 | // Create an empty context to pass to `worker.fetch()`. 13 | const ctx = createExecutionContext(); 14 | const response = await worker.fetch(request, env, ctx); 15 | // Wait for all `Promise`s passed to `ctx.waitUntil()` to settle before running test assertions 16 | await waitOnExecutionContext(ctx); 17 | expect(await response.text()).toMatchInlineSnapshot(`"This worker exports Durable Objects"`); 18 | }); 19 | 20 | it('responds with correct message (integration style)', async () => { 21 | const response = await SELF.fetch('https://example.com'); 22 | expect(await response.text()).toMatchInlineSnapshot(`"This worker exports Durable Objects"`); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /frontend/src/routes/api/ws/connect/+server.ts: -------------------------------------------------------------------------------- 1 | import type { RequestHandler } from './$types'; 2 | 3 | export const GET: RequestHandler = async ({ request, platform }) => { 4 | console.log('WebSocket connect request received'); 5 | 6 | if (!platform) { 7 | console.error('Platform not available'); 8 | return new Response('Platform not available', { status: 500 }); 9 | } 10 | 11 | if (!platform.env?.MESSAGE_COORDINATOR) { 12 | console.error('MESSAGE_COORDINATOR binding not available'); 13 | return new Response('MESSAGE_COORDINATOR binding not available', { status: 500 }); 14 | } 15 | 16 | const upgradeHeader = request.headers.get('Upgrade'); 17 | console.log('Upgrade header:', upgradeHeader); 18 | 19 | if (upgradeHeader !== 'websocket') { 20 | return new Response('Expected Upgrade: websocket', { status: 426 }); 21 | } 22 | 23 | try { 24 | // Use a global coordinator for all connections 25 | const durableObjectId = platform.env.MESSAGE_COORDINATOR.idFromName('global'); 26 | const stub = platform.env.MESSAGE_COORDINATOR.get(durableObjectId); 27 | console.log('Forwarding to Durable Object'); 28 | return stub.fetch(request); 29 | } catch (error) { 30 | console.error('Error connecting to Durable Object:', error); 31 | return new Response(`Error: ${error}`, { status: 500 }); 32 | } 33 | }; 34 | -------------------------------------------------------------------------------- /frontend/src/routes/+page.server.ts: -------------------------------------------------------------------------------- 1 | import type { Actions, PageServerLoad } from './$types'; 2 | 3 | export const load: PageServerLoad = async ({ platform }) => { 4 | if (!platform?.env) { 5 | throw new Error('Platform env not available'); 6 | } 7 | 8 | console.log('Loading data from backend durable object'); 9 | const id = platform.env.TEST_DO.idFromName('global'); 10 | const stub = platform.env.TEST_DO.get(id); 11 | 12 | const res = await stub.fetch('https://do/internal'); 13 | const data = await res.json() as { message: string }; 14 | console.log('Data from backend durable object:', data); 15 | return { 16 | message: data.message 17 | }; 18 | }; 19 | 20 | export const actions: Actions = { 21 | countdown: async ({ platform }) => { 22 | if (!platform?.env) { 23 | return { success: false, error: 'Platform not available' }; 24 | } 25 | 26 | const id = platform.env.COUNTDOWN_TIMER.idFromName('global'); 27 | const stub = platform.env.COUNTDOWN_TIMER.get(id); 28 | 29 | const response = await stub.fetch('http://do/start', { 30 | method: 'POST' 31 | }); 32 | 33 | const result = await response.json() as { success: boolean; message?: string }; 34 | return { success: result.success }; 35 | } 36 | }; 37 | -------------------------------------------------------------------------------- /frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend", 3 | "private": true, 4 | "version": "0.0.1", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite dev", 8 | "build": "vite build", 9 | "preview": "pnpm run build && wrangler dev", 10 | "prepare": "svelte-kit sync || echo ''", 11 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 12 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 13 | "deploy": "pnpm run build && wrangler deploy", 14 | "cf-typegen": "wrangler types ./src/worker-configuration.d.ts", 15 | "machine-translate": "inlang machine translate --project project.inlang" 16 | }, 17 | "devDependencies": { 18 | "@cloudflare/vite-plugin": "^1.15.3", 19 | "@sveltejs/adapter-cloudflare": "^7.2.4", 20 | "@sveltejs/kit": "^2.47.1", 21 | "@sveltejs/vite-plugin-svelte": "^6.2.1", 22 | "@types/node": "^24.10.1", 23 | "svelte": "^5.41.0", 24 | "svelte-check": "^4.3.3", 25 | "typescript": "^5.9.3", 26 | "vite": "^7.2.4", 27 | "vite-plugin-devtools-json": "^0.1.0", 28 | "wrangler": "^4.51.0", 29 | "@inlang/paraglide-js": "2.5.0", 30 | "@inlang/cli": "^3.0.0", 31 | "@tailwindcss/vite": "^4.0.0", 32 | "tailwindcss": "^4.0.0" 33 | }, 34 | "dependencies": {}, 35 | "pnpm": { 36 | "overrides": { 37 | "vite": "^7.2.4", 38 | "rollup": "^4.53.3" 39 | } 40 | } 41 | } -------------------------------------------------------------------------------- /frontend/src/lib/components/WebSocketStatus.svelte: -------------------------------------------------------------------------------- 1 | 22 | 23 |
24 | 25 | {statusText} 26 |
27 | 28 | 69 | -------------------------------------------------------------------------------- /frontend/src/lib/assets/favicon.svg: -------------------------------------------------------------------------------- 1 | svelte-logo -------------------------------------------------------------------------------- /backend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 6 | "target": "es2021", 7 | /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 8 | "lib": ["es2021"], 9 | /* Specify what JSX code is generated. */ 10 | "jsx": "react-jsx", 11 | 12 | /* Specify what module code is generated. */ 13 | "module": "es2022", 14 | /* Specify how TypeScript looks up a file from a given module specifier. */ 15 | "moduleResolution": "Bundler", 16 | /* Enable importing .json files */ 17 | "resolveJsonModule": true, 18 | 19 | /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ 20 | "allowJs": true, 21 | /* Enable error reporting in type-checked JavaScript files. */ 22 | "checkJs": false, 23 | 24 | /* Disable emitting files from a compilation. */ 25 | "noEmit": true, 26 | 27 | /* Ensure that each file can be safely transpiled without relying on other imports. */ 28 | "isolatedModules": true, 29 | /* Allow 'import x from y' when a module doesn't have a default export. */ 30 | "allowSyntheticDefaultImports": true, 31 | /* Ensure that casing is correct in imports. */ 32 | "forceConsistentCasingInFileNames": true, 33 | 34 | /* Enable all strict type-checking options. */ 35 | "strict": true, 36 | 37 | /* Skip type checking all .d.ts files. */ 38 | "skipLibCheck": true, 39 | "types": [ 40 | "./worker-configuration.d.ts" 41 | ] 42 | }, 43 | "exclude": ["test"], 44 | "include": ["worker-configuration.d.ts", "src/**/*.ts"] 45 | } 46 | -------------------------------------------------------------------------------- /backend/src/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Welcome to Cloudflare Workers! This is your first worker. 3 | * 4 | * - Run `npm run dev` in your terminal to start a development server 5 | * - Open a browser tab at http://localhost:8787/ to see your worker in action 6 | * - Run `npm run deploy` to publish your worker 7 | * 8 | * Bind resources to your worker in `wrangler.jsonc`. After adding bindings, a type definition for the 9 | * `Env` object can be regenerated with `npm run cf-typegen`. 10 | * 11 | * Learn more at https://developers.cloudflare.com/workers/ 12 | */ 13 | 14 | export { TestDurableObject } from './test-do'; 15 | export { MessageCoordinator } from './message-coordinator'; 16 | export { CountdownTimer } from './countdown-timer'; 17 | 18 | export default { 19 | async fetch(request, env, ctx): Promise { 20 | const url = new URL(request.url); 21 | 22 | // Handle WebSocket connections 23 | if (url.pathname === '/ws/connect') { 24 | // SECURITY: This direct WebSocket endpoint bypasses frontend auth checks. 25 | // Only allow in dev/test environments. In production, WebSocket connections 26 | // must go through the frontend SvelteKit handler which validates authorization. 27 | if (env.NODE_ENV === 'production') { 28 | console.log('[ws] Rejected: Direct WebSocket access not allowed in production'); 29 | return new Response('Unauthorized', { status: 401 }); 30 | } 31 | 32 | console.log('[Backend] WebSocket connect request'); 33 | 34 | if (request.headers.get('Upgrade') !== 'websocket') { 35 | return new Response('Expected Upgrade: websocket', { status: 426 }); 36 | } 37 | 38 | const id = env.MESSAGE_COORDINATOR.idFromName('global'); 39 | const stub = env.MESSAGE_COORDINATOR.get(id); 40 | return stub.fetch(request); 41 | } 42 | 43 | // Handle broadcast requests (for the countdown action) 44 | if (url.pathname === '/broadcast' && request.method === 'POST') { 45 | console.log('[Backend] Broadcast request'); 46 | const id = env.MESSAGE_COORDINATOR.idFromName('global'); 47 | const stub = env.MESSAGE_COORDINATOR.get(id); 48 | return stub.fetch(request); 49 | } 50 | 51 | return new Response('This worker exports Durable Objects'); 52 | }, 53 | } satisfies ExportedHandler; 54 | 55 | -------------------------------------------------------------------------------- /backend/wrangler.jsonc: -------------------------------------------------------------------------------- 1 | /** 2 | * For more details on how to configure Wrangler, refer to: 3 | * https://developers.cloudflare.com/workers/wrangler/configuration/ 4 | */ 5 | { 6 | "$schema": "node_modules/wrangler/config-schema.json", 7 | "name": "backend-test", 8 | "main": "src/index.ts", 9 | "compatibility_date": "2025-11-28", 10 | "vars": { 11 | "NODE_ENV": "production" 12 | }, 13 | "observability": { 14 | "enabled": true 15 | }, 16 | "migrations": [ 17 | { 18 | "tag": "v1", 19 | "new_classes": ["TestDurableObject"] 20 | }, 21 | { 22 | "tag": "v2", 23 | "new_classes": ["MessageCoordinator"] 24 | }, 25 | { 26 | "tag": "v3", 27 | "new_classes": ["CountdownTimer"] 28 | } 29 | ], 30 | "durable_objects": { 31 | "bindings": [ 32 | { 33 | "name": "TEST_DO", 34 | "class_name": "TestDurableObject" 35 | }, 36 | { 37 | "name": "MESSAGE_COORDINATOR", 38 | "class_name": "MessageCoordinator" 39 | }, 40 | { 41 | "name": "COUNTDOWN_TIMER", 42 | "class_name": "CountdownTimer" 43 | } 44 | ] 45 | }, 46 | /** 47 | * Smart Placement 48 | * Docs: https://developers.cloudflare.com/workers/configuration/smart-placement/#smart-placement 49 | */ 50 | // "placement": { "mode": "smart" } 51 | /** 52 | * Bindings 53 | * Bindings allow your Worker to interact with resources on the Cloudflare Developer Platform, including 54 | * databases, object storage, AI inference, real-time communication and more. 55 | * https://developers.cloudflare.com/workers/runtime-apis/bindings/ 56 | */ 57 | /** 58 | * Environment Variables 59 | * https://developers.cloudflare.com/workers/wrangler/configuration/#environment-variables 60 | */ 61 | // "vars": { "MY_VARIABLE": "production_value" } 62 | /** 63 | * Note: Use secrets to store sensitive data. 64 | * https://developers.cloudflare.com/workers/configuration/secrets/ 65 | */ 66 | /** 67 | * Static Assets 68 | * https://developers.cloudflare.com/workers/static-assets/binding/ 69 | */ 70 | // "assets": { "directory": "./public/", "binding": "ASSETS" } 71 | /** 72 | * Service Bindings (communicate between multiple Workers) 73 | * https://developers.cloudflare.com/workers/wrangler/configuration/#service-bindings 74 | */ 75 | // "services": [{ "binding": "MY_SERVICE", "service": "my-service" }] 76 | } -------------------------------------------------------------------------------- /frontend/wrangler.jsonc: -------------------------------------------------------------------------------- 1 | /** 2 | * For more details on how to configure Wrangler, refer to: 3 | * https://developers.cloudflare.com/workers/wrangler/configuration/ 4 | */ 5 | { 6 | "$schema": "node_modules/wrangler/config-schema.json", 7 | "name": "frontend-test", 8 | "compatibility_date": "2025-06-04", 9 | "compatibility_flags": ["nodejs_compat"], 10 | // "compatibility_date": "2025-11-28", 11 | // "compatibility_flags": [ 12 | // "nodejs_als" 13 | // ], 14 | "assets": { 15 | "binding": "ASSETS", 16 | "directory": ".svelte-kit/cloudflare" 17 | }, 18 | "observability": { 19 | "enabled": true 20 | }, 21 | "durable_objects": { 22 | "bindings": [ 23 | { 24 | "name": "TEST_DO", 25 | "class_name": "TestDurableObject", 26 | "script_name": "backend-test" 27 | }, 28 | { 29 | "name": "MESSAGE_COORDINATOR", 30 | "class_name": "MessageCoordinator", 31 | "script_name": "backend-test" 32 | }, 33 | { 34 | "name": "COUNTDOWN_TIMER", 35 | "class_name": "CountdownTimer", 36 | "script_name": "backend-test" 37 | } 38 | ] 39 | }, 40 | /** 41 | * Smart Placement 42 | * Docs: https://developers.cloudflare.com/workers/configuration/smart-placement/#smart-placement 43 | */ 44 | // "placement": { "mode": "smart" } 45 | /** 46 | * Bindings 47 | * Bindings allow your Worker to interact with resources on the Cloudflare Developer Platform, including 48 | * databases, object storage, AI inference, real-time communication and more. 49 | * https://developers.cloudflare.com/workers/runtime-apis/bindings/ 50 | */ 51 | /** 52 | * Environment Variables 53 | * https://developers.cloudflare.com/workers/wrangler/configuration/#environment-variables 54 | */ 55 | // "vars": { "MY_VARIABLE": "production_value" } 56 | /** 57 | * Note: Use secrets to store sensitive data. 58 | * https://developers.cloudflare.com/workers/configuration/secrets/ 59 | */ 60 | /** 61 | * Static Assets 62 | * https://developers.cloudflare.com/workers/static-assets/binding/ 63 | */ 64 | // "assets": { "directory": "./public/", "binding": "ASSETS" } 65 | /** 66 | * Service Bindings (communicate between multiple Workers) 67 | * https://developers.cloudflare.com/workers/wrangler/configuration/#service-bindings 68 | */ 69 | // "services": [{ "binding": "MY_SERVICE", "service": "my-service" }] 70 | } -------------------------------------------------------------------------------- /frontend/src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 41 | 42 |

{message}

43 | 44 |
45 |

WebSocket Countdown Demo

46 | 47 | {#if wsManager} 48 |
49 | 50 |
51 | {/if} 52 | 53 |
54 | 61 |
62 | 63 | {#if latestCount !== null} 64 |
65 | {latestCount} 66 |
67 | {/if} 68 | 69 | {#if messages.length > 0} 70 |
71 |

72 | Messages received 73 | 80 |

81 |
    82 | {#each messages as msg} 83 |
  • 84 | Count: {msg.count} (at {new Date(msg.timestamp).toLocaleTimeString()}) 85 |
  • 86 | {/each} 87 |
88 |
89 | {/if} 90 |
91 | 92 | -------------------------------------------------------------------------------- /backend/src/message-coordinator.ts: -------------------------------------------------------------------------------- 1 | import { DurableObject } from 'cloudflare:workers'; 2 | 3 | export class MessageCoordinator extends DurableObject { 4 | constructor(ctx: DurableObjectState, env: Env) { 5 | super(ctx, env); 6 | console.log('[MessageCoordinator] Constructor called'); 7 | } 8 | 9 | async fetch(request: Request): Promise { 10 | console.log('[MessageCoordinator] fetch called', { 11 | method: request.method, 12 | url: request.url, 13 | upgrade: request.headers.get('Upgrade') 14 | }); 15 | 16 | if (request.headers.get('Upgrade') === 'websocket') { 17 | console.log('[MessageCoordinator] Handling WebSocket upgrade'); 18 | return this.handleWebSocket(request); 19 | } 20 | 21 | // Handle message broadcasting 22 | if (request.method === 'POST') { 23 | console.log('[MessageCoordinator] Handling POST broadcast'); 24 | const message = await request.json(); 25 | return this.broadcast(message); 26 | } 27 | 28 | return new Response('MessageCoordinator active', { status: 200 }); 29 | } 30 | 31 | private async handleWebSocket(_request: Request): Promise { 32 | console.log('[MessageCoordinator] Creating WebSocket pair'); 33 | const pair = new WebSocketPair(); 34 | const [client, server] = Object.values(pair); 35 | 36 | console.log('[MessageCoordinator] Accepting WebSocket'); 37 | this.ctx.acceptWebSocket(server); 38 | 39 | console.log('[MessageCoordinator] Returning 101 response'); 40 | return new Response(null, { status: 101, webSocket: client }); 41 | } 42 | 43 | private async broadcast(message: unknown): Promise { 44 | const messageStr = JSON.stringify(message); 45 | console.log('Broadcasting message:', messageStr); 46 | const sessions = this.ctx.getWebSockets(); 47 | 48 | for (const session of sessions) { 49 | try { 50 | session.send(messageStr); 51 | } catch { 52 | session.close(1011, 'gone'); 53 | } 54 | } 55 | return new Response('Message sent', { status: 200 }); 56 | } 57 | 58 | async webSocketOpen(ws: WebSocket) { 59 | console.log('[MessageCoordinator] WebSocket opened, total connections:', this.ctx.getWebSockets().length); 60 | } 61 | 62 | async webSocketMessage(ws: WebSocket, message: string | ArrayBuffer) { 63 | console.log('[MessageCoordinator] WebSocket message received:', message); 64 | // Handle incoming messages - broadcast to all connected clients 65 | const sessions = this.ctx.getWebSockets(); 66 | 67 | for (const session of sessions) { 68 | try { 69 | session.send(message); 70 | } catch { 71 | session.close(1011, 'gone'); 72 | } 73 | } 74 | } 75 | 76 | async webSocketClose(_ws: WebSocket, code: number, reason: string, wasClean: boolean) { 77 | console.log(`[MessageCoordinator] WebSocket closed: ${code} ${reason} (clean: ${wasClean})`); 78 | } 79 | 80 | async webSocketError(_ws: WebSocket, error: Error) { 81 | console.error('[MessageCoordinator] WebSocket error:', error); 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /backend/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | 3 | logs 4 | _.log 5 | npm-debug.log_ 6 | yarn-debug.log* 7 | yarn-error.log* 8 | lerna-debug.log* 9 | .pnpm-debug.log* 10 | 11 | # Diagnostic reports (https://nodejs.org/api/report.html) 12 | 13 | report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json 14 | 15 | # Runtime data 16 | 17 | pids 18 | _.pid 19 | _.seed 20 | \*.pid.lock 21 | 22 | # Directory for instrumented libs generated by jscoverage/JSCover 23 | 24 | lib-cov 25 | 26 | # Coverage directory used by tools like istanbul 27 | 28 | coverage 29 | \*.lcov 30 | 31 | # nyc test coverage 32 | 33 | .nyc_output 34 | 35 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 36 | 37 | .grunt 38 | 39 | # Bower dependency directory (https://bower.io/) 40 | 41 | bower_components 42 | 43 | # node-waf configuration 44 | 45 | .lock-wscript 46 | 47 | # Compiled binary addons (https://nodejs.org/api/addons.html) 48 | 49 | build/Release 50 | 51 | # Dependency directories 52 | 53 | node_modules/ 54 | jspm_packages/ 55 | 56 | # Snowpack dependency directory (https://snowpack.dev/) 57 | 58 | web_modules/ 59 | 60 | # TypeScript cache 61 | 62 | \*.tsbuildinfo 63 | 64 | # Optional npm cache directory 65 | 66 | .npm 67 | 68 | # Optional eslint cache 69 | 70 | .eslintcache 71 | 72 | # Optional stylelint cache 73 | 74 | .stylelintcache 75 | 76 | # Microbundle cache 77 | 78 | .rpt2_cache/ 79 | .rts2_cache_cjs/ 80 | .rts2_cache_es/ 81 | .rts2_cache_umd/ 82 | 83 | # Optional REPL history 84 | 85 | .node_repl_history 86 | 87 | # Output of 'npm pack' 88 | 89 | \*.tgz 90 | 91 | # Yarn Integrity file 92 | 93 | .yarn-integrity 94 | 95 | # parcel-bundler cache (https://parceljs.org/) 96 | 97 | .cache 98 | .parcel-cache 99 | 100 | # Next.js build output 101 | 102 | .next 103 | out 104 | 105 | # Nuxt.js build / generate output 106 | 107 | .nuxt 108 | dist 109 | 110 | # Gatsby files 111 | 112 | .cache/ 113 | 114 | # Comment in the public line in if your project uses Gatsby and not Next.js 115 | 116 | # https://nextjs.org/blog/next-9-1#public-directory-support 117 | 118 | # public 119 | 120 | # vuepress build output 121 | 122 | .vuepress/dist 123 | 124 | # vuepress v2.x temp and cache directory 125 | 126 | .temp 127 | .cache 128 | 129 | # Docusaurus cache and generated files 130 | 131 | .docusaurus 132 | 133 | # Serverless directories 134 | 135 | .serverless/ 136 | 137 | # FuseBox cache 138 | 139 | .fusebox/ 140 | 141 | # DynamoDB Local files 142 | 143 | .dynamodb/ 144 | 145 | # TernJS port file 146 | 147 | .tern-port 148 | 149 | # Stores VSCode versions used for testing VSCode extensions 150 | 151 | .vscode-test 152 | 153 | # yarn v2 154 | 155 | .yarn/cache 156 | .yarn/unplugged 157 | .yarn/build-state.yml 158 | .yarn/install-state.gz 159 | .pnp.\* 160 | 161 | # wrangler project 162 | 163 | .dev.vars* 164 | !.dev.vars.example 165 | .env* 166 | !.env.example 167 | .wrangler/ 168 | worker-configuration.d.ts 169 | -------------------------------------------------------------------------------- /backend/src/countdown-timer.ts: -------------------------------------------------------------------------------- 1 | import { DurableObject } from 'cloudflare:workers'; 2 | 3 | export class CountdownTimer extends DurableObject { 4 | constructor(ctx: DurableObjectState, env: Env) { 5 | super(ctx, env); 6 | console.log('[CountdownTimer] Constructor called'); 7 | } 8 | 9 | async fetch(request: Request): Promise { 10 | const url = new URL(request.url); 11 | 12 | if (url.pathname === '/start' && request.method === 'POST') { 13 | return this.startCountdown(); 14 | } 15 | 16 | if (url.pathname === '/stop' && request.method === 'POST') { 17 | return this.stopCountdown(); 18 | } 19 | 20 | return new Response('CountdownTimer active', { status: 200 }); 21 | } 22 | 23 | private async startCountdown(): Promise { 24 | // Store initial countdown state 25 | await this.ctx.storage.put('countdown', 10); 26 | await this.ctx.storage.put('active', true); 27 | 28 | // Send first message immediately 29 | await this.broadcastMessage(10); 30 | 31 | // Schedule alarm for 1 second from now 32 | await this.ctx.storage.setAlarm(Date.now() + 1000); 33 | 34 | return new Response(JSON.stringify({ success: true, message: 'Countdown started' }), { 35 | headers: { 'Content-Type': 'application/json' } 36 | }); 37 | } 38 | 39 | private async stopCountdown(): Promise { 40 | await this.ctx.storage.delete('active'); 41 | await this.ctx.storage.deleteAlarm(); 42 | return new Response(JSON.stringify({ success: true, message: 'Countdown stopped' }), { 43 | headers: { 'Content-Type': 'application/json' } 44 | }); 45 | } 46 | 47 | async alarm(): Promise { 48 | const active = await this.ctx.storage.get('active'); 49 | if (!active) { 50 | console.log('[CountdownTimer] Countdown not active, ignoring alarm'); 51 | return; 52 | } 53 | 54 | const count = await this.ctx.storage.get('countdown'); 55 | if (count === undefined || count === null) { 56 | console.log('[CountdownTimer] No countdown value found'); 57 | return; 58 | } 59 | 60 | const nextCount = count - 1; 61 | 62 | if (nextCount >= 0) { 63 | // Broadcast the current count 64 | await this.broadcastMessage(nextCount); 65 | 66 | // Update stored countdown value 67 | await this.ctx.storage.put('countdown', nextCount); 68 | 69 | // Schedule next alarm if not done 70 | if (nextCount > 0) { 71 | await this.ctx.storage.setAlarm(Date.now() + 1000); 72 | } else { 73 | // Countdown complete 74 | await this.ctx.storage.delete('active'); 75 | console.log('[CountdownTimer] Countdown complete'); 76 | } 77 | } 78 | } 79 | 80 | private async broadcastMessage(count: number): Promise { 81 | const messageCoordinatorId = this.env.MESSAGE_COORDINATOR.idFromName('global'); 82 | const stub = this.env.MESSAGE_COORDINATOR.get(messageCoordinatorId); 83 | const message = { count, timestamp: Date.now() }; 84 | 85 | try { 86 | await stub.fetch('http://do/broadcast', { 87 | method: 'POST', 88 | headers: { 'Content-Type': 'application/json' }, 89 | body: JSON.stringify(message) 90 | }); 91 | console.log(`[CountdownTimer] Broadcasted count: ${count}`); 92 | } catch (error) { 93 | console.error('[CountdownTimer] Failed to broadcast message:', error); 94 | } 95 | } 96 | } 97 | 98 | -------------------------------------------------------------------------------- /frontend/src/lib/websocket.ts: -------------------------------------------------------------------------------- 1 | import { writable, get } from 'svelte/store'; 2 | 3 | export interface WebSocketMessage { 4 | count: number; 5 | timestamp: number; 6 | } 7 | 8 | export class WebSocketManager { 9 | private ws: WebSocket | null = null; 10 | private reconnectTimeout: ReturnType | null = null; 11 | private reconnectDelay = 1000; 12 | private isExplicitDisconnect = false; 13 | private enabled = false; 14 | 15 | public status = writable<'connecting' | 'connected' | 'disconnected'>('disconnected'); 16 | public messages = writable([]); 17 | 18 | constructor() {} 19 | 20 | setEnabled(enabled: boolean) { 21 | this.enabled = enabled; 22 | if (enabled) { 23 | this.connect(); 24 | } else { 25 | this.disconnect(); 26 | } 27 | } 28 | 29 | getCurrentStatus(): 'connecting' | 'connected' | 'disconnected' { 30 | return get(this.status); 31 | } 32 | 33 | connect() { 34 | if (!this.enabled) { 35 | return; 36 | } 37 | 38 | const currentStatus = this.getCurrentStatus(); 39 | if (currentStatus === 'connecting' || currentStatus === 'connected') { 40 | return; 41 | } 42 | 43 | this.isExplicitDisconnect = false; 44 | this.status.set('connecting'); 45 | 46 | // In dev mode, connect directly to the backend worker on port 8787 47 | // In production, use the same host 48 | const isDev = import.meta.env.DEV; 49 | const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; 50 | const host = import.meta.env.VITE_WS_HOST || (isDev ? 'localhost:8787' : window.location.host); 51 | const path = import.meta.env.VITE_WS_PATH || (isDev ? '/ws/connect' : '/api/ws/connect'); 52 | const url = `${protocol}//${host}${path}`; 53 | 54 | console.log('[WebSocket] Connecting to:', url); 55 | this.ws = new WebSocket(url); 56 | 57 | this.ws.onopen = () => { 58 | this.status.set('connected'); 59 | this.reconnectDelay = 1000; 60 | }; 61 | 62 | this.ws.onmessage = (event) => { 63 | try { 64 | const message = JSON.parse(event.data) as WebSocketMessage; 65 | this.messages.update((msgs) => [...msgs, message]); 66 | } catch (err) { 67 | console.error('Failed to parse WebSocket message:', err); 68 | } 69 | }; 70 | 71 | this.ws.onclose = () => { 72 | this.status.set('disconnected'); 73 | 74 | if (!this.isExplicitDisconnect && this.enabled) { 75 | this.scheduleReconnect(); 76 | } 77 | }; 78 | 79 | this.ws.onerror = (error) => { 80 | console.error('WebSocket: Connection error:', error); 81 | this.ws?.close(); 82 | }; 83 | } 84 | 85 | private scheduleReconnect() { 86 | if (this.reconnectTimeout) return; 87 | if (!this.enabled) return; 88 | 89 | this.reconnectTimeout = setTimeout(() => { 90 | this.reconnectTimeout = null; 91 | this.reconnectDelay = Math.min(this.reconnectDelay * 2, 30000); 92 | this.connect(); 93 | }, this.reconnectDelay); 94 | } 95 | 96 | disconnect() { 97 | this.isExplicitDisconnect = true; 98 | if (this.reconnectTimeout) { 99 | clearTimeout(this.reconnectTimeout); 100 | this.reconnectTimeout = null; 101 | } 102 | 103 | this.ws?.close(); 104 | this.ws = null; 105 | this.status.set('disconnected'); 106 | } 107 | 108 | clearMessages() { 109 | this.messages.set([]); 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Sveltekit Cloudflare Multi-Workers Demo 2 | 3 | This project demonstrates [multi-worker development](https://developers.cloudflare.com/workers/development-testing/multi-workers/) with Cloudflare Workers, showcasing how to run multiple Workers locally using separate dev commands. 4 | 5 | ## Architecture 6 | 7 | - **Backend Worker** (`backend/`): A Cloudflare Worker with Durable Objects (`TestDurableObject`) 8 | - **Frontend Worker** (`frontend/`): A SvelteKit application deployed as a Cloudflare Worker that accesses the backend's Durable Objects via `script_name` binding 9 | 10 | The frontend references the backend's Durable Object namespace using the `script_name` configuration, allowing it to access Durable Objects defined in the backend Worker. 11 | 12 | ## Installation 13 | 14 | Install dependencies and generate Cloudflare types in both folders: 15 | 16 | ```bash 17 | # Backend 18 | cd backend 19 | pnpm install 20 | pnpm cf-typegen 21 | 22 | # Frontend 23 | cd frontend 24 | pnpm install 25 | pnpm cf-typegen 26 | ``` 27 | 28 | ## Development 29 | 30 | Run both Workers in separate terminals: 31 | 32 | ```bash 33 | # Terminal 1 - Backend (runs with wrangler dev) 34 | cd backend 35 | pnpm run dev 36 | 37 | # Terminal 2 - Frontend (runs with vite dev) 38 | cd frontend 39 | pnpm run dev 40 | ``` 41 | 42 | The backend runs using `wrangler dev`, while the frontend runs using `vite dev` (via the Cloudflare Vite plugin). This approach uses the "multiple dev commands" pattern, where each Worker runs independently and can communicate via service bindings or Durable Object bindings across Workers. 43 | 44 | ### Backend Environment Variables 45 | 46 | The backend worker requires `NODE_ENV` to be set for security. Direct WebSocket access to `/ws/connect` is only allowed when `NODE_ENV` is `'development'` or `'test'`. In production, WebSocket connections must go through the frontend SvelteKit handler which validates authorization. 47 | 48 | Set `NODE_ENV` in `backend/wrangler.jsonc`: 49 | 50 | ```jsonc 51 | "vars": { 52 | "NODE_ENV": "development" 53 | } 54 | ``` 55 | 56 | Or use a `.dev.vars` file in the `backend/` directory: 57 | 58 | ```bash 59 | cd backend 60 | cat > .dev.vars << EOF 61 | NODE_ENV=development 62 | EOF 63 | ``` 64 | 65 | **Note**: `.dev.vars` files are gitignored and only used in local development. For production deployments, set environment variables via `wrangler secret put` or the Cloudflare dashboard. 66 | 67 | ## WebSocket Demo 68 | 69 | The main page includes a WebSocket countdown demo that demonstrates real-time communication using Cloudflare Durable Objects. 70 | 71 | ### How it works 72 | 73 | 1. **Click "Start Countdown"** - triggers a form action that sends 11 messages (10 to 0) spaced 1 second apart 74 | 2. **Messages broadcast via WebSocket** - the `MessageCoordinator` Durable Object broadcasts to all connected clients 75 | 3. **Real-time display** - the UI updates as each countdown message arrives 76 | 77 | ### Architecture 78 | 79 | ``` 80 | Browser ←WebSocket→ MessageCoordinator (Durable Object) ←POST→ SvelteKit Action 81 | ``` 82 | 83 | - `frontend/src/lib/websocket.ts` - WebSocket client with auto-reconnect 84 | - `frontend/src/lib/components/WebSocketStatus.svelte` - Connection status indicator (red/amber/green) 85 | - `backend/src/message-coordinator.ts` - Durable Object handling WebSocket connections and broadcasting 86 | 87 | ### Dev Mode WebSocket Workaround 88 | 89 | In development, Vite's dev server intercepts all WebSocket connections for HMR (Hot Module Replacement), preventing SvelteKit routes from handling WebSocket upgrades. 90 | 91 | **Solution**: The WebSocket client connects directly to the backend worker (port 8787) in dev mode. This is configured via environment variables: 92 | 93 | - `VITE_WS_HOST` - WebSocket host (defaults to `localhost:8787` in dev, `window.location.host` in production) 94 | - `VITE_WS_PATH` - WebSocket path (defaults to `/ws/connect` in dev, `/api/ws/connect` in production) 95 | 96 | Create a `.env.dev` file in the `frontend/` directory with your development settings: 97 | 98 | ```bash 99 | cd frontend 100 | cat > .env.dev << EOF 101 | VITE_WS_HOST=localhost:8787 102 | VITE_WS_PATH=/ws/connect 103 | EOF 104 | ``` 105 | 106 | You can override these values by setting environment variables or creating a `.env.local` file. 107 | 108 | **Security Note**: The backend worker's `/ws/connect` endpoint only accepts direct connections when `NODE_ENV` is set to `'development'` or `'test'`. In production, this endpoint returns 401 Unauthorized, forcing all WebSocket connections to go through the frontend SvelteKit handler at `/api/ws/connect` which validates authorization. 109 | 110 | In production, there's no Vite server - all requests go directly through the Cloudflare Worker, so WebSocket upgrades work normally on the same origin. 111 | 112 | ## References 113 | 114 | - [Multi-Workers Development Guide](https://developers.cloudflare.com/workers/development-testing/multi-workers/) 115 | - [Durable Objects](https://developers.cloudflare.com/durable-objects/) 116 | - [SvelteKit Cloudflare Adapter](https://kit.svelte.dev/docs/adapter-cloudflare) 117 | 118 | -------------------------------------------------------------------------------- /backend/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@cloudflare/vitest-pool-workers': 12 | specifier: ^0.8.19 13 | version: 0.8.71(@vitest/runner@3.2.4)(@vitest/snapshot@3.2.4)(vitest@3.2.4) 14 | typescript: 15 | specifier: ^5.5.2 16 | version: 5.9.3 17 | vitest: 18 | specifier: ~3.2.0 19 | version: 3.2.4 20 | wrangler: 21 | specifier: ^4.51.0 22 | version: 4.51.0 23 | 24 | packages: 25 | 26 | '@cloudflare/kv-asset-handler@0.4.0': 27 | resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} 28 | engines: {node: '>=18.0.0'} 29 | 30 | '@cloudflare/kv-asset-handler@0.4.1': 31 | resolution: {integrity: sha512-Nu8ahitGFFJztxUml9oD/DLb7Z28C8cd8F46IVQ7y5Btz575pvMY8AqZsXkX7Gds29eCKdMgIHjIvzskHgPSFg==} 32 | engines: {node: '>=18.0.0'} 33 | 34 | '@cloudflare/unenv-preset@2.7.11': 35 | resolution: {integrity: sha512-se23f1D4PxKrMKOq+Stz+Yn7AJ9ITHcEecXo2Yjb+UgbUDCEBch1FXQC6hx6uT5fNA3kmX3mfzeZiUmpK1W9IQ==} 36 | peerDependencies: 37 | unenv: 2.0.0-rc.24 38 | workerd: ^1.20251106.1 39 | peerDependenciesMeta: 40 | workerd: 41 | optional: true 42 | 43 | '@cloudflare/unenv-preset@2.7.3': 44 | resolution: {integrity: sha512-tsQQagBKjvpd9baa6nWVIv399ejiqcrUBBW6SZx6Z22+ymm+Odv5+cFimyuCsD/fC1fQTwfRmwXBNpzvHSeGCw==} 45 | peerDependencies: 46 | unenv: 2.0.0-rc.21 47 | workerd: ^1.20250828.1 48 | peerDependenciesMeta: 49 | workerd: 50 | optional: true 51 | 52 | '@cloudflare/vitest-pool-workers@0.8.71': 53 | resolution: {integrity: sha512-keu2HCLQfRNwbmLBCDXJgCFpANTaYnQpE01fBOo4CNwiWHUT7SZGN7w64RKiSWRHyYppStXBuE5Ng7F42+flpg==} 54 | peerDependencies: 55 | '@vitest/runner': 2.0.x - 3.2.x 56 | '@vitest/snapshot': 2.0.x - 3.2.x 57 | vitest: 2.0.x - 3.2.x 58 | 59 | '@cloudflare/workerd-darwin-64@1.20250906.0': 60 | resolution: {integrity: sha512-E+X/YYH9BmX0ew2j/mAWFif2z05NMNuhCTlNYEGLkqMe99K15UewBqajL9pMcMUKxylnlrEoK3VNxl33DkbnPA==} 61 | engines: {node: '>=16'} 62 | cpu: [x64] 63 | os: [darwin] 64 | 65 | '@cloudflare/workerd-darwin-64@1.20251125.0': 66 | resolution: {integrity: sha512-xDIVJi8fPxBseRoEIzLiUJb0N+DXnah/ynS+Unzn58HEoKLetUWiV/T1Fhned//lo5krnToG9KRgVRs0SOOTpw==} 67 | engines: {node: '>=16'} 68 | cpu: [x64] 69 | os: [darwin] 70 | 71 | '@cloudflare/workerd-darwin-arm64@1.20250906.0': 72 | resolution: {integrity: sha512-X5apsZ1SFW4FYTM19ISHf8005FJMPfrcf4U5rO0tdj+TeJgQgXuZ57IG0WeW7SpLVeBo8hM6WC8CovZh41AfnA==} 73 | engines: {node: '>=16'} 74 | cpu: [arm64] 75 | os: [darwin] 76 | 77 | '@cloudflare/workerd-darwin-arm64@1.20251125.0': 78 | resolution: {integrity: sha512-k5FQET5PXnWjeDqZUpl4Ah/Rn0bH6mjfUtTyeAy6ky7QB3AZpwIhgWQD0vOFB3OvJaK4J/K4cUtNChYXB9mY/A==} 79 | engines: {node: '>=16'} 80 | cpu: [arm64] 81 | os: [darwin] 82 | 83 | '@cloudflare/workerd-linux-64@1.20250906.0': 84 | resolution: {integrity: sha512-rlKzWgsLnlQ5Nt9W69YBJKcmTmZbOGu0edUsenXPmc6wzULUxoQpi7ZE9k3TfTonJx4WoQsQlzCUamRYFsX+0Q==} 85 | engines: {node: '>=16'} 86 | cpu: [x64] 87 | os: [linux] 88 | 89 | '@cloudflare/workerd-linux-64@1.20251125.0': 90 | resolution: {integrity: sha512-at6n/FomkftykWx0EqVLUZ0juUFz3ORtEPeBbW9ZZ3BQEyfVUtYfdcz/f1cN8Yyb7TE9ovF071P0mBRkx83ODw==} 91 | engines: {node: '>=16'} 92 | cpu: [x64] 93 | os: [linux] 94 | 95 | '@cloudflare/workerd-linux-arm64@1.20250906.0': 96 | resolution: {integrity: sha512-DdedhiQ+SeLzpg7BpcLrIPEZ33QKioJQ1wvL4X7nuLzEB9rWzS37NNNahQzc1+44rhG4fyiHbXBPOeox4B9XVA==} 97 | engines: {node: '>=16'} 98 | cpu: [arm64] 99 | os: [linux] 100 | 101 | '@cloudflare/workerd-linux-arm64@1.20251125.0': 102 | resolution: {integrity: sha512-EiRn+jrNaIs1QveabXGHFoyn3s/l02ui6Yp3nssyNhtmtgviddtt8KObBfM1jQKjXTpZlunhwdN4Bxf4jhlOMw==} 103 | engines: {node: '>=16'} 104 | cpu: [arm64] 105 | os: [linux] 106 | 107 | '@cloudflare/workerd-windows-64@1.20250906.0': 108 | resolution: {integrity: sha512-Q8Qjfs8jGVILnZL6vUpQ90q/8MTCYaGR3d1LGxZMBqte8Vr7xF3KFHPEy7tFs0j0mMjnqCYzlofmPNY+9ZaDRg==} 109 | engines: {node: '>=16'} 110 | cpu: [x64] 111 | os: [win32] 112 | 113 | '@cloudflare/workerd-windows-64@1.20251125.0': 114 | resolution: {integrity: sha512-6fdIsSeu65g++k8Y2DKzNKs0BkoU+KKI6GAAVBOLh2vvVWWnCP1OgMdVb5JAdjDrjDT5i0GSQu0bgQ8fPsW6zw==} 115 | engines: {node: '>=16'} 116 | cpu: [x64] 117 | os: [win32] 118 | 119 | '@cspotcode/source-map-support@0.8.1': 120 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 121 | engines: {node: '>=12'} 122 | 123 | '@emnapi/runtime@1.7.1': 124 | resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} 125 | 126 | '@esbuild/aix-ppc64@0.25.12': 127 | resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} 128 | engines: {node: '>=18'} 129 | cpu: [ppc64] 130 | os: [aix] 131 | 132 | '@esbuild/aix-ppc64@0.25.4': 133 | resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} 134 | engines: {node: '>=18'} 135 | cpu: [ppc64] 136 | os: [aix] 137 | 138 | '@esbuild/android-arm64@0.25.12': 139 | resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} 140 | engines: {node: '>=18'} 141 | cpu: [arm64] 142 | os: [android] 143 | 144 | '@esbuild/android-arm64@0.25.4': 145 | resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} 146 | engines: {node: '>=18'} 147 | cpu: [arm64] 148 | os: [android] 149 | 150 | '@esbuild/android-arm@0.25.12': 151 | resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} 152 | engines: {node: '>=18'} 153 | cpu: [arm] 154 | os: [android] 155 | 156 | '@esbuild/android-arm@0.25.4': 157 | resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} 158 | engines: {node: '>=18'} 159 | cpu: [arm] 160 | os: [android] 161 | 162 | '@esbuild/android-x64@0.25.12': 163 | resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} 164 | engines: {node: '>=18'} 165 | cpu: [x64] 166 | os: [android] 167 | 168 | '@esbuild/android-x64@0.25.4': 169 | resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} 170 | engines: {node: '>=18'} 171 | cpu: [x64] 172 | os: [android] 173 | 174 | '@esbuild/darwin-arm64@0.25.12': 175 | resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} 176 | engines: {node: '>=18'} 177 | cpu: [arm64] 178 | os: [darwin] 179 | 180 | '@esbuild/darwin-arm64@0.25.4': 181 | resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} 182 | engines: {node: '>=18'} 183 | cpu: [arm64] 184 | os: [darwin] 185 | 186 | '@esbuild/darwin-x64@0.25.12': 187 | resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} 188 | engines: {node: '>=18'} 189 | cpu: [x64] 190 | os: [darwin] 191 | 192 | '@esbuild/darwin-x64@0.25.4': 193 | resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} 194 | engines: {node: '>=18'} 195 | cpu: [x64] 196 | os: [darwin] 197 | 198 | '@esbuild/freebsd-arm64@0.25.12': 199 | resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} 200 | engines: {node: '>=18'} 201 | cpu: [arm64] 202 | os: [freebsd] 203 | 204 | '@esbuild/freebsd-arm64@0.25.4': 205 | resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} 206 | engines: {node: '>=18'} 207 | cpu: [arm64] 208 | os: [freebsd] 209 | 210 | '@esbuild/freebsd-x64@0.25.12': 211 | resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} 212 | engines: {node: '>=18'} 213 | cpu: [x64] 214 | os: [freebsd] 215 | 216 | '@esbuild/freebsd-x64@0.25.4': 217 | resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} 218 | engines: {node: '>=18'} 219 | cpu: [x64] 220 | os: [freebsd] 221 | 222 | '@esbuild/linux-arm64@0.25.12': 223 | resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} 224 | engines: {node: '>=18'} 225 | cpu: [arm64] 226 | os: [linux] 227 | 228 | '@esbuild/linux-arm64@0.25.4': 229 | resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} 230 | engines: {node: '>=18'} 231 | cpu: [arm64] 232 | os: [linux] 233 | 234 | '@esbuild/linux-arm@0.25.12': 235 | resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} 236 | engines: {node: '>=18'} 237 | cpu: [arm] 238 | os: [linux] 239 | 240 | '@esbuild/linux-arm@0.25.4': 241 | resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} 242 | engines: {node: '>=18'} 243 | cpu: [arm] 244 | os: [linux] 245 | 246 | '@esbuild/linux-ia32@0.25.12': 247 | resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} 248 | engines: {node: '>=18'} 249 | cpu: [ia32] 250 | os: [linux] 251 | 252 | '@esbuild/linux-ia32@0.25.4': 253 | resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} 254 | engines: {node: '>=18'} 255 | cpu: [ia32] 256 | os: [linux] 257 | 258 | '@esbuild/linux-loong64@0.25.12': 259 | resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} 260 | engines: {node: '>=18'} 261 | cpu: [loong64] 262 | os: [linux] 263 | 264 | '@esbuild/linux-loong64@0.25.4': 265 | resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} 266 | engines: {node: '>=18'} 267 | cpu: [loong64] 268 | os: [linux] 269 | 270 | '@esbuild/linux-mips64el@0.25.12': 271 | resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} 272 | engines: {node: '>=18'} 273 | cpu: [mips64el] 274 | os: [linux] 275 | 276 | '@esbuild/linux-mips64el@0.25.4': 277 | resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} 278 | engines: {node: '>=18'} 279 | cpu: [mips64el] 280 | os: [linux] 281 | 282 | '@esbuild/linux-ppc64@0.25.12': 283 | resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} 284 | engines: {node: '>=18'} 285 | cpu: [ppc64] 286 | os: [linux] 287 | 288 | '@esbuild/linux-ppc64@0.25.4': 289 | resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} 290 | engines: {node: '>=18'} 291 | cpu: [ppc64] 292 | os: [linux] 293 | 294 | '@esbuild/linux-riscv64@0.25.12': 295 | resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} 296 | engines: {node: '>=18'} 297 | cpu: [riscv64] 298 | os: [linux] 299 | 300 | '@esbuild/linux-riscv64@0.25.4': 301 | resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} 302 | engines: {node: '>=18'} 303 | cpu: [riscv64] 304 | os: [linux] 305 | 306 | '@esbuild/linux-s390x@0.25.12': 307 | resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} 308 | engines: {node: '>=18'} 309 | cpu: [s390x] 310 | os: [linux] 311 | 312 | '@esbuild/linux-s390x@0.25.4': 313 | resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} 314 | engines: {node: '>=18'} 315 | cpu: [s390x] 316 | os: [linux] 317 | 318 | '@esbuild/linux-x64@0.25.12': 319 | resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} 320 | engines: {node: '>=18'} 321 | cpu: [x64] 322 | os: [linux] 323 | 324 | '@esbuild/linux-x64@0.25.4': 325 | resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} 326 | engines: {node: '>=18'} 327 | cpu: [x64] 328 | os: [linux] 329 | 330 | '@esbuild/netbsd-arm64@0.25.12': 331 | resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} 332 | engines: {node: '>=18'} 333 | cpu: [arm64] 334 | os: [netbsd] 335 | 336 | '@esbuild/netbsd-arm64@0.25.4': 337 | resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} 338 | engines: {node: '>=18'} 339 | cpu: [arm64] 340 | os: [netbsd] 341 | 342 | '@esbuild/netbsd-x64@0.25.12': 343 | resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} 344 | engines: {node: '>=18'} 345 | cpu: [x64] 346 | os: [netbsd] 347 | 348 | '@esbuild/netbsd-x64@0.25.4': 349 | resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} 350 | engines: {node: '>=18'} 351 | cpu: [x64] 352 | os: [netbsd] 353 | 354 | '@esbuild/openbsd-arm64@0.25.12': 355 | resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} 356 | engines: {node: '>=18'} 357 | cpu: [arm64] 358 | os: [openbsd] 359 | 360 | '@esbuild/openbsd-arm64@0.25.4': 361 | resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} 362 | engines: {node: '>=18'} 363 | cpu: [arm64] 364 | os: [openbsd] 365 | 366 | '@esbuild/openbsd-x64@0.25.12': 367 | resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} 368 | engines: {node: '>=18'} 369 | cpu: [x64] 370 | os: [openbsd] 371 | 372 | '@esbuild/openbsd-x64@0.25.4': 373 | resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} 374 | engines: {node: '>=18'} 375 | cpu: [x64] 376 | os: [openbsd] 377 | 378 | '@esbuild/openharmony-arm64@0.25.12': 379 | resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} 380 | engines: {node: '>=18'} 381 | cpu: [arm64] 382 | os: [openharmony] 383 | 384 | '@esbuild/sunos-x64@0.25.12': 385 | resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} 386 | engines: {node: '>=18'} 387 | cpu: [x64] 388 | os: [sunos] 389 | 390 | '@esbuild/sunos-x64@0.25.4': 391 | resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} 392 | engines: {node: '>=18'} 393 | cpu: [x64] 394 | os: [sunos] 395 | 396 | '@esbuild/win32-arm64@0.25.12': 397 | resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} 398 | engines: {node: '>=18'} 399 | cpu: [arm64] 400 | os: [win32] 401 | 402 | '@esbuild/win32-arm64@0.25.4': 403 | resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} 404 | engines: {node: '>=18'} 405 | cpu: [arm64] 406 | os: [win32] 407 | 408 | '@esbuild/win32-ia32@0.25.12': 409 | resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} 410 | engines: {node: '>=18'} 411 | cpu: [ia32] 412 | os: [win32] 413 | 414 | '@esbuild/win32-ia32@0.25.4': 415 | resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} 416 | engines: {node: '>=18'} 417 | cpu: [ia32] 418 | os: [win32] 419 | 420 | '@esbuild/win32-x64@0.25.12': 421 | resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} 422 | engines: {node: '>=18'} 423 | cpu: [x64] 424 | os: [win32] 425 | 426 | '@esbuild/win32-x64@0.25.4': 427 | resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} 428 | engines: {node: '>=18'} 429 | cpu: [x64] 430 | os: [win32] 431 | 432 | '@img/sharp-darwin-arm64@0.33.5': 433 | resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} 434 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 435 | cpu: [arm64] 436 | os: [darwin] 437 | 438 | '@img/sharp-darwin-x64@0.33.5': 439 | resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} 440 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 441 | cpu: [x64] 442 | os: [darwin] 443 | 444 | '@img/sharp-libvips-darwin-arm64@1.0.4': 445 | resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} 446 | cpu: [arm64] 447 | os: [darwin] 448 | 449 | '@img/sharp-libvips-darwin-x64@1.0.4': 450 | resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} 451 | cpu: [x64] 452 | os: [darwin] 453 | 454 | '@img/sharp-libvips-linux-arm64@1.0.4': 455 | resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} 456 | cpu: [arm64] 457 | os: [linux] 458 | 459 | '@img/sharp-libvips-linux-arm@1.0.5': 460 | resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} 461 | cpu: [arm] 462 | os: [linux] 463 | 464 | '@img/sharp-libvips-linux-s390x@1.0.4': 465 | resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} 466 | cpu: [s390x] 467 | os: [linux] 468 | 469 | '@img/sharp-libvips-linux-x64@1.0.4': 470 | resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} 471 | cpu: [x64] 472 | os: [linux] 473 | 474 | '@img/sharp-libvips-linuxmusl-arm64@1.0.4': 475 | resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} 476 | cpu: [arm64] 477 | os: [linux] 478 | 479 | '@img/sharp-libvips-linuxmusl-x64@1.0.4': 480 | resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} 481 | cpu: [x64] 482 | os: [linux] 483 | 484 | '@img/sharp-linux-arm64@0.33.5': 485 | resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} 486 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 487 | cpu: [arm64] 488 | os: [linux] 489 | 490 | '@img/sharp-linux-arm@0.33.5': 491 | resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} 492 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 493 | cpu: [arm] 494 | os: [linux] 495 | 496 | '@img/sharp-linux-s390x@0.33.5': 497 | resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} 498 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 499 | cpu: [s390x] 500 | os: [linux] 501 | 502 | '@img/sharp-linux-x64@0.33.5': 503 | resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} 504 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 505 | cpu: [x64] 506 | os: [linux] 507 | 508 | '@img/sharp-linuxmusl-arm64@0.33.5': 509 | resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} 510 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 511 | cpu: [arm64] 512 | os: [linux] 513 | 514 | '@img/sharp-linuxmusl-x64@0.33.5': 515 | resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} 516 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 517 | cpu: [x64] 518 | os: [linux] 519 | 520 | '@img/sharp-wasm32@0.33.5': 521 | resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} 522 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 523 | cpu: [wasm32] 524 | 525 | '@img/sharp-win32-ia32@0.33.5': 526 | resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} 527 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 528 | cpu: [ia32] 529 | os: [win32] 530 | 531 | '@img/sharp-win32-x64@0.33.5': 532 | resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} 533 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 534 | cpu: [x64] 535 | os: [win32] 536 | 537 | '@jridgewell/resolve-uri@3.1.2': 538 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 539 | engines: {node: '>=6.0.0'} 540 | 541 | '@jridgewell/sourcemap-codec@1.5.5': 542 | resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 543 | 544 | '@jridgewell/trace-mapping@0.3.9': 545 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 546 | 547 | '@poppinss/colors@4.1.5': 548 | resolution: {integrity: sha512-FvdDqtcRCtz6hThExcFOgW0cWX+xwSMWcRuQe5ZEb2m7cVQOAVZOIMt+/v9RxGiD9/OY16qJBXK4CVKWAPalBw==} 549 | 550 | '@poppinss/dumper@0.6.5': 551 | resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==} 552 | 553 | '@poppinss/exception@1.2.2': 554 | resolution: {integrity: sha512-m7bpKCD4QMlFCjA/nKTs23fuvoVFoA83brRKmObCUNmi/9tVu8Ve3w4YQAnJu4q3Tjf5fr685HYIC/IA2zHRSg==} 555 | 556 | '@rollup/rollup-android-arm-eabi@4.53.3': 557 | resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} 558 | cpu: [arm] 559 | os: [android] 560 | 561 | '@rollup/rollup-android-arm64@4.53.3': 562 | resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} 563 | cpu: [arm64] 564 | os: [android] 565 | 566 | '@rollup/rollup-darwin-arm64@4.53.3': 567 | resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} 568 | cpu: [arm64] 569 | os: [darwin] 570 | 571 | '@rollup/rollup-darwin-x64@4.53.3': 572 | resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} 573 | cpu: [x64] 574 | os: [darwin] 575 | 576 | '@rollup/rollup-freebsd-arm64@4.53.3': 577 | resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} 578 | cpu: [arm64] 579 | os: [freebsd] 580 | 581 | '@rollup/rollup-freebsd-x64@4.53.3': 582 | resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} 583 | cpu: [x64] 584 | os: [freebsd] 585 | 586 | '@rollup/rollup-linux-arm-gnueabihf@4.53.3': 587 | resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} 588 | cpu: [arm] 589 | os: [linux] 590 | 591 | '@rollup/rollup-linux-arm-musleabihf@4.53.3': 592 | resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} 593 | cpu: [arm] 594 | os: [linux] 595 | 596 | '@rollup/rollup-linux-arm64-gnu@4.53.3': 597 | resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} 598 | cpu: [arm64] 599 | os: [linux] 600 | 601 | '@rollup/rollup-linux-arm64-musl@4.53.3': 602 | resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} 603 | cpu: [arm64] 604 | os: [linux] 605 | 606 | '@rollup/rollup-linux-loong64-gnu@4.53.3': 607 | resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} 608 | cpu: [loong64] 609 | os: [linux] 610 | 611 | '@rollup/rollup-linux-ppc64-gnu@4.53.3': 612 | resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} 613 | cpu: [ppc64] 614 | os: [linux] 615 | 616 | '@rollup/rollup-linux-riscv64-gnu@4.53.3': 617 | resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} 618 | cpu: [riscv64] 619 | os: [linux] 620 | 621 | '@rollup/rollup-linux-riscv64-musl@4.53.3': 622 | resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} 623 | cpu: [riscv64] 624 | os: [linux] 625 | 626 | '@rollup/rollup-linux-s390x-gnu@4.53.3': 627 | resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} 628 | cpu: [s390x] 629 | os: [linux] 630 | 631 | '@rollup/rollup-linux-x64-gnu@4.53.3': 632 | resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} 633 | cpu: [x64] 634 | os: [linux] 635 | 636 | '@rollup/rollup-linux-x64-musl@4.53.3': 637 | resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} 638 | cpu: [x64] 639 | os: [linux] 640 | 641 | '@rollup/rollup-openharmony-arm64@4.53.3': 642 | resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} 643 | cpu: [arm64] 644 | os: [openharmony] 645 | 646 | '@rollup/rollup-win32-arm64-msvc@4.53.3': 647 | resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} 648 | cpu: [arm64] 649 | os: [win32] 650 | 651 | '@rollup/rollup-win32-ia32-msvc@4.53.3': 652 | resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} 653 | cpu: [ia32] 654 | os: [win32] 655 | 656 | '@rollup/rollup-win32-x64-gnu@4.53.3': 657 | resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} 658 | cpu: [x64] 659 | os: [win32] 660 | 661 | '@rollup/rollup-win32-x64-msvc@4.53.3': 662 | resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} 663 | cpu: [x64] 664 | os: [win32] 665 | 666 | '@sindresorhus/is@7.1.1': 667 | resolution: {integrity: sha512-rO92VvpgMc3kfiTjGT52LEtJ8Yc5kCWhZjLQ3LwlA4pSgPpQO7bVpYXParOD8Jwf+cVQECJo3yP/4I8aZtUQTQ==} 668 | engines: {node: '>=18'} 669 | 670 | '@speed-highlight/core@1.2.12': 671 | resolution: {integrity: sha512-uilwrK0Ygyri5dToHYdZSjcvpS2ZwX0w5aSt3GCEN9hrjxWCoeV4Z2DTXuxjwbntaLQIEEAlCeNQss5SoHvAEA==} 672 | 673 | '@types/chai@5.2.3': 674 | resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} 675 | 676 | '@types/deep-eql@4.0.2': 677 | resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} 678 | 679 | '@types/estree@1.0.8': 680 | resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 681 | 682 | '@vitest/expect@3.2.4': 683 | resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} 684 | 685 | '@vitest/mocker@3.2.4': 686 | resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} 687 | peerDependencies: 688 | msw: ^2.4.9 689 | vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 690 | peerDependenciesMeta: 691 | msw: 692 | optional: true 693 | vite: 694 | optional: true 695 | 696 | '@vitest/pretty-format@3.2.4': 697 | resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} 698 | 699 | '@vitest/runner@3.2.4': 700 | resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} 701 | 702 | '@vitest/snapshot@3.2.4': 703 | resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} 704 | 705 | '@vitest/spy@3.2.4': 706 | resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} 707 | 708 | '@vitest/utils@3.2.4': 709 | resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} 710 | 711 | acorn-walk@8.3.2: 712 | resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} 713 | engines: {node: '>=0.4.0'} 714 | 715 | acorn@8.14.0: 716 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 717 | engines: {node: '>=0.4.0'} 718 | hasBin: true 719 | 720 | assertion-error@2.0.1: 721 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 722 | engines: {node: '>=12'} 723 | 724 | birpc@0.2.14: 725 | resolution: {integrity: sha512-37FHE8rqsYM5JEKCnXFyHpBCzvgHEExwVVTq+nUmloInU7l8ezD1TpOhKpS8oe1DTYFqEK27rFZVKG43oTqXRA==} 726 | 727 | blake3-wasm@2.1.5: 728 | resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} 729 | 730 | cac@6.7.14: 731 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 732 | engines: {node: '>=8'} 733 | 734 | chai@5.3.3: 735 | resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} 736 | engines: {node: '>=18'} 737 | 738 | check-error@2.1.1: 739 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 740 | engines: {node: '>= 16'} 741 | 742 | cjs-module-lexer@1.4.3: 743 | resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} 744 | 745 | color-convert@2.0.1: 746 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 747 | engines: {node: '>=7.0.0'} 748 | 749 | color-name@1.1.4: 750 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 751 | 752 | color-string@1.9.1: 753 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} 754 | 755 | color@4.2.3: 756 | resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} 757 | engines: {node: '>=12.5.0'} 758 | 759 | cookie@1.1.1: 760 | resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} 761 | engines: {node: '>=18'} 762 | 763 | debug@4.4.3: 764 | resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 765 | engines: {node: '>=6.0'} 766 | peerDependencies: 767 | supports-color: '*' 768 | peerDependenciesMeta: 769 | supports-color: 770 | optional: true 771 | 772 | deep-eql@5.0.2: 773 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 774 | engines: {node: '>=6'} 775 | 776 | defu@6.1.4: 777 | resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} 778 | 779 | detect-libc@2.1.2: 780 | resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} 781 | engines: {node: '>=8'} 782 | 783 | devalue@5.5.0: 784 | resolution: {integrity: sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==} 785 | 786 | error-stack-parser-es@1.0.5: 787 | resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} 788 | 789 | es-module-lexer@1.7.0: 790 | resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} 791 | 792 | esbuild@0.25.12: 793 | resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} 794 | engines: {node: '>=18'} 795 | hasBin: true 796 | 797 | esbuild@0.25.4: 798 | resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} 799 | engines: {node: '>=18'} 800 | hasBin: true 801 | 802 | estree-walker@3.0.3: 803 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 804 | 805 | exit-hook@2.2.1: 806 | resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} 807 | engines: {node: '>=6'} 808 | 809 | expect-type@1.2.2: 810 | resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} 811 | engines: {node: '>=12.0.0'} 812 | 813 | exsolve@1.0.8: 814 | resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} 815 | 816 | fdir@6.5.0: 817 | resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 818 | engines: {node: '>=12.0.0'} 819 | peerDependencies: 820 | picomatch: ^3 || ^4 821 | peerDependenciesMeta: 822 | picomatch: 823 | optional: true 824 | 825 | fsevents@2.3.3: 826 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 827 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 828 | os: [darwin] 829 | 830 | glob-to-regexp@0.4.1: 831 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} 832 | 833 | is-arrayish@0.3.4: 834 | resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} 835 | 836 | js-tokens@9.0.1: 837 | resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} 838 | 839 | kleur@4.1.5: 840 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 841 | engines: {node: '>=6'} 842 | 843 | loupe@3.2.1: 844 | resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} 845 | 846 | magic-string@0.30.21: 847 | resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 848 | 849 | mime@3.0.0: 850 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} 851 | engines: {node: '>=10.0.0'} 852 | hasBin: true 853 | 854 | miniflare@4.20250906.0: 855 | resolution: {integrity: sha512-T/RWn1sa0ien80s6NjU+Un/tj12gR6wqScZoiLeMJDD4/fK0UXfnbWXJDubnUED8Xjm7RPQ5ESYdE+mhPmMtuQ==} 856 | engines: {node: '>=18.0.0'} 857 | hasBin: true 858 | 859 | miniflare@4.20251125.0: 860 | resolution: {integrity: sha512-xY6deLx0Drt8GfGG2Fv0fHUocHAIG/Iv62Kl36TPfDzgq7/+DQ5gYNisxnmyISQdA/sm7kOvn2XRBncxjWYrLg==} 861 | engines: {node: '>=18.0.0'} 862 | hasBin: true 863 | 864 | ms@2.1.3: 865 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 866 | 867 | nanoid@3.3.11: 868 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 869 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 870 | hasBin: true 871 | 872 | ohash@2.0.11: 873 | resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} 874 | 875 | path-to-regexp@6.3.0: 876 | resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} 877 | 878 | pathe@2.0.3: 879 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 880 | 881 | pathval@2.0.1: 882 | resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} 883 | engines: {node: '>= 14.16'} 884 | 885 | picocolors@1.1.1: 886 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 887 | 888 | picomatch@4.0.3: 889 | resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 890 | engines: {node: '>=12'} 891 | 892 | postcss@8.5.6: 893 | resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 894 | engines: {node: ^10 || ^12 || >=14} 895 | 896 | rollup@4.53.3: 897 | resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} 898 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 899 | hasBin: true 900 | 901 | semver@7.7.3: 902 | resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} 903 | engines: {node: '>=10'} 904 | hasBin: true 905 | 906 | sharp@0.33.5: 907 | resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} 908 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 909 | 910 | siginfo@2.0.0: 911 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 912 | 913 | simple-swizzle@0.2.4: 914 | resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} 915 | 916 | source-map-js@1.2.1: 917 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 918 | engines: {node: '>=0.10.0'} 919 | 920 | stackback@0.0.2: 921 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 922 | 923 | std-env@3.10.0: 924 | resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} 925 | 926 | stoppable@1.1.0: 927 | resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} 928 | engines: {node: '>=4', npm: '>=6'} 929 | 930 | strip-literal@3.1.0: 931 | resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} 932 | 933 | supports-color@10.2.2: 934 | resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} 935 | engines: {node: '>=18'} 936 | 937 | tinybench@2.9.0: 938 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 939 | 940 | tinyexec@0.3.2: 941 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 942 | 943 | tinyglobby@0.2.15: 944 | resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 945 | engines: {node: '>=12.0.0'} 946 | 947 | tinypool@1.1.1: 948 | resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} 949 | engines: {node: ^18.0.0 || >=20.0.0} 950 | 951 | tinyrainbow@2.0.0: 952 | resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} 953 | engines: {node: '>=14.0.0'} 954 | 955 | tinyspy@4.0.4: 956 | resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} 957 | engines: {node: '>=14.0.0'} 958 | 959 | tslib@2.8.1: 960 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 961 | 962 | typescript@5.9.3: 963 | resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 964 | engines: {node: '>=14.17'} 965 | hasBin: true 966 | 967 | ufo@1.6.1: 968 | resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} 969 | 970 | undici@7.14.0: 971 | resolution: {integrity: sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==} 972 | engines: {node: '>=20.18.1'} 973 | 974 | undici@7.16.0: 975 | resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==} 976 | engines: {node: '>=20.18.1'} 977 | 978 | unenv@2.0.0-rc.21: 979 | resolution: {integrity: sha512-Wj7/AMtE9MRnAXa6Su3Lk0LNCfqDYgfwVjwRFVum9U7wsto1imuHqk4kTm7Jni+5A0Hn7dttL6O/zjvUvoo+8A==} 980 | 981 | unenv@2.0.0-rc.24: 982 | resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} 983 | 984 | vite-node@3.2.4: 985 | resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} 986 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 987 | hasBin: true 988 | 989 | vite@7.2.4: 990 | resolution: {integrity: sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==} 991 | engines: {node: ^20.19.0 || >=22.12.0} 992 | hasBin: true 993 | peerDependencies: 994 | '@types/node': ^20.19.0 || >=22.12.0 995 | jiti: '>=1.21.0' 996 | less: ^4.0.0 997 | lightningcss: ^1.21.0 998 | sass: ^1.70.0 999 | sass-embedded: ^1.70.0 1000 | stylus: '>=0.54.8' 1001 | sugarss: ^5.0.0 1002 | terser: ^5.16.0 1003 | tsx: ^4.8.1 1004 | yaml: ^2.4.2 1005 | peerDependenciesMeta: 1006 | '@types/node': 1007 | optional: true 1008 | jiti: 1009 | optional: true 1010 | less: 1011 | optional: true 1012 | lightningcss: 1013 | optional: true 1014 | sass: 1015 | optional: true 1016 | sass-embedded: 1017 | optional: true 1018 | stylus: 1019 | optional: true 1020 | sugarss: 1021 | optional: true 1022 | terser: 1023 | optional: true 1024 | tsx: 1025 | optional: true 1026 | yaml: 1027 | optional: true 1028 | 1029 | vitest@3.2.4: 1030 | resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} 1031 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1032 | hasBin: true 1033 | peerDependencies: 1034 | '@edge-runtime/vm': '*' 1035 | '@types/debug': ^4.1.12 1036 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1037 | '@vitest/browser': 3.2.4 1038 | '@vitest/ui': 3.2.4 1039 | happy-dom: '*' 1040 | jsdom: '*' 1041 | peerDependenciesMeta: 1042 | '@edge-runtime/vm': 1043 | optional: true 1044 | '@types/debug': 1045 | optional: true 1046 | '@types/node': 1047 | optional: true 1048 | '@vitest/browser': 1049 | optional: true 1050 | '@vitest/ui': 1051 | optional: true 1052 | happy-dom: 1053 | optional: true 1054 | jsdom: 1055 | optional: true 1056 | 1057 | why-is-node-running@2.3.0: 1058 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 1059 | engines: {node: '>=8'} 1060 | hasBin: true 1061 | 1062 | workerd@1.20250906.0: 1063 | resolution: {integrity: sha512-ryVyEaqXPPsr/AxccRmYZZmDAkfQVjhfRqrNTlEeN8aftBk6Ca1u7/VqmfOayjCXrA+O547TauebU+J3IpvFXw==} 1064 | engines: {node: '>=16'} 1065 | hasBin: true 1066 | 1067 | workerd@1.20251125.0: 1068 | resolution: {integrity: sha512-oQYfgu3UZ15HlMcEyilKD1RdielRnKSG5MA0xoi1theVs99Rop9AEFYicYCyK1R4YjYblLRYEiL1tMgEFqpReA==} 1069 | engines: {node: '>=16'} 1070 | hasBin: true 1071 | 1072 | wrangler@4.35.0: 1073 | resolution: {integrity: sha512-HbyXtbrh4Fi3mU8ussY85tVdQ74qpVS1vctUgaPc+bPrXBTqfDLkZ6VRtHAVF/eBhz4SFmhJtCQpN1caY2Ak8A==} 1074 | engines: {node: '>=18.0.0'} 1075 | hasBin: true 1076 | peerDependencies: 1077 | '@cloudflare/workers-types': ^4.20250906.0 1078 | peerDependenciesMeta: 1079 | '@cloudflare/workers-types': 1080 | optional: true 1081 | 1082 | wrangler@4.51.0: 1083 | resolution: {integrity: sha512-JHv+58UxM2//e4kf9ASDwg016xd/OdDNDUKW6zLQyE7Uc9ayYKX1QJ9NsYtpo4dC1dfg6rT67pf1aNK1cTzUDg==} 1084 | engines: {node: '>=20.0.0'} 1085 | hasBin: true 1086 | peerDependencies: 1087 | '@cloudflare/workers-types': ^4.20251125.0 1088 | peerDependenciesMeta: 1089 | '@cloudflare/workers-types': 1090 | optional: true 1091 | 1092 | ws@8.18.0: 1093 | resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} 1094 | engines: {node: '>=10.0.0'} 1095 | peerDependencies: 1096 | bufferutil: ^4.0.1 1097 | utf-8-validate: '>=5.0.2' 1098 | peerDependenciesMeta: 1099 | bufferutil: 1100 | optional: true 1101 | utf-8-validate: 1102 | optional: true 1103 | 1104 | youch-core@0.3.3: 1105 | resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==} 1106 | 1107 | youch@4.1.0-beta.10: 1108 | resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} 1109 | 1110 | zod@3.22.3: 1111 | resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} 1112 | 1113 | zod@3.25.76: 1114 | resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} 1115 | 1116 | snapshots: 1117 | 1118 | '@cloudflare/kv-asset-handler@0.4.0': 1119 | dependencies: 1120 | mime: 3.0.0 1121 | 1122 | '@cloudflare/kv-asset-handler@0.4.1': 1123 | dependencies: 1124 | mime: 3.0.0 1125 | 1126 | '@cloudflare/unenv-preset@2.7.11(unenv@2.0.0-rc.24)(workerd@1.20251125.0)': 1127 | dependencies: 1128 | unenv: 2.0.0-rc.24 1129 | optionalDependencies: 1130 | workerd: 1.20251125.0 1131 | 1132 | '@cloudflare/unenv-preset@2.7.3(unenv@2.0.0-rc.21)(workerd@1.20250906.0)': 1133 | dependencies: 1134 | unenv: 2.0.0-rc.21 1135 | optionalDependencies: 1136 | workerd: 1.20250906.0 1137 | 1138 | '@cloudflare/vitest-pool-workers@0.8.71(@vitest/runner@3.2.4)(@vitest/snapshot@3.2.4)(vitest@3.2.4)': 1139 | dependencies: 1140 | '@vitest/runner': 3.2.4 1141 | '@vitest/snapshot': 3.2.4 1142 | birpc: 0.2.14 1143 | cjs-module-lexer: 1.4.3 1144 | devalue: 5.5.0 1145 | miniflare: 4.20250906.0 1146 | semver: 7.7.3 1147 | vitest: 3.2.4 1148 | wrangler: 4.35.0 1149 | zod: 3.25.76 1150 | transitivePeerDependencies: 1151 | - '@cloudflare/workers-types' 1152 | - bufferutil 1153 | - utf-8-validate 1154 | 1155 | '@cloudflare/workerd-darwin-64@1.20250906.0': 1156 | optional: true 1157 | 1158 | '@cloudflare/workerd-darwin-64@1.20251125.0': 1159 | optional: true 1160 | 1161 | '@cloudflare/workerd-darwin-arm64@1.20250906.0': 1162 | optional: true 1163 | 1164 | '@cloudflare/workerd-darwin-arm64@1.20251125.0': 1165 | optional: true 1166 | 1167 | '@cloudflare/workerd-linux-64@1.20250906.0': 1168 | optional: true 1169 | 1170 | '@cloudflare/workerd-linux-64@1.20251125.0': 1171 | optional: true 1172 | 1173 | '@cloudflare/workerd-linux-arm64@1.20250906.0': 1174 | optional: true 1175 | 1176 | '@cloudflare/workerd-linux-arm64@1.20251125.0': 1177 | optional: true 1178 | 1179 | '@cloudflare/workerd-windows-64@1.20250906.0': 1180 | optional: true 1181 | 1182 | '@cloudflare/workerd-windows-64@1.20251125.0': 1183 | optional: true 1184 | 1185 | '@cspotcode/source-map-support@0.8.1': 1186 | dependencies: 1187 | '@jridgewell/trace-mapping': 0.3.9 1188 | 1189 | '@emnapi/runtime@1.7.1': 1190 | dependencies: 1191 | tslib: 2.8.1 1192 | optional: true 1193 | 1194 | '@esbuild/aix-ppc64@0.25.12': 1195 | optional: true 1196 | 1197 | '@esbuild/aix-ppc64@0.25.4': 1198 | optional: true 1199 | 1200 | '@esbuild/android-arm64@0.25.12': 1201 | optional: true 1202 | 1203 | '@esbuild/android-arm64@0.25.4': 1204 | optional: true 1205 | 1206 | '@esbuild/android-arm@0.25.12': 1207 | optional: true 1208 | 1209 | '@esbuild/android-arm@0.25.4': 1210 | optional: true 1211 | 1212 | '@esbuild/android-x64@0.25.12': 1213 | optional: true 1214 | 1215 | '@esbuild/android-x64@0.25.4': 1216 | optional: true 1217 | 1218 | '@esbuild/darwin-arm64@0.25.12': 1219 | optional: true 1220 | 1221 | '@esbuild/darwin-arm64@0.25.4': 1222 | optional: true 1223 | 1224 | '@esbuild/darwin-x64@0.25.12': 1225 | optional: true 1226 | 1227 | '@esbuild/darwin-x64@0.25.4': 1228 | optional: true 1229 | 1230 | '@esbuild/freebsd-arm64@0.25.12': 1231 | optional: true 1232 | 1233 | '@esbuild/freebsd-arm64@0.25.4': 1234 | optional: true 1235 | 1236 | '@esbuild/freebsd-x64@0.25.12': 1237 | optional: true 1238 | 1239 | '@esbuild/freebsd-x64@0.25.4': 1240 | optional: true 1241 | 1242 | '@esbuild/linux-arm64@0.25.12': 1243 | optional: true 1244 | 1245 | '@esbuild/linux-arm64@0.25.4': 1246 | optional: true 1247 | 1248 | '@esbuild/linux-arm@0.25.12': 1249 | optional: true 1250 | 1251 | '@esbuild/linux-arm@0.25.4': 1252 | optional: true 1253 | 1254 | '@esbuild/linux-ia32@0.25.12': 1255 | optional: true 1256 | 1257 | '@esbuild/linux-ia32@0.25.4': 1258 | optional: true 1259 | 1260 | '@esbuild/linux-loong64@0.25.12': 1261 | optional: true 1262 | 1263 | '@esbuild/linux-loong64@0.25.4': 1264 | optional: true 1265 | 1266 | '@esbuild/linux-mips64el@0.25.12': 1267 | optional: true 1268 | 1269 | '@esbuild/linux-mips64el@0.25.4': 1270 | optional: true 1271 | 1272 | '@esbuild/linux-ppc64@0.25.12': 1273 | optional: true 1274 | 1275 | '@esbuild/linux-ppc64@0.25.4': 1276 | optional: true 1277 | 1278 | '@esbuild/linux-riscv64@0.25.12': 1279 | optional: true 1280 | 1281 | '@esbuild/linux-riscv64@0.25.4': 1282 | optional: true 1283 | 1284 | '@esbuild/linux-s390x@0.25.12': 1285 | optional: true 1286 | 1287 | '@esbuild/linux-s390x@0.25.4': 1288 | optional: true 1289 | 1290 | '@esbuild/linux-x64@0.25.12': 1291 | optional: true 1292 | 1293 | '@esbuild/linux-x64@0.25.4': 1294 | optional: true 1295 | 1296 | '@esbuild/netbsd-arm64@0.25.12': 1297 | optional: true 1298 | 1299 | '@esbuild/netbsd-arm64@0.25.4': 1300 | optional: true 1301 | 1302 | '@esbuild/netbsd-x64@0.25.12': 1303 | optional: true 1304 | 1305 | '@esbuild/netbsd-x64@0.25.4': 1306 | optional: true 1307 | 1308 | '@esbuild/openbsd-arm64@0.25.12': 1309 | optional: true 1310 | 1311 | '@esbuild/openbsd-arm64@0.25.4': 1312 | optional: true 1313 | 1314 | '@esbuild/openbsd-x64@0.25.12': 1315 | optional: true 1316 | 1317 | '@esbuild/openbsd-x64@0.25.4': 1318 | optional: true 1319 | 1320 | '@esbuild/openharmony-arm64@0.25.12': 1321 | optional: true 1322 | 1323 | '@esbuild/sunos-x64@0.25.12': 1324 | optional: true 1325 | 1326 | '@esbuild/sunos-x64@0.25.4': 1327 | optional: true 1328 | 1329 | '@esbuild/win32-arm64@0.25.12': 1330 | optional: true 1331 | 1332 | '@esbuild/win32-arm64@0.25.4': 1333 | optional: true 1334 | 1335 | '@esbuild/win32-ia32@0.25.12': 1336 | optional: true 1337 | 1338 | '@esbuild/win32-ia32@0.25.4': 1339 | optional: true 1340 | 1341 | '@esbuild/win32-x64@0.25.12': 1342 | optional: true 1343 | 1344 | '@esbuild/win32-x64@0.25.4': 1345 | optional: true 1346 | 1347 | '@img/sharp-darwin-arm64@0.33.5': 1348 | optionalDependencies: 1349 | '@img/sharp-libvips-darwin-arm64': 1.0.4 1350 | optional: true 1351 | 1352 | '@img/sharp-darwin-x64@0.33.5': 1353 | optionalDependencies: 1354 | '@img/sharp-libvips-darwin-x64': 1.0.4 1355 | optional: true 1356 | 1357 | '@img/sharp-libvips-darwin-arm64@1.0.4': 1358 | optional: true 1359 | 1360 | '@img/sharp-libvips-darwin-x64@1.0.4': 1361 | optional: true 1362 | 1363 | '@img/sharp-libvips-linux-arm64@1.0.4': 1364 | optional: true 1365 | 1366 | '@img/sharp-libvips-linux-arm@1.0.5': 1367 | optional: true 1368 | 1369 | '@img/sharp-libvips-linux-s390x@1.0.4': 1370 | optional: true 1371 | 1372 | '@img/sharp-libvips-linux-x64@1.0.4': 1373 | optional: true 1374 | 1375 | '@img/sharp-libvips-linuxmusl-arm64@1.0.4': 1376 | optional: true 1377 | 1378 | '@img/sharp-libvips-linuxmusl-x64@1.0.4': 1379 | optional: true 1380 | 1381 | '@img/sharp-linux-arm64@0.33.5': 1382 | optionalDependencies: 1383 | '@img/sharp-libvips-linux-arm64': 1.0.4 1384 | optional: true 1385 | 1386 | '@img/sharp-linux-arm@0.33.5': 1387 | optionalDependencies: 1388 | '@img/sharp-libvips-linux-arm': 1.0.5 1389 | optional: true 1390 | 1391 | '@img/sharp-linux-s390x@0.33.5': 1392 | optionalDependencies: 1393 | '@img/sharp-libvips-linux-s390x': 1.0.4 1394 | optional: true 1395 | 1396 | '@img/sharp-linux-x64@0.33.5': 1397 | optionalDependencies: 1398 | '@img/sharp-libvips-linux-x64': 1.0.4 1399 | optional: true 1400 | 1401 | '@img/sharp-linuxmusl-arm64@0.33.5': 1402 | optionalDependencies: 1403 | '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 1404 | optional: true 1405 | 1406 | '@img/sharp-linuxmusl-x64@0.33.5': 1407 | optionalDependencies: 1408 | '@img/sharp-libvips-linuxmusl-x64': 1.0.4 1409 | optional: true 1410 | 1411 | '@img/sharp-wasm32@0.33.5': 1412 | dependencies: 1413 | '@emnapi/runtime': 1.7.1 1414 | optional: true 1415 | 1416 | '@img/sharp-win32-ia32@0.33.5': 1417 | optional: true 1418 | 1419 | '@img/sharp-win32-x64@0.33.5': 1420 | optional: true 1421 | 1422 | '@jridgewell/resolve-uri@3.1.2': {} 1423 | 1424 | '@jridgewell/sourcemap-codec@1.5.5': {} 1425 | 1426 | '@jridgewell/trace-mapping@0.3.9': 1427 | dependencies: 1428 | '@jridgewell/resolve-uri': 3.1.2 1429 | '@jridgewell/sourcemap-codec': 1.5.5 1430 | 1431 | '@poppinss/colors@4.1.5': 1432 | dependencies: 1433 | kleur: 4.1.5 1434 | 1435 | '@poppinss/dumper@0.6.5': 1436 | dependencies: 1437 | '@poppinss/colors': 4.1.5 1438 | '@sindresorhus/is': 7.1.1 1439 | supports-color: 10.2.2 1440 | 1441 | '@poppinss/exception@1.2.2': {} 1442 | 1443 | '@rollup/rollup-android-arm-eabi@4.53.3': 1444 | optional: true 1445 | 1446 | '@rollup/rollup-android-arm64@4.53.3': 1447 | optional: true 1448 | 1449 | '@rollup/rollup-darwin-arm64@4.53.3': 1450 | optional: true 1451 | 1452 | '@rollup/rollup-darwin-x64@4.53.3': 1453 | optional: true 1454 | 1455 | '@rollup/rollup-freebsd-arm64@4.53.3': 1456 | optional: true 1457 | 1458 | '@rollup/rollup-freebsd-x64@4.53.3': 1459 | optional: true 1460 | 1461 | '@rollup/rollup-linux-arm-gnueabihf@4.53.3': 1462 | optional: true 1463 | 1464 | '@rollup/rollup-linux-arm-musleabihf@4.53.3': 1465 | optional: true 1466 | 1467 | '@rollup/rollup-linux-arm64-gnu@4.53.3': 1468 | optional: true 1469 | 1470 | '@rollup/rollup-linux-arm64-musl@4.53.3': 1471 | optional: true 1472 | 1473 | '@rollup/rollup-linux-loong64-gnu@4.53.3': 1474 | optional: true 1475 | 1476 | '@rollup/rollup-linux-ppc64-gnu@4.53.3': 1477 | optional: true 1478 | 1479 | '@rollup/rollup-linux-riscv64-gnu@4.53.3': 1480 | optional: true 1481 | 1482 | '@rollup/rollup-linux-riscv64-musl@4.53.3': 1483 | optional: true 1484 | 1485 | '@rollup/rollup-linux-s390x-gnu@4.53.3': 1486 | optional: true 1487 | 1488 | '@rollup/rollup-linux-x64-gnu@4.53.3': 1489 | optional: true 1490 | 1491 | '@rollup/rollup-linux-x64-musl@4.53.3': 1492 | optional: true 1493 | 1494 | '@rollup/rollup-openharmony-arm64@4.53.3': 1495 | optional: true 1496 | 1497 | '@rollup/rollup-win32-arm64-msvc@4.53.3': 1498 | optional: true 1499 | 1500 | '@rollup/rollup-win32-ia32-msvc@4.53.3': 1501 | optional: true 1502 | 1503 | '@rollup/rollup-win32-x64-gnu@4.53.3': 1504 | optional: true 1505 | 1506 | '@rollup/rollup-win32-x64-msvc@4.53.3': 1507 | optional: true 1508 | 1509 | '@sindresorhus/is@7.1.1': {} 1510 | 1511 | '@speed-highlight/core@1.2.12': {} 1512 | 1513 | '@types/chai@5.2.3': 1514 | dependencies: 1515 | '@types/deep-eql': 4.0.2 1516 | assertion-error: 2.0.1 1517 | 1518 | '@types/deep-eql@4.0.2': {} 1519 | 1520 | '@types/estree@1.0.8': {} 1521 | 1522 | '@vitest/expect@3.2.4': 1523 | dependencies: 1524 | '@types/chai': 5.2.3 1525 | '@vitest/spy': 3.2.4 1526 | '@vitest/utils': 3.2.4 1527 | chai: 5.3.3 1528 | tinyrainbow: 2.0.0 1529 | 1530 | '@vitest/mocker@3.2.4(vite@7.2.4)': 1531 | dependencies: 1532 | '@vitest/spy': 3.2.4 1533 | estree-walker: 3.0.3 1534 | magic-string: 0.30.21 1535 | optionalDependencies: 1536 | vite: 7.2.4 1537 | 1538 | '@vitest/pretty-format@3.2.4': 1539 | dependencies: 1540 | tinyrainbow: 2.0.0 1541 | 1542 | '@vitest/runner@3.2.4': 1543 | dependencies: 1544 | '@vitest/utils': 3.2.4 1545 | pathe: 2.0.3 1546 | strip-literal: 3.1.0 1547 | 1548 | '@vitest/snapshot@3.2.4': 1549 | dependencies: 1550 | '@vitest/pretty-format': 3.2.4 1551 | magic-string: 0.30.21 1552 | pathe: 2.0.3 1553 | 1554 | '@vitest/spy@3.2.4': 1555 | dependencies: 1556 | tinyspy: 4.0.4 1557 | 1558 | '@vitest/utils@3.2.4': 1559 | dependencies: 1560 | '@vitest/pretty-format': 3.2.4 1561 | loupe: 3.2.1 1562 | tinyrainbow: 2.0.0 1563 | 1564 | acorn-walk@8.3.2: {} 1565 | 1566 | acorn@8.14.0: {} 1567 | 1568 | assertion-error@2.0.1: {} 1569 | 1570 | birpc@0.2.14: {} 1571 | 1572 | blake3-wasm@2.1.5: {} 1573 | 1574 | cac@6.7.14: {} 1575 | 1576 | chai@5.3.3: 1577 | dependencies: 1578 | assertion-error: 2.0.1 1579 | check-error: 2.1.1 1580 | deep-eql: 5.0.2 1581 | loupe: 3.2.1 1582 | pathval: 2.0.1 1583 | 1584 | check-error@2.1.1: {} 1585 | 1586 | cjs-module-lexer@1.4.3: {} 1587 | 1588 | color-convert@2.0.1: 1589 | dependencies: 1590 | color-name: 1.1.4 1591 | 1592 | color-name@1.1.4: {} 1593 | 1594 | color-string@1.9.1: 1595 | dependencies: 1596 | color-name: 1.1.4 1597 | simple-swizzle: 0.2.4 1598 | 1599 | color@4.2.3: 1600 | dependencies: 1601 | color-convert: 2.0.1 1602 | color-string: 1.9.1 1603 | 1604 | cookie@1.1.1: {} 1605 | 1606 | debug@4.4.3: 1607 | dependencies: 1608 | ms: 2.1.3 1609 | 1610 | deep-eql@5.0.2: {} 1611 | 1612 | defu@6.1.4: {} 1613 | 1614 | detect-libc@2.1.2: {} 1615 | 1616 | devalue@5.5.0: {} 1617 | 1618 | error-stack-parser-es@1.0.5: {} 1619 | 1620 | es-module-lexer@1.7.0: {} 1621 | 1622 | esbuild@0.25.12: 1623 | optionalDependencies: 1624 | '@esbuild/aix-ppc64': 0.25.12 1625 | '@esbuild/android-arm': 0.25.12 1626 | '@esbuild/android-arm64': 0.25.12 1627 | '@esbuild/android-x64': 0.25.12 1628 | '@esbuild/darwin-arm64': 0.25.12 1629 | '@esbuild/darwin-x64': 0.25.12 1630 | '@esbuild/freebsd-arm64': 0.25.12 1631 | '@esbuild/freebsd-x64': 0.25.12 1632 | '@esbuild/linux-arm': 0.25.12 1633 | '@esbuild/linux-arm64': 0.25.12 1634 | '@esbuild/linux-ia32': 0.25.12 1635 | '@esbuild/linux-loong64': 0.25.12 1636 | '@esbuild/linux-mips64el': 0.25.12 1637 | '@esbuild/linux-ppc64': 0.25.12 1638 | '@esbuild/linux-riscv64': 0.25.12 1639 | '@esbuild/linux-s390x': 0.25.12 1640 | '@esbuild/linux-x64': 0.25.12 1641 | '@esbuild/netbsd-arm64': 0.25.12 1642 | '@esbuild/netbsd-x64': 0.25.12 1643 | '@esbuild/openbsd-arm64': 0.25.12 1644 | '@esbuild/openbsd-x64': 0.25.12 1645 | '@esbuild/openharmony-arm64': 0.25.12 1646 | '@esbuild/sunos-x64': 0.25.12 1647 | '@esbuild/win32-arm64': 0.25.12 1648 | '@esbuild/win32-ia32': 0.25.12 1649 | '@esbuild/win32-x64': 0.25.12 1650 | 1651 | esbuild@0.25.4: 1652 | optionalDependencies: 1653 | '@esbuild/aix-ppc64': 0.25.4 1654 | '@esbuild/android-arm': 0.25.4 1655 | '@esbuild/android-arm64': 0.25.4 1656 | '@esbuild/android-x64': 0.25.4 1657 | '@esbuild/darwin-arm64': 0.25.4 1658 | '@esbuild/darwin-x64': 0.25.4 1659 | '@esbuild/freebsd-arm64': 0.25.4 1660 | '@esbuild/freebsd-x64': 0.25.4 1661 | '@esbuild/linux-arm': 0.25.4 1662 | '@esbuild/linux-arm64': 0.25.4 1663 | '@esbuild/linux-ia32': 0.25.4 1664 | '@esbuild/linux-loong64': 0.25.4 1665 | '@esbuild/linux-mips64el': 0.25.4 1666 | '@esbuild/linux-ppc64': 0.25.4 1667 | '@esbuild/linux-riscv64': 0.25.4 1668 | '@esbuild/linux-s390x': 0.25.4 1669 | '@esbuild/linux-x64': 0.25.4 1670 | '@esbuild/netbsd-arm64': 0.25.4 1671 | '@esbuild/netbsd-x64': 0.25.4 1672 | '@esbuild/openbsd-arm64': 0.25.4 1673 | '@esbuild/openbsd-x64': 0.25.4 1674 | '@esbuild/sunos-x64': 0.25.4 1675 | '@esbuild/win32-arm64': 0.25.4 1676 | '@esbuild/win32-ia32': 0.25.4 1677 | '@esbuild/win32-x64': 0.25.4 1678 | 1679 | estree-walker@3.0.3: 1680 | dependencies: 1681 | '@types/estree': 1.0.8 1682 | 1683 | exit-hook@2.2.1: {} 1684 | 1685 | expect-type@1.2.2: {} 1686 | 1687 | exsolve@1.0.8: {} 1688 | 1689 | fdir@6.5.0(picomatch@4.0.3): 1690 | optionalDependencies: 1691 | picomatch: 4.0.3 1692 | 1693 | fsevents@2.3.3: 1694 | optional: true 1695 | 1696 | glob-to-regexp@0.4.1: {} 1697 | 1698 | is-arrayish@0.3.4: {} 1699 | 1700 | js-tokens@9.0.1: {} 1701 | 1702 | kleur@4.1.5: {} 1703 | 1704 | loupe@3.2.1: {} 1705 | 1706 | magic-string@0.30.21: 1707 | dependencies: 1708 | '@jridgewell/sourcemap-codec': 1.5.5 1709 | 1710 | mime@3.0.0: {} 1711 | 1712 | miniflare@4.20250906.0: 1713 | dependencies: 1714 | '@cspotcode/source-map-support': 0.8.1 1715 | acorn: 8.14.0 1716 | acorn-walk: 8.3.2 1717 | exit-hook: 2.2.1 1718 | glob-to-regexp: 0.4.1 1719 | sharp: 0.33.5 1720 | stoppable: 1.1.0 1721 | undici: 7.16.0 1722 | workerd: 1.20250906.0 1723 | ws: 8.18.0 1724 | youch: 4.1.0-beta.10 1725 | zod: 3.22.3 1726 | transitivePeerDependencies: 1727 | - bufferutil 1728 | - utf-8-validate 1729 | 1730 | miniflare@4.20251125.0: 1731 | dependencies: 1732 | '@cspotcode/source-map-support': 0.8.1 1733 | acorn: 8.14.0 1734 | acorn-walk: 8.3.2 1735 | exit-hook: 2.2.1 1736 | glob-to-regexp: 0.4.1 1737 | sharp: 0.33.5 1738 | stoppable: 1.1.0 1739 | undici: 7.14.0 1740 | workerd: 1.20251125.0 1741 | ws: 8.18.0 1742 | youch: 4.1.0-beta.10 1743 | zod: 3.22.3 1744 | transitivePeerDependencies: 1745 | - bufferutil 1746 | - utf-8-validate 1747 | 1748 | ms@2.1.3: {} 1749 | 1750 | nanoid@3.3.11: {} 1751 | 1752 | ohash@2.0.11: {} 1753 | 1754 | path-to-regexp@6.3.0: {} 1755 | 1756 | pathe@2.0.3: {} 1757 | 1758 | pathval@2.0.1: {} 1759 | 1760 | picocolors@1.1.1: {} 1761 | 1762 | picomatch@4.0.3: {} 1763 | 1764 | postcss@8.5.6: 1765 | dependencies: 1766 | nanoid: 3.3.11 1767 | picocolors: 1.1.1 1768 | source-map-js: 1.2.1 1769 | 1770 | rollup@4.53.3: 1771 | dependencies: 1772 | '@types/estree': 1.0.8 1773 | optionalDependencies: 1774 | '@rollup/rollup-android-arm-eabi': 4.53.3 1775 | '@rollup/rollup-android-arm64': 4.53.3 1776 | '@rollup/rollup-darwin-arm64': 4.53.3 1777 | '@rollup/rollup-darwin-x64': 4.53.3 1778 | '@rollup/rollup-freebsd-arm64': 4.53.3 1779 | '@rollup/rollup-freebsd-x64': 4.53.3 1780 | '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 1781 | '@rollup/rollup-linux-arm-musleabihf': 4.53.3 1782 | '@rollup/rollup-linux-arm64-gnu': 4.53.3 1783 | '@rollup/rollup-linux-arm64-musl': 4.53.3 1784 | '@rollup/rollup-linux-loong64-gnu': 4.53.3 1785 | '@rollup/rollup-linux-ppc64-gnu': 4.53.3 1786 | '@rollup/rollup-linux-riscv64-gnu': 4.53.3 1787 | '@rollup/rollup-linux-riscv64-musl': 4.53.3 1788 | '@rollup/rollup-linux-s390x-gnu': 4.53.3 1789 | '@rollup/rollup-linux-x64-gnu': 4.53.3 1790 | '@rollup/rollup-linux-x64-musl': 4.53.3 1791 | '@rollup/rollup-openharmony-arm64': 4.53.3 1792 | '@rollup/rollup-win32-arm64-msvc': 4.53.3 1793 | '@rollup/rollup-win32-ia32-msvc': 4.53.3 1794 | '@rollup/rollup-win32-x64-gnu': 4.53.3 1795 | '@rollup/rollup-win32-x64-msvc': 4.53.3 1796 | fsevents: 2.3.3 1797 | 1798 | semver@7.7.3: {} 1799 | 1800 | sharp@0.33.5: 1801 | dependencies: 1802 | color: 4.2.3 1803 | detect-libc: 2.1.2 1804 | semver: 7.7.3 1805 | optionalDependencies: 1806 | '@img/sharp-darwin-arm64': 0.33.5 1807 | '@img/sharp-darwin-x64': 0.33.5 1808 | '@img/sharp-libvips-darwin-arm64': 1.0.4 1809 | '@img/sharp-libvips-darwin-x64': 1.0.4 1810 | '@img/sharp-libvips-linux-arm': 1.0.5 1811 | '@img/sharp-libvips-linux-arm64': 1.0.4 1812 | '@img/sharp-libvips-linux-s390x': 1.0.4 1813 | '@img/sharp-libvips-linux-x64': 1.0.4 1814 | '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 1815 | '@img/sharp-libvips-linuxmusl-x64': 1.0.4 1816 | '@img/sharp-linux-arm': 0.33.5 1817 | '@img/sharp-linux-arm64': 0.33.5 1818 | '@img/sharp-linux-s390x': 0.33.5 1819 | '@img/sharp-linux-x64': 0.33.5 1820 | '@img/sharp-linuxmusl-arm64': 0.33.5 1821 | '@img/sharp-linuxmusl-x64': 0.33.5 1822 | '@img/sharp-wasm32': 0.33.5 1823 | '@img/sharp-win32-ia32': 0.33.5 1824 | '@img/sharp-win32-x64': 0.33.5 1825 | 1826 | siginfo@2.0.0: {} 1827 | 1828 | simple-swizzle@0.2.4: 1829 | dependencies: 1830 | is-arrayish: 0.3.4 1831 | 1832 | source-map-js@1.2.1: {} 1833 | 1834 | stackback@0.0.2: {} 1835 | 1836 | std-env@3.10.0: {} 1837 | 1838 | stoppable@1.1.0: {} 1839 | 1840 | strip-literal@3.1.0: 1841 | dependencies: 1842 | js-tokens: 9.0.1 1843 | 1844 | supports-color@10.2.2: {} 1845 | 1846 | tinybench@2.9.0: {} 1847 | 1848 | tinyexec@0.3.2: {} 1849 | 1850 | tinyglobby@0.2.15: 1851 | dependencies: 1852 | fdir: 6.5.0(picomatch@4.0.3) 1853 | picomatch: 4.0.3 1854 | 1855 | tinypool@1.1.1: {} 1856 | 1857 | tinyrainbow@2.0.0: {} 1858 | 1859 | tinyspy@4.0.4: {} 1860 | 1861 | tslib@2.8.1: 1862 | optional: true 1863 | 1864 | typescript@5.9.3: {} 1865 | 1866 | ufo@1.6.1: {} 1867 | 1868 | undici@7.14.0: {} 1869 | 1870 | undici@7.16.0: {} 1871 | 1872 | unenv@2.0.0-rc.21: 1873 | dependencies: 1874 | defu: 6.1.4 1875 | exsolve: 1.0.8 1876 | ohash: 2.0.11 1877 | pathe: 2.0.3 1878 | ufo: 1.6.1 1879 | 1880 | unenv@2.0.0-rc.24: 1881 | dependencies: 1882 | pathe: 2.0.3 1883 | 1884 | vite-node@3.2.4: 1885 | dependencies: 1886 | cac: 6.7.14 1887 | debug: 4.4.3 1888 | es-module-lexer: 1.7.0 1889 | pathe: 2.0.3 1890 | vite: 7.2.4 1891 | transitivePeerDependencies: 1892 | - '@types/node' 1893 | - jiti 1894 | - less 1895 | - lightningcss 1896 | - sass 1897 | - sass-embedded 1898 | - stylus 1899 | - sugarss 1900 | - supports-color 1901 | - terser 1902 | - tsx 1903 | - yaml 1904 | 1905 | vite@7.2.4: 1906 | dependencies: 1907 | esbuild: 0.25.12 1908 | fdir: 6.5.0(picomatch@4.0.3) 1909 | picomatch: 4.0.3 1910 | postcss: 8.5.6 1911 | rollup: 4.53.3 1912 | tinyglobby: 0.2.15 1913 | optionalDependencies: 1914 | fsevents: 2.3.3 1915 | 1916 | vitest@3.2.4: 1917 | dependencies: 1918 | '@types/chai': 5.2.3 1919 | '@vitest/expect': 3.2.4 1920 | '@vitest/mocker': 3.2.4(vite@7.2.4) 1921 | '@vitest/pretty-format': 3.2.4 1922 | '@vitest/runner': 3.2.4 1923 | '@vitest/snapshot': 3.2.4 1924 | '@vitest/spy': 3.2.4 1925 | '@vitest/utils': 3.2.4 1926 | chai: 5.3.3 1927 | debug: 4.4.3 1928 | expect-type: 1.2.2 1929 | magic-string: 0.30.21 1930 | pathe: 2.0.3 1931 | picomatch: 4.0.3 1932 | std-env: 3.10.0 1933 | tinybench: 2.9.0 1934 | tinyexec: 0.3.2 1935 | tinyglobby: 0.2.15 1936 | tinypool: 1.1.1 1937 | tinyrainbow: 2.0.0 1938 | vite: 7.2.4 1939 | vite-node: 3.2.4 1940 | why-is-node-running: 2.3.0 1941 | transitivePeerDependencies: 1942 | - jiti 1943 | - less 1944 | - lightningcss 1945 | - msw 1946 | - sass 1947 | - sass-embedded 1948 | - stylus 1949 | - sugarss 1950 | - supports-color 1951 | - terser 1952 | - tsx 1953 | - yaml 1954 | 1955 | why-is-node-running@2.3.0: 1956 | dependencies: 1957 | siginfo: 2.0.0 1958 | stackback: 0.0.2 1959 | 1960 | workerd@1.20250906.0: 1961 | optionalDependencies: 1962 | '@cloudflare/workerd-darwin-64': 1.20250906.0 1963 | '@cloudflare/workerd-darwin-arm64': 1.20250906.0 1964 | '@cloudflare/workerd-linux-64': 1.20250906.0 1965 | '@cloudflare/workerd-linux-arm64': 1.20250906.0 1966 | '@cloudflare/workerd-windows-64': 1.20250906.0 1967 | 1968 | workerd@1.20251125.0: 1969 | optionalDependencies: 1970 | '@cloudflare/workerd-darwin-64': 1.20251125.0 1971 | '@cloudflare/workerd-darwin-arm64': 1.20251125.0 1972 | '@cloudflare/workerd-linux-64': 1.20251125.0 1973 | '@cloudflare/workerd-linux-arm64': 1.20251125.0 1974 | '@cloudflare/workerd-windows-64': 1.20251125.0 1975 | 1976 | wrangler@4.35.0: 1977 | dependencies: 1978 | '@cloudflare/kv-asset-handler': 0.4.0 1979 | '@cloudflare/unenv-preset': 2.7.3(unenv@2.0.0-rc.21)(workerd@1.20250906.0) 1980 | blake3-wasm: 2.1.5 1981 | esbuild: 0.25.4 1982 | miniflare: 4.20250906.0 1983 | path-to-regexp: 6.3.0 1984 | unenv: 2.0.0-rc.21 1985 | workerd: 1.20250906.0 1986 | optionalDependencies: 1987 | fsevents: 2.3.3 1988 | transitivePeerDependencies: 1989 | - bufferutil 1990 | - utf-8-validate 1991 | 1992 | wrangler@4.51.0: 1993 | dependencies: 1994 | '@cloudflare/kv-asset-handler': 0.4.1 1995 | '@cloudflare/unenv-preset': 2.7.11(unenv@2.0.0-rc.24)(workerd@1.20251125.0) 1996 | blake3-wasm: 2.1.5 1997 | esbuild: 0.25.4 1998 | miniflare: 4.20251125.0 1999 | path-to-regexp: 6.3.0 2000 | unenv: 2.0.0-rc.24 2001 | workerd: 1.20251125.0 2002 | optionalDependencies: 2003 | fsevents: 2.3.3 2004 | transitivePeerDependencies: 2005 | - bufferutil 2006 | - utf-8-validate 2007 | 2008 | ws@8.18.0: {} 2009 | 2010 | youch-core@0.3.3: 2011 | dependencies: 2012 | '@poppinss/exception': 1.2.2 2013 | error-stack-parser-es: 1.0.5 2014 | 2015 | youch@4.1.0-beta.10: 2016 | dependencies: 2017 | '@poppinss/colors': 4.1.5 2018 | '@poppinss/dumper': 0.6.5 2019 | '@speed-highlight/core': 1.2.12 2020 | cookie: 1.1.1 2021 | youch-core: 0.3.3 2022 | 2023 | zod@3.22.3: {} 2024 | 2025 | zod@3.25.76: {} 2026 | -------------------------------------------------------------------------------- /frontend/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | overrides: 8 | vite: ^7.2.4 9 | rollup: ^4.53.3 10 | 11 | importers: 12 | 13 | .: 14 | devDependencies: 15 | '@cloudflare/vite-plugin': 16 | specifier: ^1.15.3 17 | version: 1.15.3(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2))(workerd@1.20251125.0)(wrangler@4.51.0(@cloudflare/workers-types@4.20251128.0)) 18 | '@inlang/cli': 19 | specifier: ^3.0.0 20 | version: 3.0.12 21 | '@inlang/paraglide-js': 22 | specifier: 2.5.0 23 | version: 2.5.0 24 | '@sveltejs/adapter-cloudflare': 25 | specifier: ^7.2.4 26 | version: 7.2.4(@sveltejs/kit@2.49.0(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)))(wrangler@4.51.0(@cloudflare/workers-types@4.20251128.0)) 27 | '@sveltejs/kit': 28 | specifier: ^2.47.1 29 | version: 2.49.0(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)) 30 | '@sveltejs/vite-plugin-svelte': 31 | specifier: ^6.2.1 32 | version: 6.2.1(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)) 33 | '@tailwindcss/vite': 34 | specifier: ^4.0.0 35 | version: 4.1.17(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)) 36 | '@types/node': 37 | specifier: ^24.10.1 38 | version: 24.10.1 39 | svelte: 40 | specifier: ^5.41.0 41 | version: 5.45.2 42 | svelte-check: 43 | specifier: ^4.3.3 44 | version: 4.3.4(picomatch@4.0.3)(svelte@5.45.2)(typescript@5.9.3) 45 | tailwindcss: 46 | specifier: ^4.0.0 47 | version: 4.1.17 48 | typescript: 49 | specifier: ^5.9.3 50 | version: 5.9.3 51 | vite: 52 | specifier: ^7.2.4 53 | version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2) 54 | vite-plugin-devtools-json: 55 | specifier: ^0.1.0 56 | version: 0.1.1(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)) 57 | wrangler: 58 | specifier: ^4.51.0 59 | version: 4.51.0(@cloudflare/workers-types@4.20251128.0) 60 | 61 | packages: 62 | 63 | '@cloudflare/kv-asset-handler@0.4.1': 64 | resolution: {integrity: sha512-Nu8ahitGFFJztxUml9oD/DLb7Z28C8cd8F46IVQ7y5Btz575pvMY8AqZsXkX7Gds29eCKdMgIHjIvzskHgPSFg==} 65 | engines: {node: '>=18.0.0'} 66 | 67 | '@cloudflare/unenv-preset@2.7.11': 68 | resolution: {integrity: sha512-se23f1D4PxKrMKOq+Stz+Yn7AJ9ITHcEecXo2Yjb+UgbUDCEBch1FXQC6hx6uT5fNA3kmX3mfzeZiUmpK1W9IQ==} 69 | peerDependencies: 70 | unenv: 2.0.0-rc.24 71 | workerd: ^1.20251106.1 72 | peerDependenciesMeta: 73 | workerd: 74 | optional: true 75 | 76 | '@cloudflare/vite-plugin@1.15.3': 77 | resolution: {integrity: sha512-o199VPWhPoKolIW7bfdk1Vzfpa/gE+1wA+J/B8Is8MH/pAVhNQG1rVxAXjNsOAuRMwfJxRwBKDScwVVZFuUUlw==} 78 | peerDependencies: 79 | vite: ^7.2.4 80 | wrangler: ^4.51.0 81 | 82 | '@cloudflare/workerd-darwin-64@1.20251125.0': 83 | resolution: {integrity: sha512-xDIVJi8fPxBseRoEIzLiUJb0N+DXnah/ynS+Unzn58HEoKLetUWiV/T1Fhned//lo5krnToG9KRgVRs0SOOTpw==} 84 | engines: {node: '>=16'} 85 | cpu: [x64] 86 | os: [darwin] 87 | 88 | '@cloudflare/workerd-darwin-arm64@1.20251125.0': 89 | resolution: {integrity: sha512-k5FQET5PXnWjeDqZUpl4Ah/Rn0bH6mjfUtTyeAy6ky7QB3AZpwIhgWQD0vOFB3OvJaK4J/K4cUtNChYXB9mY/A==} 90 | engines: {node: '>=16'} 91 | cpu: [arm64] 92 | os: [darwin] 93 | 94 | '@cloudflare/workerd-linux-64@1.20251125.0': 95 | resolution: {integrity: sha512-at6n/FomkftykWx0EqVLUZ0juUFz3ORtEPeBbW9ZZ3BQEyfVUtYfdcz/f1cN8Yyb7TE9ovF071P0mBRkx83ODw==} 96 | engines: {node: '>=16'} 97 | cpu: [x64] 98 | os: [linux] 99 | 100 | '@cloudflare/workerd-linux-arm64@1.20251125.0': 101 | resolution: {integrity: sha512-EiRn+jrNaIs1QveabXGHFoyn3s/l02ui6Yp3nssyNhtmtgviddtt8KObBfM1jQKjXTpZlunhwdN4Bxf4jhlOMw==} 102 | engines: {node: '>=16'} 103 | cpu: [arm64] 104 | os: [linux] 105 | 106 | '@cloudflare/workerd-windows-64@1.20251125.0': 107 | resolution: {integrity: sha512-6fdIsSeu65g++k8Y2DKzNKs0BkoU+KKI6GAAVBOLh2vvVWWnCP1OgMdVb5JAdjDrjDT5i0GSQu0bgQ8fPsW6zw==} 108 | engines: {node: '>=16'} 109 | cpu: [x64] 110 | os: [win32] 111 | 112 | '@cloudflare/workers-types@4.20251128.0': 113 | resolution: {integrity: sha512-gQxQvxLRsFb+mDlaBKGoJwEHWt+ox9telZZEuRMbNUAD6v78XYqZepTI4yPDdKhkRTlqYcDqDhIdAI3HrsGk7w==} 114 | 115 | '@cspotcode/source-map-support@0.8.1': 116 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 117 | engines: {node: '>=12'} 118 | 119 | '@emnapi/runtime@1.7.1': 120 | resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} 121 | 122 | '@esbuild/aix-ppc64@0.25.12': 123 | resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} 124 | engines: {node: '>=18'} 125 | cpu: [ppc64] 126 | os: [aix] 127 | 128 | '@esbuild/aix-ppc64@0.25.4': 129 | resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} 130 | engines: {node: '>=18'} 131 | cpu: [ppc64] 132 | os: [aix] 133 | 134 | '@esbuild/android-arm64@0.25.12': 135 | resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} 136 | engines: {node: '>=18'} 137 | cpu: [arm64] 138 | os: [android] 139 | 140 | '@esbuild/android-arm64@0.25.4': 141 | resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} 142 | engines: {node: '>=18'} 143 | cpu: [arm64] 144 | os: [android] 145 | 146 | '@esbuild/android-arm@0.25.12': 147 | resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} 148 | engines: {node: '>=18'} 149 | cpu: [arm] 150 | os: [android] 151 | 152 | '@esbuild/android-arm@0.25.4': 153 | resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} 154 | engines: {node: '>=18'} 155 | cpu: [arm] 156 | os: [android] 157 | 158 | '@esbuild/android-x64@0.25.12': 159 | resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} 160 | engines: {node: '>=18'} 161 | cpu: [x64] 162 | os: [android] 163 | 164 | '@esbuild/android-x64@0.25.4': 165 | resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} 166 | engines: {node: '>=18'} 167 | cpu: [x64] 168 | os: [android] 169 | 170 | '@esbuild/darwin-arm64@0.25.12': 171 | resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} 172 | engines: {node: '>=18'} 173 | cpu: [arm64] 174 | os: [darwin] 175 | 176 | '@esbuild/darwin-arm64@0.25.4': 177 | resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} 178 | engines: {node: '>=18'} 179 | cpu: [arm64] 180 | os: [darwin] 181 | 182 | '@esbuild/darwin-x64@0.25.12': 183 | resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} 184 | engines: {node: '>=18'} 185 | cpu: [x64] 186 | os: [darwin] 187 | 188 | '@esbuild/darwin-x64@0.25.4': 189 | resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} 190 | engines: {node: '>=18'} 191 | cpu: [x64] 192 | os: [darwin] 193 | 194 | '@esbuild/freebsd-arm64@0.25.12': 195 | resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} 196 | engines: {node: '>=18'} 197 | cpu: [arm64] 198 | os: [freebsd] 199 | 200 | '@esbuild/freebsd-arm64@0.25.4': 201 | resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} 202 | engines: {node: '>=18'} 203 | cpu: [arm64] 204 | os: [freebsd] 205 | 206 | '@esbuild/freebsd-x64@0.25.12': 207 | resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} 208 | engines: {node: '>=18'} 209 | cpu: [x64] 210 | os: [freebsd] 211 | 212 | '@esbuild/freebsd-x64@0.25.4': 213 | resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} 214 | engines: {node: '>=18'} 215 | cpu: [x64] 216 | os: [freebsd] 217 | 218 | '@esbuild/linux-arm64@0.25.12': 219 | resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} 220 | engines: {node: '>=18'} 221 | cpu: [arm64] 222 | os: [linux] 223 | 224 | '@esbuild/linux-arm64@0.25.4': 225 | resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} 226 | engines: {node: '>=18'} 227 | cpu: [arm64] 228 | os: [linux] 229 | 230 | '@esbuild/linux-arm@0.25.12': 231 | resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} 232 | engines: {node: '>=18'} 233 | cpu: [arm] 234 | os: [linux] 235 | 236 | '@esbuild/linux-arm@0.25.4': 237 | resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} 238 | engines: {node: '>=18'} 239 | cpu: [arm] 240 | os: [linux] 241 | 242 | '@esbuild/linux-ia32@0.25.12': 243 | resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} 244 | engines: {node: '>=18'} 245 | cpu: [ia32] 246 | os: [linux] 247 | 248 | '@esbuild/linux-ia32@0.25.4': 249 | resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} 250 | engines: {node: '>=18'} 251 | cpu: [ia32] 252 | os: [linux] 253 | 254 | '@esbuild/linux-loong64@0.25.12': 255 | resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} 256 | engines: {node: '>=18'} 257 | cpu: [loong64] 258 | os: [linux] 259 | 260 | '@esbuild/linux-loong64@0.25.4': 261 | resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} 262 | engines: {node: '>=18'} 263 | cpu: [loong64] 264 | os: [linux] 265 | 266 | '@esbuild/linux-mips64el@0.25.12': 267 | resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} 268 | engines: {node: '>=18'} 269 | cpu: [mips64el] 270 | os: [linux] 271 | 272 | '@esbuild/linux-mips64el@0.25.4': 273 | resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} 274 | engines: {node: '>=18'} 275 | cpu: [mips64el] 276 | os: [linux] 277 | 278 | '@esbuild/linux-ppc64@0.25.12': 279 | resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} 280 | engines: {node: '>=18'} 281 | cpu: [ppc64] 282 | os: [linux] 283 | 284 | '@esbuild/linux-ppc64@0.25.4': 285 | resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} 286 | engines: {node: '>=18'} 287 | cpu: [ppc64] 288 | os: [linux] 289 | 290 | '@esbuild/linux-riscv64@0.25.12': 291 | resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} 292 | engines: {node: '>=18'} 293 | cpu: [riscv64] 294 | os: [linux] 295 | 296 | '@esbuild/linux-riscv64@0.25.4': 297 | resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} 298 | engines: {node: '>=18'} 299 | cpu: [riscv64] 300 | os: [linux] 301 | 302 | '@esbuild/linux-s390x@0.25.12': 303 | resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} 304 | engines: {node: '>=18'} 305 | cpu: [s390x] 306 | os: [linux] 307 | 308 | '@esbuild/linux-s390x@0.25.4': 309 | resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} 310 | engines: {node: '>=18'} 311 | cpu: [s390x] 312 | os: [linux] 313 | 314 | '@esbuild/linux-x64@0.25.12': 315 | resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} 316 | engines: {node: '>=18'} 317 | cpu: [x64] 318 | os: [linux] 319 | 320 | '@esbuild/linux-x64@0.25.4': 321 | resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} 322 | engines: {node: '>=18'} 323 | cpu: [x64] 324 | os: [linux] 325 | 326 | '@esbuild/netbsd-arm64@0.25.12': 327 | resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} 328 | engines: {node: '>=18'} 329 | cpu: [arm64] 330 | os: [netbsd] 331 | 332 | '@esbuild/netbsd-arm64@0.25.4': 333 | resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} 334 | engines: {node: '>=18'} 335 | cpu: [arm64] 336 | os: [netbsd] 337 | 338 | '@esbuild/netbsd-x64@0.25.12': 339 | resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} 340 | engines: {node: '>=18'} 341 | cpu: [x64] 342 | os: [netbsd] 343 | 344 | '@esbuild/netbsd-x64@0.25.4': 345 | resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} 346 | engines: {node: '>=18'} 347 | cpu: [x64] 348 | os: [netbsd] 349 | 350 | '@esbuild/openbsd-arm64@0.25.12': 351 | resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} 352 | engines: {node: '>=18'} 353 | cpu: [arm64] 354 | os: [openbsd] 355 | 356 | '@esbuild/openbsd-arm64@0.25.4': 357 | resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} 358 | engines: {node: '>=18'} 359 | cpu: [arm64] 360 | os: [openbsd] 361 | 362 | '@esbuild/openbsd-x64@0.25.12': 363 | resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} 364 | engines: {node: '>=18'} 365 | cpu: [x64] 366 | os: [openbsd] 367 | 368 | '@esbuild/openbsd-x64@0.25.4': 369 | resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} 370 | engines: {node: '>=18'} 371 | cpu: [x64] 372 | os: [openbsd] 373 | 374 | '@esbuild/openharmony-arm64@0.25.12': 375 | resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} 376 | engines: {node: '>=18'} 377 | cpu: [arm64] 378 | os: [openharmony] 379 | 380 | '@esbuild/sunos-x64@0.25.12': 381 | resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} 382 | engines: {node: '>=18'} 383 | cpu: [x64] 384 | os: [sunos] 385 | 386 | '@esbuild/sunos-x64@0.25.4': 387 | resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} 388 | engines: {node: '>=18'} 389 | cpu: [x64] 390 | os: [sunos] 391 | 392 | '@esbuild/win32-arm64@0.25.12': 393 | resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} 394 | engines: {node: '>=18'} 395 | cpu: [arm64] 396 | os: [win32] 397 | 398 | '@esbuild/win32-arm64@0.25.4': 399 | resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} 400 | engines: {node: '>=18'} 401 | cpu: [arm64] 402 | os: [win32] 403 | 404 | '@esbuild/win32-ia32@0.25.12': 405 | resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} 406 | engines: {node: '>=18'} 407 | cpu: [ia32] 408 | os: [win32] 409 | 410 | '@esbuild/win32-ia32@0.25.4': 411 | resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} 412 | engines: {node: '>=18'} 413 | cpu: [ia32] 414 | os: [win32] 415 | 416 | '@esbuild/win32-x64@0.25.12': 417 | resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} 418 | engines: {node: '>=18'} 419 | cpu: [x64] 420 | os: [win32] 421 | 422 | '@esbuild/win32-x64@0.25.4': 423 | resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} 424 | engines: {node: '>=18'} 425 | cpu: [x64] 426 | os: [win32] 427 | 428 | '@img/sharp-darwin-arm64@0.33.5': 429 | resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} 430 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 431 | cpu: [arm64] 432 | os: [darwin] 433 | 434 | '@img/sharp-darwin-x64@0.33.5': 435 | resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} 436 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 437 | cpu: [x64] 438 | os: [darwin] 439 | 440 | '@img/sharp-libvips-darwin-arm64@1.0.4': 441 | resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} 442 | cpu: [arm64] 443 | os: [darwin] 444 | 445 | '@img/sharp-libvips-darwin-x64@1.0.4': 446 | resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} 447 | cpu: [x64] 448 | os: [darwin] 449 | 450 | '@img/sharp-libvips-linux-arm64@1.0.4': 451 | resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} 452 | cpu: [arm64] 453 | os: [linux] 454 | 455 | '@img/sharp-libvips-linux-arm@1.0.5': 456 | resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} 457 | cpu: [arm] 458 | os: [linux] 459 | 460 | '@img/sharp-libvips-linux-s390x@1.0.4': 461 | resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} 462 | cpu: [s390x] 463 | os: [linux] 464 | 465 | '@img/sharp-libvips-linux-x64@1.0.4': 466 | resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} 467 | cpu: [x64] 468 | os: [linux] 469 | 470 | '@img/sharp-libvips-linuxmusl-arm64@1.0.4': 471 | resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} 472 | cpu: [arm64] 473 | os: [linux] 474 | 475 | '@img/sharp-libvips-linuxmusl-x64@1.0.4': 476 | resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} 477 | cpu: [x64] 478 | os: [linux] 479 | 480 | '@img/sharp-linux-arm64@0.33.5': 481 | resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} 482 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 483 | cpu: [arm64] 484 | os: [linux] 485 | 486 | '@img/sharp-linux-arm@0.33.5': 487 | resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} 488 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 489 | cpu: [arm] 490 | os: [linux] 491 | 492 | '@img/sharp-linux-s390x@0.33.5': 493 | resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} 494 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 495 | cpu: [s390x] 496 | os: [linux] 497 | 498 | '@img/sharp-linux-x64@0.33.5': 499 | resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} 500 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 501 | cpu: [x64] 502 | os: [linux] 503 | 504 | '@img/sharp-linuxmusl-arm64@0.33.5': 505 | resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} 506 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 507 | cpu: [arm64] 508 | os: [linux] 509 | 510 | '@img/sharp-linuxmusl-x64@0.33.5': 511 | resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} 512 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 513 | cpu: [x64] 514 | os: [linux] 515 | 516 | '@img/sharp-wasm32@0.33.5': 517 | resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} 518 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 519 | cpu: [wasm32] 520 | 521 | '@img/sharp-win32-ia32@0.33.5': 522 | resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} 523 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 524 | cpu: [ia32] 525 | os: [win32] 526 | 527 | '@img/sharp-win32-x64@0.33.5': 528 | resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} 529 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 530 | cpu: [x64] 531 | os: [win32] 532 | 533 | '@inlang/cli@3.0.12': 534 | resolution: {integrity: sha512-0FZJtgrt1Ol4iwKtA0VICrsHcA3stWTSP2jq8mpTgjTlFU63gr5JcyFljUT8Dp5nDIJYmdh3kJ0a8PhW0X8clQ==} 535 | engines: {node: '>=18.0.0'} 536 | hasBin: true 537 | 538 | '@inlang/paraglide-js@2.5.0': 539 | resolution: {integrity: sha512-FnycOM6j0GYd/n97NCDyXJiHnyPYGPgufL640eZWs+rTIRrOgDVz/o77iWRYFZK84REOcmSDi0N6PbbY8NT8+A==} 540 | hasBin: true 541 | 542 | '@inlang/recommend-sherlock@0.2.1': 543 | resolution: {integrity: sha512-ckv8HvHy/iTqaVAEKrr+gnl+p3XFNwe5D2+6w6wJk2ORV2XkcRkKOJ/XsTUJbPSiyi4PI+p+T3bqbmNx/rDUlg==} 544 | 545 | '@inlang/sdk@2.4.9': 546 | resolution: {integrity: sha512-cvz/C1rF5WBxzHbEoiBoI6Sz6q6M+TdxfWkEGBYTD77opY8i8WN01prUWXEM87GPF4SZcyIySez9U0Ccm12oFQ==} 547 | engines: {node: '>=18.0.0'} 548 | 549 | '@jridgewell/gen-mapping@0.3.13': 550 | resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 551 | 552 | '@jridgewell/remapping@2.3.5': 553 | resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} 554 | 555 | '@jridgewell/resolve-uri@3.1.2': 556 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 557 | engines: {node: '>=6.0.0'} 558 | 559 | '@jridgewell/sourcemap-codec@1.5.5': 560 | resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 561 | 562 | '@jridgewell/trace-mapping@0.3.31': 563 | resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 564 | 565 | '@jridgewell/trace-mapping@0.3.9': 566 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 567 | 568 | '@lix-js/sdk@0.4.7': 569 | resolution: {integrity: sha512-pRbW+joG12L0ULfMiWYosIW0plmW4AsUdiPCp+Z8rAsElJ+wJ6in58zhD3UwUcd4BNcpldEGjg6PdA7e0RgsDQ==} 570 | engines: {node: '>=18'} 571 | 572 | '@lix-js/server-protocol-schema@0.1.1': 573 | resolution: {integrity: sha512-jBeALB6prAbtr5q4vTuxnRZZv1M2rKe8iNqRQhFJ4Tv7150unEa0vKyz0hs8Gl3fUGsWaNJBh3J8++fpbrpRBQ==} 574 | 575 | '@polka/url@1.0.0-next.29': 576 | resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} 577 | 578 | '@poppinss/colors@4.1.5': 579 | resolution: {integrity: sha512-FvdDqtcRCtz6hThExcFOgW0cWX+xwSMWcRuQe5ZEb2m7cVQOAVZOIMt+/v9RxGiD9/OY16qJBXK4CVKWAPalBw==} 580 | 581 | '@poppinss/dumper@0.6.5': 582 | resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==} 583 | 584 | '@poppinss/exception@1.2.2': 585 | resolution: {integrity: sha512-m7bpKCD4QMlFCjA/nKTs23fuvoVFoA83brRKmObCUNmi/9tVu8Ve3w4YQAnJu4q3Tjf5fr685HYIC/IA2zHRSg==} 586 | 587 | '@remix-run/node-fetch-server@0.8.1': 588 | resolution: {integrity: sha512-J1dev372wtJqmqn9U/qbpbZxbJSQrogNN2+Qv1lKlpATpe/WQ9aCZfl/xSb9d2Rgh1IyLSvNxZAXPZxruO6Xig==} 589 | 590 | '@rollup/rollup-android-arm-eabi@4.53.3': 591 | resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} 592 | cpu: [arm] 593 | os: [android] 594 | 595 | '@rollup/rollup-android-arm64@4.53.3': 596 | resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} 597 | cpu: [arm64] 598 | os: [android] 599 | 600 | '@rollup/rollup-darwin-arm64@4.53.3': 601 | resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} 602 | cpu: [arm64] 603 | os: [darwin] 604 | 605 | '@rollup/rollup-darwin-x64@4.53.3': 606 | resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} 607 | cpu: [x64] 608 | os: [darwin] 609 | 610 | '@rollup/rollup-freebsd-arm64@4.53.3': 611 | resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} 612 | cpu: [arm64] 613 | os: [freebsd] 614 | 615 | '@rollup/rollup-freebsd-x64@4.53.3': 616 | resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} 617 | cpu: [x64] 618 | os: [freebsd] 619 | 620 | '@rollup/rollup-linux-arm-gnueabihf@4.53.3': 621 | resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} 622 | cpu: [arm] 623 | os: [linux] 624 | 625 | '@rollup/rollup-linux-arm-musleabihf@4.53.3': 626 | resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} 627 | cpu: [arm] 628 | os: [linux] 629 | 630 | '@rollup/rollup-linux-arm64-gnu@4.53.3': 631 | resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} 632 | cpu: [arm64] 633 | os: [linux] 634 | 635 | '@rollup/rollup-linux-arm64-musl@4.53.3': 636 | resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} 637 | cpu: [arm64] 638 | os: [linux] 639 | 640 | '@rollup/rollup-linux-loong64-gnu@4.53.3': 641 | resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} 642 | cpu: [loong64] 643 | os: [linux] 644 | 645 | '@rollup/rollup-linux-ppc64-gnu@4.53.3': 646 | resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} 647 | cpu: [ppc64] 648 | os: [linux] 649 | 650 | '@rollup/rollup-linux-riscv64-gnu@4.53.3': 651 | resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} 652 | cpu: [riscv64] 653 | os: [linux] 654 | 655 | '@rollup/rollup-linux-riscv64-musl@4.53.3': 656 | resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} 657 | cpu: [riscv64] 658 | os: [linux] 659 | 660 | '@rollup/rollup-linux-s390x-gnu@4.53.3': 661 | resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} 662 | cpu: [s390x] 663 | os: [linux] 664 | 665 | '@rollup/rollup-linux-x64-gnu@4.53.3': 666 | resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} 667 | cpu: [x64] 668 | os: [linux] 669 | 670 | '@rollup/rollup-linux-x64-musl@4.53.3': 671 | resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} 672 | cpu: [x64] 673 | os: [linux] 674 | 675 | '@rollup/rollup-openharmony-arm64@4.53.3': 676 | resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} 677 | cpu: [arm64] 678 | os: [openharmony] 679 | 680 | '@rollup/rollup-win32-arm64-msvc@4.53.3': 681 | resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} 682 | cpu: [arm64] 683 | os: [win32] 684 | 685 | '@rollup/rollup-win32-ia32-msvc@4.53.3': 686 | resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} 687 | cpu: [ia32] 688 | os: [win32] 689 | 690 | '@rollup/rollup-win32-x64-gnu@4.53.3': 691 | resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} 692 | cpu: [x64] 693 | os: [win32] 694 | 695 | '@rollup/rollup-win32-x64-msvc@4.53.3': 696 | resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} 697 | cpu: [x64] 698 | os: [win32] 699 | 700 | '@sinclair/typebox@0.31.28': 701 | resolution: {integrity: sha512-/s55Jujywdw/Jpan+vsy6JZs1z2ZTGxTmbZTPiuSL2wz9mfzA2gN1zzaqmvfi4pq+uOt7Du85fkiwv5ymW84aQ==} 702 | 703 | '@sindresorhus/is@7.1.1': 704 | resolution: {integrity: sha512-rO92VvpgMc3kfiTjGT52LEtJ8Yc5kCWhZjLQ3LwlA4pSgPpQO7bVpYXParOD8Jwf+cVQECJo3yP/4I8aZtUQTQ==} 705 | engines: {node: '>=18'} 706 | 707 | '@speed-highlight/core@1.2.12': 708 | resolution: {integrity: sha512-uilwrK0Ygyri5dToHYdZSjcvpS2ZwX0w5aSt3GCEN9hrjxWCoeV4Z2DTXuxjwbntaLQIEEAlCeNQss5SoHvAEA==} 709 | 710 | '@sqlite.org/sqlite-wasm@3.48.0-build4': 711 | resolution: {integrity: sha512-hI6twvUkzOmyGZhQMza1gpfqErZxXRw6JEsiVjUbo7tFanVD+8Oil0Ih3l2nGzHdxPI41zFmfUQG7GHqhciKZQ==} 712 | hasBin: true 713 | 714 | '@standard-schema/spec@1.0.0': 715 | resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} 716 | 717 | '@sveltejs/acorn-typescript@1.0.8': 718 | resolution: {integrity: sha512-esgN+54+q0NjB0Y/4BomT9samII7jGwNy/2a3wNZbT2A2RpmXsXwUt24LvLhx6jUq2gVk4cWEvcRO6MFQbOfNA==} 719 | peerDependencies: 720 | acorn: ^8.9.0 721 | 722 | '@sveltejs/adapter-cloudflare@7.2.4': 723 | resolution: {integrity: sha512-uD8VlOuGXGuZWL+zbBYSjtmC4WDtlonUodfqAZ/COd5uIy2Z0QptIicB/nkTrGNI9sbmzgf7z0N09CHyWYlUvQ==} 724 | peerDependencies: 725 | '@sveltejs/kit': ^2.0.0 726 | wrangler: ^4.0.0 727 | 728 | '@sveltejs/kit@2.49.0': 729 | resolution: {integrity: sha512-oH8tXw7EZnie8FdOWYrF7Yn4IKrqTFHhXvl8YxXxbKwTMcD/5NNCryUSEXRk2ZR4ojnub0P8rNrsVGHXWqIDtA==} 730 | engines: {node: '>=18.13'} 731 | hasBin: true 732 | peerDependencies: 733 | '@opentelemetry/api': ^1.0.0 734 | '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 735 | svelte: ^4.0.0 || ^5.0.0-next.0 736 | vite: ^7.2.4 737 | peerDependenciesMeta: 738 | '@opentelemetry/api': 739 | optional: true 740 | 741 | '@sveltejs/vite-plugin-svelte-inspector@5.0.1': 742 | resolution: {integrity: sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==} 743 | engines: {node: ^20.19 || ^22.12 || >=24} 744 | peerDependencies: 745 | '@sveltejs/vite-plugin-svelte': ^6.0.0-next.0 746 | svelte: ^5.0.0 747 | vite: ^7.2.4 748 | 749 | '@sveltejs/vite-plugin-svelte@6.2.1': 750 | resolution: {integrity: sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==} 751 | engines: {node: ^20.19 || ^22.12 || >=24} 752 | peerDependencies: 753 | svelte: ^5.0.0 754 | vite: ^7.2.4 755 | 756 | '@tailwindcss/node@4.1.17': 757 | resolution: {integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==} 758 | 759 | '@tailwindcss/oxide-android-arm64@4.1.17': 760 | resolution: {integrity: sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==} 761 | engines: {node: '>= 10'} 762 | cpu: [arm64] 763 | os: [android] 764 | 765 | '@tailwindcss/oxide-darwin-arm64@4.1.17': 766 | resolution: {integrity: sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==} 767 | engines: {node: '>= 10'} 768 | cpu: [arm64] 769 | os: [darwin] 770 | 771 | '@tailwindcss/oxide-darwin-x64@4.1.17': 772 | resolution: {integrity: sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==} 773 | engines: {node: '>= 10'} 774 | cpu: [x64] 775 | os: [darwin] 776 | 777 | '@tailwindcss/oxide-freebsd-x64@4.1.17': 778 | resolution: {integrity: sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==} 779 | engines: {node: '>= 10'} 780 | cpu: [x64] 781 | os: [freebsd] 782 | 783 | '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17': 784 | resolution: {integrity: sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==} 785 | engines: {node: '>= 10'} 786 | cpu: [arm] 787 | os: [linux] 788 | 789 | '@tailwindcss/oxide-linux-arm64-gnu@4.1.17': 790 | resolution: {integrity: sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==} 791 | engines: {node: '>= 10'} 792 | cpu: [arm64] 793 | os: [linux] 794 | 795 | '@tailwindcss/oxide-linux-arm64-musl@4.1.17': 796 | resolution: {integrity: sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==} 797 | engines: {node: '>= 10'} 798 | cpu: [arm64] 799 | os: [linux] 800 | 801 | '@tailwindcss/oxide-linux-x64-gnu@4.1.17': 802 | resolution: {integrity: sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==} 803 | engines: {node: '>= 10'} 804 | cpu: [x64] 805 | os: [linux] 806 | 807 | '@tailwindcss/oxide-linux-x64-musl@4.1.17': 808 | resolution: {integrity: sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==} 809 | engines: {node: '>= 10'} 810 | cpu: [x64] 811 | os: [linux] 812 | 813 | '@tailwindcss/oxide-wasm32-wasi@4.1.17': 814 | resolution: {integrity: sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==} 815 | engines: {node: '>=14.0.0'} 816 | cpu: [wasm32] 817 | bundledDependencies: 818 | - '@napi-rs/wasm-runtime' 819 | - '@emnapi/core' 820 | - '@emnapi/runtime' 821 | - '@tybys/wasm-util' 822 | - '@emnapi/wasi-threads' 823 | - tslib 824 | 825 | '@tailwindcss/oxide-win32-arm64-msvc@4.1.17': 826 | resolution: {integrity: sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==} 827 | engines: {node: '>= 10'} 828 | cpu: [arm64] 829 | os: [win32] 830 | 831 | '@tailwindcss/oxide-win32-x64-msvc@4.1.17': 832 | resolution: {integrity: sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==} 833 | engines: {node: '>= 10'} 834 | cpu: [x64] 835 | os: [win32] 836 | 837 | '@tailwindcss/oxide@4.1.17': 838 | resolution: {integrity: sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==} 839 | engines: {node: '>= 10'} 840 | 841 | '@tailwindcss/vite@4.1.17': 842 | resolution: {integrity: sha512-4+9w8ZHOiGnpcGI6z1TVVfWaX/koK7fKeSYF3qlYg2xpBtbteP2ddBxiarL+HVgfSJGeK5RIxRQmKm4rTJJAwA==} 843 | peerDependencies: 844 | vite: ^7.2.4 845 | 846 | '@types/cookie@0.6.0': 847 | resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} 848 | 849 | '@types/estree@1.0.8': 850 | resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 851 | 852 | '@types/node@24.10.1': 853 | resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} 854 | 855 | acorn-walk@8.3.2: 856 | resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} 857 | engines: {node: '>=0.4.0'} 858 | 859 | acorn@8.14.0: 860 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 861 | engines: {node: '>=0.4.0'} 862 | hasBin: true 863 | 864 | acorn@8.15.0: 865 | resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} 866 | engines: {node: '>=0.4.0'} 867 | hasBin: true 868 | 869 | aria-query@5.3.2: 870 | resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} 871 | engines: {node: '>= 0.4'} 872 | 873 | array-timsort@1.0.3: 874 | resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} 875 | 876 | axobject-query@4.1.0: 877 | resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 878 | engines: {node: '>= 0.4'} 879 | 880 | blake3-wasm@2.1.5: 881 | resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} 882 | 883 | chokidar@4.0.3: 884 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 885 | engines: {node: '>= 14.16.0'} 886 | 887 | clsx@2.1.1: 888 | resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 889 | engines: {node: '>=6'} 890 | 891 | color-convert@2.0.1: 892 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 893 | engines: {node: '>=7.0.0'} 894 | 895 | color-name@1.1.4: 896 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 897 | 898 | color-string@1.9.1: 899 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} 900 | 901 | color@4.2.3: 902 | resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} 903 | engines: {node: '>=12.5.0'} 904 | 905 | commander@11.1.0: 906 | resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} 907 | engines: {node: '>=16'} 908 | 909 | comment-json@4.4.1: 910 | resolution: {integrity: sha512-r1To31BQD5060QdkC+Iheai7gHwoSZobzunqkf2/kQ6xIAfJyrKNAFUwdKvkK7Qgu7pVTKQEa7ok7Ed3ycAJgg==} 911 | engines: {node: '>= 6'} 912 | 913 | consola@3.4.0: 914 | resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} 915 | engines: {node: ^14.18.0 || >=16.10.0} 916 | 917 | cookie@0.6.0: 918 | resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} 919 | engines: {node: '>= 0.6'} 920 | 921 | cookie@1.1.1: 922 | resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} 923 | engines: {node: '>=18'} 924 | 925 | core-util-is@1.0.3: 926 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} 927 | 928 | debug@4.4.3: 929 | resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 930 | engines: {node: '>=6.0'} 931 | peerDependencies: 932 | supports-color: '*' 933 | peerDependenciesMeta: 934 | supports-color: 935 | optional: true 936 | 937 | dedent@1.5.1: 938 | resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} 939 | peerDependencies: 940 | babel-plugin-macros: ^3.1.0 941 | peerDependenciesMeta: 942 | babel-plugin-macros: 943 | optional: true 944 | 945 | deepmerge@4.3.1: 946 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 947 | engines: {node: '>=0.10.0'} 948 | 949 | detect-libc@2.1.2: 950 | resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} 951 | engines: {node: '>=8'} 952 | 953 | devalue@5.5.0: 954 | resolution: {integrity: sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==} 955 | 956 | enhanced-resolve@5.18.3: 957 | resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} 958 | engines: {node: '>=10.13.0'} 959 | 960 | error-stack-parser-es@1.0.5: 961 | resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} 962 | 963 | esbuild-wasm@0.19.12: 964 | resolution: {integrity: sha512-Zmc4hk6FibJZBcTx5/8K/4jT3/oG1vkGTEeKJUQFCUQKimD6Q7+adp/bdVQyYJFolMKaXkQnVZdV4O5ZaTYmyQ==} 965 | engines: {node: '>=12'} 966 | hasBin: true 967 | 968 | esbuild@0.25.12: 969 | resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} 970 | engines: {node: '>=18'} 971 | hasBin: true 972 | 973 | esbuild@0.25.4: 974 | resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} 975 | engines: {node: '>=18'} 976 | hasBin: true 977 | 978 | esm-env@1.2.2: 979 | resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} 980 | 981 | esprima@4.0.1: 982 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 983 | engines: {node: '>=4'} 984 | hasBin: true 985 | 986 | esrap@2.2.0: 987 | resolution: {integrity: sha512-WBmtxe7R9C5mvL4n2le8nMUe4mD5V9oiK2vJpQ9I3y20ENPUomPcphBXE8D1x/Bm84oN1V+lOfgXxtqmxTp3Xg==} 988 | 989 | exit-hook@2.2.1: 990 | resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} 991 | engines: {node: '>=6'} 992 | 993 | fdir@6.5.0: 994 | resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 995 | engines: {node: '>=12.0.0'} 996 | peerDependencies: 997 | picomatch: ^3 || ^4 998 | peerDependenciesMeta: 999 | picomatch: 1000 | optional: true 1001 | 1002 | fsevents@2.3.3: 1003 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1004 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1005 | os: [darwin] 1006 | 1007 | get-port@7.1.0: 1008 | resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} 1009 | engines: {node: '>=16'} 1010 | 1011 | glob-to-regexp@0.4.1: 1012 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} 1013 | 1014 | graceful-fs@4.2.11: 1015 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1016 | 1017 | human-id@4.1.3: 1018 | resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==} 1019 | hasBin: true 1020 | 1021 | is-arrayish@0.3.4: 1022 | resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} 1023 | 1024 | is-reference@3.0.3: 1025 | resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} 1026 | 1027 | jiti@2.6.1: 1028 | resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} 1029 | hasBin: true 1030 | 1031 | js-sha256@0.11.1: 1032 | resolution: {integrity: sha512-o6WSo/LUvY2uC4j7mO50a2ms7E/EAdbP0swigLV+nzHKTTaYnaLIWJ02VdXrsJX0vGedDESQnLsOekr94ryfjg==} 1033 | 1034 | json5@2.2.3: 1035 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1036 | engines: {node: '>=6'} 1037 | hasBin: true 1038 | 1039 | kleur@4.1.5: 1040 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 1041 | engines: {node: '>=6'} 1042 | 1043 | kysely@0.27.6: 1044 | resolution: {integrity: sha512-FIyV/64EkKhJmjgC0g2hygpBv5RNWVPyNCqSAD7eTCv6eFWNIi4PN1UvdSJGicN/o35bnevgis4Y0UDC0qi8jQ==} 1045 | engines: {node: '>=14.0.0'} 1046 | 1047 | lightningcss-android-arm64@1.30.2: 1048 | resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} 1049 | engines: {node: '>= 12.0.0'} 1050 | cpu: [arm64] 1051 | os: [android] 1052 | 1053 | lightningcss-darwin-arm64@1.30.2: 1054 | resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} 1055 | engines: {node: '>= 12.0.0'} 1056 | cpu: [arm64] 1057 | os: [darwin] 1058 | 1059 | lightningcss-darwin-x64@1.30.2: 1060 | resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} 1061 | engines: {node: '>= 12.0.0'} 1062 | cpu: [x64] 1063 | os: [darwin] 1064 | 1065 | lightningcss-freebsd-x64@1.30.2: 1066 | resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} 1067 | engines: {node: '>= 12.0.0'} 1068 | cpu: [x64] 1069 | os: [freebsd] 1070 | 1071 | lightningcss-linux-arm-gnueabihf@1.30.2: 1072 | resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} 1073 | engines: {node: '>= 12.0.0'} 1074 | cpu: [arm] 1075 | os: [linux] 1076 | 1077 | lightningcss-linux-arm64-gnu@1.30.2: 1078 | resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} 1079 | engines: {node: '>= 12.0.0'} 1080 | cpu: [arm64] 1081 | os: [linux] 1082 | 1083 | lightningcss-linux-arm64-musl@1.30.2: 1084 | resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} 1085 | engines: {node: '>= 12.0.0'} 1086 | cpu: [arm64] 1087 | os: [linux] 1088 | 1089 | lightningcss-linux-x64-gnu@1.30.2: 1090 | resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} 1091 | engines: {node: '>= 12.0.0'} 1092 | cpu: [x64] 1093 | os: [linux] 1094 | 1095 | lightningcss-linux-x64-musl@1.30.2: 1096 | resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} 1097 | engines: {node: '>= 12.0.0'} 1098 | cpu: [x64] 1099 | os: [linux] 1100 | 1101 | lightningcss-win32-arm64-msvc@1.30.2: 1102 | resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} 1103 | engines: {node: '>= 12.0.0'} 1104 | cpu: [arm64] 1105 | os: [win32] 1106 | 1107 | lightningcss-win32-x64-msvc@1.30.2: 1108 | resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} 1109 | engines: {node: '>= 12.0.0'} 1110 | cpu: [x64] 1111 | os: [win32] 1112 | 1113 | lightningcss@1.30.2: 1114 | resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} 1115 | engines: {node: '>= 12.0.0'} 1116 | 1117 | locate-character@3.0.0: 1118 | resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} 1119 | 1120 | magic-string@0.30.21: 1121 | resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 1122 | 1123 | mime@3.0.0: 1124 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} 1125 | engines: {node: '>=10.0.0'} 1126 | hasBin: true 1127 | 1128 | miniflare@4.20251125.0: 1129 | resolution: {integrity: sha512-xY6deLx0Drt8GfGG2Fv0fHUocHAIG/Iv62Kl36TPfDzgq7/+DQ5gYNisxnmyISQdA/sm7kOvn2XRBncxjWYrLg==} 1130 | engines: {node: '>=18.0.0'} 1131 | hasBin: true 1132 | 1133 | mri@1.2.0: 1134 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 1135 | engines: {node: '>=4'} 1136 | 1137 | mrmime@2.0.1: 1138 | resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} 1139 | engines: {node: '>=10'} 1140 | 1141 | ms@2.1.3: 1142 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1143 | 1144 | nanoid@3.3.11: 1145 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 1146 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1147 | hasBin: true 1148 | 1149 | path-to-regexp@6.3.0: 1150 | resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} 1151 | 1152 | pathe@2.0.3: 1153 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 1154 | 1155 | picocolors@1.1.1: 1156 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1157 | 1158 | picomatch@4.0.3: 1159 | resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 1160 | engines: {node: '>=12'} 1161 | 1162 | postcss@8.5.6: 1163 | resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 1164 | engines: {node: ^10 || ^12 || >=14} 1165 | 1166 | readdirp@4.1.2: 1167 | resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 1168 | engines: {node: '>= 14.18.0'} 1169 | 1170 | regexparam@3.0.0: 1171 | resolution: {integrity: sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q==} 1172 | engines: {node: '>=8'} 1173 | 1174 | rollup@4.53.3: 1175 | resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} 1176 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1177 | hasBin: true 1178 | 1179 | sade@1.8.1: 1180 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 1181 | engines: {node: '>=6'} 1182 | 1183 | semver@7.7.3: 1184 | resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} 1185 | engines: {node: '>=10'} 1186 | hasBin: true 1187 | 1188 | set-cookie-parser@2.7.2: 1189 | resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} 1190 | 1191 | sharp@0.33.5: 1192 | resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} 1193 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 1194 | 1195 | simple-swizzle@0.2.4: 1196 | resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} 1197 | 1198 | sirv@3.0.2: 1199 | resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} 1200 | engines: {node: '>=18'} 1201 | 1202 | source-map-js@1.2.1: 1203 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1204 | engines: {node: '>=0.10.0'} 1205 | 1206 | sqlite-wasm-kysely@0.3.0: 1207 | resolution: {integrity: sha512-TzjBNv7KwRw6E3pdKdlRyZiTmUIE0UttT/Sl56MVwVARl/u5gp978KepazCJZewFUnlWHz9i3NQd4kOtP/Afdg==} 1208 | peerDependencies: 1209 | kysely: '*' 1210 | 1211 | stoppable@1.1.0: 1212 | resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} 1213 | engines: {node: '>=4', npm: '>=6'} 1214 | 1215 | supports-color@10.2.2: 1216 | resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} 1217 | engines: {node: '>=18'} 1218 | 1219 | svelte-check@4.3.4: 1220 | resolution: {integrity: sha512-DVWvxhBrDsd+0hHWKfjP99lsSXASeOhHJYyuKOFYJcP7ThfSCKgjVarE8XfuMWpS5JV3AlDf+iK1YGGo2TACdw==} 1221 | engines: {node: '>= 18.0.0'} 1222 | hasBin: true 1223 | peerDependencies: 1224 | svelte: ^4.0.0 || ^5.0.0-next.0 1225 | typescript: '>=5.0.0' 1226 | 1227 | svelte@5.45.2: 1228 | resolution: {integrity: sha512-yyXdW2u3H0H/zxxWoGwJoQlRgaSJLp+Vhktv12iRw2WRDlKqUPT54Fi0K/PkXqrdkcQ98aBazpy0AH4BCBVfoA==} 1229 | engines: {node: '>=18'} 1230 | 1231 | tailwindcss@4.1.17: 1232 | resolution: {integrity: sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==} 1233 | 1234 | tapable@2.3.0: 1235 | resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} 1236 | engines: {node: '>=6'} 1237 | 1238 | tinyglobby@0.2.15: 1239 | resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 1240 | engines: {node: '>=12.0.0'} 1241 | 1242 | totalist@3.0.1: 1243 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 1244 | engines: {node: '>=6'} 1245 | 1246 | tslib@2.8.1: 1247 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1248 | 1249 | typescript@5.9.3: 1250 | resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 1251 | engines: {node: '>=14.17'} 1252 | hasBin: true 1253 | 1254 | undici-types@7.16.0: 1255 | resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} 1256 | 1257 | undici@7.14.0: 1258 | resolution: {integrity: sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==} 1259 | engines: {node: '>=20.18.1'} 1260 | 1261 | unenv@2.0.0-rc.24: 1262 | resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} 1263 | 1264 | unplugin@2.3.11: 1265 | resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} 1266 | engines: {node: '>=18.12.0'} 1267 | 1268 | urlpattern-polyfill@10.1.0: 1269 | resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} 1270 | 1271 | uuid@10.0.0: 1272 | resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} 1273 | hasBin: true 1274 | 1275 | uuid@11.1.0: 1276 | resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} 1277 | hasBin: true 1278 | 1279 | vite-plugin-devtools-json@0.1.1: 1280 | resolution: {integrity: sha512-kjXyDTZDwOKiqum/DBWZ6JenUh9qWFr/0/peoQqARanseFyNmtxOrexAxbE7ERqBSsMSkQA7qNTSQkZGw1SfPw==} 1281 | peerDependencies: 1282 | vite: ^7.2.4 1283 | 1284 | vite@7.2.4: 1285 | resolution: {integrity: sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==} 1286 | engines: {node: ^20.19.0 || >=22.12.0} 1287 | hasBin: true 1288 | peerDependencies: 1289 | '@types/node': ^20.19.0 || >=22.12.0 1290 | jiti: '>=1.21.0' 1291 | less: ^4.0.0 1292 | lightningcss: ^1.21.0 1293 | sass: ^1.70.0 1294 | sass-embedded: ^1.70.0 1295 | stylus: '>=0.54.8' 1296 | sugarss: ^5.0.0 1297 | terser: ^5.16.0 1298 | tsx: ^4.8.1 1299 | yaml: ^2.4.2 1300 | peerDependenciesMeta: 1301 | '@types/node': 1302 | optional: true 1303 | jiti: 1304 | optional: true 1305 | less: 1306 | optional: true 1307 | lightningcss: 1308 | optional: true 1309 | sass: 1310 | optional: true 1311 | sass-embedded: 1312 | optional: true 1313 | stylus: 1314 | optional: true 1315 | sugarss: 1316 | optional: true 1317 | terser: 1318 | optional: true 1319 | tsx: 1320 | optional: true 1321 | yaml: 1322 | optional: true 1323 | 1324 | vitefu@1.1.1: 1325 | resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} 1326 | peerDependencies: 1327 | vite: ^7.2.4 1328 | peerDependenciesMeta: 1329 | vite: 1330 | optional: true 1331 | 1332 | webpack-virtual-modules@0.6.2: 1333 | resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} 1334 | 1335 | workerd@1.20251125.0: 1336 | resolution: {integrity: sha512-oQYfgu3UZ15HlMcEyilKD1RdielRnKSG5MA0xoi1theVs99Rop9AEFYicYCyK1R4YjYblLRYEiL1tMgEFqpReA==} 1337 | engines: {node: '>=16'} 1338 | hasBin: true 1339 | 1340 | worktop@0.8.0-next.18: 1341 | resolution: {integrity: sha512-+TvsA6VAVoMC3XDKR5MoC/qlLqDixEfOBysDEKnPIPou/NvoPWCAuXHXMsswwlvmEuvX56lQjvELLyLuzTKvRw==} 1342 | engines: {node: '>=12'} 1343 | 1344 | wrangler@4.51.0: 1345 | resolution: {integrity: sha512-JHv+58UxM2//e4kf9ASDwg016xd/OdDNDUKW6zLQyE7Uc9ayYKX1QJ9NsYtpo4dC1dfg6rT67pf1aNK1cTzUDg==} 1346 | engines: {node: '>=20.0.0'} 1347 | hasBin: true 1348 | peerDependencies: 1349 | '@cloudflare/workers-types': ^4.20251125.0 1350 | peerDependenciesMeta: 1351 | '@cloudflare/workers-types': 1352 | optional: true 1353 | 1354 | ws@8.18.0: 1355 | resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} 1356 | engines: {node: '>=10.0.0'} 1357 | peerDependencies: 1358 | bufferutil: ^4.0.1 1359 | utf-8-validate: '>=5.0.2' 1360 | peerDependenciesMeta: 1361 | bufferutil: 1362 | optional: true 1363 | utf-8-validate: 1364 | optional: true 1365 | 1366 | youch-core@0.3.3: 1367 | resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==} 1368 | 1369 | youch@4.1.0-beta.10: 1370 | resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} 1371 | 1372 | zimmerframe@1.1.4: 1373 | resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} 1374 | 1375 | zod@3.22.3: 1376 | resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} 1377 | 1378 | snapshots: 1379 | 1380 | '@cloudflare/kv-asset-handler@0.4.1': 1381 | dependencies: 1382 | mime: 3.0.0 1383 | 1384 | '@cloudflare/unenv-preset@2.7.11(unenv@2.0.0-rc.24)(workerd@1.20251125.0)': 1385 | dependencies: 1386 | unenv: 2.0.0-rc.24 1387 | optionalDependencies: 1388 | workerd: 1.20251125.0 1389 | 1390 | '@cloudflare/vite-plugin@1.15.3(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2))(workerd@1.20251125.0)(wrangler@4.51.0(@cloudflare/workers-types@4.20251128.0))': 1391 | dependencies: 1392 | '@cloudflare/unenv-preset': 2.7.11(unenv@2.0.0-rc.24)(workerd@1.20251125.0) 1393 | '@remix-run/node-fetch-server': 0.8.1 1394 | get-port: 7.1.0 1395 | miniflare: 4.20251125.0 1396 | picocolors: 1.1.1 1397 | tinyglobby: 0.2.15 1398 | unenv: 2.0.0-rc.24 1399 | vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2) 1400 | wrangler: 4.51.0(@cloudflare/workers-types@4.20251128.0) 1401 | ws: 8.18.0 1402 | transitivePeerDependencies: 1403 | - bufferutil 1404 | - utf-8-validate 1405 | - workerd 1406 | 1407 | '@cloudflare/workerd-darwin-64@1.20251125.0': 1408 | optional: true 1409 | 1410 | '@cloudflare/workerd-darwin-arm64@1.20251125.0': 1411 | optional: true 1412 | 1413 | '@cloudflare/workerd-linux-64@1.20251125.0': 1414 | optional: true 1415 | 1416 | '@cloudflare/workerd-linux-arm64@1.20251125.0': 1417 | optional: true 1418 | 1419 | '@cloudflare/workerd-windows-64@1.20251125.0': 1420 | optional: true 1421 | 1422 | '@cloudflare/workers-types@4.20251128.0': {} 1423 | 1424 | '@cspotcode/source-map-support@0.8.1': 1425 | dependencies: 1426 | '@jridgewell/trace-mapping': 0.3.9 1427 | 1428 | '@emnapi/runtime@1.7.1': 1429 | dependencies: 1430 | tslib: 2.8.1 1431 | optional: true 1432 | 1433 | '@esbuild/aix-ppc64@0.25.12': 1434 | optional: true 1435 | 1436 | '@esbuild/aix-ppc64@0.25.4': 1437 | optional: true 1438 | 1439 | '@esbuild/android-arm64@0.25.12': 1440 | optional: true 1441 | 1442 | '@esbuild/android-arm64@0.25.4': 1443 | optional: true 1444 | 1445 | '@esbuild/android-arm@0.25.12': 1446 | optional: true 1447 | 1448 | '@esbuild/android-arm@0.25.4': 1449 | optional: true 1450 | 1451 | '@esbuild/android-x64@0.25.12': 1452 | optional: true 1453 | 1454 | '@esbuild/android-x64@0.25.4': 1455 | optional: true 1456 | 1457 | '@esbuild/darwin-arm64@0.25.12': 1458 | optional: true 1459 | 1460 | '@esbuild/darwin-arm64@0.25.4': 1461 | optional: true 1462 | 1463 | '@esbuild/darwin-x64@0.25.12': 1464 | optional: true 1465 | 1466 | '@esbuild/darwin-x64@0.25.4': 1467 | optional: true 1468 | 1469 | '@esbuild/freebsd-arm64@0.25.12': 1470 | optional: true 1471 | 1472 | '@esbuild/freebsd-arm64@0.25.4': 1473 | optional: true 1474 | 1475 | '@esbuild/freebsd-x64@0.25.12': 1476 | optional: true 1477 | 1478 | '@esbuild/freebsd-x64@0.25.4': 1479 | optional: true 1480 | 1481 | '@esbuild/linux-arm64@0.25.12': 1482 | optional: true 1483 | 1484 | '@esbuild/linux-arm64@0.25.4': 1485 | optional: true 1486 | 1487 | '@esbuild/linux-arm@0.25.12': 1488 | optional: true 1489 | 1490 | '@esbuild/linux-arm@0.25.4': 1491 | optional: true 1492 | 1493 | '@esbuild/linux-ia32@0.25.12': 1494 | optional: true 1495 | 1496 | '@esbuild/linux-ia32@0.25.4': 1497 | optional: true 1498 | 1499 | '@esbuild/linux-loong64@0.25.12': 1500 | optional: true 1501 | 1502 | '@esbuild/linux-loong64@0.25.4': 1503 | optional: true 1504 | 1505 | '@esbuild/linux-mips64el@0.25.12': 1506 | optional: true 1507 | 1508 | '@esbuild/linux-mips64el@0.25.4': 1509 | optional: true 1510 | 1511 | '@esbuild/linux-ppc64@0.25.12': 1512 | optional: true 1513 | 1514 | '@esbuild/linux-ppc64@0.25.4': 1515 | optional: true 1516 | 1517 | '@esbuild/linux-riscv64@0.25.12': 1518 | optional: true 1519 | 1520 | '@esbuild/linux-riscv64@0.25.4': 1521 | optional: true 1522 | 1523 | '@esbuild/linux-s390x@0.25.12': 1524 | optional: true 1525 | 1526 | '@esbuild/linux-s390x@0.25.4': 1527 | optional: true 1528 | 1529 | '@esbuild/linux-x64@0.25.12': 1530 | optional: true 1531 | 1532 | '@esbuild/linux-x64@0.25.4': 1533 | optional: true 1534 | 1535 | '@esbuild/netbsd-arm64@0.25.12': 1536 | optional: true 1537 | 1538 | '@esbuild/netbsd-arm64@0.25.4': 1539 | optional: true 1540 | 1541 | '@esbuild/netbsd-x64@0.25.12': 1542 | optional: true 1543 | 1544 | '@esbuild/netbsd-x64@0.25.4': 1545 | optional: true 1546 | 1547 | '@esbuild/openbsd-arm64@0.25.12': 1548 | optional: true 1549 | 1550 | '@esbuild/openbsd-arm64@0.25.4': 1551 | optional: true 1552 | 1553 | '@esbuild/openbsd-x64@0.25.12': 1554 | optional: true 1555 | 1556 | '@esbuild/openbsd-x64@0.25.4': 1557 | optional: true 1558 | 1559 | '@esbuild/openharmony-arm64@0.25.12': 1560 | optional: true 1561 | 1562 | '@esbuild/sunos-x64@0.25.12': 1563 | optional: true 1564 | 1565 | '@esbuild/sunos-x64@0.25.4': 1566 | optional: true 1567 | 1568 | '@esbuild/win32-arm64@0.25.12': 1569 | optional: true 1570 | 1571 | '@esbuild/win32-arm64@0.25.4': 1572 | optional: true 1573 | 1574 | '@esbuild/win32-ia32@0.25.12': 1575 | optional: true 1576 | 1577 | '@esbuild/win32-ia32@0.25.4': 1578 | optional: true 1579 | 1580 | '@esbuild/win32-x64@0.25.12': 1581 | optional: true 1582 | 1583 | '@esbuild/win32-x64@0.25.4': 1584 | optional: true 1585 | 1586 | '@img/sharp-darwin-arm64@0.33.5': 1587 | optionalDependencies: 1588 | '@img/sharp-libvips-darwin-arm64': 1.0.4 1589 | optional: true 1590 | 1591 | '@img/sharp-darwin-x64@0.33.5': 1592 | optionalDependencies: 1593 | '@img/sharp-libvips-darwin-x64': 1.0.4 1594 | optional: true 1595 | 1596 | '@img/sharp-libvips-darwin-arm64@1.0.4': 1597 | optional: true 1598 | 1599 | '@img/sharp-libvips-darwin-x64@1.0.4': 1600 | optional: true 1601 | 1602 | '@img/sharp-libvips-linux-arm64@1.0.4': 1603 | optional: true 1604 | 1605 | '@img/sharp-libvips-linux-arm@1.0.5': 1606 | optional: true 1607 | 1608 | '@img/sharp-libvips-linux-s390x@1.0.4': 1609 | optional: true 1610 | 1611 | '@img/sharp-libvips-linux-x64@1.0.4': 1612 | optional: true 1613 | 1614 | '@img/sharp-libvips-linuxmusl-arm64@1.0.4': 1615 | optional: true 1616 | 1617 | '@img/sharp-libvips-linuxmusl-x64@1.0.4': 1618 | optional: true 1619 | 1620 | '@img/sharp-linux-arm64@0.33.5': 1621 | optionalDependencies: 1622 | '@img/sharp-libvips-linux-arm64': 1.0.4 1623 | optional: true 1624 | 1625 | '@img/sharp-linux-arm@0.33.5': 1626 | optionalDependencies: 1627 | '@img/sharp-libvips-linux-arm': 1.0.5 1628 | optional: true 1629 | 1630 | '@img/sharp-linux-s390x@0.33.5': 1631 | optionalDependencies: 1632 | '@img/sharp-libvips-linux-s390x': 1.0.4 1633 | optional: true 1634 | 1635 | '@img/sharp-linux-x64@0.33.5': 1636 | optionalDependencies: 1637 | '@img/sharp-libvips-linux-x64': 1.0.4 1638 | optional: true 1639 | 1640 | '@img/sharp-linuxmusl-arm64@0.33.5': 1641 | optionalDependencies: 1642 | '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 1643 | optional: true 1644 | 1645 | '@img/sharp-linuxmusl-x64@0.33.5': 1646 | optionalDependencies: 1647 | '@img/sharp-libvips-linuxmusl-x64': 1.0.4 1648 | optional: true 1649 | 1650 | '@img/sharp-wasm32@0.33.5': 1651 | dependencies: 1652 | '@emnapi/runtime': 1.7.1 1653 | optional: true 1654 | 1655 | '@img/sharp-win32-ia32@0.33.5': 1656 | optional: true 1657 | 1658 | '@img/sharp-win32-x64@0.33.5': 1659 | optional: true 1660 | 1661 | '@inlang/cli@3.0.12': 1662 | dependencies: 1663 | '@inlang/sdk': 2.4.9 1664 | esbuild-wasm: 0.19.12 1665 | transitivePeerDependencies: 1666 | - babel-plugin-macros 1667 | 1668 | '@inlang/paraglide-js@2.5.0': 1669 | dependencies: 1670 | '@inlang/recommend-sherlock': 0.2.1 1671 | '@inlang/sdk': 2.4.9 1672 | commander: 11.1.0 1673 | consola: 3.4.0 1674 | json5: 2.2.3 1675 | unplugin: 2.3.11 1676 | urlpattern-polyfill: 10.1.0 1677 | transitivePeerDependencies: 1678 | - babel-plugin-macros 1679 | 1680 | '@inlang/recommend-sherlock@0.2.1': 1681 | dependencies: 1682 | comment-json: 4.4.1 1683 | 1684 | '@inlang/sdk@2.4.9': 1685 | dependencies: 1686 | '@lix-js/sdk': 0.4.7 1687 | '@sinclair/typebox': 0.31.28 1688 | kysely: 0.27.6 1689 | sqlite-wasm-kysely: 0.3.0(kysely@0.27.6) 1690 | uuid: 10.0.0 1691 | transitivePeerDependencies: 1692 | - babel-plugin-macros 1693 | 1694 | '@jridgewell/gen-mapping@0.3.13': 1695 | dependencies: 1696 | '@jridgewell/sourcemap-codec': 1.5.5 1697 | '@jridgewell/trace-mapping': 0.3.31 1698 | 1699 | '@jridgewell/remapping@2.3.5': 1700 | dependencies: 1701 | '@jridgewell/gen-mapping': 0.3.13 1702 | '@jridgewell/trace-mapping': 0.3.31 1703 | 1704 | '@jridgewell/resolve-uri@3.1.2': {} 1705 | 1706 | '@jridgewell/sourcemap-codec@1.5.5': {} 1707 | 1708 | '@jridgewell/trace-mapping@0.3.31': 1709 | dependencies: 1710 | '@jridgewell/resolve-uri': 3.1.2 1711 | '@jridgewell/sourcemap-codec': 1.5.5 1712 | 1713 | '@jridgewell/trace-mapping@0.3.9': 1714 | dependencies: 1715 | '@jridgewell/resolve-uri': 3.1.2 1716 | '@jridgewell/sourcemap-codec': 1.5.5 1717 | 1718 | '@lix-js/sdk@0.4.7': 1719 | dependencies: 1720 | '@lix-js/server-protocol-schema': 0.1.1 1721 | dedent: 1.5.1 1722 | human-id: 4.1.3 1723 | js-sha256: 0.11.1 1724 | kysely: 0.27.6 1725 | sqlite-wasm-kysely: 0.3.0(kysely@0.27.6) 1726 | uuid: 10.0.0 1727 | transitivePeerDependencies: 1728 | - babel-plugin-macros 1729 | 1730 | '@lix-js/server-protocol-schema@0.1.1': {} 1731 | 1732 | '@polka/url@1.0.0-next.29': {} 1733 | 1734 | '@poppinss/colors@4.1.5': 1735 | dependencies: 1736 | kleur: 4.1.5 1737 | 1738 | '@poppinss/dumper@0.6.5': 1739 | dependencies: 1740 | '@poppinss/colors': 4.1.5 1741 | '@sindresorhus/is': 7.1.1 1742 | supports-color: 10.2.2 1743 | 1744 | '@poppinss/exception@1.2.2': {} 1745 | 1746 | '@remix-run/node-fetch-server@0.8.1': {} 1747 | 1748 | '@rollup/rollup-android-arm-eabi@4.53.3': 1749 | optional: true 1750 | 1751 | '@rollup/rollup-android-arm64@4.53.3': 1752 | optional: true 1753 | 1754 | '@rollup/rollup-darwin-arm64@4.53.3': 1755 | optional: true 1756 | 1757 | '@rollup/rollup-darwin-x64@4.53.3': 1758 | optional: true 1759 | 1760 | '@rollup/rollup-freebsd-arm64@4.53.3': 1761 | optional: true 1762 | 1763 | '@rollup/rollup-freebsd-x64@4.53.3': 1764 | optional: true 1765 | 1766 | '@rollup/rollup-linux-arm-gnueabihf@4.53.3': 1767 | optional: true 1768 | 1769 | '@rollup/rollup-linux-arm-musleabihf@4.53.3': 1770 | optional: true 1771 | 1772 | '@rollup/rollup-linux-arm64-gnu@4.53.3': 1773 | optional: true 1774 | 1775 | '@rollup/rollup-linux-arm64-musl@4.53.3': 1776 | optional: true 1777 | 1778 | '@rollup/rollup-linux-loong64-gnu@4.53.3': 1779 | optional: true 1780 | 1781 | '@rollup/rollup-linux-ppc64-gnu@4.53.3': 1782 | optional: true 1783 | 1784 | '@rollup/rollup-linux-riscv64-gnu@4.53.3': 1785 | optional: true 1786 | 1787 | '@rollup/rollup-linux-riscv64-musl@4.53.3': 1788 | optional: true 1789 | 1790 | '@rollup/rollup-linux-s390x-gnu@4.53.3': 1791 | optional: true 1792 | 1793 | '@rollup/rollup-linux-x64-gnu@4.53.3': 1794 | optional: true 1795 | 1796 | '@rollup/rollup-linux-x64-musl@4.53.3': 1797 | optional: true 1798 | 1799 | '@rollup/rollup-openharmony-arm64@4.53.3': 1800 | optional: true 1801 | 1802 | '@rollup/rollup-win32-arm64-msvc@4.53.3': 1803 | optional: true 1804 | 1805 | '@rollup/rollup-win32-ia32-msvc@4.53.3': 1806 | optional: true 1807 | 1808 | '@rollup/rollup-win32-x64-gnu@4.53.3': 1809 | optional: true 1810 | 1811 | '@rollup/rollup-win32-x64-msvc@4.53.3': 1812 | optional: true 1813 | 1814 | '@sinclair/typebox@0.31.28': {} 1815 | 1816 | '@sindresorhus/is@7.1.1': {} 1817 | 1818 | '@speed-highlight/core@1.2.12': {} 1819 | 1820 | '@sqlite.org/sqlite-wasm@3.48.0-build4': {} 1821 | 1822 | '@standard-schema/spec@1.0.0': {} 1823 | 1824 | '@sveltejs/acorn-typescript@1.0.8(acorn@8.15.0)': 1825 | dependencies: 1826 | acorn: 8.15.0 1827 | 1828 | '@sveltejs/adapter-cloudflare@7.2.4(@sveltejs/kit@2.49.0(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)))(wrangler@4.51.0(@cloudflare/workers-types@4.20251128.0))': 1829 | dependencies: 1830 | '@cloudflare/workers-types': 4.20251128.0 1831 | '@sveltejs/kit': 2.49.0(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)) 1832 | worktop: 0.8.0-next.18 1833 | wrangler: 4.51.0(@cloudflare/workers-types@4.20251128.0) 1834 | 1835 | '@sveltejs/kit@2.49.0(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2))': 1836 | dependencies: 1837 | '@standard-schema/spec': 1.0.0 1838 | '@sveltejs/acorn-typescript': 1.0.8(acorn@8.15.0) 1839 | '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)) 1840 | '@types/cookie': 0.6.0 1841 | acorn: 8.15.0 1842 | cookie: 0.6.0 1843 | devalue: 5.5.0 1844 | esm-env: 1.2.2 1845 | kleur: 4.1.5 1846 | magic-string: 0.30.21 1847 | mrmime: 2.0.1 1848 | sade: 1.8.1 1849 | set-cookie-parser: 2.7.2 1850 | sirv: 3.0.2 1851 | svelte: 5.45.2 1852 | vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2) 1853 | 1854 | '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2))': 1855 | dependencies: 1856 | '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)) 1857 | debug: 4.4.3 1858 | svelte: 5.45.2 1859 | vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2) 1860 | transitivePeerDependencies: 1861 | - supports-color 1862 | 1863 | '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2))': 1864 | dependencies: 1865 | '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.45.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)) 1866 | debug: 4.4.3 1867 | deepmerge: 4.3.1 1868 | magic-string: 0.30.21 1869 | svelte: 5.45.2 1870 | vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2) 1871 | vitefu: 1.1.1(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)) 1872 | transitivePeerDependencies: 1873 | - supports-color 1874 | 1875 | '@tailwindcss/node@4.1.17': 1876 | dependencies: 1877 | '@jridgewell/remapping': 2.3.5 1878 | enhanced-resolve: 5.18.3 1879 | jiti: 2.6.1 1880 | lightningcss: 1.30.2 1881 | magic-string: 0.30.21 1882 | source-map-js: 1.2.1 1883 | tailwindcss: 4.1.17 1884 | 1885 | '@tailwindcss/oxide-android-arm64@4.1.17': 1886 | optional: true 1887 | 1888 | '@tailwindcss/oxide-darwin-arm64@4.1.17': 1889 | optional: true 1890 | 1891 | '@tailwindcss/oxide-darwin-x64@4.1.17': 1892 | optional: true 1893 | 1894 | '@tailwindcss/oxide-freebsd-x64@4.1.17': 1895 | optional: true 1896 | 1897 | '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17': 1898 | optional: true 1899 | 1900 | '@tailwindcss/oxide-linux-arm64-gnu@4.1.17': 1901 | optional: true 1902 | 1903 | '@tailwindcss/oxide-linux-arm64-musl@4.1.17': 1904 | optional: true 1905 | 1906 | '@tailwindcss/oxide-linux-x64-gnu@4.1.17': 1907 | optional: true 1908 | 1909 | '@tailwindcss/oxide-linux-x64-musl@4.1.17': 1910 | optional: true 1911 | 1912 | '@tailwindcss/oxide-wasm32-wasi@4.1.17': 1913 | optional: true 1914 | 1915 | '@tailwindcss/oxide-win32-arm64-msvc@4.1.17': 1916 | optional: true 1917 | 1918 | '@tailwindcss/oxide-win32-x64-msvc@4.1.17': 1919 | optional: true 1920 | 1921 | '@tailwindcss/oxide@4.1.17': 1922 | optionalDependencies: 1923 | '@tailwindcss/oxide-android-arm64': 4.1.17 1924 | '@tailwindcss/oxide-darwin-arm64': 4.1.17 1925 | '@tailwindcss/oxide-darwin-x64': 4.1.17 1926 | '@tailwindcss/oxide-freebsd-x64': 4.1.17 1927 | '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.17 1928 | '@tailwindcss/oxide-linux-arm64-gnu': 4.1.17 1929 | '@tailwindcss/oxide-linux-arm64-musl': 4.1.17 1930 | '@tailwindcss/oxide-linux-x64-gnu': 4.1.17 1931 | '@tailwindcss/oxide-linux-x64-musl': 4.1.17 1932 | '@tailwindcss/oxide-wasm32-wasi': 4.1.17 1933 | '@tailwindcss/oxide-win32-arm64-msvc': 4.1.17 1934 | '@tailwindcss/oxide-win32-x64-msvc': 4.1.17 1935 | 1936 | '@tailwindcss/vite@4.1.17(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2))': 1937 | dependencies: 1938 | '@tailwindcss/node': 4.1.17 1939 | '@tailwindcss/oxide': 4.1.17 1940 | tailwindcss: 4.1.17 1941 | vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2) 1942 | 1943 | '@types/cookie@0.6.0': {} 1944 | 1945 | '@types/estree@1.0.8': {} 1946 | 1947 | '@types/node@24.10.1': 1948 | dependencies: 1949 | undici-types: 7.16.0 1950 | 1951 | acorn-walk@8.3.2: {} 1952 | 1953 | acorn@8.14.0: {} 1954 | 1955 | acorn@8.15.0: {} 1956 | 1957 | aria-query@5.3.2: {} 1958 | 1959 | array-timsort@1.0.3: {} 1960 | 1961 | axobject-query@4.1.0: {} 1962 | 1963 | blake3-wasm@2.1.5: {} 1964 | 1965 | chokidar@4.0.3: 1966 | dependencies: 1967 | readdirp: 4.1.2 1968 | 1969 | clsx@2.1.1: {} 1970 | 1971 | color-convert@2.0.1: 1972 | dependencies: 1973 | color-name: 1.1.4 1974 | 1975 | color-name@1.1.4: {} 1976 | 1977 | color-string@1.9.1: 1978 | dependencies: 1979 | color-name: 1.1.4 1980 | simple-swizzle: 0.2.4 1981 | 1982 | color@4.2.3: 1983 | dependencies: 1984 | color-convert: 2.0.1 1985 | color-string: 1.9.1 1986 | 1987 | commander@11.1.0: {} 1988 | 1989 | comment-json@4.4.1: 1990 | dependencies: 1991 | array-timsort: 1.0.3 1992 | core-util-is: 1.0.3 1993 | esprima: 4.0.1 1994 | 1995 | consola@3.4.0: {} 1996 | 1997 | cookie@0.6.0: {} 1998 | 1999 | cookie@1.1.1: {} 2000 | 2001 | core-util-is@1.0.3: {} 2002 | 2003 | debug@4.4.3: 2004 | dependencies: 2005 | ms: 2.1.3 2006 | 2007 | dedent@1.5.1: {} 2008 | 2009 | deepmerge@4.3.1: {} 2010 | 2011 | detect-libc@2.1.2: {} 2012 | 2013 | devalue@5.5.0: {} 2014 | 2015 | enhanced-resolve@5.18.3: 2016 | dependencies: 2017 | graceful-fs: 4.2.11 2018 | tapable: 2.3.0 2019 | 2020 | error-stack-parser-es@1.0.5: {} 2021 | 2022 | esbuild-wasm@0.19.12: {} 2023 | 2024 | esbuild@0.25.12: 2025 | optionalDependencies: 2026 | '@esbuild/aix-ppc64': 0.25.12 2027 | '@esbuild/android-arm': 0.25.12 2028 | '@esbuild/android-arm64': 0.25.12 2029 | '@esbuild/android-x64': 0.25.12 2030 | '@esbuild/darwin-arm64': 0.25.12 2031 | '@esbuild/darwin-x64': 0.25.12 2032 | '@esbuild/freebsd-arm64': 0.25.12 2033 | '@esbuild/freebsd-x64': 0.25.12 2034 | '@esbuild/linux-arm': 0.25.12 2035 | '@esbuild/linux-arm64': 0.25.12 2036 | '@esbuild/linux-ia32': 0.25.12 2037 | '@esbuild/linux-loong64': 0.25.12 2038 | '@esbuild/linux-mips64el': 0.25.12 2039 | '@esbuild/linux-ppc64': 0.25.12 2040 | '@esbuild/linux-riscv64': 0.25.12 2041 | '@esbuild/linux-s390x': 0.25.12 2042 | '@esbuild/linux-x64': 0.25.12 2043 | '@esbuild/netbsd-arm64': 0.25.12 2044 | '@esbuild/netbsd-x64': 0.25.12 2045 | '@esbuild/openbsd-arm64': 0.25.12 2046 | '@esbuild/openbsd-x64': 0.25.12 2047 | '@esbuild/openharmony-arm64': 0.25.12 2048 | '@esbuild/sunos-x64': 0.25.12 2049 | '@esbuild/win32-arm64': 0.25.12 2050 | '@esbuild/win32-ia32': 0.25.12 2051 | '@esbuild/win32-x64': 0.25.12 2052 | 2053 | esbuild@0.25.4: 2054 | optionalDependencies: 2055 | '@esbuild/aix-ppc64': 0.25.4 2056 | '@esbuild/android-arm': 0.25.4 2057 | '@esbuild/android-arm64': 0.25.4 2058 | '@esbuild/android-x64': 0.25.4 2059 | '@esbuild/darwin-arm64': 0.25.4 2060 | '@esbuild/darwin-x64': 0.25.4 2061 | '@esbuild/freebsd-arm64': 0.25.4 2062 | '@esbuild/freebsd-x64': 0.25.4 2063 | '@esbuild/linux-arm': 0.25.4 2064 | '@esbuild/linux-arm64': 0.25.4 2065 | '@esbuild/linux-ia32': 0.25.4 2066 | '@esbuild/linux-loong64': 0.25.4 2067 | '@esbuild/linux-mips64el': 0.25.4 2068 | '@esbuild/linux-ppc64': 0.25.4 2069 | '@esbuild/linux-riscv64': 0.25.4 2070 | '@esbuild/linux-s390x': 0.25.4 2071 | '@esbuild/linux-x64': 0.25.4 2072 | '@esbuild/netbsd-arm64': 0.25.4 2073 | '@esbuild/netbsd-x64': 0.25.4 2074 | '@esbuild/openbsd-arm64': 0.25.4 2075 | '@esbuild/openbsd-x64': 0.25.4 2076 | '@esbuild/sunos-x64': 0.25.4 2077 | '@esbuild/win32-arm64': 0.25.4 2078 | '@esbuild/win32-ia32': 0.25.4 2079 | '@esbuild/win32-x64': 0.25.4 2080 | 2081 | esm-env@1.2.2: {} 2082 | 2083 | esprima@4.0.1: {} 2084 | 2085 | esrap@2.2.0: 2086 | dependencies: 2087 | '@jridgewell/sourcemap-codec': 1.5.5 2088 | 2089 | exit-hook@2.2.1: {} 2090 | 2091 | fdir@6.5.0(picomatch@4.0.3): 2092 | optionalDependencies: 2093 | picomatch: 4.0.3 2094 | 2095 | fsevents@2.3.3: 2096 | optional: true 2097 | 2098 | get-port@7.1.0: {} 2099 | 2100 | glob-to-regexp@0.4.1: {} 2101 | 2102 | graceful-fs@4.2.11: {} 2103 | 2104 | human-id@4.1.3: {} 2105 | 2106 | is-arrayish@0.3.4: {} 2107 | 2108 | is-reference@3.0.3: 2109 | dependencies: 2110 | '@types/estree': 1.0.8 2111 | 2112 | jiti@2.6.1: {} 2113 | 2114 | js-sha256@0.11.1: {} 2115 | 2116 | json5@2.2.3: {} 2117 | 2118 | kleur@4.1.5: {} 2119 | 2120 | kysely@0.27.6: {} 2121 | 2122 | lightningcss-android-arm64@1.30.2: 2123 | optional: true 2124 | 2125 | lightningcss-darwin-arm64@1.30.2: 2126 | optional: true 2127 | 2128 | lightningcss-darwin-x64@1.30.2: 2129 | optional: true 2130 | 2131 | lightningcss-freebsd-x64@1.30.2: 2132 | optional: true 2133 | 2134 | lightningcss-linux-arm-gnueabihf@1.30.2: 2135 | optional: true 2136 | 2137 | lightningcss-linux-arm64-gnu@1.30.2: 2138 | optional: true 2139 | 2140 | lightningcss-linux-arm64-musl@1.30.2: 2141 | optional: true 2142 | 2143 | lightningcss-linux-x64-gnu@1.30.2: 2144 | optional: true 2145 | 2146 | lightningcss-linux-x64-musl@1.30.2: 2147 | optional: true 2148 | 2149 | lightningcss-win32-arm64-msvc@1.30.2: 2150 | optional: true 2151 | 2152 | lightningcss-win32-x64-msvc@1.30.2: 2153 | optional: true 2154 | 2155 | lightningcss@1.30.2: 2156 | dependencies: 2157 | detect-libc: 2.1.2 2158 | optionalDependencies: 2159 | lightningcss-android-arm64: 1.30.2 2160 | lightningcss-darwin-arm64: 1.30.2 2161 | lightningcss-darwin-x64: 1.30.2 2162 | lightningcss-freebsd-x64: 1.30.2 2163 | lightningcss-linux-arm-gnueabihf: 1.30.2 2164 | lightningcss-linux-arm64-gnu: 1.30.2 2165 | lightningcss-linux-arm64-musl: 1.30.2 2166 | lightningcss-linux-x64-gnu: 1.30.2 2167 | lightningcss-linux-x64-musl: 1.30.2 2168 | lightningcss-win32-arm64-msvc: 1.30.2 2169 | lightningcss-win32-x64-msvc: 1.30.2 2170 | 2171 | locate-character@3.0.0: {} 2172 | 2173 | magic-string@0.30.21: 2174 | dependencies: 2175 | '@jridgewell/sourcemap-codec': 1.5.5 2176 | 2177 | mime@3.0.0: {} 2178 | 2179 | miniflare@4.20251125.0: 2180 | dependencies: 2181 | '@cspotcode/source-map-support': 0.8.1 2182 | acorn: 8.14.0 2183 | acorn-walk: 8.3.2 2184 | exit-hook: 2.2.1 2185 | glob-to-regexp: 0.4.1 2186 | sharp: 0.33.5 2187 | stoppable: 1.1.0 2188 | undici: 7.14.0 2189 | workerd: 1.20251125.0 2190 | ws: 8.18.0 2191 | youch: 4.1.0-beta.10 2192 | zod: 3.22.3 2193 | transitivePeerDependencies: 2194 | - bufferutil 2195 | - utf-8-validate 2196 | 2197 | mri@1.2.0: {} 2198 | 2199 | mrmime@2.0.1: {} 2200 | 2201 | ms@2.1.3: {} 2202 | 2203 | nanoid@3.3.11: {} 2204 | 2205 | path-to-regexp@6.3.0: {} 2206 | 2207 | pathe@2.0.3: {} 2208 | 2209 | picocolors@1.1.1: {} 2210 | 2211 | picomatch@4.0.3: {} 2212 | 2213 | postcss@8.5.6: 2214 | dependencies: 2215 | nanoid: 3.3.11 2216 | picocolors: 1.1.1 2217 | source-map-js: 1.2.1 2218 | 2219 | readdirp@4.1.2: {} 2220 | 2221 | regexparam@3.0.0: {} 2222 | 2223 | rollup@4.53.3: 2224 | dependencies: 2225 | '@types/estree': 1.0.8 2226 | optionalDependencies: 2227 | '@rollup/rollup-android-arm-eabi': 4.53.3 2228 | '@rollup/rollup-android-arm64': 4.53.3 2229 | '@rollup/rollup-darwin-arm64': 4.53.3 2230 | '@rollup/rollup-darwin-x64': 4.53.3 2231 | '@rollup/rollup-freebsd-arm64': 4.53.3 2232 | '@rollup/rollup-freebsd-x64': 4.53.3 2233 | '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 2234 | '@rollup/rollup-linux-arm-musleabihf': 4.53.3 2235 | '@rollup/rollup-linux-arm64-gnu': 4.53.3 2236 | '@rollup/rollup-linux-arm64-musl': 4.53.3 2237 | '@rollup/rollup-linux-loong64-gnu': 4.53.3 2238 | '@rollup/rollup-linux-ppc64-gnu': 4.53.3 2239 | '@rollup/rollup-linux-riscv64-gnu': 4.53.3 2240 | '@rollup/rollup-linux-riscv64-musl': 4.53.3 2241 | '@rollup/rollup-linux-s390x-gnu': 4.53.3 2242 | '@rollup/rollup-linux-x64-gnu': 4.53.3 2243 | '@rollup/rollup-linux-x64-musl': 4.53.3 2244 | '@rollup/rollup-openharmony-arm64': 4.53.3 2245 | '@rollup/rollup-win32-arm64-msvc': 4.53.3 2246 | '@rollup/rollup-win32-ia32-msvc': 4.53.3 2247 | '@rollup/rollup-win32-x64-gnu': 4.53.3 2248 | '@rollup/rollup-win32-x64-msvc': 4.53.3 2249 | fsevents: 2.3.3 2250 | 2251 | sade@1.8.1: 2252 | dependencies: 2253 | mri: 1.2.0 2254 | 2255 | semver@7.7.3: {} 2256 | 2257 | set-cookie-parser@2.7.2: {} 2258 | 2259 | sharp@0.33.5: 2260 | dependencies: 2261 | color: 4.2.3 2262 | detect-libc: 2.1.2 2263 | semver: 7.7.3 2264 | optionalDependencies: 2265 | '@img/sharp-darwin-arm64': 0.33.5 2266 | '@img/sharp-darwin-x64': 0.33.5 2267 | '@img/sharp-libvips-darwin-arm64': 1.0.4 2268 | '@img/sharp-libvips-darwin-x64': 1.0.4 2269 | '@img/sharp-libvips-linux-arm': 1.0.5 2270 | '@img/sharp-libvips-linux-arm64': 1.0.4 2271 | '@img/sharp-libvips-linux-s390x': 1.0.4 2272 | '@img/sharp-libvips-linux-x64': 1.0.4 2273 | '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 2274 | '@img/sharp-libvips-linuxmusl-x64': 1.0.4 2275 | '@img/sharp-linux-arm': 0.33.5 2276 | '@img/sharp-linux-arm64': 0.33.5 2277 | '@img/sharp-linux-s390x': 0.33.5 2278 | '@img/sharp-linux-x64': 0.33.5 2279 | '@img/sharp-linuxmusl-arm64': 0.33.5 2280 | '@img/sharp-linuxmusl-x64': 0.33.5 2281 | '@img/sharp-wasm32': 0.33.5 2282 | '@img/sharp-win32-ia32': 0.33.5 2283 | '@img/sharp-win32-x64': 0.33.5 2284 | 2285 | simple-swizzle@0.2.4: 2286 | dependencies: 2287 | is-arrayish: 0.3.4 2288 | 2289 | sirv@3.0.2: 2290 | dependencies: 2291 | '@polka/url': 1.0.0-next.29 2292 | mrmime: 2.0.1 2293 | totalist: 3.0.1 2294 | 2295 | source-map-js@1.2.1: {} 2296 | 2297 | sqlite-wasm-kysely@0.3.0(kysely@0.27.6): 2298 | dependencies: 2299 | '@sqlite.org/sqlite-wasm': 3.48.0-build4 2300 | kysely: 0.27.6 2301 | 2302 | stoppable@1.1.0: {} 2303 | 2304 | supports-color@10.2.2: {} 2305 | 2306 | svelte-check@4.3.4(picomatch@4.0.3)(svelte@5.45.2)(typescript@5.9.3): 2307 | dependencies: 2308 | '@jridgewell/trace-mapping': 0.3.31 2309 | chokidar: 4.0.3 2310 | fdir: 6.5.0(picomatch@4.0.3) 2311 | picocolors: 1.1.1 2312 | sade: 1.8.1 2313 | svelte: 5.45.2 2314 | typescript: 5.9.3 2315 | transitivePeerDependencies: 2316 | - picomatch 2317 | 2318 | svelte@5.45.2: 2319 | dependencies: 2320 | '@jridgewell/remapping': 2.3.5 2321 | '@jridgewell/sourcemap-codec': 1.5.5 2322 | '@sveltejs/acorn-typescript': 1.0.8(acorn@8.15.0) 2323 | '@types/estree': 1.0.8 2324 | acorn: 8.15.0 2325 | aria-query: 5.3.2 2326 | axobject-query: 4.1.0 2327 | clsx: 2.1.1 2328 | devalue: 5.5.0 2329 | esm-env: 1.2.2 2330 | esrap: 2.2.0 2331 | is-reference: 3.0.3 2332 | locate-character: 3.0.0 2333 | magic-string: 0.30.21 2334 | zimmerframe: 1.1.4 2335 | 2336 | tailwindcss@4.1.17: {} 2337 | 2338 | tapable@2.3.0: {} 2339 | 2340 | tinyglobby@0.2.15: 2341 | dependencies: 2342 | fdir: 6.5.0(picomatch@4.0.3) 2343 | picomatch: 4.0.3 2344 | 2345 | totalist@3.0.1: {} 2346 | 2347 | tslib@2.8.1: 2348 | optional: true 2349 | 2350 | typescript@5.9.3: {} 2351 | 2352 | undici-types@7.16.0: {} 2353 | 2354 | undici@7.14.0: {} 2355 | 2356 | unenv@2.0.0-rc.24: 2357 | dependencies: 2358 | pathe: 2.0.3 2359 | 2360 | unplugin@2.3.11: 2361 | dependencies: 2362 | '@jridgewell/remapping': 2.3.5 2363 | acorn: 8.15.0 2364 | picomatch: 4.0.3 2365 | webpack-virtual-modules: 0.6.2 2366 | 2367 | urlpattern-polyfill@10.1.0: {} 2368 | 2369 | uuid@10.0.0: {} 2370 | 2371 | uuid@11.1.0: {} 2372 | 2373 | vite-plugin-devtools-json@0.1.1(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)): 2374 | dependencies: 2375 | uuid: 11.1.0 2376 | vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2) 2377 | 2378 | vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2): 2379 | dependencies: 2380 | esbuild: 0.25.12 2381 | fdir: 6.5.0(picomatch@4.0.3) 2382 | picomatch: 4.0.3 2383 | postcss: 8.5.6 2384 | rollup: 4.53.3 2385 | tinyglobby: 0.2.15 2386 | optionalDependencies: 2387 | '@types/node': 24.10.1 2388 | fsevents: 2.3.3 2389 | jiti: 2.6.1 2390 | lightningcss: 1.30.2 2391 | 2392 | vitefu@1.1.1(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)): 2393 | optionalDependencies: 2394 | vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2) 2395 | 2396 | webpack-virtual-modules@0.6.2: {} 2397 | 2398 | workerd@1.20251125.0: 2399 | optionalDependencies: 2400 | '@cloudflare/workerd-darwin-64': 1.20251125.0 2401 | '@cloudflare/workerd-darwin-arm64': 1.20251125.0 2402 | '@cloudflare/workerd-linux-64': 1.20251125.0 2403 | '@cloudflare/workerd-linux-arm64': 1.20251125.0 2404 | '@cloudflare/workerd-windows-64': 1.20251125.0 2405 | 2406 | worktop@0.8.0-next.18: 2407 | dependencies: 2408 | mrmime: 2.0.1 2409 | regexparam: 3.0.0 2410 | 2411 | wrangler@4.51.0(@cloudflare/workers-types@4.20251128.0): 2412 | dependencies: 2413 | '@cloudflare/kv-asset-handler': 0.4.1 2414 | '@cloudflare/unenv-preset': 2.7.11(unenv@2.0.0-rc.24)(workerd@1.20251125.0) 2415 | blake3-wasm: 2.1.5 2416 | esbuild: 0.25.4 2417 | miniflare: 4.20251125.0 2418 | path-to-regexp: 6.3.0 2419 | unenv: 2.0.0-rc.24 2420 | workerd: 1.20251125.0 2421 | optionalDependencies: 2422 | '@cloudflare/workers-types': 4.20251128.0 2423 | fsevents: 2.3.3 2424 | transitivePeerDependencies: 2425 | - bufferutil 2426 | - utf-8-validate 2427 | 2428 | ws@8.18.0: {} 2429 | 2430 | youch-core@0.3.3: 2431 | dependencies: 2432 | '@poppinss/exception': 1.2.2 2433 | error-stack-parser-es: 1.0.5 2434 | 2435 | youch@4.1.0-beta.10: 2436 | dependencies: 2437 | '@poppinss/colors': 4.1.5 2438 | '@poppinss/dumper': 0.6.5 2439 | '@speed-highlight/core': 1.2.12 2440 | cookie: 1.1.1 2441 | youch-core: 0.3.3 2442 | 2443 | zimmerframe@1.1.4: {} 2444 | 2445 | zod@3.22.3: {} 2446 | --------------------------------------------------------------------------------