diff --git a/.claude/agents/playwright-test-generator.md b/.claude/agents/playwright-test-generator.md new file mode 100644 index 0000000..0504c92 --- /dev/null +++ b/.claude/agents/playwright-test-generator.md @@ -0,0 +1,59 @@ +--- +name: playwright-test-generator +description: 'Use this agent when you need to create automated browser tests using Playwright Examples: Context: User wants to generate a test for the test plan item. ' +tools: Glob, Grep, Read, LS, mcp__playwright-test__browser_click, mcp__playwright-test__browser_drag, mcp__playwright-test__browser_evaluate, mcp__playwright-test__browser_file_upload, mcp__playwright-test__browser_handle_dialog, mcp__playwright-test__browser_hover, mcp__playwright-test__browser_navigate, mcp__playwright-test__browser_press_key, mcp__playwright-test__browser_select_option, mcp__playwright-test__browser_snapshot, mcp__playwright-test__browser_type, mcp__playwright-test__browser_verify_element_visible, mcp__playwright-test__browser_verify_list_visible, mcp__playwright-test__browser_verify_text_visible, mcp__playwright-test__browser_verify_value, mcp__playwright-test__browser_wait_for, mcp__playwright-test__generator_read_log, mcp__playwright-test__generator_setup_page, mcp__playwright-test__generator_write_test +model: sonnet +color: blue +--- + +You are a Playwright Test Generator, an expert in browser automation and end-to-end testing. +Your specialty is creating robust, reliable Playwright tests that accurately simulate user interactions and validate +application behavior. + +# For each test you generate +- Obtain the test plan with all the steps and verification specification +- Run the `generator_setup_page` tool to set up page for the scenario +- For each step and verification in the scenario, do the following: + - Use Playwright tool to manually execute it in real-time. + - Use the step description as the intent for each Playwright tool call. +- Retrieve generator log via `generator_read_log` +- Immediately after reading the test log, invoke `generator_write_test` with the generated source code + - File should contain single test + - File name must be fs-friendly scenario name + - Test must be placed in a describe matching the top-level test plan item + - Test title must match the scenario name + - Includes a comment with the step text before each step execution. Do not duplicate comments if step requires + multiple actions. + - Always use best practices from the log when generating tests. + + + For following plan: + + ```markdown file=specs/plan.md + ### 1. Adding New Todos + **Seed:** `tests/seed.spec.ts` + + #### 1.1 Add Valid Todo + **Steps:** + 1. Click in the "What needs to be done?" input field + + #### 1.2 Add Multiple Todos + ... + ``` + + Following file is generated: + + ```ts file=add-valid-todo.spec.ts + // spec: specs/plan.md + // seed: tests/seed.spec.ts + + test.describe('Adding New Todos', () => { + test('Add Valid Todo', async { page } => { + // 1. Click in the "What needs to be done?" input field + await page.click(...); + + ... + }); + }); + ``` + \ No newline at end of file diff --git a/.claude/agents/playwright-test-healer.md b/.claude/agents/playwright-test-healer.md new file mode 100644 index 0000000..b66280f --- /dev/null +++ b/.claude/agents/playwright-test-healer.md @@ -0,0 +1,45 @@ +--- +name: playwright-test-healer +description: Use this agent when you need to debug and fix failing Playwright tests +tools: Glob, Grep, Read, LS, Edit, MultiEdit, Write, mcp__playwright-test__browser_console_messages, mcp__playwright-test__browser_evaluate, mcp__playwright-test__browser_generate_locator, mcp__playwright-test__browser_network_requests, mcp__playwright-test__browser_snapshot, mcp__playwright-test__test_debug, mcp__playwright-test__test_list, mcp__playwright-test__test_run +model: sonnet +color: red +--- + +You are the Playwright Test Healer, an expert test automation engineer specializing in debugging and +resolving Playwright test failures. Your mission is to systematically identify, diagnose, and fix +broken Playwright tests using a methodical approach. + +Your workflow: +1. **Initial Execution**: Run all tests using `test_run` tool to identify failing tests +2. **Debug failed tests**: For each failing test run `test_debug`. +3. **Error Investigation**: When the test pauses on errors, use available Playwright MCP tools to: + - Examine the error details + - Capture page snapshot to understand the context + - Analyze selectors, timing issues, or assertion failures +4. **Root Cause Analysis**: Determine the underlying cause of the failure by examining: + - Element selectors that may have changed + - Timing and synchronization issues + - Data dependencies or test environment problems + - Application changes that broke test assumptions +5. **Code Remediation**: Edit the test code to address identified issues, focusing on: + - Updating selectors to match current application state + - Fixing assertions and expected values + - Improving test reliability and maintainability + - For inherently dynamic data, utilize regular expressions to produce resilient locators +6. **Verification**: Restart the test after each fix to validate the changes +7. **Iteration**: Repeat the investigation and fixing process until the test passes cleanly + +Key principles: +- Be systematic and thorough in your debugging approach +- Document your findings and reasoning for each fix +- Prefer robust, maintainable solutions over quick hacks +- Use Playwright best practices for reliable test automation +- If multiple errors exist, fix them one at a time and retest +- Provide clear explanations of what was broken and how you fixed it +- You will continue this process until the test runs successfully without any failures or errors. +- If the error persists and you have high level of confidence that the test is correct, mark this test as test.fixme() + so that it is skipped during the execution. Add a comment before the failing step explaining what is happening instead + of the expected behavior. +- Do not ask user questions, you are not interactive tool, do the most reasonable thing possible to pass the test. +- Never wait for networkidle or use other discouraged or deprecated apis \ No newline at end of file diff --git a/.claude/agents/playwright-test-planner.md b/.claude/agents/playwright-test-planner.md new file mode 100644 index 0000000..b33d6ba --- /dev/null +++ b/.claude/agents/playwright-test-planner.md @@ -0,0 +1,52 @@ +--- +name: playwright-test-planner +description: Use this agent when you need to create comprehensive test plan for a web application or website +tools: Glob, Grep, Read, LS, mcp__playwright-test__browser_click, mcp__playwright-test__browser_close, mcp__playwright-test__browser_console_messages, mcp__playwright-test__browser_drag, mcp__playwright-test__browser_evaluate, mcp__playwright-test__browser_file_upload, mcp__playwright-test__browser_handle_dialog, mcp__playwright-test__browser_hover, mcp__playwright-test__browser_navigate, mcp__playwright-test__browser_navigate_back, mcp__playwright-test__browser_network_requests, mcp__playwright-test__browser_press_key, mcp__playwright-test__browser_run_code, mcp__playwright-test__browser_select_option, mcp__playwright-test__browser_snapshot, mcp__playwright-test__browser_take_screenshot, mcp__playwright-test__browser_type, mcp__playwright-test__browser_wait_for, mcp__playwright-test__planner_setup_page, mcp__playwright-test__planner_save_plan +model: sonnet +color: green +--- + +You are an expert web test planner with extensive experience in quality assurance, user experience testing, and test +scenario design. Your expertise includes functional testing, edge case identification, and comprehensive test coverage +planning. + +You will: + +1. **Navigate and Explore** + - Invoke the `planner_setup_page` tool once to set up page before using any other tools + - Explore the browser snapshot + - Do not take screenshots unless absolutely necessary + - Use `browser_*` tools to navigate and discover interface + - Thoroughly explore the interface, identifying all interactive elements, forms, navigation paths, and functionality + +2. **Analyze User Flows** + - Map out the primary user journeys and identify critical paths through the application + - Consider different user types and their typical behaviors + +3. **Design Comprehensive Scenarios** + + Create detailed test scenarios that cover: + - Happy path scenarios (normal user behavior) + - Edge cases and boundary conditions + - Error handling and validation + +4. **Structure Test Plans** + + Each scenario must include: + - Clear, descriptive title + - Detailed step-by-step instructions + - Expected outcomes where appropriate + - Assumptions about starting state (always assume blank/fresh state) + - Success criteria and failure conditions + +5. **Create Documentation** + + Submit your test plan using `planner_save_plan` tool. + +**Quality Standards**: +- Write steps that are specific enough for any tester to follow +- Include negative testing scenarios +- Ensure scenarios are independent and can be run in any order + +**Output Format**: Always save the complete test plan as a markdown file with clear headings, numbered steps, and +professional formatting suitable for sharing with development and QA teams. \ No newline at end of file diff --git a/.mcp.json b/.mcp.json index 259a959..7b09bbe 100644 --- a/.mcp.json +++ b/.mcp.json @@ -3,6 +3,15 @@ "playwright": { "command": "npx", "args": ["@playwright/mcp@latest"] + }, + "playwright-test": { + "command": "npx", + "args": [ + "playwright", + "run-test-mcp-server", + "--config", + "apps/web/playwright.config.ts" + ] } } } diff --git a/apps/server/package.json b/apps/server/package.json index d249b79..c7849d8 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -10,6 +10,7 @@ "destroy:dev": "alchemy destroy --stage dev", "destroy:prod": "alchemy destroy --stage prod", "destroy": "alchemy destroy", + "test": "vitest run", "lint": "biome lint --write", "format": "biome format --write" }, @@ -22,11 +23,13 @@ }, "devDependencies": { "@biomejs/biome": "catalog:", + "@cloudflare/vitest-pool-workers": "catalog:", "@cloudflare/workers-types": "catalog:", "@nn-stack/config": "workspace:*", "@types/node": "catalog:", "alchemy": "catalog:", "drizzle-kit": "catalog:", - "typescript": "catalog:" + "typescript": "catalog:", + "vitest": "catalog:" } } diff --git a/apps/server/tests/server.test.ts b/apps/server/tests/server.test.ts new file mode 100644 index 0000000..b552029 --- /dev/null +++ b/apps/server/tests/server.test.ts @@ -0,0 +1,52 @@ +import app from '../src/index'; +import { describe, it, expect } from 'vitest'; + +async function rpc(path: string, input?: unknown) { + const urlPath = path.replace(/\./g, '/'); + const resp = await app.fetch( + new Request(`http://localhost/rpc/${urlPath}`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ json: input }), + }), + ); + const raw = (await resp.json()) as { json?: unknown }; + return { status: resp.status, body: raw.json }; +} + +describe('Server smoke test', () => { + it('GET / returns hello message', async () => { + const res = await app.fetch(new Request('http://localhost/')); + expect(res.status).toBe(200); + expect(await res.text()).toBe('Hello nn stack server!'); + }); + + it('GET /rpc/planet/list returns 8 planets', async () => { + const { status, body } = await rpc('planet.list'); + expect(status).toBe(200); + const planets = body as Array<{ name: string }>; + expect(planets).toHaveLength(8); + expect(planets[0].name).toBe('Mercury'); + }); +}); + +describe('Todos CRUD (D1 integration)', () => { + it('creates and retrieves a todo', async () => { + const { status: createStatus, body: created } = await rpc('todos.createTodo', { + text: 'Test todo', + }); + expect(createStatus).toBe(200); + + const todo = created as { id: number; text: string; completed: boolean }; + expect(todo.text).toBe('Test todo'); + expect(todo.completed).toBe(false); + + const { status: listStatus, body: todos } = await rpc('todos.getTodos'); + expect(listStatus).toBe(200); + + const allTodos = todos as Array<{ id: number; text: string }>; + const found = allTodos.find((t) => t.id === todo.id); + expect(found).toBeTruthy(); + expect(found!.text).toBe('Test todo'); + }); +}); diff --git a/apps/server/tests/setup.ts b/apps/server/tests/setup.ts new file mode 100644 index 0000000..c1f6b74 --- /dev/null +++ b/apps/server/tests/setup.ts @@ -0,0 +1,15 @@ +import { env } from 'cloudflare:workers'; +import { applyD1Migrations } from 'cloudflare:test'; + +declare global { + namespace Cloudflare { + interface Env { + DB: D1Database; + KV: KVNamespace; + CORS_ORIGIN: string; + TEST_MIGRATIONS: unknown[]; + } + } +} + +await applyD1Migrations(env.DB, env.TEST_MIGRATIONS as Parameters[1]); diff --git a/apps/server/vitest.config.ts b/apps/server/vitest.config.ts new file mode 100644 index 0000000..2b5214a --- /dev/null +++ b/apps/server/vitest.config.ts @@ -0,0 +1,44 @@ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { cloudflareTest, readD1Migrations } from '@cloudflare/vitest-pool-workers'; +import { defineConfig } from 'vitest/config'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +export default defineConfig(async () => { + const migrationsPath = path.resolve( + __dirname, + '../../packages/db/migrations', + ); + const migrations = await readD1Migrations(migrationsPath); + + return { + plugins: [ + cloudflareTest({ + main: './src/index.ts', + miniflare: { + compatibilityDate: '2025-01-01', + compatibilityFlags: ['nodejs_compat'], + bindings: { + CORS_ORIGIN: 'http://localhost:3000', + TEST_MIGRATIONS: migrations, + }, + d1Databases: { + DB: { + id: 'test-db', + }, + }, + kvNamespaces: { + KV: { + id: 'test-kv', + }, + }, + }, + }), + ], + test: { + setupFiles: ['./tests/setup.ts'], + }, + }; +}); diff --git a/apps/web/e2e/seed.spec.ts b/apps/web/e2e/seed.spec.ts new file mode 100644 index 0000000..ef5ce4c --- /dev/null +++ b/apps/web/e2e/seed.spec.ts @@ -0,0 +1,7 @@ +import { test, expect } from '@playwright/test'; + +test.describe('Test group', () => { + test('seed', async ({ page }) => { + // generate code here. + }); +}); diff --git a/apps/web/e2e/smoke.spec.ts b/apps/web/e2e/smoke.spec.ts new file mode 100644 index 0000000..c5603f7 --- /dev/null +++ b/apps/web/e2e/smoke.spec.ts @@ -0,0 +1,16 @@ +import { test, expect } from '@playwright/test'; + +test.describe('Smoke tests', () => { + test('homepage loads', async ({ page }) => { + await page.goto('/'); + await expect(page).toHaveTitle(/nn-stack|Next/i); + }); + + test('hello API route returns JSON', async ({ request }) => { + const res = await request.get('/api/hello'); + expect(res.ok()).toBeTruthy(); + const body = await res.json(); + expect(body.message).toBe('Hello from Next.js on Cloudflare Workers!'); + expect(body.timestamp).toBeDefined(); + }); +}); diff --git a/apps/web/package.json b/apps/web/package.json index 12f7e69..09a89b2 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -10,6 +10,7 @@ "destroy:dev": "alchemy destroy --stage dev", "destroy:prod": "alchemy destroy --stage prod", "destroy": "alchemy destroy", + "test:e2e": "playwright test", "lint": "biome lint --write", "format": "biome format --write", "start": "next start" @@ -37,6 +38,7 @@ "@types/node": "catalog:", "@types/react": "catalog:", "@types/react-dom": "catalog:", + "@playwright/test": "catalog:", "alchemy": "catalog:", "typescript": "catalog:" } diff --git a/apps/web/playwright.config.ts b/apps/web/playwright.config.ts new file mode 100644 index 0000000..e80c7e3 --- /dev/null +++ b/apps/web/playwright.config.ts @@ -0,0 +1,24 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 30000, + retries: 1, + expect: { timeout: 10000 }, + use: { + baseURL: 'http://localhost:3000', + headless: true, + video: 'retain-on-failure', + trace: 'retain-on-failure', + }, + projects: [ + { name: 'chromium', use: { browserName: 'chromium' } }, + ], + webServer: { + command: 'pnpm run dev', + cwd: '../../', + url: 'http://localhost:3000', + reuseExistingServer: true, + timeout: 60000, + }, +}); diff --git a/apps/web/specs/README.md b/apps/web/specs/README.md new file mode 100644 index 0000000..48a788b --- /dev/null +++ b/apps/web/specs/README.md @@ -0,0 +1,3 @@ +# Specs + +This is a directory for test plans. diff --git a/docs/testing.md b/docs/testing.md index eef0aa4..8863b34 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -1,101 +1,58 @@ -# Testing +# Testing Strategy -## Unit & Integration Tests — Vitest +## Per-Workspace Overview -Use [Vitest](https://vitest.dev) for unit and integration tests. +| Workspace | Tool | Type | Notes | +|-----------|------|------|-------| +| `apps/server` | Vitest + `@cloudflare/vitest-pool-workers` | Integration | Real D1/KV via miniflare, `import app` + `app.fetch()` | +| `apps/web` | Playwright | E2E | Against running dev server | +| `packages/api` | None | — | Covered by `apps/server` tests (see below) | +| `packages/db` | None | — | Schema-only, no runtime logic | +| `packages/ui` | None | — | Shadcn components, covered by E2E | +| `packages/config` | None | — | tsconfig only | -### File Conventions +## Why `packages/api` has no standalone tests -- Test files: `*.test.ts` or `*.test.tsx`, co-located with the source file -- Example: `packages/api/src/users.ts` → `packages/api/src/users.test.ts` +All API handlers depend on Cloudflare bindings (D1, KV, R2) via `context.ts`. Mocking these is fragile. Instead, `apps/server` tests run handlers in real miniflare Workers runtime through the full request chain: HTTP → Hono → oRPC → handler → D1. -### What to Test - -- **Unit tests**: Pure functions, utilities, Zod schemas, data transformations -- **Integration tests**: oRPC handlers with mocked Cloudflare bindings, database queries with test D1 instances - -### Running Tests - -```bash -pnpm --filter test # Run tests for a specific package -pnpm --filter test --watch # Watch mode -``` - -## E2E Tests — Playwright Test Agents - -E2E tests use [Playwright Test Agents](https://playwright.dev/docs/test-agents) for AI-assisted test creation, generation, and self-healing. - -### Setup - -Initialize Playwright Test Agents in the project: +## Commands ```bash -npx playwright init-agents --loop=claude +pnpm test # all integration tests +pnpm test:e2e # Playwright E2E (needs dev server) ``` -This sets up agent definitions under `.github/` with all necessary MCP tools and instructions — no separate skills installation required. Regenerate after Playwright updates to access new tools. +## Server tests -### Workflow +- Config: `apps/server/vitest.config.ts` — `cloudflareTest()` plugin with miniflare D1/KV bindings +- Setup: `apps/server/tests/setup.ts` — runs D1 migrations from `packages/db/migrations/` +- Pattern: `import app from '../src/index'` then `app.fetch(new Request(...))` +- Location: `apps/server/tests/*.test.ts` -#### Step 1: Planner Agent — Create Test Specs +## Web E2E tests -Based on user descriptions or PRD documents, use the **Planner Agent** to explore the running app and produce markdown test plans: +- Config: `apps/web/playwright.config.ts` — Chromium, baseURL `localhost:3000`, auto-starts dev server +- Location: `apps/web/e2e/*.spec.ts` +- Use semantic selectors — prefer `getByRole`, `getByText`, `getByLabel` over fragile CSS selectors -- Input: user scenario description or PRD document -- Output: structured markdown spec file under `e2e/specs/` +## Playwright Test Agents -The planner navigates the app, discovers page structure, and writes human-readable test plans with steps and expected results. +AI-assisted E2E test creation via [Playwright Test Agents](https://playwright.dev/docs/test-agents). Agent definitions are in `.claude/agents/playwright-test-*.md`, backed by the `playwright-test` MCP server. -```markdown - -# User CRUD +### Agents -1. Navigate to /playground/components/users -2. Fill in name "Test User" and email "test@example.com" -3. Click "Create User" -4. Verify "Test User" appears in the user list -5. Click "Edit" on "Test User" -6. Change name to "Updated User", click "Update" -7. Verify "Updated User" appears in the list -8. Click "Delete" on "Updated User" -9. Verify the user is removed from the list -``` - -#### Step 2: Generator Agent — Create Test Files - -Use the **Generator Agent** to transform markdown specs into executable Playwright test files: - -- Input: markdown spec from `e2e/specs/` -- Output: Playwright test file under `e2e/tests/` -- The generator verifies selectors and assertions live against the running app using semantic selectors (`getByRole`, `getByText`, `getByLabel`, `getByPlaceholder`) - -#### Step 3: Healer Agent — Run & Fix Tests +1. **Planner** — explore the running app, produce markdown test specs under `apps/web/specs/` +2. **Generator** — transform specs into Playwright test files under `apps/web/e2e/` +3. **Healer** — run failing tests, inspect UI, auto-repair locators and assertions -Use the **Healer Agent** to execute tests and automatically repair failures: +### Seed file -- Replays failing steps and inspects the current UI -- Suggests patches (locator updates, wait adjustments, data fixes) -- Re-runs until passing or guardrails activate - -### File Structure - -``` -e2e/ -├── specs/ ← Markdown test plans (planner output) -│ ├── user-crud.md -│ ├── file-upload.md -│ └── ssr-demo.md -└── tests/ ← Playwright test files (generator output) - ├── seed.spec.ts ← Bootstrap environment - ├── user-crud.spec.ts - ├── file-upload.spec.ts - └── ssr-demo.spec.ts -``` +`apps/web/e2e/seed.spec.ts` — bootstraps the test environment. Referenced by generated tests. -### Key Principles +### Key principles -- **Specs are the source of truth** — review and maintain the markdown plans -- **Use semantic selectors** — prefer `getByRole`, `getByText`, `getByLabel` over fragile CSS selectors or testids -- **Generated tests run without AI** — standard Playwright in CI, no API keys needed -- **Use healer to fix flaky tests** — don't hand-edit generated tests, let the healer agent repair them +- Specs are the source of truth — review and maintain the markdown plans +- Use semantic selectors — prefer `getByRole`, `getByText`, `getByLabel` over fragile CSS selectors +- Generated tests run without AI — standard Playwright in CI, no API keys needed +- Use healer to fix flaky tests instead of hand-editing - Keep specs focused: one user flow per file diff --git a/package.json b/package.json index 23202fd..ae1f896 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,8 @@ "destroy:prod": "pnpm run -r destroy:prod", "deploy": "pnpm run -r deploy", "destroy": "pnpm run -r destroy", + "test": "pnpm -r test", + "test:e2e": "pnpm --filter @nn-stack/web run test:e2e", "lint": "pnpm run -r lint", "format": "pnpm run -r format" }, @@ -24,5 +26,11 @@ "alchemy": "catalog:", "ctx7": "^0.3.9", "wrangler": "catalog:" + }, + "pnpm": { + "onlyBuiltDependencies": [ + "esbuild", + "workerd" + ] } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aa361be..5aa214e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,6 +9,9 @@ catalogs: '@biomejs/biome': specifier: ^2.3.10 version: 2.3.10 + '@cloudflare/vitest-pool-workers': + specifier: ^0.14.1 + version: 0.14.1 '@cloudflare/workers-types': specifier: ^4.20260317.1 version: 4.20260317.1 @@ -24,6 +27,9 @@ catalogs: '@orpc/tanstack-query': specifier: ^1.13.13 version: 1.13.13 + '@playwright/test': + specifier: ^1.58.2 + version: 1.59.1 '@types/node': specifier: ^25.0.3 version: 25.0.3 @@ -60,6 +66,9 @@ catalogs: typescript: specifier: ^5.9.3 version: 5.9.3 + vitest: + specifier: ^4.1.2 + version: 4.1.2 wrangler: specifier: ^4.78.0 version: 4.78.0 @@ -73,10 +82,10 @@ importers: devDependencies: alchemy: specifier: 'catalog:' - version: 0.90.1(@aws-sdk/client-dynamodb@3.984.0)(@aws-sdk/client-lambda@3.984.0)(@aws-sdk/client-s3@3.984.0)(@aws-sdk/client-sqs@3.984.0)(@aws-sdk/client-sts@3.398.0)(@opennextjs/cloudflare@1.18.0(next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)))(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260317.1)(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)) + version: 0.90.1(@aws-sdk/client-dynamodb@3.984.0)(@aws-sdk/client-lambda@3.984.0)(@aws-sdk/client-s3@3.984.0)(@aws-sdk/client-sqs@3.984.0)(@aws-sdk/client-sts@3.398.0)(@opennextjs/cloudflare@1.18.0(next@16.1.6(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260317.1)(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)) ctx7: specifier: ^0.3.9 - version: 0.3.9(@types/node@25.0.3) + version: 0.3.10(@types/node@25.0.3) wrangler: specifier: 'catalog:' version: 4.78.0(@cloudflare/workers-types@4.20260317.1) @@ -102,6 +111,9 @@ importers: '@biomejs/biome': specifier: 'catalog:' version: 2.3.10 + '@cloudflare/vitest-pool-workers': + specifier: 'catalog:' + version: 0.14.1(@cloudflare/workers-types@4.20260317.1)(@vitest/runner@4.1.2)(@vitest/snapshot@4.1.2)(vitest@4.1.2(@types/node@25.0.3)(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.25.12)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))) '@cloudflare/workers-types': specifier: 'catalog:' version: 4.20260317.1 @@ -113,13 +125,16 @@ importers: version: 25.0.3 alchemy: specifier: 'catalog:' - version: 0.90.1(@aws-sdk/client-dynamodb@3.984.0)(@aws-sdk/client-lambda@3.984.0)(@aws-sdk/client-s3@3.984.0)(@aws-sdk/client-sqs@3.984.0)(@aws-sdk/client-sts@3.398.0)(@opennextjs/cloudflare@1.18.0(next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)))(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260317.1)(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)) + version: 0.90.1(@aws-sdk/client-dynamodb@3.984.0)(@aws-sdk/client-lambda@3.984.0)(@aws-sdk/client-s3@3.984.0)(@aws-sdk/client-sqs@3.984.0)(@aws-sdk/client-sts@3.398.0)(@opennextjs/cloudflare@1.18.0(next@16.1.6(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.25.12)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260401.1)(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)) drizzle-kit: specifier: 'catalog:' version: 0.31.8 typescript: specifier: 'catalog:' version: 5.9.3 + vitest: + specifier: 'catalog:' + version: 4.1.2(@types/node@25.0.3)(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.25.12)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)) apps/tanstack: dependencies: @@ -149,7 +164,7 @@ importers: version: 1.168.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@tanstack/react-start': specifier: ^1.167.16 - version: 1.167.16(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.167.16(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)) lucide-react: specifier: 'catalog:' version: 0.562.0(react@19.2.3) @@ -174,7 +189,7 @@ importers: version: link:../../packages/config '@tailwindcss/vite': specifier: ^4.2.2 - version: 4.2.2(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.2.2(vite@7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)) '@types/node': specifier: 'catalog:' version: 25.0.3 @@ -186,19 +201,19 @@ importers: version: 19.2.3(@types/react@19.2.7) '@vitejs/plugin-react': specifier: ^5.2.0 - version: 5.2.0(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)) + version: 5.2.0(vite@7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)) alchemy: specifier: 'catalog:' - version: 0.90.1(@aws-sdk/client-dynamodb@3.984.0)(@aws-sdk/client-lambda@3.984.0)(@aws-sdk/client-s3@3.984.0)(@aws-sdk/client-sqs@3.984.0)(@aws-sdk/client-sts@3.398.0)(@opennextjs/cloudflare@1.18.0(next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)))(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260317.1)(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)) + version: 0.90.1(@aws-sdk/client-dynamodb@3.984.0)(@aws-sdk/client-lambda@3.984.0)(@aws-sdk/client-s3@3.984.0)(@aws-sdk/client-sqs@3.984.0)(@aws-sdk/client-sts@3.398.0)(@opennextjs/cloudflare@1.18.0(next@16.1.6(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)))(vite@7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260401.1)(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)) typescript: specifier: 'catalog:' version: 5.9.3 vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) + version: 7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) vite-tsconfig-paths: specifier: ^6.1.1 - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)) apps/web: dependencies: @@ -210,7 +225,7 @@ importers: version: link:../../packages/ui '@opennextjs/cloudflare': specifier: 'catalog:' - version: 1.18.0(next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)) + version: 1.18.0(next@16.1.6(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)) '@orpc/client': specifier: 'catalog:' version: 1.13.13 @@ -228,7 +243,7 @@ importers: version: 0.562.0(react@19.2.3) next: specifier: 16.1.6 - version: 16.1.6(@babel/core@7.29.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 16.1.6(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) postcss: specifier: ^8.5.6 version: 8.5.6 @@ -254,6 +269,9 @@ importers: '@nn-stack/config': specifier: workspace:* version: link:../../packages/config + '@playwright/test': + specifier: 'catalog:' + version: 1.59.1 '@types/node': specifier: 'catalog:' version: 25.0.3 @@ -265,7 +283,7 @@ importers: version: 19.2.3(@types/react@19.2.7) alchemy: specifier: 'catalog:' - version: 0.90.1(@aws-sdk/client-dynamodb@3.984.0)(@aws-sdk/client-lambda@3.984.0)(@aws-sdk/client-s3@3.984.0)(@aws-sdk/client-sqs@3.984.0)(@aws-sdk/client-sts@3.398.0)(@opennextjs/cloudflare@1.18.0(next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)))(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260317.1)(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)) + version: 0.90.1(@aws-sdk/client-dynamodb@3.984.0)(@aws-sdk/client-lambda@3.984.0)(@aws-sdk/client-s3@3.984.0)(@aws-sdk/client-sqs@3.984.0)(@aws-sdk/client-sts@3.398.0)(@opennextjs/cloudflare@1.18.0(next@16.1.6(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260401.1)(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)) typescript: specifier: 'catalog:' version: 5.9.3 @@ -305,7 +323,7 @@ importers: version: link:../config alchemy: specifier: 'catalog:' - version: 0.90.1(@aws-sdk/client-dynamodb@3.984.0)(@aws-sdk/client-lambda@3.984.0)(@aws-sdk/client-s3@3.958.0)(@aws-sdk/client-sqs@3.984.0)(@aws-sdk/client-sts@3.398.0)(@opennextjs/cloudflare@1.18.0(next@16.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)))(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260317.1)(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)) + version: 0.90.1(@aws-sdk/client-dynamodb@3.984.0)(@aws-sdk/client-lambda@3.984.0)(@aws-sdk/client-s3@3.958.0)(@aws-sdk/client-sqs@3.984.0)(@aws-sdk/client-sts@3.398.0)(@opennextjs/cloudflare@1.18.0(next@16.1.6(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260401.1)(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)) typescript: specifier: 'catalog:' version: 5.9.3 @@ -1076,6 +1094,13 @@ packages: workerd: optional: true + '@cloudflare/vitest-pool-workers@0.14.1': + resolution: {integrity: sha512-AuIvoGXi9bMjgD1636JtP84yGsjhdtsk23rYMVFLO9KB84rvwhVPkvwgBv74RbhbURXYDKWV5koPwPucFSFgUg==} + peerDependencies: + '@vitest/runner': ^4.1.0 + '@vitest/snapshot': ^4.1.0 + vitest: ^4.1.0 + '@cloudflare/workerd-darwin-64@1.20260310.1': resolution: {integrity: sha512-hF2VpoWaMb1fiGCQJqCY6M8I+2QQqjkyY4LiDYdTL5D/w6C1l5v1zhc0/jrjdD1DXfpJtpcSMSmEPjHse4p9Ig==} engines: {node: '>=16'} @@ -1088,6 +1113,12 @@ packages: cpu: [x64] os: [darwin] + '@cloudflare/workerd-darwin-64@1.20260401.1': + resolution: {integrity: sha512-ZSmceM70jH6k+/62VkEcmMNzrpr4kSctkX5Lsgqv38KktfhPY/hsh75y1lRoPWS3H3kgMa4p2pUSlidZR1u2hw==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + '@cloudflare/workerd-darwin-arm64@1.20260310.1': resolution: {integrity: sha512-h/Vl3XrYYPI6yFDE27XO1QPq/1G1lKIM8tzZGIWYpntK3IN5XtH3Ee/sLaegpJ49aIJoqhF2mVAZ6Yw+Vk2gJw==} engines: {node: '>=16'} @@ -1100,6 +1131,12 @@ packages: cpu: [arm64] os: [darwin] + '@cloudflare/workerd-darwin-arm64@1.20260401.1': + resolution: {integrity: sha512-7UKWF+IUZ3NXMVPsDg8Cjg0r58b+uYlfvs5Yt8bvtU+geCtW4P2MxRHmRSEo8SryckXOJjb/b8tcncgCykFu8g==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + '@cloudflare/workerd-linux-64@1.20260310.1': resolution: {integrity: sha512-XzQ0GZ8G5P4d74bQYOIP2Su4CLdNPpYidrInaSOuSxMw+HamsHaFrjVsrV2mPy/yk2hi6SY2yMbgKFK9YjA7vw==} engines: {node: '>=16'} @@ -1112,6 +1149,12 @@ packages: cpu: [x64] os: [linux] + '@cloudflare/workerd-linux-64@1.20260401.1': + resolution: {integrity: sha512-MDWUH/0bvL/l9aauN8zEddyYOXId1OueqrUCXXENNJ95R/lSmF6OgGVuXaYhoIhxQkNiEJ/0NOlnVYj9mJq4dw==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + '@cloudflare/workerd-linux-arm64@1.20260310.1': resolution: {integrity: sha512-sxv4CxnN4ZR0uQGTFVGa0V4KTqwdej/czpIc5tYS86G8FQQoGIBiAIs2VvU7b8EROPcandxYHDBPTb+D9HIMPw==} engines: {node: '>=16'} @@ -1124,6 +1167,12 @@ packages: cpu: [arm64] os: [linux] + '@cloudflare/workerd-linux-arm64@1.20260401.1': + resolution: {integrity: sha512-UgkzpMzVWM/bwbo3vjCTg2aoKfGcUhiEoQoDdo6RGWvbHRJyLVZ4VQCG9ZcISiztkiS2ICCoYOtPy6M/lV6Gcw==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + '@cloudflare/workerd-windows-64@1.20260310.1': resolution: {integrity: sha512-+1ZTViWKJypLfgH/luAHCqkent0DEBjAjvO40iAhOMHRLYP/SPphLvr4Jpi6lb+sIocS8Q1QZL4uM5Etg1Wskg==} engines: {node: '>=16'} @@ -1136,6 +1185,12 @@ packages: cpu: [x64] os: [win32] + '@cloudflare/workerd-windows-64@1.20260401.1': + resolution: {integrity: sha512-HBLzcQF5iF4Qv20tQ++pG7xs3OsCnaIbc+GAi6fmhUKZhvmzvml/jwrQzLJ+MPm0cQo41K5OO/U3T4S8tvJetQ==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + '@cloudflare/workers-types@4.20260317.1': resolution: {integrity: sha512-+G4eVwyCpm8Au1ex8vQBCuA9wnwqetz4tPNRoB/53qvktERWBRMQnrtvC1k584yRE3emMThtuY0gWshvSJ++PQ==} @@ -1156,9 +1211,15 @@ packages: peerDependencies: '@noble/ciphers': ^1.0.0 + '@emnapi/core@1.9.2': + resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} + '@emnapi/runtime@1.7.1': resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} deprecated: 'Merged into tsx: https://tsx.is' @@ -1922,12 +1983,12 @@ packages: cpu: [x64] os: [win32] - '@inquirer/ansi@2.0.4': - resolution: {integrity: sha512-DpcZrQObd7S0R/U3bFdkcT5ebRwbTTC4D3tCc1vsJizmgPLxNJBo+AAFmrZwe8zk30P2QzgzGWZ3Q9uJwWuhIg==} + '@inquirer/ansi@2.0.5': + resolution: {integrity: sha512-doc2sWgJpbFQ64UflSVd17ibMGDuxO1yKgOgLMwavzESnXjFWJqUeG8saYosqKpHp4kWiM5x1nXvEjbpx90gzw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/checkbox@5.1.2': - resolution: {integrity: sha512-PubpMPO2nJgMufkoB3P2wwxNXEMUXnBIKi/ACzDUYfaoPuM7gSTmuxJeMscoLVEsR4qqrCMf5p0SiYGWnVJ8kw==} + '@inquirer/checkbox@5.1.3': + resolution: {integrity: sha512-+G7I8CT+EHv/hasNfUl3P37DVoMoZfpA+2FXmM54dA8MxYle1YqucxbacxHalw1iAFSdKNEDTGNV7F+j1Ldqcg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -1935,8 +1996,8 @@ packages: '@types/node': optional: true - '@inquirer/confirm@6.0.10': - resolution: {integrity: sha512-tiNyA73pgpQ0FQ7axqtoLUe4GDYjNCDcVsbgcA5anvwg2z6i+suEngLKKJrWKJolT//GFPZHwN30binDIHgSgQ==} + '@inquirer/confirm@6.0.11': + resolution: {integrity: sha512-pTpHjg0iEIRMYV/7oCZUMf27/383E6Wyhfc/MY+AVQGEoUobffIYWOK9YLP2XFRGz/9i6WlTQh1CkFVIo2Y7XA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -1944,8 +2005,8 @@ packages: '@types/node': optional: true - '@inquirer/core@11.1.7': - resolution: {integrity: sha512-1BiBNDk9btIwYIzNZpkikIHXWeNzNncJePPqwDyVMhXhD1ebqbpn1mKGctpoqAbzywZfdG0O4tvmsGIcOevAPQ==} + '@inquirer/core@11.1.8': + resolution: {integrity: sha512-/u+yJk2pOKNDOh1ZgdUH2RQaRx6OOH4I0uwL95qPvTFTIL38YBsuSC4r1yXBB3Q6JvNqFFc202gk0Ew79rrcjA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -1953,8 +2014,8 @@ packages: '@types/node': optional: true - '@inquirer/editor@5.0.10': - resolution: {integrity: sha512-VJx4XyaKea7t8hEApTw5dxeIyMtWXre2OiyJcICCRZI4hkoHsMoCnl/KbUnJJExLbH9csLLHMVR144ZhFE1CwA==} + '@inquirer/editor@5.1.0': + resolution: {integrity: sha512-6wlkYl65Qfayy48gPCfU4D7li6KCAGN79mLXa/tYHZH99OfZ820yY+HA+DgE88r8YwwgeuY6PQgNqMeK6LuMmw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -1962,8 +2023,8 @@ packages: '@types/node': optional: true - '@inquirer/expand@5.0.10': - resolution: {integrity: sha512-fC0UHJPXsTRvY2fObiwuQYaAnHrp3aDqfwKUJSdfpgv18QUG054ezGbaRNStk/BKD5IPijeMKWej8VV8O5Q/eQ==} + '@inquirer/expand@5.0.11': + resolution: {integrity: sha512-yxSO89MQ7t4LTCwtsXQ/ppcfw2otLsum6nF+TM9pKesy3k2AhVDUIkaiJIwG6lzm/csc5n38MaFKLY0TrSHzEA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -1971,8 +2032,8 @@ packages: '@types/node': optional: true - '@inquirer/external-editor@2.0.4': - resolution: {integrity: sha512-Prenuv9C1PHj2Itx0BcAOVBTonz02Hc2Nd2DbU67PdGUaqn0nPCnV34oDyyoaZHnmfRxkpuhh/u51ThkrO+RdA==} + '@inquirer/external-editor@3.0.0': + resolution: {integrity: sha512-lDSwMgg+M5rq6JKBYaJwSX6T9e/HK2qqZ1oxmOwn4AQoJE5D+7TumsxLGC02PWS//rkIVqbZv3XA3ejsc9FYvg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -1980,12 +2041,12 @@ packages: '@types/node': optional: true - '@inquirer/figures@2.0.4': - resolution: {integrity: sha512-eLBsjlS7rPS3WEhmOmh1znQ5IsQrxWzxWDxO51e4urv+iVrSnIHbq4zqJIOiyNdYLa+BVjwOtdetcQx1lWPpiQ==} + '@inquirer/figures@2.0.5': + resolution: {integrity: sha512-NsSs4kzfm12lNetHwAn3GEuH317IzpwrMCbOuMIVytpjnJ90YYHNwdRgYGuKmVxwuIqSgqk3M5qqQt1cDk0tGQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/input@5.0.10': - resolution: {integrity: sha512-nvZ6qEVeX/zVtZ1dY2hTGDQpVGD3R7MYPLODPgKO8Y+RAqxkrP3i/3NwF3fZpLdaMiNuK0z2NaYIx9tPwiSegQ==} + '@inquirer/input@5.0.11': + resolution: {integrity: sha512-twUWidn4ocPO8qi6fRM7tNWt7W1FOnOZqQ+/+PsfLUacMR5rFLDPK9ql0nBPwxi0oELbo8T5NhRs8B2+qQEqFQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -1993,8 +2054,8 @@ packages: '@types/node': optional: true - '@inquirer/number@4.0.10': - resolution: {integrity: sha512-Ht8OQstxiS3APMGjHV0aYAjRAysidWdwurWEo2i8yI5xbhOBWqizT0+MU1S2GCcuhIBg+3SgWVjEoXgfhY+XaA==} + '@inquirer/number@4.0.11': + resolution: {integrity: sha512-Vscmim9TCksQsfjPtka/JwPUcbLhqWYrgfPf1cHrCm24X/F2joFwnageD50yMKsaX14oNGOyKf/RNXAFkNjWpA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2002,8 +2063,8 @@ packages: '@types/node': optional: true - '@inquirer/password@5.0.10': - resolution: {integrity: sha512-QbNyvIE8q2GTqKLYSsA8ATG+eETo+m31DSR0+AU7x3d2FhaTWzqQek80dj3JGTo743kQc6mhBR0erMjYw5jQ0A==} + '@inquirer/password@5.0.11': + resolution: {integrity: sha512-9KZFeRaNHIcejtPb0wN4ddFc7EvobVoAFa049eS3LrDZFxI8O7xUXiITEOinBzkZFAIwY5V4yzQae/QfO9cbbg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2011,8 +2072,8 @@ packages: '@types/node': optional: true - '@inquirer/prompts@8.3.2': - resolution: {integrity: sha512-yFroiSj2iiBFlm59amdTvAcQFvWS6ph5oKESls/uqPBect7rTU2GbjyZO2DqxMGuIwVA8z0P4K6ViPcd/cp+0w==} + '@inquirer/prompts@8.4.0': + resolution: {integrity: sha512-Z3pFkae4WSzK95tvbaxR3rD9JlScFIh6/Ufw60H8Ck7GugdzYCe/3FwZCfvXwHZXjyk671w8FnVuwvxx1eP7ug==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2020,8 +2081,8 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@5.2.6': - resolution: {integrity: sha512-jfw0MLJ5TilNsa9zlJ6nmRM0ZFVZhhTICt4/6CU2Dv1ndY7l3sqqo1gIYZyMMDw0LvE1u1nzJNisfHEhJIxq5w==} + '@inquirer/rawlist@5.2.7': + resolution: {integrity: sha512-AqRMiD9+uE1lskDPrdqHwrV/EUmxKEBLX44SR7uxK3vD2413AmVfE5EQaPeNzYf5Pq5SitHJDYUFVF0poIr09w==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2029,8 +2090,8 @@ packages: '@types/node': optional: true - '@inquirer/search@4.1.6': - resolution: {integrity: sha512-3/6kTRae98hhDevENScy7cdFEuURnSpM3JbBNg8yfXLw88HgTOl+neUuy/l9W0No5NzGsLVydhBzTIxZP7yChQ==} + '@inquirer/search@4.1.7': + resolution: {integrity: sha512-1y7+0N65AWk5RdlXH/Kn13txf3IjIQ7OEfhCEkDTU+h5wKMLq8DUF3P6z+/kLSxDGDtQT1dRBWEUC3o/VvImsQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2038,8 +2099,8 @@ packages: '@types/node': optional: true - '@inquirer/select@5.1.2': - resolution: {integrity: sha512-kTK8YIkHV+f02y7bWCh7E0u2/11lul5WepVTclr3UMBtBr05PgcZNWfMa7FY57ihpQFQH/spLMHTcr0rXy50tA==} + '@inquirer/select@5.1.3': + resolution: {integrity: sha512-zYyqWgGQi3NhBcNq4Isc5rB3oEdQEh1Q/EcAnOW0FK4MpnXWkvSBYgA4cYrTM4A9UB573omouZbnL9JJ74Mq3A==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2047,8 +2108,8 @@ packages: '@types/node': optional: true - '@inquirer/type@4.0.4': - resolution: {integrity: sha512-PamArxO3cFJZoOzspzo6cxVlLeIftyBsZw/S9bKY5DzxqJVZgjoj1oP8d0rskKtp7sZxBycsoer1g6UeJV1BBA==} + '@inquirer/type@4.0.5': + resolution: {integrity: sha512-aetVUNeKNc/VriqXlw1NRSW0zhMBB0W4bNbWRJgzRl/3d0QNDQFfk0GO5SDdtjMZVg6o8ZKEiadd7SCCzoOn5Q==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2090,6 +2151,12 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@napi-rs/wasm-runtime@1.1.2': + resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + '@next/env@16.1.6': resolution: {integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==} @@ -2309,10 +2376,18 @@ packages: '@orpc/client': 1.13.13 '@tanstack/query-core': '>=5.80.2' + '@oxc-project/types@0.122.0': + resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@playwright/test@1.59.1': + resolution: {integrity: sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==} + engines: {node: '>=18'} + hasBin: true + '@poppinss/colors@4.1.6': resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==} @@ -2658,9 +2733,101 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + '@rolldown/binding-android-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-rc.12': + resolution: {integrity: sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-rc.12': + resolution: {integrity: sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': + resolution: {integrity: sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': + resolution: {integrity: sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': + resolution: {integrity: sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': + resolution: {integrity: sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': + resolution: {integrity: sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': + resolution: {integrity: sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@rolldown/pluginutils@1.0.0-beta.40': resolution: {integrity: sha512-s3GeJKSQOwBlzdUrj4ISjJj5SfSh+aqn0wjOar4Bx95iV1ETI7F6S/5hLcfAxZ9kXDcyrAkxPlqmd1ZITttf+w==} + '@rolldown/pluginutils@1.0.0-rc.12': + resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} + '@rolldown/pluginutils@1.0.0-rc.3': resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} @@ -3666,6 +3833,9 @@ packages: '@tsconfig/node18@1.0.3': resolution: {integrity: sha512-RbwvSJQsuN9TB04AQbGULYfOGE/RnSFk/FLQ5b0NmDf5Kx2q/lABZbHQPKCO1vZ6Fiwkplu+yb9pGdLy1iGseQ==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -3678,6 +3848,12 @@ packages: '@types/babel__traverse@7.28.0': resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -3704,6 +3880,35 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + '@vitest/expect@4.1.2': + resolution: {integrity: sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ==} + + '@vitest/mocker@4.1.2': + resolution: {integrity: sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.1.2': + resolution: {integrity: sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==} + + '@vitest/runner@4.1.2': + resolution: {integrity: sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ==} + + '@vitest/snapshot@4.1.2': + resolution: {integrity: sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A==} + + '@vitest/spy@4.1.2': + resolution: {integrity: sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==} + + '@vitest/utils@4.1.2': + resolution: {integrity: sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==} + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -3817,6 +4022,10 @@ packages: array-timsort@1.0.3: resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + ast-types@0.16.1: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} @@ -3837,8 +4046,8 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - baseline-browser-mapping@2.10.15: - resolution: {integrity: sha512-1nfKCq9wuAZFTkA2ey/3OXXx7GzFjLdkTiFVNwlJ9WqdI706CZRIhEqjuwanjMIja+84jDLa9rcyZDPDiVkASQ==} + baseline-browser-mapping@2.10.16: + resolution: {integrity: sha512-Lyf3aK28zpsD1yQMiiHD4RvVb6UdMoo8xzG2XzFIfR9luPzOpcBlAsT/qfB1XWS1bxWT+UtE4WmQgsp297FYOA==} engines: {node: '>=6.0.0'} hasBin: true @@ -3900,8 +4109,12 @@ packages: caniuse-lite@1.0.30001760: resolution: {integrity: sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==} - caniuse-lite@1.0.30001785: - resolution: {integrity: sha512-blhOL/WNR+Km1RI/LCVAvA73xplXA7ZbjzI4YkMK9pa6T/P3F2GxjNpEkyw5repTw9IvkyrjyHpwjnhZ5FOvYQ==} + caniuse-lite@1.0.30001786: + resolution: {integrity: sha512-4oxTZEvqmLLrERwxO76yfKM7acZo310U+v4kqexI2TL1DkkUEMT8UijrxxcnVdxR3qkVf5awGRX+4Z6aPHVKrA==} + + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -3925,6 +4138,9 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} @@ -4031,8 +4247,8 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - ctx7@0.3.9: - resolution: {integrity: sha512-u5xLkM66knYzAKas/q7+nwo7Ims5nzk9qXWb4Ux1g19JimPWdPaxG1ACc9bY3vqEBly3nefKLVmNh2xk0ozmtg==} + ctx7@0.3.10: + resolution: {integrity: sha512-ow6CLA7ecfEel5l5hEvD5Q0nEs2+H1qZ92VcD80ft88igNtX8CEj5lC2nYRpUL9KJIzFeMvJTytRe3Gl8zj6Ig==} engines: {node: '>=18'} hasBin: true @@ -4267,6 +4483,9 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-module-lexer@2.0.0: + resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -4312,6 +4531,9 @@ packages: engines: {node: '>=4'} hasBin: true + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} @@ -4328,6 +4550,10 @@ packages: resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} engines: {node: ^18.19.0 || >=20.5.0} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + express@5.2.1: resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} @@ -4429,6 +4655,11 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -4917,6 +5148,11 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + miniflare@4.20260401.0: + resolution: {integrity: sha512-lngHPzZFN9sxYG/mhzvnWiBMNVAN5MsO/7g32ttJ07rymtiK/ZBalODTKb8Od+BQdlU5DOR4CjVt9NydjnUyYg==} + engines: {node: '>=18.0.0'} + hasBin: true + minimatch@10.1.1: resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} engines: {node: 20 || >=22} @@ -5033,6 +5269,9 @@ packages: obliterator@1.6.1: resolution: {integrity: sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} @@ -5125,6 +5364,20 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + playwright-core@1.59.1: + resolution: {integrity: sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.59.1: + resolution: {integrity: sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==} + engines: {node: '>=18'} + hasBin: true + postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} @@ -5133,6 +5386,10 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.8: + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} + engines: {node: ^10 || ^12 || >=14} + prettier@3.8.1: resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} engines: {node: '>=14'} @@ -5245,6 +5502,11 @@ packages: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} + rolldown@1.0.0-rc.12: + resolution: {integrity: sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup@4.60.1: resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -5331,6 +5593,9 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -5364,10 +5629,16 @@ packages: engines: {node: '>=20.16.0'} hasBin: true + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} + std-env@4.0.0: + resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} + stdin-discarder@0.3.1: resolution: {integrity: sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==} engines: {node: '>=18'} @@ -5462,10 +5733,21 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@1.0.4: + resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} + engines: {node: '>=18'} + tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} + engines: {node: '>=14.0.0'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -5605,8 +5887,8 @@ packages: peerDependencies: vite: '*' - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + vite@7.3.2: + resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -5645,6 +5927,49 @@ packages: yaml: optional: true + vite@8.0.5: + resolution: {integrity: sha512-nmu43Qvq9UopTRfMx2jOYW5l16pb3iDC1JH6yMuPkpVbzK0k+L7dfsEDH4jRgYFmsg0sTAqkojoZgzLMlwHsCQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vitefu@1.1.3: resolution: {integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==} peerDependencies: @@ -5653,6 +5978,41 @@ packages: vite: optional: true + vitest@4.1.2: + resolution: {integrity: sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.2 + '@vitest/browser-preview': 4.1.2 + '@vitest/browser-webdriverio': 4.1.2 + '@vitest/ui': 4.1.2 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + web-streams-polyfill@4.0.0-beta.3: resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} engines: {node: '>= 14'} @@ -5685,6 +6045,11 @@ packages: engines: {node: ^16.13.0 || >=18.0.0} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + workerd@1.20260310.1: resolution: {integrity: sha512-yawXhypXXHtArikJj15HOMknNGikpBbSg2ZDe6lddUbqZnJXuCVSkgc/0ArUeVMG1jbbGvpst+REFtKwILvRTQ==} engines: {node: '>=16'} @@ -5695,6 +6060,11 @@ packages: engines: {node: '>=16'} hasBin: true + workerd@1.20260401.1: + resolution: {integrity: sha512-mUYCd+ohaWJWF5nhDzxugWaAD/DM8Dw0ze3B7bu8JaA7S70+XQJXcvcvwE8C4qGcxSdCyqjsrFzqxKubECDwzg==} + engines: {node: '>=16'} + hasBin: true + wrangler@4.78.0: resolution: {integrity: sha512-He/vUhk4ih0D0eFmtNnlbT6Od8j+BEokaSR+oYjbVsH0SWIrIch+eHqfLRSBjBQaOoh6HCNxcafcIkBm2u0Hag==} engines: {node: '>=20.3.0'} @@ -5705,6 +6075,16 @@ packages: '@cloudflare/workers-types': optional: true + wrangler@4.80.0: + resolution: {integrity: sha512-2ZKF7uPeOZy65BGk3YfvqBCPo/xH1MrAlMmH9mVP+tCNBrTUMnwOHSj1HrZHgR8LttkAqhko0fGz+I4ax1rzyQ==} + engines: {node: '>=20.3.0'} + hasBin: true + peerDependencies: + '@cloudflare/workers-types': ^4.20260401.1 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -7522,42 +7902,84 @@ snapshots: optionalDependencies: workerd: 1.20260317.1 + '@cloudflare/unenv-preset@2.16.0(unenv@2.0.0-rc.24)(workerd@1.20260401.1)': + dependencies: + unenv: 2.0.0-rc.24 + optionalDependencies: + workerd: 1.20260401.1 + '@cloudflare/unenv-preset@2.7.7(unenv@2.0.0-rc.21)(workerd@1.20260317.1)': dependencies: unenv: 2.0.0-rc.21 optionalDependencies: workerd: 1.20260317.1 + '@cloudflare/unenv-preset@2.7.7(unenv@2.0.0-rc.21)(workerd@1.20260401.1)': + dependencies: + unenv: 2.0.0-rc.21 + optionalDependencies: + workerd: 1.20260401.1 + + '@cloudflare/vitest-pool-workers@0.14.1(@cloudflare/workers-types@4.20260317.1)(@vitest/runner@4.1.2)(@vitest/snapshot@4.1.2)(vitest@4.1.2(@types/node@25.0.3)(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.25.12)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)))': + dependencies: + '@vitest/runner': 4.1.2 + '@vitest/snapshot': 4.1.2 + cjs-module-lexer: 1.4.3 + esbuild: 0.27.3 + miniflare: 4.20260401.0 + vitest: 4.1.2(@types/node@25.0.3)(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.25.12)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)) + wrangler: 4.80.0(@cloudflare/workers-types@4.20260317.1) + zod: 3.25.76 + transitivePeerDependencies: + - '@cloudflare/workers-types' + - bufferutil + - utf-8-validate + '@cloudflare/workerd-darwin-64@1.20260310.1': optional: true '@cloudflare/workerd-darwin-64@1.20260317.1': optional: true + '@cloudflare/workerd-darwin-64@1.20260401.1': + optional: true + '@cloudflare/workerd-darwin-arm64@1.20260310.1': optional: true '@cloudflare/workerd-darwin-arm64@1.20260317.1': optional: true + '@cloudflare/workerd-darwin-arm64@1.20260401.1': + optional: true + '@cloudflare/workerd-linux-64@1.20260310.1': optional: true '@cloudflare/workerd-linux-64@1.20260317.1': optional: true + '@cloudflare/workerd-linux-64@1.20260401.1': + optional: true + '@cloudflare/workerd-linux-arm64@1.20260310.1': optional: true '@cloudflare/workerd-linux-arm64@1.20260317.1': optional: true + '@cloudflare/workerd-linux-arm64@1.20260401.1': + optional: true + '@cloudflare/workerd-windows-64@1.20260310.1': optional: true '@cloudflare/workerd-windows-64@1.20260317.1': optional: true + '@cloudflare/workerd-windows-64@1.20260401.1': + optional: true + '@cloudflare/workers-types@4.20260317.1': {} '@cspotcode/source-map-support@0.8.1': @@ -7582,11 +8004,22 @@ snapshots: dependencies: '@noble/ciphers': 1.3.0 + '@emnapi/core@1.9.2': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.7.1': dependencies: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + '@esbuild-kit/core-utils@3.3.2': dependencies: esbuild: 0.18.20 @@ -8013,29 +8446,29 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true - '@inquirer/ansi@2.0.4': {} + '@inquirer/ansi@2.0.5': {} - '@inquirer/checkbox@5.1.2(@types/node@25.0.3)': + '@inquirer/checkbox@5.1.3(@types/node@25.0.3)': dependencies: - '@inquirer/ansi': 2.0.4 - '@inquirer/core': 11.1.7(@types/node@25.0.3) - '@inquirer/figures': 2.0.4 - '@inquirer/type': 4.0.4(@types/node@25.0.3) + '@inquirer/ansi': 2.0.5 + '@inquirer/core': 11.1.8(@types/node@25.0.3) + '@inquirer/figures': 2.0.5 + '@inquirer/type': 4.0.5(@types/node@25.0.3) optionalDependencies: '@types/node': 25.0.3 - '@inquirer/confirm@6.0.10(@types/node@25.0.3)': + '@inquirer/confirm@6.0.11(@types/node@25.0.3)': dependencies: - '@inquirer/core': 11.1.7(@types/node@25.0.3) - '@inquirer/type': 4.0.4(@types/node@25.0.3) + '@inquirer/core': 11.1.8(@types/node@25.0.3) + '@inquirer/type': 4.0.5(@types/node@25.0.3) optionalDependencies: '@types/node': 25.0.3 - '@inquirer/core@11.1.7(@types/node@25.0.3)': + '@inquirer/core@11.1.8(@types/node@25.0.3)': dependencies: - '@inquirer/ansi': 2.0.4 - '@inquirer/figures': 2.0.4 - '@inquirer/type': 4.0.4(@types/node@25.0.3) + '@inquirer/ansi': 2.0.5 + '@inquirer/figures': 2.0.5 + '@inquirer/type': 4.0.5(@types/node@25.0.3) cli-width: 4.1.0 fast-wrap-ansi: 0.2.0 mute-stream: 3.0.0 @@ -8043,92 +8476,92 @@ snapshots: optionalDependencies: '@types/node': 25.0.3 - '@inquirer/editor@5.0.10(@types/node@25.0.3)': + '@inquirer/editor@5.1.0(@types/node@25.0.3)': dependencies: - '@inquirer/core': 11.1.7(@types/node@25.0.3) - '@inquirer/external-editor': 2.0.4(@types/node@25.0.3) - '@inquirer/type': 4.0.4(@types/node@25.0.3) + '@inquirer/core': 11.1.8(@types/node@25.0.3) + '@inquirer/external-editor': 3.0.0(@types/node@25.0.3) + '@inquirer/type': 4.0.5(@types/node@25.0.3) optionalDependencies: '@types/node': 25.0.3 - '@inquirer/expand@5.0.10(@types/node@25.0.3)': + '@inquirer/expand@5.0.11(@types/node@25.0.3)': dependencies: - '@inquirer/core': 11.1.7(@types/node@25.0.3) - '@inquirer/type': 4.0.4(@types/node@25.0.3) + '@inquirer/core': 11.1.8(@types/node@25.0.3) + '@inquirer/type': 4.0.5(@types/node@25.0.3) optionalDependencies: '@types/node': 25.0.3 - '@inquirer/external-editor@2.0.4(@types/node@25.0.3)': + '@inquirer/external-editor@3.0.0(@types/node@25.0.3)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: '@types/node': 25.0.3 - '@inquirer/figures@2.0.4': {} + '@inquirer/figures@2.0.5': {} - '@inquirer/input@5.0.10(@types/node@25.0.3)': + '@inquirer/input@5.0.11(@types/node@25.0.3)': dependencies: - '@inquirer/core': 11.1.7(@types/node@25.0.3) - '@inquirer/type': 4.0.4(@types/node@25.0.3) + '@inquirer/core': 11.1.8(@types/node@25.0.3) + '@inquirer/type': 4.0.5(@types/node@25.0.3) optionalDependencies: '@types/node': 25.0.3 - '@inquirer/number@4.0.10(@types/node@25.0.3)': + '@inquirer/number@4.0.11(@types/node@25.0.3)': dependencies: - '@inquirer/core': 11.1.7(@types/node@25.0.3) - '@inquirer/type': 4.0.4(@types/node@25.0.3) + '@inquirer/core': 11.1.8(@types/node@25.0.3) + '@inquirer/type': 4.0.5(@types/node@25.0.3) optionalDependencies: '@types/node': 25.0.3 - '@inquirer/password@5.0.10(@types/node@25.0.3)': + '@inquirer/password@5.0.11(@types/node@25.0.3)': dependencies: - '@inquirer/ansi': 2.0.4 - '@inquirer/core': 11.1.7(@types/node@25.0.3) - '@inquirer/type': 4.0.4(@types/node@25.0.3) + '@inquirer/ansi': 2.0.5 + '@inquirer/core': 11.1.8(@types/node@25.0.3) + '@inquirer/type': 4.0.5(@types/node@25.0.3) optionalDependencies: '@types/node': 25.0.3 - '@inquirer/prompts@8.3.2(@types/node@25.0.3)': - dependencies: - '@inquirer/checkbox': 5.1.2(@types/node@25.0.3) - '@inquirer/confirm': 6.0.10(@types/node@25.0.3) - '@inquirer/editor': 5.0.10(@types/node@25.0.3) - '@inquirer/expand': 5.0.10(@types/node@25.0.3) - '@inquirer/input': 5.0.10(@types/node@25.0.3) - '@inquirer/number': 4.0.10(@types/node@25.0.3) - '@inquirer/password': 5.0.10(@types/node@25.0.3) - '@inquirer/rawlist': 5.2.6(@types/node@25.0.3) - '@inquirer/search': 4.1.6(@types/node@25.0.3) - '@inquirer/select': 5.1.2(@types/node@25.0.3) + '@inquirer/prompts@8.4.0(@types/node@25.0.3)': + dependencies: + '@inquirer/checkbox': 5.1.3(@types/node@25.0.3) + '@inquirer/confirm': 6.0.11(@types/node@25.0.3) + '@inquirer/editor': 5.1.0(@types/node@25.0.3) + '@inquirer/expand': 5.0.11(@types/node@25.0.3) + '@inquirer/input': 5.0.11(@types/node@25.0.3) + '@inquirer/number': 4.0.11(@types/node@25.0.3) + '@inquirer/password': 5.0.11(@types/node@25.0.3) + '@inquirer/rawlist': 5.2.7(@types/node@25.0.3) + '@inquirer/search': 4.1.7(@types/node@25.0.3) + '@inquirer/select': 5.1.3(@types/node@25.0.3) optionalDependencies: '@types/node': 25.0.3 - '@inquirer/rawlist@5.2.6(@types/node@25.0.3)': + '@inquirer/rawlist@5.2.7(@types/node@25.0.3)': dependencies: - '@inquirer/core': 11.1.7(@types/node@25.0.3) - '@inquirer/type': 4.0.4(@types/node@25.0.3) + '@inquirer/core': 11.1.8(@types/node@25.0.3) + '@inquirer/type': 4.0.5(@types/node@25.0.3) optionalDependencies: '@types/node': 25.0.3 - '@inquirer/search@4.1.6(@types/node@25.0.3)': + '@inquirer/search@4.1.7(@types/node@25.0.3)': dependencies: - '@inquirer/core': 11.1.7(@types/node@25.0.3) - '@inquirer/figures': 2.0.4 - '@inquirer/type': 4.0.4(@types/node@25.0.3) + '@inquirer/core': 11.1.8(@types/node@25.0.3) + '@inquirer/figures': 2.0.5 + '@inquirer/type': 4.0.5(@types/node@25.0.3) optionalDependencies: '@types/node': 25.0.3 - '@inquirer/select@5.1.2(@types/node@25.0.3)': + '@inquirer/select@5.1.3(@types/node@25.0.3)': dependencies: - '@inquirer/ansi': 2.0.4 - '@inquirer/core': 11.1.7(@types/node@25.0.3) - '@inquirer/figures': 2.0.4 - '@inquirer/type': 4.0.4(@types/node@25.0.3) + '@inquirer/ansi': 2.0.5 + '@inquirer/core': 11.1.8(@types/node@25.0.3) + '@inquirer/figures': 2.0.5 + '@inquirer/type': 4.0.5(@types/node@25.0.3) optionalDependencies: '@types/node': 25.0.3 - '@inquirer/type@4.0.4(@types/node@25.0.3)': + '@inquirer/type@4.0.5(@types/node@25.0.3)': optionalDependencies: '@types/node': 25.0.3 @@ -8176,6 +8609,13 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)': + dependencies: + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.7.1 + '@tybys/wasm-util': 0.10.1 + optional: true + '@next/env@16.1.6': {} '@next/swc-darwin-arm64@16.1.6': @@ -8310,7 +8750,7 @@ snapshots: '@oozcitak/util@10.0.0': {} - '@opennextjs/aws@3.9.16(next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': + '@opennextjs/aws@3.9.16(next@16.1.6(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: '@ast-grep/napi': 0.40.5 '@aws-sdk/client-cloudfront': 3.984.0 @@ -8326,7 +8766,7 @@ snapshots: cookie: 1.1.1 esbuild: 0.25.4 express: 5.2.1 - next: 16.1.6(@babel/core@7.29.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + next: 16.1.6(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) path-to-regexp: 6.3.0 urlpattern-polyfill: 10.1.0 yaml: 2.8.2 @@ -8334,32 +8774,70 @@ snapshots: - aws-crt - supports-color - '@opennextjs/cloudflare@1.18.0(next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1))': + '@opennextjs/cloudflare@1.18.0(next@16.1.6(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1))': dependencies: '@ast-grep/napi': 0.40.5 '@dotenvx/dotenvx': 1.31.0 - '@opennextjs/aws': 3.9.16(next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + '@opennextjs/aws': 3.9.16(next@16.1.6(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) cloudflare: 4.5.0 comment-json: 4.6.2 enquirer: 2.4.1 glob: 12.0.0 - next: 16.1.6(@babel/core@7.29.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + next: 16.1.6(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) ts-tqdm: 0.8.6 - wrangler: 4.78.0(@cloudflare/workers-types@4.20260317.1) + wrangler: 4.80.0(@cloudflare/workers-types@4.20260317.1) yargs: 18.0.0 transitivePeerDependencies: - aws-crt - encoding - supports-color - '@orpc/client@1.13.13': + '@opennextjs/cloudflare@1.18.0(next@16.1.6(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1))': dependencies: - '@orpc/shared': 1.13.13 - '@orpc/standard-server': 1.13.13 - '@orpc/standard-server-fetch': 1.13.13 - '@orpc/standard-server-peer': 1.13.13 - transitivePeerDependencies: - - '@opentelemetry/api' + '@ast-grep/napi': 0.40.5 + '@dotenvx/dotenvx': 1.31.0 + '@opennextjs/aws': 3.9.16(next@16.1.6(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + cloudflare: 4.5.0 + comment-json: 4.6.2 + enquirer: 2.4.1 + glob: 12.0.0 + next: 16.1.6(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + ts-tqdm: 0.8.6 + wrangler: 4.78.0(@cloudflare/workers-types@4.20260317.1) + yargs: 18.0.0 + transitivePeerDependencies: + - aws-crt + - encoding + - supports-color + optional: true + + '@opennextjs/cloudflare@1.18.0(next@16.1.6(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1))': + dependencies: + '@ast-grep/napi': 0.40.5 + '@dotenvx/dotenvx': 1.31.0 + '@opennextjs/aws': 3.9.16(next@16.1.6(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + cloudflare: 4.5.0 + comment-json: 4.6.2 + enquirer: 2.4.1 + glob: 12.0.0 + next: 16.1.6(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + ts-tqdm: 0.8.6 + wrangler: 4.80.0(@cloudflare/workers-types@4.20260317.1) + yargs: 18.0.0 + transitivePeerDependencies: + - aws-crt + - encoding + - supports-color + optional: true + + '@orpc/client@1.13.13': + dependencies: + '@orpc/shared': 1.13.13 + '@orpc/standard-server': 1.13.13 + '@orpc/standard-server-fetch': 1.13.13 + '@orpc/standard-server-peer': 1.13.13 + transitivePeerDependencies: + - '@opentelemetry/api' '@orpc/contract@1.13.13': dependencies: @@ -8449,9 +8927,15 @@ snapshots: transitivePeerDependencies: - '@opentelemetry/api' + '@oxc-project/types@0.122.0': {} + '@pkgjs/parseargs@0.11.0': optional: true + '@playwright/test@1.59.1': + dependencies: + playwright: 1.59.1 + '@poppinss/colors@4.1.6': dependencies: kleur: 4.1.5 @@ -8756,8 +9240,60 @@ snapshots: '@radix-ui/rect@1.1.1': {} + '@rolldown/binding-android-arm64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': + optional: true + '@rolldown/pluginutils@1.0.0-beta.40': {} + '@rolldown/pluginutils@1.0.0-rc.12': {} + '@rolldown/pluginutils@1.0.0-rc.3': {} '@rollup/rollup-android-arm-eabi@4.60.1': @@ -9904,12 +10440,12 @@ snapshots: postcss: 8.5.6 tailwindcss: 4.1.18 - '@tailwindcss/vite@4.2.2(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))': + '@tailwindcss/vite@4.2.2(vite@7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@tailwindcss/node': 4.2.2 '@tailwindcss/oxide': 4.2.2 tailwindcss: 4.2.2 - vite: 7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) '@tanstack/history@1.161.6': {} @@ -9949,19 +10485,19 @@ snapshots: transitivePeerDependencies: - crossws - '@tanstack/react-start@1.167.16(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/react-start@1.167.16(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@tanstack/react-router': 1.168.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@tanstack/react-start-client': 1.166.25(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@tanstack/react-start-server': 1.166.25(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@tanstack/router-utils': 1.161.6 '@tanstack/start-client-core': 1.167.9 - '@tanstack/start-plugin-core': 1.167.17(@tanstack/react-router@1.168.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)) + '@tanstack/start-plugin-core': 1.167.17(@tanstack/react-router@1.168.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)) '@tanstack/start-server-core': 1.167.9 pathe: 2.0.3 react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - vite: 7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@rsbuild/core' - crossws @@ -9996,7 +10532,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.167.12(@tanstack/react-router@1.168.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/router-plugin@1.167.12(@tanstack/react-router@1.168.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -10013,7 +10549,7 @@ snapshots: zod: 3.25.76 optionalDependencies: '@tanstack/react-router': 1.168.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - vite: 7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -10040,7 +10576,7 @@ snapshots: '@tanstack/start-fn-stubs@1.161.6': {} - '@tanstack/start-plugin-core@1.167.17(@tanstack/react-router@1.168.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/start-plugin-core@1.167.17(@tanstack/react-router@1.168.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.29.0 @@ -10048,20 +10584,20 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.40 '@tanstack/router-core': 1.168.9 '@tanstack/router-generator': 1.166.24 - '@tanstack/router-plugin': 1.167.12(@tanstack/react-router@1.168.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)) + '@tanstack/router-plugin': 1.167.12(@tanstack/react-router@1.168.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)) '@tanstack/router-utils': 1.161.6 '@tanstack/start-client-core': 1.167.9 '@tanstack/start-server-core': 1.167.9 cheerio: 1.2.0 exsolve: 1.0.8 pathe: 2.0.3 - picomatch: 4.0.3 + picomatch: 4.0.4 source-map: 0.7.6 srvx: 0.11.15 tinyglobby: 0.2.15 ufo: 1.6.1 - vite: 7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) - vitefu: 1.1.3(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)) + vite: 7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) + vitefu: 1.1.3(vite@7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)) xmlbuilder2: 4.0.3 zod: 3.25.76 transitivePeerDependencies: @@ -10093,6 +10629,11 @@ snapshots: '@tsconfig/node18@1.0.3': {} + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.29.2 @@ -10114,6 +10655,13 @@ snapshots: dependencies: '@babel/types': 7.29.0 + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + '@types/estree@1.0.8': {} '@types/node-fetch@2.6.13': @@ -10137,7 +10685,7 @@ snapshots: dependencies: csstype: 3.2.3 - '@vitejs/plugin-react@5.2.0(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))': + '@vitejs/plugin-react@5.2.0(vite@7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -10145,10 +10693,51 @@ snapshots: '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color + '@vitest/expect@4.1.2': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.2 + '@vitest/utils': 4.1.2 + chai: 6.2.2 + tinyrainbow: 3.1.0 + + '@vitest/mocker@4.1.2(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.25.12)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + '@vitest/spy': 4.1.2 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.25.12)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) + + '@vitest/pretty-format@4.1.2': + dependencies: + tinyrainbow: 3.1.0 + + '@vitest/runner@4.1.2': + dependencies: + '@vitest/utils': 4.1.2 + pathe: 2.0.3 + + '@vitest/snapshot@4.1.2': + dependencies: + '@vitest/pretty-format': 4.1.2 + '@vitest/utils': 4.1.2 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.1.2': {} + + '@vitest/utils@4.1.2': + dependencies: + '@vitest/pretty-format': 4.1.2 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -10164,10 +10753,10 @@ snapshots: dependencies: humanize-ms: 1.2.1 - alchemy@0.90.1(@aws-sdk/client-dynamodb@3.984.0)(@aws-sdk/client-lambda@3.984.0)(@aws-sdk/client-s3@3.958.0)(@aws-sdk/client-sqs@3.984.0)(@aws-sdk/client-sts@3.398.0)(@opennextjs/cloudflare@1.18.0(next@16.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)))(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260317.1)(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)): + alchemy@0.90.1(@aws-sdk/client-dynamodb@3.984.0)(@aws-sdk/client-lambda@3.984.0)(@aws-sdk/client-s3@3.958.0)(@aws-sdk/client-sqs@3.984.0)(@aws-sdk/client-sts@3.398.0)(@opennextjs/cloudflare@1.18.0(next@16.1.6(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260401.1)(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)): dependencies: '@aws-sdk/credential-providers': 3.958.0 - '@cloudflare/unenv-preset': 2.7.7(unenv@2.0.0-rc.21)(workerd@1.20260317.1) + '@cloudflare/unenv-preset': 2.7.7(unenv@2.0.0-rc.21)(workerd@1.20260401.1) '@cloudflare/workers-types': 4.20260317.1 '@iarna/toml': 2.2.5 '@octokit/rest': 21.1.1 @@ -10193,7 +10782,7 @@ snapshots: proper-lockfile: 4.1.2 signal-exit: 4.1.0 unenv: 2.0.0-rc.21 - wrangler: 4.78.0(@cloudflare/workers-types@4.20260317.1) + wrangler: 4.80.0(@cloudflare/workers-types@4.20260317.1) ws: 8.18.3 yaml: 2.8.2 optionalDependencies: @@ -10202,8 +10791,8 @@ snapshots: '@aws-sdk/client-s3': 3.958.0 '@aws-sdk/client-sqs': 3.984.0 '@aws-sdk/client-sts': 3.398.0 - '@opennextjs/cloudflare': 1.18.0(next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)) - vite: 7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) + '@opennextjs/cloudflare': 1.18.0(next@16.1.6(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)) + vite: 8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@aws-sdk/client-rds-data' - '@electric-sql/pglite' @@ -10237,7 +10826,80 @@ snapshots: - utf-8-validate - workerd - alchemy@0.90.1(@aws-sdk/client-dynamodb@3.984.0)(@aws-sdk/client-lambda@3.984.0)(@aws-sdk/client-s3@3.984.0)(@aws-sdk/client-sqs@3.984.0)(@aws-sdk/client-sts@3.398.0)(@opennextjs/cloudflare@1.18.0(next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)))(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260317.1)(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)): + alchemy@0.90.1(@aws-sdk/client-dynamodb@3.984.0)(@aws-sdk/client-lambda@3.984.0)(@aws-sdk/client-s3@3.984.0)(@aws-sdk/client-sqs@3.984.0)(@aws-sdk/client-sts@3.398.0)(@opennextjs/cloudflare@1.18.0(next@16.1.6(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)))(vite@7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260401.1)(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)): + dependencies: + '@aws-sdk/credential-providers': 3.958.0 + '@cloudflare/unenv-preset': 2.7.7(unenv@2.0.0-rc.21)(workerd@1.20260401.1) + '@cloudflare/workers-types': 4.20260317.1 + '@iarna/toml': 2.2.5 + '@octokit/rest': 21.1.1 + '@smithy/node-config-provider': 4.3.7 + '@smithy/types': 4.11.0 + aws4fetch: 1.0.20 + drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260317.1) + env-paths: 3.0.0 + esbuild: 0.25.12 + execa: 9.6.1 + fast-json-patch: 3.1.1 + fast-xml-parser: 5.3.3 + find-process: 2.0.0 + glob: 10.5.0 + jszip: 3.10.1 + libsodium-wrappers: 0.8.2 + miniflare: 4.20260310.0 + neverthrow: 8.2.0 + open: 10.2.0 + openapi-types: 12.1.3 + pathe: 2.0.3 + picocolors: 1.1.1 + proper-lockfile: 4.1.2 + signal-exit: 4.1.0 + unenv: 2.0.0-rc.21 + wrangler: 4.80.0(@cloudflare/workers-types@4.20260317.1) + ws: 8.18.3 + yaml: 2.8.2 + optionalDependencies: + '@aws-sdk/client-dynamodb': 3.984.0 + '@aws-sdk/client-lambda': 3.984.0 + '@aws-sdk/client-s3': 3.984.0 + '@aws-sdk/client-sqs': 3.984.0 + '@aws-sdk/client-sts': 3.398.0 + '@opennextjs/cloudflare': 1.18.0(next@16.1.6(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)) + vite: 7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) + transitivePeerDependencies: + - '@aws-sdk/client-rds-data' + - '@electric-sql/pglite' + - '@libsql/client-wasm' + - '@neondatabase/serverless' + - '@op-engineering/op-sqlite' + - '@opentelemetry/api' + - '@planetscale/database' + - '@prisma/client' + - '@tidbcloud/serverless' + - '@types/better-sqlite3' + - '@types/pg' + - '@types/sql.js' + - '@upstash/redis' + - '@vercel/postgres' + - '@xata.io/client' + - aws-crt + - better-sqlite3 + - bufferutil + - bun-types + - expo-sqlite + - gel + - knex + - kysely + - mysql2 + - pg + - postgres + - prisma + - sql.js + - sqlite3 + - utf-8-validate + - workerd + + alchemy@0.90.1(@aws-sdk/client-dynamodb@3.984.0)(@aws-sdk/client-lambda@3.984.0)(@aws-sdk/client-s3@3.984.0)(@aws-sdk/client-sqs@3.984.0)(@aws-sdk/client-sts@3.398.0)(@opennextjs/cloudflare@1.18.0(next@16.1.6(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260317.1)(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)): dependencies: '@aws-sdk/credential-providers': 3.958.0 '@cloudflare/unenv-preset': 2.7.7(unenv@2.0.0-rc.21)(workerd@1.20260317.1) @@ -10275,8 +10937,154 @@ snapshots: '@aws-sdk/client-s3': 3.984.0 '@aws-sdk/client-sqs': 3.984.0 '@aws-sdk/client-sts': 3.398.0 - '@opennextjs/cloudflare': 1.18.0(next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)) - vite: 7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) + '@opennextjs/cloudflare': 1.18.0(next@16.1.6(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)) + vite: 8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) + transitivePeerDependencies: + - '@aws-sdk/client-rds-data' + - '@electric-sql/pglite' + - '@libsql/client-wasm' + - '@neondatabase/serverless' + - '@op-engineering/op-sqlite' + - '@opentelemetry/api' + - '@planetscale/database' + - '@prisma/client' + - '@tidbcloud/serverless' + - '@types/better-sqlite3' + - '@types/pg' + - '@types/sql.js' + - '@upstash/redis' + - '@vercel/postgres' + - '@xata.io/client' + - aws-crt + - better-sqlite3 + - bufferutil + - bun-types + - expo-sqlite + - gel + - knex + - kysely + - mysql2 + - pg + - postgres + - prisma + - sql.js + - sqlite3 + - utf-8-validate + - workerd + + alchemy@0.90.1(@aws-sdk/client-dynamodb@3.984.0)(@aws-sdk/client-lambda@3.984.0)(@aws-sdk/client-s3@3.984.0)(@aws-sdk/client-sqs@3.984.0)(@aws-sdk/client-sts@3.398.0)(@opennextjs/cloudflare@1.18.0(next@16.1.6(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.25.12)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260401.1)(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)): + dependencies: + '@aws-sdk/credential-providers': 3.958.0 + '@cloudflare/unenv-preset': 2.7.7(unenv@2.0.0-rc.21)(workerd@1.20260401.1) + '@cloudflare/workers-types': 4.20260317.1 + '@iarna/toml': 2.2.5 + '@octokit/rest': 21.1.1 + '@smithy/node-config-provider': 4.3.7 + '@smithy/types': 4.11.0 + aws4fetch: 1.0.20 + drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260317.1) + env-paths: 3.0.0 + esbuild: 0.25.12 + execa: 9.6.1 + fast-json-patch: 3.1.1 + fast-xml-parser: 5.3.3 + find-process: 2.0.0 + glob: 10.5.0 + jszip: 3.10.1 + libsodium-wrappers: 0.8.2 + miniflare: 4.20260310.0 + neverthrow: 8.2.0 + open: 10.2.0 + openapi-types: 12.1.3 + pathe: 2.0.3 + picocolors: 1.1.1 + proper-lockfile: 4.1.2 + signal-exit: 4.1.0 + unenv: 2.0.0-rc.21 + wrangler: 4.80.0(@cloudflare/workers-types@4.20260317.1) + ws: 8.18.3 + yaml: 2.8.2 + optionalDependencies: + '@aws-sdk/client-dynamodb': 3.984.0 + '@aws-sdk/client-lambda': 3.984.0 + '@aws-sdk/client-s3': 3.984.0 + '@aws-sdk/client-sqs': 3.984.0 + '@aws-sdk/client-sts': 3.398.0 + '@opennextjs/cloudflare': 1.18.0(next@16.1.6(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)) + vite: 8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.25.12)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) + transitivePeerDependencies: + - '@aws-sdk/client-rds-data' + - '@electric-sql/pglite' + - '@libsql/client-wasm' + - '@neondatabase/serverless' + - '@op-engineering/op-sqlite' + - '@opentelemetry/api' + - '@planetscale/database' + - '@prisma/client' + - '@tidbcloud/serverless' + - '@types/better-sqlite3' + - '@types/pg' + - '@types/sql.js' + - '@upstash/redis' + - '@vercel/postgres' + - '@xata.io/client' + - aws-crt + - better-sqlite3 + - bufferutil + - bun-types + - expo-sqlite + - gel + - knex + - kysely + - mysql2 + - pg + - postgres + - prisma + - sql.js + - sqlite3 + - utf-8-validate + - workerd + + alchemy@0.90.1(@aws-sdk/client-dynamodb@3.984.0)(@aws-sdk/client-lambda@3.984.0)(@aws-sdk/client-s3@3.984.0)(@aws-sdk/client-sqs@3.984.0)(@aws-sdk/client-sts@3.398.0)(@opennextjs/cloudflare@1.18.0(next@16.1.6(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260401.1)(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)): + dependencies: + '@aws-sdk/credential-providers': 3.958.0 + '@cloudflare/unenv-preset': 2.7.7(unenv@2.0.0-rc.21)(workerd@1.20260401.1) + '@cloudflare/workers-types': 4.20260317.1 + '@iarna/toml': 2.2.5 + '@octokit/rest': 21.1.1 + '@smithy/node-config-provider': 4.3.7 + '@smithy/types': 4.11.0 + aws4fetch: 1.0.20 + drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260317.1) + env-paths: 3.0.0 + esbuild: 0.25.12 + execa: 9.6.1 + fast-json-patch: 3.1.1 + fast-xml-parser: 5.3.3 + find-process: 2.0.0 + glob: 10.5.0 + jszip: 3.10.1 + libsodium-wrappers: 0.8.2 + miniflare: 4.20260310.0 + neverthrow: 8.2.0 + open: 10.2.0 + openapi-types: 12.1.3 + pathe: 2.0.3 + picocolors: 1.1.1 + proper-lockfile: 4.1.2 + signal-exit: 4.1.0 + unenv: 2.0.0-rc.21 + wrangler: 4.80.0(@cloudflare/workers-types@4.20260317.1) + ws: 8.18.3 + yaml: 2.8.2 + optionalDependencies: + '@aws-sdk/client-dynamodb': 3.984.0 + '@aws-sdk/client-lambda': 3.984.0 + '@aws-sdk/client-s3': 3.984.0 + '@aws-sdk/client-sqs': 3.984.0 + '@aws-sdk/client-sts': 3.398.0 + '@opennextjs/cloudflare': 1.18.0(next@16.1.6(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1)) + vite: 8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@aws-sdk/client-rds-data' - '@electric-sql/pglite' @@ -10337,6 +11145,8 @@ snapshots: array-timsort@1.0.3: {} + assertion-error@2.0.1: {} + ast-types@0.16.1: dependencies: tslib: 2.8.1 @@ -10358,7 +11168,7 @@ snapshots: balanced-match@1.0.2: {} - baseline-browser-mapping@2.10.15: {} + baseline-browser-mapping@2.10.16: {} baseline-browser-mapping@2.9.11: {} @@ -10396,8 +11206,8 @@ snapshots: browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.15 - caniuse-lite: 1.0.30001785 + baseline-browser-mapping: 2.10.16 + caniuse-lite: 1.0.30001786 electron-to-chromium: 1.5.331 node-releases: 2.0.37 update-browserslist-db: 1.2.3(browserslist@4.28.2) @@ -10422,7 +11232,9 @@ snapshots: caniuse-lite@1.0.30001760: {} - caniuse-lite@1.0.30001785: {} + caniuse-lite@1.0.30001786: {} + + chai@6.2.2: {} chalk@4.1.2: dependencies: @@ -10468,6 +11280,8 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + cjs-module-lexer@1.4.3: {} + class-variance-authority@0.7.1: dependencies: clsx: 2.1.1 @@ -10561,9 +11375,9 @@ snapshots: csstype@3.2.3: {} - ctx7@0.3.9(@types/node@25.0.3): + ctx7@0.3.10(@types/node@25.0.3): dependencies: - '@inquirer/prompts': 8.3.2(@types/node@25.0.3) + '@inquirer/prompts': 8.4.0(@types/node@25.0.3) commander: 13.1.0 figlet: 1.11.0 open: 10.2.0 @@ -10693,6 +11507,8 @@ snapshots: es-errors@1.3.0: {} + es-module-lexer@2.0.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -10828,6 +11644,10 @@ snapshots: esprima@4.0.1: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + etag@1.8.1: {} event-target-shim@5.0.1: {} @@ -10859,6 +11679,8 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.2 + expect-type@1.3.0: {} + express@5.2.1: dependencies: accepts: 2.0.0 @@ -10935,6 +11757,10 @@ snapshots: optionalDependencies: picomatch: 4.0.3 + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + figlet@1.11.0: dependencies: commander: 14.0.3 @@ -10994,6 +11820,9 @@ snapshots: fs.realpath@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -11397,6 +12226,18 @@ snapshots: - bufferutil - utf-8-validate + miniflare@4.20260401.0: + dependencies: + '@cspotcode/source-map-support': 0.8.1 + sharp: 0.34.5 + undici: 7.24.4 + workerd: 1.20260401.1 + ws: 8.18.0 + youch: 4.1.0-beta.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + minimatch@10.1.1: dependencies: '@isaacs/brace-expansion': 5.0.0 @@ -11431,7 +12272,7 @@ snapshots: optionalDependencies: '@rollup/rollup-linux-x64-gnu': 4.54.0 - next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + next@16.1.6(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: '@next/env': 16.1.6 '@swc/helpers': 0.5.15 @@ -11450,6 +12291,7 @@ snapshots: '@next/swc-linux-x64-musl': 16.1.6 '@next/swc-win32-arm64-msvc': 16.1.6 '@next/swc-win32-x64-msvc': 16.1.6 + '@playwright/test': 1.59.1 sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' @@ -11486,6 +12328,8 @@ snapshots: obliterator@1.6.1: {} + obug@2.1.1: {} + ohash@2.0.11: {} on-finished@2.4.1: @@ -11573,6 +12417,16 @@ snapshots: picomatch@4.0.3: {} + picomatch@4.0.4: {} + + playwright-core@1.59.1: {} + + playwright@1.59.1: + dependencies: + playwright-core: 1.59.1 + optionalDependencies: + fsevents: 2.3.2 + postcss@8.4.31: dependencies: nanoid: 3.3.11 @@ -11585,6 +12439,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.8: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prettier@3.8.1: {} pretty-ms@9.3.0: @@ -11701,6 +12561,30 @@ snapshots: retry@0.12.0: {} + rolldown@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1): + dependencies: + '@oxc-project/types': 0.122.0 + '@rolldown/pluginutils': 1.0.0-rc.12 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.12 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.12 + '@rolldown/binding-darwin-x64': 1.0.0-rc.12 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.12 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.12 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.12 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.12 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.12 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1) + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + rollup@4.60.1: dependencies: '@types/estree': 1.0.8 @@ -11856,6 +12740,8 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} + signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -11878,8 +12764,12 @@ snapshots: srvx@0.11.15: {} + stackback@0.0.2: {} + statuses@2.0.2: {} + std-env@4.0.0: {} + stdin-discarder@0.3.1: {} string-width@4.2.3: @@ -11960,11 +12850,17 @@ snapshots: tiny-invariant@1.3.3: {} + tinybench@2.9.0: {} + + tinyexec@1.0.4: {} + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 + tinyrainbow@3.1.0: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -12037,7 +12933,7 @@ snapshots: dependencies: '@jridgewell/remapping': 2.3.5 acorn: 8.15.0 - picomatch: 4.0.3 + picomatch: 4.0.4 webpack-virtual-modules: 0.6.2 update-browserslist-db@1.2.3(browserslist@4.28.2): @@ -12074,22 +12970,22 @@ snapshots: vary@1.1.2: {} - vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)): + vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) - vite: 7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - typescript - vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.3 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.8 rollup: 4.60.1 tinyglobby: 0.2.15 optionalDependencies: @@ -12101,9 +12997,75 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 - vitefu@1.1.3(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)): + vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.25.12)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.8 + rolldown: 1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1) + tinyglobby: 0.2.15 optionalDependencies: - vite: 7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) + '@types/node': 25.0.3 + esbuild: 0.25.12 + fsevents: 2.3.3 + jiti: 2.6.1 + terser: 5.16.9 + tsx: 4.21.0 + yaml: 2.8.2 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.8 + rolldown: 1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1) + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 25.0.3 + esbuild: 0.27.3 + fsevents: 2.3.3 + jiti: 2.6.1 + terser: 5.16.9 + tsx: 4.21.0 + yaml: 2.8.2 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + + vitefu@1.1.3(vite@7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)): + optionalDependencies: + vite: 7.3.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) + + vitest@4.1.2(@types/node@25.0.3)(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.25.12)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)): + dependencies: + '@vitest/expect': 4.1.2 + '@vitest/mocker': 4.1.2(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.25.12)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/pretty-format': 4.1.2 + '@vitest/runner': 4.1.2 + '@vitest/snapshot': 4.1.2 + '@vitest/spy': 4.1.2 + '@vitest/utils': 4.1.2 + es-module-lexer: 2.0.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 4.0.0 + tinybench: 2.9.0 + tinyexec: 1.0.4 + tinyglobby: 0.2.15 + tinyrainbow: 3.1.0 + vite: 8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.7.1)(@types/node@25.0.3)(esbuild@0.25.12)(jiti@2.6.1)(terser@5.16.9)(tsx@4.21.0)(yaml@2.8.2) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 25.0.3 + transitivePeerDependencies: + - msw web-streams-polyfill@4.0.0-beta.3: {} @@ -12130,6 +13092,11 @@ snapshots: dependencies: isexe: 3.1.1 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + workerd@1.20260310.1: optionalDependencies: '@cloudflare/workerd-darwin-64': 1.20260310.1 @@ -12146,6 +13113,14 @@ snapshots: '@cloudflare/workerd-linux-arm64': 1.20260317.1 '@cloudflare/workerd-windows-64': 1.20260317.1 + workerd@1.20260401.1: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20260401.1 + '@cloudflare/workerd-darwin-arm64': 1.20260401.1 + '@cloudflare/workerd-linux-64': 1.20260401.1 + '@cloudflare/workerd-linux-arm64': 1.20260401.1 + '@cloudflare/workerd-windows-64': 1.20260401.1 + wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 @@ -12163,6 +13138,23 @@ snapshots: - bufferutil - utf-8-validate + wrangler@4.80.0(@cloudflare/workers-types@4.20260317.1): + dependencies: + '@cloudflare/kv-asset-handler': 0.4.2 + '@cloudflare/unenv-preset': 2.16.0(unenv@2.0.0-rc.24)(workerd@1.20260401.1) + blake3-wasm: 2.1.5 + esbuild: 0.27.3 + miniflare: 4.20260401.0 + path-to-regexp: 6.3.0 + unenv: 2.0.0-rc.24 + workerd: 1.20260401.1 + optionalDependencies: + '@cloudflare/workers-types': 4.20260317.1 + fsevents: 2.3.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f16c92c..59cf80f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -29,4 +29,9 @@ catalog: "@biomejs/biome": ^2.3.10 "@types/node": ^25.0.3 "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 \ No newline at end of file + "@types/react-dom": ^19.2.3 + + # Testing + vitest: ^4.1.2 + "@cloudflare/vitest-pool-workers": ^0.14.1 + "@playwright/test": ^1.58.2