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