From 128f7021e935b10dcaa4a1061eae3a58eab9f2d5 Mon Sep 17 00:00:00 2001 From: Ejiro Asiuwhu Date: Tue, 17 Feb 2026 18:10:32 +0100 Subject: [PATCH 1/5] feat: integrate Playwright E2E testing with CI workflow Add 22 E2E tests covering dashboard UI, API endpoints, floating icon integration, and real-time SSE updates. Uses svelte playground as the test target with Playwright's webServer config. Also fixes a bug where search with no results still showed all assets instead of the empty state. --- .github/workflows/ci.yml | 72 +++ .gitignore | 5 + e2e/helpers/fixtures.ts | 15 + e2e/helpers/selectors.ts | 26 ++ e2e/playwright.config.ts | 37 ++ e2e/tests/api.spec.ts | 101 +++++ e2e/tests/dashboard.spec.ts | 75 ++++ e2e/tests/floating-icon.spec.ts | 48 ++ e2e/tests/real-time.spec.ts | 33 ++ package.json | 5 + pnpm-lock.yaml | 750 ++++++++++++-------------------- src/ui/App.tsx | 6 +- src/ui/hooks/useSearch.test.ts | 4 + src/ui/hooks/useSearch.ts | 5 +- src/ui/types/index.ts | 1 + 15 files changed, 709 insertions(+), 474 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 e2e/helpers/fixtures.ts create mode 100644 e2e/helpers/selectors.ts create mode 100644 e2e/playwright.config.ts create mode 100644 e2e/tests/api.spec.ts create mode 100644 e2e/tests/dashboard.spec.ts create mode 100644 e2e/tests/floating-icon.spec.ts create mode 100644 e2e/tests/real-time.spec.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..239dc5c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,72 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + test: + runs-on: ubuntu-latest + timeout-minutes: 15 + + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Build packages + run: pnpm run build:packages + + - name: Build UI + run: pnpm run build:ui && pnpm run build:floating-icon + + - name: Run unit tests + run: pnpm run test + + e2e: + runs-on: ubuntu-latest + timeout-minutes: 15 + needs: test + + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Install Playwright browsers + run: pnpm exec playwright install chromium --with-deps + + - name: Build packages + run: pnpm run build:packages + + - name: Build UI + run: pnpm run build:ui && pnpm run build:floating-icon + + - name: Run E2E tests + run: pnpm run test:e2e + + - name: Upload test results + if: ${{ !cancelled() }} + uses: actions/upload-artifact@v4 + with: + name: playwright-report + path: playwright-report/ + retention-days: 7 diff --git a/.gitignore b/.gitignore index 0317494..6c42f1b 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,8 @@ playground/dist/ vite-asset-manager-thumbnails/ .claude/settings.local.json + +# Playwright +playwright-report/ +test-results/ +e2e/.playwright/ diff --git a/e2e/helpers/fixtures.ts b/e2e/helpers/fixtures.ts new file mode 100644 index 0000000..d71e69a --- /dev/null +++ b/e2e/helpers/fixtures.ts @@ -0,0 +1,15 @@ +import { test as base, type Page } from '@playwright/test' + +const DASHBOARD_URL = 'http://localhost:4173/__asset_manager__/' + +export const test = base.extend<{ + dashboardPage: Page +}>({ + dashboardPage: async ({ page }, use) => { + await page.goto(DASHBOARD_URL) + await page.waitForSelector('[role="gridcell"]', { timeout: 15_000 }) + await use(page) + }, +}) + +export { expect } from '@playwright/test' diff --git a/e2e/helpers/selectors.ts b/e2e/helpers/selectors.ts new file mode 100644 index 0000000..932f51b --- /dev/null +++ b/e2e/helpers/selectors.ts @@ -0,0 +1,26 @@ +export const selectors = { + floatingIcon: { + container: '#vam-container', + trigger: '#vam-trigger', + overlay: '#vam-overlay', + panel: '#vam-panel', + iframe: '#vam-iframe', + triggerActive: '#vam-trigger[data-active="true"]', + panelOpen: '#vam-panel[data-open="true"]', + panelClosed: '#vam-panel[data-open="false"]', + }, + + dashboard: { + grid: '[role="grid"]', + gridCell: '[role="gridcell"]', + searchInput: 'input[placeholder="Search assets..."]', + previewPanel: 'aside[role="region"]', + closePreview: 'button[aria-label="Close preview panel"]', + sidebarToggle: 'button[aria-label="Toggle sidebar"]', + groupHeader: 'button:has(span.font-mono)', + }, +} as const + +export const DASHBOARD_PATH = '/__asset_manager__/' +export const HOST_APP_PATH = '/' +export const API_BASE = '/__asset_manager__/api' diff --git a/e2e/playwright.config.ts b/e2e/playwright.config.ts new file mode 100644 index 0000000..e9c52a7 --- /dev/null +++ b/e2e/playwright.config.ts @@ -0,0 +1,37 @@ +import { defineConfig, devices } from '@playwright/test' + +const PORT = 4173 +const BASE_URL = `http://localhost:${PORT}` +const DASHBOARD_URL = `${BASE_URL}/__asset_manager__/` + +export default defineConfig({ + testDir: './tests', + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: process.env.CI ? 'github' : 'html', + timeout: 30_000, + + use: { + baseURL: DASHBOARD_URL, + trace: 'on-first-retry', + screenshot: 'only-on-failure', + }, + + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + + webServer: { + command: `pnpm --filter playground-svelte exec vite --port ${PORT}`, + port: PORT, + reuseExistingServer: !process.env.CI, + timeout: 30_000, + stdout: 'pipe', + stderr: 'pipe', + }, +}) diff --git a/e2e/tests/api.spec.ts b/e2e/tests/api.spec.ts new file mode 100644 index 0000000..bf97c75 --- /dev/null +++ b/e2e/tests/api.spec.ts @@ -0,0 +1,101 @@ +import { test, expect } from '@playwright/test' +import { API_BASE } from '../helpers/selectors' + +const BASE = `http://localhost:4173${API_BASE}` + +test.describe('API', () => { + test('GET /assets/grouped returns grouped assets', async ({ request }) => { + const response = await request.get(`${BASE}/assets/grouped`) + expect(response.ok()).toBeTruthy() + + const data = await response.json() + expect(data).toHaveProperty('groups') + expect(data).toHaveProperty('total') + expect(data.total).toBeGreaterThan(0) + expect(Array.isArray(data.groups)).toBe(true) + + const group = data.groups[0] + expect(group).toHaveProperty('directory') + expect(group).toHaveProperty('count') + expect(group).toHaveProperty('assets') + expect(group.count).toBeGreaterThan(0) + }) + + test('GET /assets/grouped?type=image filters by type', async ({ request }) => { + const response = await request.get(`${BASE}/assets/grouped?type=image`) + const data = await response.json() + + for (const group of data.groups) { + for (const asset of group.assets) { + expect(asset.type).toBe('image') + } + } + }) + + test('GET /search returns matching assets', async ({ request }) => { + const response = await request.get(`${BASE}/search?q=svelte`) + expect(response.ok()).toBeTruthy() + + const data = await response.json() + expect(data).toHaveProperty('assets') + expect(data).toHaveProperty('query', 'svelte') + + const names = data.assets.map((a: { name: string }) => a.name) + expect(names).toContain('svelte.svg') + }) + + test('GET /stats returns asset statistics', async ({ request }) => { + const response = await request.get(`${BASE}/stats`) + expect(response.ok()).toBeTruthy() + + const data = await response.json() + expect(data).toHaveProperty('total') + expect(data).toHaveProperty('byType') + expect(data).toHaveProperty('totalSize') + expect(data.total).toBeGreaterThan(0) + expect(data.byType).toHaveProperty('image') + }) + + test('GET /thumbnail returns image data', async ({ request }) => { + const response = await request.get(`${BASE}/thumbnail?path=src/assets/svelte.svg`) + expect(response.ok()).toBeTruthy() + + const contentType = response.headers()['content-type'] + expect(contentType).toContain('image/') + }) + + test('GET /events establishes SSE connection', async ({ page }) => { + const sseResponse = await page.evaluate(async (url) => { + return new Promise<{ connected: boolean }>((resolve) => { + const es = new EventSource(url) + const timeout = setTimeout(() => { + es.close() + resolve({ connected: false }) + }, 5_000) + es.onmessage = (event) => { + clearTimeout(timeout) + es.close() + const data = JSON.parse(event.data) + resolve({ connected: data.type === 'connected' }) + } + es.onerror = () => { + clearTimeout(timeout) + es.close() + resolve({ connected: false }) + } + }) + }, `${BASE}/events`) + + expect(sseResponse.connected).toBe(true) + }) + + test('GET /importers returns importer data', async ({ request }) => { + const response = await request.get(`${BASE}/importers?path=src/assets/svelte.svg`) + expect(response.ok()).toBeTruthy() + + const data = await response.json() + expect(data).toHaveProperty('importers') + expect(data).toHaveProperty('total') + expect(data.total).toBeGreaterThan(0) + }) +}) diff --git a/e2e/tests/dashboard.spec.ts b/e2e/tests/dashboard.spec.ts new file mode 100644 index 0000000..acefa81 --- /dev/null +++ b/e2e/tests/dashboard.spec.ts @@ -0,0 +1,75 @@ +import { test, expect } from '../helpers/fixtures' +import { selectors } from '../helpers/selectors' + +test.describe('Dashboard', () => { + test('loads and displays asset groups', async ({ dashboardPage: page }) => { + const gridCells = page.locator(selectors.dashboard.gridCell) + await expect(gridCells.first()).toBeVisible() + + const count = await gridCells.count() + expect(count).toBeGreaterThan(0) + }) + + test('displays directory group headers', async ({ dashboardPage: page }) => { + await expect(page.getByText('src/assets')).toBeVisible() + await expect(page.getByText('public')).toBeVisible() + }) + + test('search filters assets', async ({ dashboardPage: page }) => { + const searchInput = page.locator(selectors.dashboard.searchInput) + await searchInput.fill('svelte') + + await page.waitForTimeout(500) + + await expect(page.getByText('svelte.svg')).toBeVisible() + await expect(page.getByText('banner.png')).not.toBeVisible() + }) + + test('search with no results shows empty state', async ({ dashboardPage: page }) => { + const searchInput = page.locator(selectors.dashboard.searchInput) + await searchInput.fill('nonexistent-file-xyz-zzz') + + // Wait for search to complete and grid to empty + await expect(page.locator(selectors.dashboard.gridCell)).toHaveCount(0, { timeout: 5_000 }) + }) + + test('type filter shows only matching assets', async ({ dashboardPage: page }) => { + // Use the navigation sidebar button, not the stat badge + await page.getByRole('navigation').getByRole('button', { name: /images/i }).click() + + await page.waitForTimeout(300) + + const gridCells = page.locator(selectors.dashboard.gridCell) + await expect(gridCells.first()).toBeVisible() + }) + + test('clicking asset card opens preview panel', async ({ dashboardPage: page }) => { + const firstCard = page.locator(selectors.dashboard.gridCell).first() + await firstCard.click() + + const preview = page.locator(selectors.dashboard.previewPanel) + await expect(preview).toBeVisible() + + const panelHeader = preview.locator('h2') + await expect(panelHeader).toBeVisible() + const headerText = await panelHeader.textContent() + expect(headerText?.length).toBeGreaterThan(0) + }) + + test('preview panel closes with close button', async ({ dashboardPage: page }) => { + await page.locator(selectors.dashboard.gridCell).first().click() + const preview = page.locator(selectors.dashboard.previewPanel) + await expect(preview).toBeVisible() + + await page.locator(selectors.dashboard.closePreview).click() + await expect(preview).not.toBeVisible() + }) + + test('preview panel closes with Escape key', async ({ dashboardPage: page }) => { + await page.locator(selectors.dashboard.gridCell).first().click() + await expect(page.locator(selectors.dashboard.previewPanel)).toBeVisible() + + await page.keyboard.press('Escape') + await expect(page.locator(selectors.dashboard.previewPanel)).not.toBeVisible() + }) +}) diff --git a/e2e/tests/floating-icon.spec.ts b/e2e/tests/floating-icon.spec.ts new file mode 100644 index 0000000..d58750e --- /dev/null +++ b/e2e/tests/floating-icon.spec.ts @@ -0,0 +1,48 @@ +import { test, expect } from '@playwright/test' +import { selectors } from '../helpers/selectors' + +const HOST_URL = 'http://localhost:4173/' + +test.describe('Floating Icon', () => { + test.beforeEach(async ({ page }) => { + await page.goto(HOST_URL) + await page.waitForSelector(selectors.floatingIcon.trigger, { timeout: 10_000 }) + }) + + test('floating icon trigger is visible on host page', async ({ page }) => { + await expect(page.locator(selectors.floatingIcon.trigger)).toBeVisible() + }) + + test('clicking trigger opens the panel', async ({ page }) => { + await page.locator(selectors.floatingIcon.trigger).click() + + await expect(page.locator(selectors.floatingIcon.panelOpen)).toBeVisible() + await expect(page.locator(selectors.floatingIcon.iframe)).toBeVisible() + }) + + test('Alt+Shift+A keyboard shortcut toggles panel', async ({ page }) => { + await expect(page.locator(selectors.floatingIcon.panelOpen)).not.toBeVisible() + + await page.keyboard.press('Alt+Shift+KeyA') + await expect(page.locator(selectors.floatingIcon.panelOpen)).toBeVisible() + + await page.keyboard.press('Alt+Shift+KeyA') + await expect(page.locator(selectors.floatingIcon.panelOpen)).not.toBeVisible() + }) + + test('Escape key closes the panel', async ({ page }) => { + await page.locator(selectors.floatingIcon.trigger).click() + await expect(page.locator(selectors.floatingIcon.panelOpen)).toBeVisible() + + await page.keyboard.press('Escape') + await expect(page.locator(selectors.floatingIcon.panelOpen)).not.toBeVisible() + }) + + test('dashboard loads inside iframe', async ({ page }) => { + await page.locator(selectors.floatingIcon.trigger).click() + await expect(page.locator(selectors.floatingIcon.panelOpen)).toBeVisible() + + const iframe = page.frameLocator(selectors.floatingIcon.iframe) + await expect(iframe.locator('[role="grid"]').first()).toBeVisible({ timeout: 15_000 }) + }) +}) diff --git a/e2e/tests/real-time.spec.ts b/e2e/tests/real-time.spec.ts new file mode 100644 index 0000000..9f0cf3c --- /dev/null +++ b/e2e/tests/real-time.spec.ts @@ -0,0 +1,33 @@ +import { test, expect } from '../helpers/fixtures' +import fs from 'fs' +import path from 'path' +import { fileURLToPath } from 'url' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const PLAYGROUND_DIR = path.resolve(__dirname, '../../playgrounds/svelte') +const TEST_ASSET = path.join(PLAYGROUND_DIR, 'src/assets/e2e-test-file.txt') + +test.describe('Real-Time Updates', () => { + test.afterEach(async () => { + try { + fs.unlinkSync(TEST_ASSET) + } catch { + // File may not exist + } + }) + + test('new file appears in dashboard after creation', async ({ dashboardPage: page }) => { + fs.writeFileSync(TEST_ASSET, 'E2E test content') + + await expect(page.getByText('e2e-test-file.txt')).toBeVisible({ timeout: 5_000 }) + }) + + test('deleted file disappears from dashboard', async ({ dashboardPage: page }) => { + fs.writeFileSync(TEST_ASSET, 'E2E test content') + await expect(page.getByText('e2e-test-file.txt')).toBeVisible({ timeout: 5_000 }) + + fs.unlinkSync(TEST_ASSET) + + await expect(page.getByText('e2e-test-file.txt')).not.toBeVisible({ timeout: 5_000 }) + }) +}) diff --git a/package.json b/package.json index 533f691..6678c3c 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,10 @@ "test:coverage": "vitest run --coverage", "test:server": "vitest run --project server", "test:client": "vitest run --project ui", + "test:e2e": "playwright test --config e2e/playwright.config.ts", + "test:e2e:ui": "playwright test --config e2e/playwright.config.ts --ui", + "test:e2e:headed": "playwright test --config e2e/playwright.config.ts --headed", + "test:e2e:debug": "playwright test --config e2e/playwright.config.ts --debug", "playground:react": "pnpm --filter playground-react dev", "playground:vue": "pnpm --filter playground-vue dev", "playground:vanilla": "pnpm --filter playground-vanilla dev", @@ -89,6 +93,7 @@ "@base-ui/react": "^1.2.0", "@eslint/js": "^9.39.2", "@phosphor-icons/react": "^2.1.10", + "@playwright/test": "^1.58.2", "@tailwindcss/postcss": "^4.1.18", "@tanstack/react-virtual": "^3.13.18", "@testing-library/jest-dom": "^6.9.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 353dcd7..b8188e0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,6 +24,9 @@ importers: '@phosphor-icons/react': specifier: ^2.1.10 version: 2.1.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@playwright/test': + specifier: ^1.58.2 + version: 1.58.2 '@tailwindcss/postcss': specifier: ^4.1.18 version: 4.1.18 @@ -184,7 +187,7 @@ importers: version: 19.2.14 next: specifier: ^16.1.6 - version: 16.1.6(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 16.1.6(@babel/core@7.29.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: specifier: ^19.2.4 version: 19.2.4 @@ -215,10 +218,10 @@ importers: version: 4.3.1 nitropack: specifier: ^2.13.1 - version: 2.13.1 + version: 2.13.1(rolldown@1.0.0-rc.4) nuxt: specifier: ^4.3.1 - version: 4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2) + version: 4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-rc.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -240,7 +243,7 @@ importers: dependencies: 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.58.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: specifier: 19.2.3 version: 19.2.3 @@ -280,7 +283,7 @@ importers: dependencies: nuxt: specifier: ^4.3.1 - version: 4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2) + version: 4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-rc.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2) vue: specifier: ^3.5.28 version: 3.5.28(typescript@5.9.3) @@ -420,7 +423,7 @@ importers: version: 1.157.17(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.20(react@19.2.4))(@tanstack/react-router@1.157.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.157.16)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tanstack/react-start': specifier: ^1.132.0 - version: 1.157.17(crossws@0.4.4(srvx@0.10.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.157.17(crossws@0.4.4(srvx@0.11.5))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@tanstack/router-plugin': specifier: ^1.132.0 version: 1.157.17(@tanstack/react-router@1.157.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) @@ -429,7 +432,7 @@ importers: version: 0.561.0(react@19.2.4) nitro: specifier: npm:nitro-nightly@latest - version: nitro-nightly@3.0.1-20260128-211656-ae83c97e(chokidar@5.0.0)(ioredis@5.9.2)(lru-cache@11.2.5)(rollup@4.57.0)(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: nitro-nightly@3.0.1-20260217-092337-b28fa21a(chokidar@5.0.0)(dotenv@17.2.3)(giget@3.1.2)(ioredis@5.9.2)(jiti@2.6.1)(lru-cache@11.2.5)(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) react: specifier: ^19.2.0 version: 19.2.4 @@ -1960,238 +1963,119 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@oxc-minify/binding-android-arm-eabi@0.111.0': - resolution: {integrity: sha512-MkDWMUkYjfzcIA/StNBN/mi17WjdKnt7Fa2ESOND3b333dLCfaiS3zy+p7IYvAPV+osaK8DtcmUVlstX6l9Smw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [android] - '@oxc-minify/binding-android-arm-eabi@0.112.0': resolution: {integrity: sha512-m7TGBR2hjsBJIN9UJ909KBoKsuogo6CuLsHKvUIBXdjI0JVHP8g4ZHeB+BJpGn5LJdeSGDfz9MWiuXrZDRzunw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-minify/binding-android-arm64@0.111.0': - resolution: {integrity: sha512-KzeDAiB6sybY7+1dK6qJu7QDhWQuYgeh7UZiPQHn+jWyWgdnobhYCCUP46XfMXlP1u0/wabFKmvV6iLNLfdX+g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - '@oxc-minify/binding-android-arm64@0.112.0': resolution: {integrity: sha512-RvxOOkzvP5NeeoraBtgNJSBqO+XzlS7DooxST/drAXCfO52GsmxVB1N7QmifrsTYtH8GC2z3DTFjZQ1w/AJOWg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-minify/binding-darwin-arm64@0.111.0': - resolution: {integrity: sha512-1WJMKAWH7Zxue0oNtJ12kcP85g//d8g/sTmbYMZ6TaFGaxym5KwgtdCan21k7V9NUaPajffKzd8oqTcBHSo/SA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - '@oxc-minify/binding-darwin-arm64@0.112.0': resolution: {integrity: sha512-hDslO3uVHza3kB9zkcsi25JzN65Gj5ZYty0OvylS11Mhg9ydCYxAzfQ/tISHW/YmV1NRUJX8+GGqM1cKmrHaTA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-minify/binding-darwin-x64@0.111.0': - resolution: {integrity: sha512-HVcHVkBnGf4dN44bkw/W+ZkBWm69mCo3mDdzY70l23fkSpVIuFIog9zKT97pvA4MMFnKM8fm0de7/kAnlJW9+Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - '@oxc-minify/binding-darwin-x64@0.112.0': resolution: {integrity: sha512-mWA2Y5bUyNoGM+gSGGHesgtQ3LDWgpRe4zDGkBDovxNIiDLBXqu/7QcuS+G918w8oG9VYm1q1iinILer/2pD1Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-minify/binding-freebsd-x64@0.111.0': - resolution: {integrity: sha512-4V74yRfYCrC50QWYIFRkUKLABfTY4xI1HvSq2+9iqDuTGjADIox7Y/4XxDP7JKuF1zzuETiODZBQck/rHC7pug==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - '@oxc-minify/binding-freebsd-x64@0.112.0': resolution: {integrity: sha512-T7fsegxcy82xS0jWPXkz/BMhrkb3D7YOCiV0R9pDksjaov+iIFoNEWAoBsaC5NtpdzkX+bmffwDpu336EIfEeg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-minify/binding-linux-arm-gnueabihf@0.111.0': - resolution: {integrity: sha512-kDjfiayel9TQq/da673LF9OZcAVKVVFlSf88x1zARyZpSxMOacHVDRX7Xs+BwoIMLsfPieHNzClqlnc9tnubdw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - '@oxc-minify/binding-linux-arm-gnueabihf@0.112.0': resolution: {integrity: sha512-yePavbIilAcpVYc8vRsDCn3xJxHMXDZIiamyH9fuLosAHNELcLib4/JR4fhDk4NmHVagQH3kRhsnm5Q9cm3pAw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-minify/binding-linux-arm-musleabihf@0.111.0': - resolution: {integrity: sha512-rH97TIfhDSJbgJIWbNRYJqO3jxXNZ05drDyHfXibq9PuC6NJPQtarUtXeKHtzVAZzs5N9uLyv2ioLe6xyjFKqA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - '@oxc-minify/binding-linux-arm-musleabihf@0.112.0': resolution: {integrity: sha512-lmPWLXtW6FspERhy97iP0hwbmLtL66xI29QQ9GpHmTiE4k+zv/FaefuV/Qw+LuHnmFSYzUNrLcxh4ulOZTIP2g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-minify/binding-linux-arm64-gnu@0.111.0': - resolution: {integrity: sha512-ljCl7ONCSgrLd9mx08Kiz196zar/YonzAnQI+XsW9+Gad1Mm8qIcBnQL7wo6rJSVIehFnDo0AIGNXkXTVPl9eQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - '@oxc-minify/binding-linux-arm64-gnu@0.112.0': resolution: {integrity: sha512-gySS5XqU5MKs/oCjsTlVm8zb8lqcNKHEANsaRmhW2qvGKJoeGwFb6Fbq6TLCZMRuk143mLbncbverBCa1c3dog==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxc-minify/binding-linux-arm64-musl@0.111.0': - resolution: {integrity: sha512-2uLSY9VIS2ALoWjq1S36L0J5tABMTWTHY8TkTk5LcctCq80xIFkdia5cRv+mbxb7GiEFMxh8dqgk9t5t0pms9A==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - '@oxc-minify/binding-linux-arm64-musl@0.112.0': resolution: {integrity: sha512-IRFMZX589lr3rjG0jc8N261/7wqFq2Vl0OMrJWeFls5BF8HiB+fRYuf0Zy2CyRH6NCY2vbdDdp+QCAavQGVsGw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxc-minify/binding-linux-ppc64-gnu@0.111.0': - resolution: {integrity: sha512-DVWUVhPwiNtdDTpXccOTe/L8BPIjZMnceua9eQBK7qknEMobP1IFLp2IohjPYdCUsmbat7saHlCqXKeVg4Gt3Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - '@oxc-minify/binding-linux-ppc64-gnu@0.112.0': resolution: {integrity: sha512-V/69XqIW9hCUceDpcZh79oDg+F4ptEgIfKRENzYs41LRbSoJ7sNjjcW4zifqyviTvzcnXLgK4uoTyoymmNZBMQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - '@oxc-minify/binding-linux-riscv64-gnu@0.111.0': - resolution: {integrity: sha512-M0iAuPkJ3jKqQzuub6JLP80ftYRbwE1fCxLvHwxpB98rlNlHjGG/+R9dMR55/aZhRPzBqQE0fFfOFUsnsVs5gg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - '@oxc-minify/binding-linux-riscv64-gnu@0.112.0': resolution: {integrity: sha512-zghvexySyGXGNW+MutjZN7UGTyOQl56RWMlPe1gb+knBm/+0hf9qjk7Q6ofm2tSte+vQolPfQttifGl0dP9uvQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxc-minify/binding-linux-riscv64-musl@0.111.0': - resolution: {integrity: sha512-n2khk4qOfmVLbjr5xXL/8YgvkTRe8bV/D8/dT6BWOqknwfweWtXumpcD/CVFC1majM+HoMDetuPbgm4BTcqAyQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - '@oxc-minify/binding-linux-riscv64-musl@0.112.0': resolution: {integrity: sha512-E4a8VUFDJPb2mPcc7J4NQQPi1ssHKF7/g4r6KD2+SBVERIaEEd3cGNqR7SG3g82/BLGV2UDoQe/WvZCkt5M/bQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxc-minify/binding-linux-s390x-gnu@0.111.0': - resolution: {integrity: sha512-CFCM6d1RkWr8Z4/w6sL8CuGN6ruzm0gAD9FIyRmi6xDhCUyDitpnhVJ5WXkuREpSzVFiBY8qsZ9I2djtsuTo5A==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - '@oxc-minify/binding-linux-s390x-gnu@0.112.0': resolution: {integrity: sha512-2Hx87sK3y6jBV364Mvv0zyxiITIuy26Ixenv6pK7e+4an3HgNdhAj8nk3aLoLTTSvLik5/MaGhcZGEu9tYV1aA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - '@oxc-minify/binding-linux-x64-gnu@0.111.0': - resolution: {integrity: sha512-/e/PAlEoJ8VFJvmgAiQZloUUNyPbokl+hKIEfcV2GWWViNrs/1hFAnommeUoaF1+SSngTjvZ4zTFXcQfY3AYWA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - '@oxc-minify/binding-linux-x64-gnu@0.112.0': resolution: {integrity: sha512-2MSCnEPLk9ddSouMhJo78Xy2/JbYC80OYzWdR4yWTGSULsgH3d1VXg73DSwFL8vU7Ad9oK10DioBY2ww7sQTEg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxc-minify/binding-linux-x64-musl@0.111.0': - resolution: {integrity: sha512-cZp0X4P6RbZZ226pRWCntzGzSTAQqaGM5Q/aw+hbHswlx8eXoVvdy3krdloGxvQUU1DCpJY2QGNvW0xWVSdp+A==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - '@oxc-minify/binding-linux-x64-musl@0.112.0': resolution: {integrity: sha512-HAPfmQKlkVi97/zRonVE9t/kKUG3ni+mOuU1Euw+3s37KwUuOJjmcwXdclVgXKBlTkCGO0FajPwW5dAJeIXCCw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxc-minify/binding-openharmony-arm64@0.111.0': - resolution: {integrity: sha512-HY9OKzZ2GW7o/YE5fwp2SDk81H38TqkXegFS55LFJKyEsJlwiUsi2EG59KiMrMfHAwpasGBE9WSyEcm+hEDEsw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - '@oxc-minify/binding-openharmony-arm64@0.112.0': resolution: {integrity: sha512-bLnMojcPadYzMNpB6IAqMiTOag4etc0zbs8On73JsotO1W5c5/j/ncplpSokpEpNasKRUpHVRXpmq0KRXprNhw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-minify/binding-wasm32-wasi@0.111.0': - resolution: {integrity: sha512-4CF7xeQhlM34//Rmmog82m3SeEV0aEhAJaNl+fcsMuuq/+rfwNct/kBaf1qSPqvhuWiPQWVcXrSE38BPWW/vnw==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - '@oxc-minify/binding-wasm32-wasi@0.112.0': resolution: {integrity: sha512-tv7PmHYq/8QBlqMaDjsy51GF5KQkG17Yc/PsgB5OVndU34kwbQuebBIic7UfK9ygzidI8moYq3ztnu3za/rqHw==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-minify/binding-win32-arm64-msvc@0.111.0': - resolution: {integrity: sha512-loUKo//QHI61Nj3HODrQes1u+8Mx+4YsN56+QyCKWyRTQNY+V4TqAtcoOsZTVKSQFm6+8IgV9KVtc8hOpiO5Kw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - '@oxc-minify/binding-win32-arm64-msvc@0.112.0': resolution: {integrity: sha512-d+jes2jwRkcBSpcaZC6cL8GBi56Br6uAorn9dfquhWLczWL+hHSvvVrRgT1i5/6dkf5UWx2zdoEsAMiJ11w78A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-minify/binding-win32-ia32-msvc@0.111.0': - resolution: {integrity: sha512-JopCb4BLw9UjcCsJkLP5ZJ7JjJj3oZHQzaOB6udQTkN+0kOHpySCr9BCYkrx1fA7afh6V8W88lYJc1BmM9qD7Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ia32] - os: [win32] - '@oxc-minify/binding-win32-ia32-msvc@0.112.0': resolution: {integrity: sha512-TV1C3qDwj7//jNIi5tnNRhReSUgtaRQKi5KobDE6zVAc5gjeuBA8G2qizS9ziXlf/I0dlelrGmGMMDJmH9ekWg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-minify/binding-win32-x64-msvc@0.111.0': - resolution: {integrity: sha512-XDbGGYuY2W5edAwd+clMul4Cw4TqZR83//XqowLXbd1sGYq1m2Zo+vXHXvl3LS0Z2xdoJRJl+dJ0GPATwLx3JQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - '@oxc-minify/binding-win32-x64-msvc@0.112.0': resolution: {integrity: sha512-LML2Gld6VY8/+7a3VH4k1qngsBXvTkXgbmYgSYwaElqtiQiYaAcXfi0XKOUGe3k3GbBK4juAGixC31CrdFHAQw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2320,11 +2204,8 @@ packages: '@oxc-project/types@0.112.0': resolution: {integrity: sha512-m6RebKHIRsax2iCwVpYW2ErQwa4ywHJrE4sCK3/8JK8ZZAWOKXaRJFl/uP51gaVyyXlaS4+chU1nSCdzYf6QqQ==} - '@oxc-transform/binding-android-arm-eabi@0.111.0': - resolution: {integrity: sha512-NdFLicvorfHYu0g2ftjVJaH7+Dz27AQUNJOq8t/ofRUoWmczOodgUCHx8C1M1htCN4ZmhS/FzfSy6yd/UngJGg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [android] + '@oxc-project/types@0.113.0': + resolution: {integrity: sha512-Tp3XmgxwNQ9pEN9vxgJBAqdRamHibi76iowQ38O2I4PMpcvNRQNVsU2n1x1nv9yh0XoTrGFzf7cZSGxmixxrhA==} '@oxc-transform/binding-android-arm-eabi@0.112.0': resolution: {integrity: sha512-r4LuBaPnOAi0eUOBNi880Fm2tO2omH7N1FRrL6+nyz/AjQ+QPPLtoyZJva0O+sKi1buyN/7IzM5p9m+5ANSDbg==} @@ -2332,226 +2213,113 @@ packages: cpu: [arm] os: [android] - '@oxc-transform/binding-android-arm64@0.111.0': - resolution: {integrity: sha512-J2v9ajarD2FYlhHtjbgZUFsS2Kvi27pPxDWLGCy7i8tO60xBoozX9/ktSgbiE/QsxKaUhfv4zVKppKWUo71PmQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - '@oxc-transform/binding-android-arm64@0.112.0': resolution: {integrity: sha512-ve46vQcQrY8eGe8990VSlS9gkD+AogJqbtfOkeua+5sQGQTDgeIRRxOm7ktCo19uZc2bEBwXRJITgosd+NRVmQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-transform/binding-darwin-arm64@0.111.0': - resolution: {integrity: sha512-2UYmExxpXzmiHTldhNlosWqG9Nc4US51K0GB9RLcGlTE23WO33vVo1NVAKwxPE+KYuhffwDnRYTovTMUjzwvZA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - '@oxc-transform/binding-darwin-arm64@0.112.0': resolution: {integrity: sha512-ddbmLU3Tr+i7MOynfwAXxUXud3SjJKlv7XNjaq08qiI8Av/QvhXVGc2bMhXkWQSMSBUeTDoiughKjK+Zsb6y/A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-transform/binding-darwin-x64@0.111.0': - resolution: {integrity: sha512-c4YRwfLV8Pj/ToiTCbndZaHxM2BD4W3bltr/fjXZcGypEK+U2RZFDL7tIZYT/tyneAC9hCORZKDaKhLLNuzPtA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - '@oxc-transform/binding-darwin-x64@0.112.0': resolution: {integrity: sha512-TKvmNw96jQZPqYb4pRrzLFDailNB3YS14KNn+x2hwRbqc6CqY96S9PYwyOpVpYdxfoRjYO9WgX9SoS+62a1DPA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-transform/binding-freebsd-x64@0.111.0': - resolution: {integrity: sha512-prvf32IcEuLnLZbNVomFosBu0CaZpyj3YsZ6epbOgJy8iJjfLsXBb+PrkO/NBKzjuJoJa2+u7jFKRE0KT7gSOw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - '@oxc-transform/binding-freebsd-x64@0.112.0': resolution: {integrity: sha512-YPMkSCDaelO8HHYRMYjm+Q+IfkfIbdtQzwPuasItYkq8UUkNeHNPheNh2JkvQa3c+io3E9ePOgHQ2yihpk7o/Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-transform/binding-linux-arm-gnueabihf@0.111.0': - resolution: {integrity: sha512-+se3579Wp7VOk8TnTZCpT+obTAyzOw2b/UuoM0+51LtbzCSfjKxd4A+o7zRl7GyPrPZvx57KdbMOC9rWB1xNrw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - '@oxc-transform/binding-linux-arm-gnueabihf@0.112.0': resolution: {integrity: sha512-nA7kzQGNEpuTRknst/IJ3l8hqmDmEda3aun6jkXgp7gKxESjuHeaNH04mKISxvJ7fIacvP2g/wtTSnm4u5jL8Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-transform/binding-linux-arm-musleabihf@0.111.0': - resolution: {integrity: sha512-8faC99pStqaSDPK/vBgaagAHUeL0LcIzfeSjSiDTtvPGc3AwZIeqC1tx3CP15a6tWXjdgS/IUw4IjfD5HweBlg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - '@oxc-transform/binding-linux-arm-musleabihf@0.112.0': resolution: {integrity: sha512-w8GuLmckKlGc3YujaZKhtbFxziCcosvM2l9GnQjCb/yENWLGDiyQOy0BTAgPGdJwpYTiOeJblEXSuXYvlE1Ong==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-transform/binding-linux-arm64-gnu@0.111.0': - resolution: {integrity: sha512-HtfQv8j796gzI5WR/RaP6IMwFpiL0vYeDrUA1hYhlPzTHKYan/B+NlhJkKOI1v24yAl/yEnFmb0pxIxLNqBqBA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - '@oxc-transform/binding-linux-arm64-gnu@0.112.0': resolution: {integrity: sha512-9LwwGnJ8+WT0rXcrI8M0RJtDNt91eMqcDPPEvJxhRFHIMcHTy5D5xT+fOl3Us0yMqKo3HUWkbfUYqAp4GoZ3Jw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxc-transform/binding-linux-arm64-musl@0.111.0': - resolution: {integrity: sha512-ARyfcMCIxVLDgLf6FQ8Oo1/TFySpnquV+vuSb4SFQZfYDqgMklzwv0NYXxWD0aB6enElyMDs6pQJBzusEKCkOg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - '@oxc-transform/binding-linux-arm64-musl@0.112.0': resolution: {integrity: sha512-Lg6VOuSd3oXv7J0eGywgqh/086h+qQzIBOD+47pYKMTTJcbDe+f3h/RgGoMKJE5HhiwT5sH1aGEJfIfaYUiVSw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxc-transform/binding-linux-ppc64-gnu@0.111.0': - resolution: {integrity: sha512-PKpVRrSvBNK3tv9vwxn7Fay+QWZmprPGlEqJcseBJllQc5mFMD4Q/w44chu5iR9ZLsDeSHzmNWrgMLo4J0sP2A==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - '@oxc-transform/binding-linux-ppc64-gnu@0.112.0': resolution: {integrity: sha512-PXzmj82o1moA4IGphYImTRgc2youTi4VRfyFX3CHwLjxPcQ5JtcsgbDt4QUdOzXZ+zC07s5jf2ZzhRapEOlj2w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - '@oxc-transform/binding-linux-riscv64-gnu@0.111.0': - resolution: {integrity: sha512-9bUml6rMgk+8GF5rvNMweFspkzSiCjqpV6HduwiUyexqfGKrmjq9IZOxxvnzkE2RGdQzP507NNDoVNYIoGQYuA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - '@oxc-transform/binding-linux-riscv64-gnu@0.112.0': resolution: {integrity: sha512-vhJsMsVH/6xwa3bt1LGts33FXUkGjaEGDwsRyp4lIfOjSfQVWMtCmWMFNaA0dW9FVWdD2Gt2fSFBSZ+azDxlpg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxc-transform/binding-linux-riscv64-musl@0.111.0': - resolution: {integrity: sha512-tzGCohGxaeH6KRJjfYZd4mHCoGjCai6N+zZi1Oj+tSDMAAdyvs1dRzYb8PNUGnybCg3Te4M0jLPzWZaSmnKraQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - '@oxc-transform/binding-linux-riscv64-musl@0.112.0': resolution: {integrity: sha512-cXWFb7z+2IjFUEcXtRwluq9oEG5qnyFCjiu3SWrgYNcWwPdHusv3I/7K5/CTbbi4StoZ5txbi7/iSfDHNyWuRw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxc-transform/binding-linux-s390x-gnu@0.111.0': - resolution: {integrity: sha512-sRG1KIfZ0ML9ToEygm5aM/5GJeBA05uHlgW3M0Rx/DNWMJhuahLmqWuB02aWSmijndLfEKXLLXIWhvWupRG8lg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - '@oxc-transform/binding-linux-s390x-gnu@0.112.0': resolution: {integrity: sha512-eEFu4SRqJTJ20/88KRWmp+jpHKAw0Y1DsnSgpEeXyBIIcsOaLIUMU/TfYWUmqRbvbMV9rmOmI3kp5xWYUq6kSQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - '@oxc-transform/binding-linux-x64-gnu@0.111.0': - resolution: {integrity: sha512-T0Kmvk+OdlUdABdXlDIf3MQReMzFfC75NEI9x8jxy5pKooACEFg0k0V8gyR3gq4DzbDCfucqFQDWNvSgIopAbQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - '@oxc-transform/binding-linux-x64-gnu@0.112.0': resolution: {integrity: sha512-ST1MDT+TlOyZ1c5btrGinRSUW2Jf4Pa+0gdKwsyjDSOC3dxy2ZNkN3mosTf4ywc3J+mxfYKqtjs7zSwHz03ILA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxc-transform/binding-linux-x64-musl@0.111.0': - resolution: {integrity: sha512-EgoutsP3YfqzN8a9vpc9+XLr0bmBl0dA3uOMiP77+exATCPxJBkJErGmQkqk6RtTp5XqX6q6mB45qWQyKk6+pA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - '@oxc-transform/binding-linux-x64-musl@0.112.0': resolution: {integrity: sha512-ISQoA3pD4cyTGpf9sXXeerH6pL2L6EIpdy6oAy2ttkswyVFDyQNVOVIGIdLZDgbpmqGljxZnWqt/J/N68pQaig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxc-transform/binding-openharmony-arm64@0.111.0': - resolution: {integrity: sha512-d8J+ejc0j5WODbVwR/QxFaI65YMwvG0W53vcVCHwa6ja1QI5lpe7sislrefG2EFYgnY47voMRzlXab5d4gEcDw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - '@oxc-transform/binding-openharmony-arm64@0.112.0': resolution: {integrity: sha512-UOGVrGIv7yLJovyEXEyUTADuLq98vd/cbMHFLJweRXD+11I8Tn4jASi4WzdsN8C3BVYGRHrXH2NlSBmhz33a4g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-transform/binding-wasm32-wasi@0.111.0': - resolution: {integrity: sha512-HtyIZO8IwuZgXkyb56rysLz1OLbfLhEu8A3BeuyJXzUseAj96yuxgGt3cu3QYX9AXb9pfRfA3c/fvlhsDugyTQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - '@oxc-transform/binding-wasm32-wasi@0.112.0': resolution: {integrity: sha512-XIX7Gpq9koAvzBVHDlVFHM79r5uOVK6kTEsdsN4qaajpjkgtv4tdsAOKIYK6l7fUbsbE6xS+6w1+yRFrDeC1kg==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-transform/binding-win32-arm64-msvc@0.111.0': - resolution: {integrity: sha512-YeP80Riptc0MkVVBnzbmoFuHVLUq278+MbwNo9sTLALmzTIJxJqN029xRZbG+Bun7aLsoZhmRnm3J5JZ1NcP5w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - '@oxc-transform/binding-win32-arm64-msvc@0.112.0': resolution: {integrity: sha512-EgXef9kOne9BNsbYBbuRqxk2hteT0xsAGcx/VbtCBMJYNj8fANFhT271DUSOgfa4DAgrQQmsyt/Kr1aV9mpU9w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-transform/binding-win32-ia32-msvc@0.111.0': - resolution: {integrity: sha512-A6ztCXpoSHt6PbvGAFqB0MLOcGG7ZJrrPXY1iB0zfOB1atLgI8oNePGxPl03XSbwpiTsFJ1oo8rj9DXcBzgT9g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ia32] - os: [win32] - '@oxc-transform/binding-win32-ia32-msvc@0.112.0': resolution: {integrity: sha512-6QaB0qjNaou2YR+blncHdw7j0e26IOwOIjLbhVGDeuf9+4rjJeiqRXJ2hOtCcS4zblnao/MjdgQuZ3fM0nl+Kw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-transform/binding-win32-x64-msvc@0.111.0': - resolution: {integrity: sha512-QddKW4kBH0Wof6Y65eYCNHM4iOGmCTWLLcNYY1FGswhzmTYOUVXajNROR+iCXAOFnOF0ldtsR79SyqgyHH1Bgg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - '@oxc-transform/binding-win32-x64-msvc@0.112.0': resolution: {integrity: sha512-FRKYlY959QeqRPx9kXs0HjU2xuXPT1cdF+vvA200D9uAX/KLcC34MwRqUKTYml4kCc2Vf/P2pBR9cQuBm3zECQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2657,6 +2425,11 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@playwright/test@1.58.2': + resolution: {integrity: sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==} + engines: {node: '>=18'} + hasBin: true + '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} @@ -2692,6 +2465,83 @@ packages: preact: ^10.4.0 || ^11.0.0-0 vite: '>=2.0.0' + '@rolldown/binding-android-arm64@1.0.0-rc.4': + resolution: {integrity: sha512-vRq9f4NzvbdZavhQbjkJBx7rRebDKYR9zHfO/Wg486+I7bSecdUapzCm5cyXoK+LHokTxgSq7A5baAXUZkIz0w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-rc.4': + resolution: {integrity: sha512-kFgEvkWLqt3YCgKB5re9RlIrx9bRsvyVUnaTakEpOPuLGzLpLapYxE9BufJNvPg8GjT6mB1alN4yN1NjzoeM8Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-rc.4': + resolution: {integrity: sha512-JXmaOJGsL/+rsmMfutcDjxWM2fTaVgCHGoXS7nE8Z3c9NAYjGqHvXrAhMUZvMpHS/k7Mg+X7n/MVKb7NYWKKww==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-rc.4': + resolution: {integrity: sha512-ep3Catd6sPnHTM0P4hNEvIv5arnDvk01PfyJIJ+J3wVCG1eEaPo09tvFqdtcaTrkwQy0VWR24uz+cb4IsK53Qw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.4': + resolution: {integrity: sha512-LwA5ayKIpnsgXJEwWc3h8wPiS33NMIHd9BhsV92T8VetVAbGe2qXlJwNVDGHN5cOQ22R9uYvbrQir2AB+ntT2w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.4': + resolution: {integrity: sha512-AC1WsGdlV1MtGay/OQ4J9T7GRadVnpYRzTcygV1hKnypbYN20Yh4t6O1Sa2qRBMqv1etulUknqXjc3CTIsBu6A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.4': + resolution: {integrity: sha512-lU+6rgXXViO61B4EudxtVMXSOfiZONR29Sys5VGSetUY7X8mg9FCKIIjcPPj8xNDeYzKl+H8F/qSKOBVFJChCQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.4': + resolution: {integrity: sha512-DZaN1f0PGp/bSvKhtw50pPsnln4T13ycDq1FrDWRiHmWt1JeW+UtYg9touPFf8yt993p8tS2QjybpzKNTxYEwg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.4': + resolution: {integrity: sha512-RnGxwZLN7fhMMAItnD6dZ7lvy+TI7ba+2V54UF4dhaWa/p8I/ys1E73KO6HmPmgz92ZkfD8TXS1IMV8+uhbR9g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.4': + resolution: {integrity: sha512-6lcI79+X8klGiGd8yHuTgQRjuuJYNggmEml+RsyN596P23l/zf9FVmJ7K0KVKkFAeYEdg0iMUKyIxiV5vebDNQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.4': + resolution: {integrity: sha512-wz7ohsKCAIWy91blZ/1FlpPdqrsm1xpcEOQVveWoL6+aSPKL4VUcoYmmzuLTssyZxRpEwzuIxL/GDsvpjaBtOw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.4': + resolution: {integrity: sha512-cfiMrfuWCIgsFmcVG0IPuO6qTRHvF7NuG3wngX1RZzc6dU8FuBFb+J3MIR5WrdTNozlumfgL4cvz+R4ozBCvsQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.4': + resolution: {integrity: sha512-p6UeR9y7ht82AH57qwGuFYn69S6CZ7LLKdCKy/8T3zS9VTrJei2/CGsTUV45Da4Z9Rbhc7G4gyWQ/Ioamqn09g==} + 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==} @@ -2704,6 +2554,9 @@ packages: '@rolldown/pluginutils@1.0.0-rc.3': resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} + '@rolldown/pluginutils@1.0.0-rc.4': + resolution: {integrity: sha512-1BrrmTu0TWfOP1riA8uakjFc9bpIUGzVKETsOtzY39pPga8zELGDl8eu1Dx7/gjM5CAz14UknsUMpBO8L+YntQ==} + '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} engines: {node: '>=14.0.0'} @@ -5025,6 +4878,11 @@ packages: resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} engines: {node: '>=14.14'} + 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} @@ -5124,6 +4982,7 @@ packages: glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@13.0.1: @@ -5189,6 +5048,16 @@ packages: crossws: optional: true + h3@2.0.1-rc.14: + resolution: {integrity: sha512-163qbGmTr/9rqQRNuqMqtgXnOUAkE4KTdauiC9y0E5iG1I65kte9NyfWvZw5RTDMt6eY+DtyoNzrQ9wA2BfvGQ==} + engines: {node: '>=20.11.1'} + hasBin: true + peerDependencies: + crossws: ^0.4.1 + peerDependenciesMeta: + crossws: + optional: true + has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} @@ -6112,20 +5981,26 @@ packages: sass: optional: true - nf3@0.3.7: - resolution: {integrity: sha512-wL73kyZbBoeTWlvQWQ0gQDZnqp+aNlUN5YIqsc3fv5V/06LAlwrwt+G7TpugFLJIai0AhrmnKJ2kgW0xprj+yQ==} + nf3@0.3.10: + resolution: {integrity: sha512-UlqmHkZiHGgSkRj17yrOXEsSu5ECvtlJ3Xm1W5WsWrTKgu9m7OjrMZh9H/ME2LcWrTlMD0/vmmNVpyBG4yRdGg==} - nitro-nightly@3.0.1-20260128-211656-ae83c97e: - resolution: {integrity: sha512-1WWSIEmcWYDDtQ7yyyOw44UEmwa5djIh3iV7whydhTT1+JXM/jBB/MNI+fBGjL9BPn1ttKRCfLudPCJfmhu0VA==} + nitro-nightly@3.0.1-20260217-092337-b28fa21a: + resolution: {integrity: sha512-TlJ2aISs/U7ZzDL9rC09NB8KCNtx0vE1SxQy8tRelzMWkObM3uOUf3joX+YXADrynMc4xVF1b7GpO0iX1VSyrQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - rolldown: '>=1.0.0-rc.2' - rollup: ^4.57.0 + dotenv: '*' + giget: '*' + jiti: ^2.6.1 + rollup: ^4.57.1 vite: ^7 || ^8 || >=8.0.0-0 xml2js: ^0.6.2 peerDependenciesMeta: - rolldown: + dotenv: + optional: true + giget: + optional: true + jiti: optional: true rollup: optional: true @@ -6334,10 +6209,6 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} - oxc-minify@0.111.0: - resolution: {integrity: sha512-tooT6OU4dv8esdLxpELcBYc3R3zN+Bn0llM58RP8djBrxN57l7E5KqfTFq035kEaYl58C0fEgsOEL9G6zO6oQA==} - engines: {node: ^20.19.0 || >=22.12.0} - oxc-minify@0.112.0: resolution: {integrity: sha512-rkVSeeIRSt+RYI9uX6xonBpLUpvZyegxIg0UL87ev7YAfUqp7IIZlRjkgQN5Us1lyXD//TOo0Dcuuro/TYOWoQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -6346,10 +6217,6 @@ packages: resolution: {integrity: sha512-7rQ3QdJwobMQLMZwQaPuPYMEF2fDRZwf51lZ//V+bA37nejjKW5ifMHbbCwvA889Y4RLhT+/wLJpPRhAoBaZYw==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-transform@0.111.0: - resolution: {integrity: sha512-oa5KKSDNLHZGaiqIGAbCWXeN9IJUAz9MElWcQX90epDxdKc9Hrt/BsLj3K4gDqfAYa5dwdH+ZCFJG9hR74fiGg==} - engines: {node: ^20.19.0 || >=22.12.0} - oxc-transform@0.112.0: resolution: {integrity: sha512-cIRRvZgrHfsAHrkt8LWdAX4+Do8R0MzQSfeo9yzErzHeYiuyNiP4PCTPbOy/wBXL4MYzt3ebrBa5jt3akQkKAg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -6473,6 +6340,16 @@ packages: pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + playwright-core@1.58.2: + resolution: {integrity: sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.58.2: + resolution: {integrity: sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==} + engines: {node: '>=18'} + hasBin: true + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -6902,6 +6779,11 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + rolldown@1.0.0-rc.4: + resolution: {integrity: sha512-V2tPDUrY3WSevrvU2E41ijZlpF+5PbZu4giH+VpNraaadsJGHa4fR6IFwsocVwEXDoAdIv5qgPPxgrvKAOIPtA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup-plugin-dts@6.3.0: resolution: {integrity: sha512-d0UrqxYd8KyZ6i3M2Nx7WOMy708qsV/7fTHMHxCMCBOAe3V/U7OMPu5GkX8hC+cmkHhzGnfeYongl1IgiooddA==} engines: {node: '>=16'} @@ -7150,6 +7032,11 @@ packages: engines: {node: '>=20.16.0'} hasBin: true + srvx@0.11.5: + resolution: {integrity: sha512-MbQgu/gbLcXjg1bhUhPXXOpeMfmDMTGSKPWeht5acXnlQNldD925eS4+bIH/qESecSkP71dU3Fmvunlai1+yzw==} + engines: {node: '>=20.16.0'} + hasBin: true + stable-hash@0.0.5: resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} @@ -9640,7 +9527,7 @@ snapshots: - vue - vue-tsc - '@nuxt/nitro-server@4.3.1(db0@0.3.4)(ioredis@5.9.2)(magicast@0.5.1)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3)': + '@nuxt/nitro-server@4.3.1(db0@0.3.4)(ioredis@5.9.2)(magicast@0.5.1)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-rc.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(rolldown@1.0.0-rc.4)(typescript@5.9.3)': dependencies: '@nuxt/devalue': 2.0.2 '@nuxt/kit': 4.3.1(magicast@0.5.1) @@ -9657,8 +9544,8 @@ snapshots: impound: 1.0.0 klona: 2.0.6 mocked-exports: 0.1.1 - nitropack: 2.13.1 - nuxt: 4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2) + nitropack: 2.13.1(rolldown@1.0.0-rc.4) + nuxt: 4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-rc.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2) ohash: 2.0.11 pathe: 2.0.3 pkg-types: 2.3.0 @@ -9722,7 +9609,7 @@ snapshots: rc9: 3.0.0 std-env: 3.10.0 - '@nuxt/vite-builder@4.3.1(@types/node@25.2.3)(eslint@9.39.2(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3))(vue@3.5.28(typescript@5.9.3))(yaml@2.8.2)': + '@nuxt/vite-builder@4.3.1(@types/node@25.2.3)(eslint@9.39.2(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-rc.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rolldown@1.0.0-rc.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3))(vue@3.5.28(typescript@5.9.3))(yaml@2.8.2)': dependencies: '@nuxt/kit': 4.3.1(magicast@0.5.1) '@rollup/plugin-replace': 6.0.3(rollup@4.57.0) @@ -9741,11 +9628,11 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.0 mocked-exports: 0.1.1 - nuxt: 4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2) + nuxt: 4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-rc.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2) pathe: 2.0.3 pkg-types: 2.3.0 postcss: 8.5.6 - rollup-plugin-visualizer: 6.0.5(rollup@4.57.0) + rollup-plugin-visualizer: 6.0.5(rolldown@1.0.0-rc.4)(rollup@4.57.0) seroval: 1.5.0 std-env: 3.10.0 ufo: 1.6.3 @@ -9755,6 +9642,8 @@ snapshots: vite-plugin-checker: 0.12.0(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3)) vue: 3.5.28(typescript@5.9.3) vue-bundle-renderer: 2.2.0 + optionalDependencies: + rolldown: 1.0.0-rc.4 transitivePeerDependencies: - '@biomejs/biome' - '@types/node' @@ -9806,127 +9695,65 @@ snapshots: '@open-draft/until@2.1.0': {} - '@oxc-minify/binding-android-arm-eabi@0.111.0': - optional: true - '@oxc-minify/binding-android-arm-eabi@0.112.0': optional: true - '@oxc-minify/binding-android-arm64@0.111.0': - optional: true - '@oxc-minify/binding-android-arm64@0.112.0': optional: true - '@oxc-minify/binding-darwin-arm64@0.111.0': - optional: true - '@oxc-minify/binding-darwin-arm64@0.112.0': optional: true - '@oxc-minify/binding-darwin-x64@0.111.0': - optional: true - '@oxc-minify/binding-darwin-x64@0.112.0': optional: true - '@oxc-minify/binding-freebsd-x64@0.111.0': - optional: true - '@oxc-minify/binding-freebsd-x64@0.112.0': optional: true - '@oxc-minify/binding-linux-arm-gnueabihf@0.111.0': - optional: true - '@oxc-minify/binding-linux-arm-gnueabihf@0.112.0': optional: true - '@oxc-minify/binding-linux-arm-musleabihf@0.111.0': - optional: true - '@oxc-minify/binding-linux-arm-musleabihf@0.112.0': optional: true - '@oxc-minify/binding-linux-arm64-gnu@0.111.0': - optional: true - '@oxc-minify/binding-linux-arm64-gnu@0.112.0': optional: true - '@oxc-minify/binding-linux-arm64-musl@0.111.0': - optional: true - '@oxc-minify/binding-linux-arm64-musl@0.112.0': optional: true - '@oxc-minify/binding-linux-ppc64-gnu@0.111.0': - optional: true - '@oxc-minify/binding-linux-ppc64-gnu@0.112.0': optional: true - '@oxc-minify/binding-linux-riscv64-gnu@0.111.0': - optional: true - '@oxc-minify/binding-linux-riscv64-gnu@0.112.0': optional: true - '@oxc-minify/binding-linux-riscv64-musl@0.111.0': - optional: true - '@oxc-minify/binding-linux-riscv64-musl@0.112.0': optional: true - '@oxc-minify/binding-linux-s390x-gnu@0.111.0': - optional: true - '@oxc-minify/binding-linux-s390x-gnu@0.112.0': optional: true - '@oxc-minify/binding-linux-x64-gnu@0.111.0': - optional: true - '@oxc-minify/binding-linux-x64-gnu@0.112.0': optional: true - '@oxc-minify/binding-linux-x64-musl@0.111.0': - optional: true - '@oxc-minify/binding-linux-x64-musl@0.112.0': optional: true - '@oxc-minify/binding-openharmony-arm64@0.111.0': - optional: true - '@oxc-minify/binding-openharmony-arm64@0.112.0': optional: true - '@oxc-minify/binding-wasm32-wasi@0.111.0': - dependencies: - '@napi-rs/wasm-runtime': 1.1.1 - optional: true - '@oxc-minify/binding-wasm32-wasi@0.112.0': dependencies: '@napi-rs/wasm-runtime': 1.1.1 optional: true - '@oxc-minify/binding-win32-arm64-msvc@0.111.0': - optional: true - '@oxc-minify/binding-win32-arm64-msvc@0.112.0': optional: true - '@oxc-minify/binding-win32-ia32-msvc@0.111.0': - optional: true - '@oxc-minify/binding-win32-ia32-msvc@0.112.0': optional: true - '@oxc-minify/binding-win32-x64-msvc@0.111.0': - optional: true - '@oxc-minify/binding-win32-x64-msvc@0.112.0': optional: true @@ -9994,127 +9821,67 @@ snapshots: '@oxc-project/types@0.112.0': {} - '@oxc-transform/binding-android-arm-eabi@0.111.0': - optional: true + '@oxc-project/types@0.113.0': {} '@oxc-transform/binding-android-arm-eabi@0.112.0': optional: true - '@oxc-transform/binding-android-arm64@0.111.0': - optional: true - '@oxc-transform/binding-android-arm64@0.112.0': optional: true - '@oxc-transform/binding-darwin-arm64@0.111.0': - optional: true - '@oxc-transform/binding-darwin-arm64@0.112.0': optional: true - '@oxc-transform/binding-darwin-x64@0.111.0': - optional: true - '@oxc-transform/binding-darwin-x64@0.112.0': optional: true - '@oxc-transform/binding-freebsd-x64@0.111.0': - optional: true - '@oxc-transform/binding-freebsd-x64@0.112.0': optional: true - '@oxc-transform/binding-linux-arm-gnueabihf@0.111.0': - optional: true - '@oxc-transform/binding-linux-arm-gnueabihf@0.112.0': optional: true - '@oxc-transform/binding-linux-arm-musleabihf@0.111.0': - optional: true - '@oxc-transform/binding-linux-arm-musleabihf@0.112.0': optional: true - '@oxc-transform/binding-linux-arm64-gnu@0.111.0': - optional: true - '@oxc-transform/binding-linux-arm64-gnu@0.112.0': optional: true - '@oxc-transform/binding-linux-arm64-musl@0.111.0': - optional: true - '@oxc-transform/binding-linux-arm64-musl@0.112.0': optional: true - '@oxc-transform/binding-linux-ppc64-gnu@0.111.0': - optional: true - '@oxc-transform/binding-linux-ppc64-gnu@0.112.0': optional: true - '@oxc-transform/binding-linux-riscv64-gnu@0.111.0': - optional: true - '@oxc-transform/binding-linux-riscv64-gnu@0.112.0': optional: true - '@oxc-transform/binding-linux-riscv64-musl@0.111.0': - optional: true - '@oxc-transform/binding-linux-riscv64-musl@0.112.0': optional: true - '@oxc-transform/binding-linux-s390x-gnu@0.111.0': - optional: true - '@oxc-transform/binding-linux-s390x-gnu@0.112.0': optional: true - '@oxc-transform/binding-linux-x64-gnu@0.111.0': - optional: true - '@oxc-transform/binding-linux-x64-gnu@0.112.0': optional: true - '@oxc-transform/binding-linux-x64-musl@0.111.0': - optional: true - '@oxc-transform/binding-linux-x64-musl@0.112.0': optional: true - '@oxc-transform/binding-openharmony-arm64@0.111.0': - optional: true - '@oxc-transform/binding-openharmony-arm64@0.112.0': optional: true - '@oxc-transform/binding-wasm32-wasi@0.111.0': - dependencies: - '@napi-rs/wasm-runtime': 1.1.1 - optional: true - '@oxc-transform/binding-wasm32-wasi@0.112.0': dependencies: '@napi-rs/wasm-runtime': 1.1.1 optional: true - '@oxc-transform/binding-win32-arm64-msvc@0.111.0': - optional: true - '@oxc-transform/binding-win32-arm64-msvc@0.112.0': optional: true - '@oxc-transform/binding-win32-ia32-msvc@0.111.0': - optional: true - '@oxc-transform/binding-win32-ia32-msvc@0.112.0': optional: true - '@oxc-transform/binding-win32-x64-msvc@0.111.0': - optional: true - '@oxc-transform/binding-win32-x64-msvc@0.112.0': optional: true @@ -10191,6 +9958,10 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@playwright/test@1.58.2': + dependencies: + playwright: 1.58.2 + '@polka/url@1.0.0-next.29': {} '@poppinss/colors@4.1.6': @@ -10242,6 +10013,47 @@ snapshots: transitivePeerDependencies: - supports-color + '@rolldown/binding-android-arm64@1.0.0-rc.4': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-rc.4': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-rc.4': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-rc.4': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.4': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.4': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.4': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.4': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.4': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.4': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.4': + dependencies: + '@napi-rs/wasm-runtime': 1.1.1 + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.4': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.4': + optional: true + '@rolldown/pluginutils@1.0.0-beta.40': {} '@rolldown/pluginutils@1.0.0-beta.53': {} @@ -10250,6 +10062,8 @@ snapshots: '@rolldown/pluginutils@1.0.0-rc.3': {} + '@rolldown/pluginutils@1.0.0-rc.4': {} + '@rollup/plugin-alias@5.1.1(rollup@4.57.0)': optionalDependencies: rollup: 4.57.0 @@ -10675,27 +10489,27 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-start-server@1.157.17(crossws@0.4.4(srvx@0.10.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@tanstack/react-start-server@1.157.17(crossws@0.4.4(srvx@0.11.5))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@tanstack/history': 1.154.14 '@tanstack/react-router': 1.157.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tanstack/router-core': 1.157.16 '@tanstack/start-client-core': 1.157.16 - '@tanstack/start-server-core': 1.157.16(crossws@0.4.4(srvx@0.10.1)) + '@tanstack/start-server-core': 1.157.16(crossws@0.4.4(srvx@0.11.5)) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) transitivePeerDependencies: - crossws - '@tanstack/react-start@1.157.17(crossws@0.4.4(srvx@0.10.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/react-start@1.157.17(crossws@0.4.4(srvx@0.11.5))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@tanstack/react-router': 1.157.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tanstack/react-start-client': 1.157.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/react-start-server': 1.157.17(crossws@0.4.4(srvx@0.10.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/react-start-server': 1.157.17(crossws@0.4.4(srvx@0.11.5))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tanstack/router-utils': 1.154.7 '@tanstack/start-client-core': 1.157.16 - '@tanstack/start-plugin-core': 1.157.17(@tanstack/react-router@1.157.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(crossws@0.4.4(srvx@0.10.1))(vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) - '@tanstack/start-server-core': 1.157.16(crossws@0.4.4(srvx@0.10.1)) + '@tanstack/start-plugin-core': 1.157.17(@tanstack/react-router@1.157.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(crossws@0.4.4(srvx@0.11.5))(vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@tanstack/start-server-core': 1.157.16(crossws@0.4.4(srvx@0.11.5)) pathe: 2.0.3 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -10803,7 +10617,7 @@ snapshots: '@tanstack/start-fn-stubs@1.154.7': {} - '@tanstack/start-plugin-core@1.157.17(@tanstack/react-router@1.157.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(crossws@0.4.4(srvx@0.10.1))(vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/start-plugin-core@1.157.17(@tanstack/react-router@1.157.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(crossws@0.4.4(srvx@0.11.5))(vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.6 @@ -10814,7 +10628,7 @@ snapshots: '@tanstack/router-plugin': 1.157.17(@tanstack/react-router@1.157.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@tanstack/router-utils': 1.154.7 '@tanstack/start-client-core': 1.157.16 - '@tanstack/start-server-core': 1.157.16(crossws@0.4.4(srvx@0.10.1)) + '@tanstack/start-server-core': 1.157.16(crossws@0.4.4(srvx@0.11.5)) babel-dead-code-elimination: 1.0.12 cheerio: 1.2.0 exsolve: 1.0.8 @@ -10834,13 +10648,13 @@ snapshots: - vite-plugin-solid - webpack - '@tanstack/start-server-core@1.157.16(crossws@0.4.4(srvx@0.10.1))': + '@tanstack/start-server-core@1.157.16(crossws@0.4.4(srvx@0.11.5))': dependencies: '@tanstack/history': 1.154.14 '@tanstack/router-core': 1.157.16 '@tanstack/start-client-core': 1.157.16 '@tanstack/start-storage-context': 1.157.16 - h3-v2: h3@2.0.1-rc.11(crossws@0.4.4(srvx@0.10.1)) + h3-v2: h3@2.0.1-rc.11(crossws@0.4.4(srvx@0.11.5)) seroval: 1.5.0 tiny-invariant: 1.3.3 transitivePeerDependencies: @@ -12165,9 +11979,9 @@ snapshots: dependencies: uncrypto: 0.1.3 - crossws@0.4.4(srvx@0.10.1): + crossws@0.4.4(srvx@0.11.5): optionalDependencies: - srvx: 0.10.1 + srvx: 0.11.5 css-declaration-sorter@7.3.1(postcss@8.5.6): dependencies: @@ -12637,7 +12451,7 @@ snapshots: eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) @@ -12674,7 +12488,7 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -12689,7 +12503,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -13062,6 +12876,9 @@ snapshots: jsonfile: 6.2.0 universalify: 2.0.1 + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -13223,12 +13040,19 @@ snapshots: ufo: 1.6.3 uncrypto: 0.1.3 - h3@2.0.1-rc.11(crossws@0.4.4(srvx@0.10.1)): + h3@2.0.1-rc.11(crossws@0.4.4(srvx@0.11.5)): dependencies: rou3: 0.7.12 srvx: 0.10.1 optionalDependencies: - crossws: 0.4.4(srvx@0.10.1) + crossws: 0.4.4(srvx@0.11.5) + + h3@2.0.1-rc.14(crossws@0.4.4(srvx@0.11.5)): + dependencies: + rou3: 0.7.12 + srvx: 0.11.5 + optionalDependencies: + crossws: 0.4.4(srvx@0.11.5) has-bigints@1.1.0: {} @@ -14073,7 +13897,7 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - 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.58.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: '@next/env': 16.1.6 '@swc/helpers': 0.5.15 @@ -14092,12 +13916,13 @@ 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.58.2 sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + next@16.1.6(@babel/core@7.29.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: '@next/env': 16.1.6 '@swc/helpers': 0.5.15 @@ -14116,31 +13941,32 @@ 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.58.2 sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - nf3@0.3.7: {} + nf3@0.3.10: {} - nitro-nightly@3.0.1-20260128-211656-ae83c97e(chokidar@5.0.0)(ioredis@5.9.2)(lru-cache@11.2.5)(rollup@4.57.0)(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): + nitro-nightly@3.0.1-20260217-092337-b28fa21a(chokidar@5.0.0)(dotenv@17.2.3)(giget@3.1.2)(ioredis@5.9.2)(jiti@2.6.1)(lru-cache@11.2.5)(vite@7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: consola: 3.4.2 - crossws: 0.4.4(srvx@0.10.1) + crossws: 0.4.4(srvx@0.11.5) db0: 0.3.4 - h3: 2.0.1-rc.11(crossws@0.4.4(srvx@0.10.1)) - jiti: 2.6.1 - nf3: 0.3.7 + h3: 2.0.1-rc.14(crossws@0.4.4(srvx@0.11.5)) + hookable: 6.0.1 + nf3: 0.3.10 ofetch: 2.0.0-alpha.3 ohash: 2.0.11 - oxc-minify: 0.111.0 - oxc-transform: 0.111.0 - srvx: 0.10.1 - undici: 7.19.2 + rolldown: 1.0.0-rc.4 + srvx: 0.11.5 unenv: 2.0.0-rc.24 unstorage: 2.0.0-alpha.5(chokidar@5.0.0)(db0@0.3.4)(ioredis@5.9.2)(lru-cache@11.2.5)(ofetch@2.0.0-alpha.3) optionalDependencies: - rollup: 4.57.0 + dotenv: 17.2.3 + giget: 3.1.2 + jiti: 2.6.1 vite: 7.3.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@azure/app-configuration' @@ -14171,7 +13997,7 @@ snapshots: - sqlite3 - uploadthing - nitropack@2.13.1: + nitropack@2.13.1(rolldown@1.0.0-rc.4): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@rollup/plugin-alias': 6.0.0(rollup@4.57.0) @@ -14224,7 +14050,7 @@ snapshots: pretty-bytes: 7.1.0 radix3: 1.1.2 rollup: 4.57.0 - rollup-plugin-visualizer: 6.0.5(rollup@4.57.0) + rollup-plugin-visualizer: 6.0.5(rolldown@1.0.0-rc.4)(rollup@4.57.0) scule: 1.3.0 semver: 7.7.4 serve-placeholder: 2.0.2 @@ -14325,16 +14151,16 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2): + nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-rc.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2): dependencies: '@dxup/nuxt': 0.3.2(magicast@0.5.1) '@nuxt/cli': 3.33.1(@nuxt/schema@4.3.1)(cac@6.7.14)(magicast@0.5.1) '@nuxt/devtools': 3.1.1(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)) '@nuxt/kit': 4.3.1(magicast@0.5.1) - '@nuxt/nitro-server': 4.3.1(db0@0.3.4)(ioredis@5.9.2)(magicast@0.5.1)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3) + '@nuxt/nitro-server': 4.3.1(db0@0.3.4)(ioredis@5.9.2)(magicast@0.5.1)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-rc.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(rolldown@1.0.0-rc.4)(typescript@5.9.3) '@nuxt/schema': 4.3.1 '@nuxt/telemetry': 2.7.0(@nuxt/kit@4.3.1(magicast@0.5.1)) - '@nuxt/vite-builder': 4.3.1(@types/node@25.2.3)(eslint@9.39.2(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3))(vue@3.5.28(typescript@5.9.3))(yaml@2.8.2) + '@nuxt/vite-builder': 4.3.1(@types/node@25.2.3)(eslint@9.39.2(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-rc.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rolldown@1.0.0-rc.4)(rollup@4.57.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3))(vue@3.5.28(typescript@5.9.3))(yaml@2.8.2) '@unhead/vue': 2.1.4(vue@3.5.28(typescript@5.9.3)) '@vue/shared': 3.5.27 c12: 3.3.3(magicast@0.5.1) @@ -14591,29 +14417,6 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - oxc-minify@0.111.0: - optionalDependencies: - '@oxc-minify/binding-android-arm-eabi': 0.111.0 - '@oxc-minify/binding-android-arm64': 0.111.0 - '@oxc-minify/binding-darwin-arm64': 0.111.0 - '@oxc-minify/binding-darwin-x64': 0.111.0 - '@oxc-minify/binding-freebsd-x64': 0.111.0 - '@oxc-minify/binding-linux-arm-gnueabihf': 0.111.0 - '@oxc-minify/binding-linux-arm-musleabihf': 0.111.0 - '@oxc-minify/binding-linux-arm64-gnu': 0.111.0 - '@oxc-minify/binding-linux-arm64-musl': 0.111.0 - '@oxc-minify/binding-linux-ppc64-gnu': 0.111.0 - '@oxc-minify/binding-linux-riscv64-gnu': 0.111.0 - '@oxc-minify/binding-linux-riscv64-musl': 0.111.0 - '@oxc-minify/binding-linux-s390x-gnu': 0.111.0 - '@oxc-minify/binding-linux-x64-gnu': 0.111.0 - '@oxc-minify/binding-linux-x64-musl': 0.111.0 - '@oxc-minify/binding-openharmony-arm64': 0.111.0 - '@oxc-minify/binding-wasm32-wasi': 0.111.0 - '@oxc-minify/binding-win32-arm64-msvc': 0.111.0 - '@oxc-minify/binding-win32-ia32-msvc': 0.111.0 - '@oxc-minify/binding-win32-x64-msvc': 0.111.0 - oxc-minify@0.112.0: optionalDependencies: '@oxc-minify/binding-android-arm-eabi': 0.112.0 @@ -14662,29 +14465,6 @@ snapshots: '@oxc-parser/binding-win32-ia32-msvc': 0.112.0 '@oxc-parser/binding-win32-x64-msvc': 0.112.0 - oxc-transform@0.111.0: - optionalDependencies: - '@oxc-transform/binding-android-arm-eabi': 0.111.0 - '@oxc-transform/binding-android-arm64': 0.111.0 - '@oxc-transform/binding-darwin-arm64': 0.111.0 - '@oxc-transform/binding-darwin-x64': 0.111.0 - '@oxc-transform/binding-freebsd-x64': 0.111.0 - '@oxc-transform/binding-linux-arm-gnueabihf': 0.111.0 - '@oxc-transform/binding-linux-arm-musleabihf': 0.111.0 - '@oxc-transform/binding-linux-arm64-gnu': 0.111.0 - '@oxc-transform/binding-linux-arm64-musl': 0.111.0 - '@oxc-transform/binding-linux-ppc64-gnu': 0.111.0 - '@oxc-transform/binding-linux-riscv64-gnu': 0.111.0 - '@oxc-transform/binding-linux-riscv64-musl': 0.111.0 - '@oxc-transform/binding-linux-s390x-gnu': 0.111.0 - '@oxc-transform/binding-linux-x64-gnu': 0.111.0 - '@oxc-transform/binding-linux-x64-musl': 0.111.0 - '@oxc-transform/binding-openharmony-arm64': 0.111.0 - '@oxc-transform/binding-wasm32-wasi': 0.111.0 - '@oxc-transform/binding-win32-arm64-msvc': 0.111.0 - '@oxc-transform/binding-win32-ia32-msvc': 0.111.0 - '@oxc-transform/binding-win32-x64-msvc': 0.111.0 - oxc-transform@0.112.0: optionalDependencies: '@oxc-transform/binding-android-arm-eabi': 0.112.0 @@ -14813,6 +14593,14 @@ snapshots: exsolve: 1.0.8 pathe: 2.0.3 + playwright-core@1.58.2: {} + + playwright@1.58.2: + dependencies: + playwright-core: 1.58.2 + optionalDependencies: + fsevents: 2.3.2 + possible-typed-array-names@1.1.0: {} postcss-calc@10.1.1(postcss@8.5.6): @@ -15221,6 +15009,25 @@ snapshots: rfdc@1.4.1: {} + rolldown@1.0.0-rc.4: + dependencies: + '@oxc-project/types': 0.113.0 + '@rolldown/pluginutils': 1.0.0-rc.4 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.4 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.4 + '@rolldown/binding-darwin-x64': 1.0.0-rc.4 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.4 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.4 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.4 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.4 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.4 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.4 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.4 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.4 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.4 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.4 + rollup-plugin-dts@6.3.0(rollup@4.57.0)(typescript@5.9.3): dependencies: magic-string: 0.30.21 @@ -15229,13 +15036,14 @@ snapshots: optionalDependencies: '@babel/code-frame': 7.29.0 - rollup-plugin-visualizer@6.0.5(rollup@4.57.0): + rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.4)(rollup@4.57.0): dependencies: open: 8.4.2 picomatch: 4.0.3 source-map: 0.7.6 yargs: 17.7.2 optionalDependencies: + rolldown: 1.0.0-rc.4 rollup: 4.57.0 rollup@4.57.0: @@ -15599,6 +15407,8 @@ snapshots: srvx@0.11.2: {} + srvx@0.11.5: {} + stable-hash@0.0.5: {} stack-trace@1.0.0-pre2: {} diff --git a/src/ui/App.tsx b/src/ui/App.tsx index 34d3c94..2875262 100644 --- a/src/ui/App.tsx +++ b/src/ui/App.tsx @@ -94,7 +94,7 @@ export default function App() { const { groups, loading } = useAssets(selectedType, undefined, filterParams) const { stats } = useStats() - const { results, searching, search, clear } = useSearch(filterParams) + const { results, searching, searched, search, clear } = useSearch(filterParams) const { isIgnored } = useIgnoredAssets() const { isDeleting, bulkDelete } = useBulkOperations() const [searchQuery, setSearchQuery] = useState('') @@ -158,7 +158,7 @@ export default function App() { const displayGroups = useMemo(() => { let baseGroups = groups - if (searchQuery && results.length > 0) { + if (searchQuery && (results.length > 0 || (searched && !searching))) { const grouped = new Map() results.forEach(asset => { const dir = asset.directory @@ -206,7 +206,7 @@ export default function App() { ...group, assets: sortAssets(group.assets, sortOption) })) - }, [groups, results, searchQuery, sortOption, showUnusedOnly, showDuplicatesOnly, isIgnored]) + }, [groups, results, searchQuery, searched, searching, sortOption, showUnusedOnly, showDuplicatesOnly, isIgnored]) const flatAssetList = useMemo(() => { return displayGroups.flatMap(group => group.assets) diff --git a/src/ui/hooks/useSearch.test.ts b/src/ui/hooks/useSearch.test.ts index 0cffbdb..cc97e34 100644 --- a/src/ui/hooks/useSearch.test.ts +++ b/src/ui/hooks/useSearch.test.ts @@ -35,6 +35,7 @@ describe('useSearch', () => { expect(result.current.results).toEqual([]) expect(result.current.searching).toBe(false) + expect(result.current.searched).toBe(false) expect(result.current.search).toBeInstanceOf(Function) expect(result.current.clear).toBeInstanceOf(Function) }) @@ -49,6 +50,7 @@ describe('useSearch', () => { expect(fetch).toHaveBeenCalledWith('/__asset_manager__/api/search?q=logo') expect(result.current.results).toHaveLength(1) expect(result.current.results[0].name).toBe('logo.png') + expect(result.current.searched).toBe(true) }) it('should encode query parameters', async () => { @@ -151,12 +153,14 @@ describe('useSearch', () => { }) expect(result.current.results).toHaveLength(1) + expect(result.current.searched).toBe(true) act(() => { result.current.clear() }) expect(result.current.results).toEqual([]) + expect(result.current.searched).toBe(false) }) it('should handle special characters in query', async () => { diff --git a/src/ui/hooks/useSearch.ts b/src/ui/hooks/useSearch.ts index f379a49..8496319 100644 --- a/src/ui/hooks/useSearch.ts +++ b/src/ui/hooks/useSearch.ts @@ -5,6 +5,7 @@ import type { Asset, UseSearchResult } from '../types' export function useSearch(advancedParams?: URLSearchParams): UseSearchResult { const [results, setResults] = useState([]) const [searching, setSearching] = useState(false) + const [searched, setSearched] = useState(false) const advancedParamsString = advancedParams?.toString() ?? '' @@ -32,6 +33,7 @@ export function useSearch(advancedParams?: URLSearchParams): UseSearchResult { setResults([]) } finally { setSearching(false) + setSearched(true) } }, [advancedParamsString] @@ -39,7 +41,8 @@ export function useSearch(advancedParams?: URLSearchParams): UseSearchResult { const clear = useCallback(() => { setResults([]) + setSearched(false) }, []) - return { results, searching, search, clear } + return { results, searching, searched, search, clear } } diff --git a/src/ui/types/index.ts b/src/ui/types/index.ts index 29186b4..31d3336 100644 --- a/src/ui/types/index.ts +++ b/src/ui/types/index.ts @@ -61,6 +61,7 @@ export interface UseAssetsResult { export interface UseSearchResult { results: Asset[] searching: boolean + searched: boolean search: (query: string) => Promise clear: () => void } From 3b95254504b41e1333af66464609a6448310159b Mon Sep 17 00:00:00 2001 From: Ejiro Asiuwhu Date: Tue, 17 Feb 2026 18:12:20 +0100 Subject: [PATCH 2/5] fix(ci): specify packageManager for pnpm/action-setup --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 6678c3c..3f7bde4 100644 --- a/package.json +++ b/package.json @@ -131,6 +131,7 @@ "vite": "^7.3.1", "vitest": "^4.0.18" }, + "packageManager": "pnpm@10.18.0", "pnpm": { "onlyBuiltDependencies": [ "esbuild", From d51a4de12a914d5d59eeaaff8399d41640fde49e Mon Sep 17 00:00:00 2001 From: Ejiro Asiuwhu Date: Tue, 17 Feb 2026 18:13:46 +0100 Subject: [PATCH 3/5] chore: update pnpm version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3f7bde4..c97f3b6 100644 --- a/package.json +++ b/package.json @@ -131,7 +131,7 @@ "vite": "^7.3.1", "vitest": "^4.0.18" }, - "packageManager": "pnpm@10.18.0", + "packageManager": "pnpm@10.30.0", "pnpm": { "onlyBuiltDependencies": [ "esbuild", From a79a979c73e90cf430c555f2f7f7ce05557bf724 Mon Sep 17 00:00:00 2001 From: Ejiro Asiuwhu Date: Tue, 17 Feb 2026 18:15:53 +0100 Subject: [PATCH 4/5] fix(ci): skip postinstall scripts to avoid build-order issue Nuxt playground's postinstall runs nuxt prepare which requires @vite-asset-manager/nuxt to be built, but packages aren't built until after install. Use --ignore-scripts and build separately. --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 239dc5c..d756c0d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,7 @@ jobs: cache: 'pnpm' - name: Install dependencies - run: pnpm install + run: pnpm install --ignore-scripts - name: Build packages run: pnpm run build:packages @@ -49,7 +49,7 @@ jobs: cache: 'pnpm' - name: Install dependencies - run: pnpm install + run: pnpm install --ignore-scripts - name: Install Playwright browsers run: pnpm exec playwright install chromium --with-deps From a38f89e8b5ec4a6da0db075ff602d92c14255384 Mon Sep 17 00:00:00 2001 From: Ejiro Asiuwhu Date: Tue, 17 Feb 2026 18:24:03 +0100 Subject: [PATCH 5/5] fix(ci): use both github and html reporters for artifact upload --- e2e/playwright.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/playwright.config.ts b/e2e/playwright.config.ts index e9c52a7..e826ae9 100644 --- a/e2e/playwright.config.ts +++ b/e2e/playwright.config.ts @@ -10,7 +10,7 @@ export default defineConfig({ forbidOnly: !!process.env.CI, retries: process.env.CI ? 2 : 0, workers: process.env.CI ? 1 : undefined, - reporter: process.env.CI ? 'github' : 'html', + reporter: process.env.CI ? [['github'], ['html', { open: 'never' }]] : 'html', timeout: 30_000, use: {