From eee0f432e75f6aa544e073a085dee5d6cff93919 Mon Sep 17 00:00:00 2001 From: Esdras Renan Date: Wed, 22 Oct 2025 17:19:12 -0300 Subject: [PATCH] chore: document and stabilize vitest browser setup --- README.md | 1 + docs/testes-vitest.md | 70 + package.json | 10 +- pnpm-lock.yaml | 1338 +++++++++++++---- .../api/admin/machines/delete/route.test.ts | 40 +- .../CTA-button-snapshot-1.png | Bin 0 -> 43455 bytes .../cta-button-chromium-linux.png | Bin 0 -> 94214 bytes tests/browser/example.browser.test.ts | 40 + tests/setup.browser.ts | 2 + vitest.config.mts | 51 +- vitest.setup.node.ts | 8 + vitest.setup.ts | 3 - 12 files changed, 1238 insertions(+), 325 deletions(-) create mode 100644 docs/testes-vitest.md create mode 100644 tests/browser/__screenshots__/example.browser.test.ts/CTA-button-snapshot-1.png create mode 100644 tests/browser/__screenshots__/example.browser.test.ts/cta-button-chromium-linux.png create mode 100644 tests/browser/example.browser.test.ts create mode 100644 tests/setup.browser.ts create mode 100644 vitest.setup.node.ts delete mode 100644 vitest.setup.ts diff --git a/README.md b/README.md index b237ae1..bb5f336 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ Aplicação Next.js 15 com Convex e Better Auth para gestão de tickets da Rever - Índice de docs: `docs/README.md` - Operações (produção): `docs/operations.md` - Guia de DEV: `docs/DEV.md` +- Testes automatizados (Vitest/Playwright): `docs/testes-vitest.md` - Stack Swarm: `stack.yml` (roteado por Traefik, rede `traefik_public`). ### Variáveis de ambiente diff --git a/docs/testes-vitest.md b/docs/testes-vitest.md new file mode 100644 index 0000000..48086be --- /dev/null +++ b/docs/testes-vitest.md @@ -0,0 +1,70 @@ +# Guia de Testes com Vitest 4 + +Este documento resume a configuração atual de testes e como aproveitá-la para automatizar novas verificações. + +## Comandos principais + +- `pnpm test` → roda a suíte unitária em ambiente Node/JSdom. +- `pnpm test:browser` → executa os testes de navegador via Playwright (Chromium headless). +- `pnpm test:all` → executa as duas suítes de uma vez (requer Playwright instalado). + +> Sempre que adicionar novos testes, priorize mantê-los compatíveis com esses dois ambientes. + +## Pré-requisitos + +1. Dependências JavaScript já estão listadas em `package.json` (`vitest`, `@vitest/browser-playwright`, `playwright`, `jsdom`, etc.). +2. Baixe os binários do Playwright uma vez: + ```bash + pnpm exec playwright install chromium + ``` +3. Em ambientes Linux “puros”, instale as bibliotecas de sistema recomendadas: + ```bash + sudo apt-get install libnspr4 libnss3 libasound2t64 + # ou + sudo pnpm exec playwright install-deps + ``` + +Se o Playwright avisar sobre dependências ausentes ao rodar `pnpm test:browser`, instale-as e repita o comando. + +## Estrutura de setup + +- `vitest.setup.node.ts` → executado apenas na suíte Node. Aqui é seguro acessar `process`, configurar variáveis de ambiente, carregar `tsconfig-paths/register`, etc. +- `tests/setup.browser.ts` → setup vazio para a suíte de navegador. Não use `process` ou APIs do Node aqui; adicione polyfills/mocks específicos do browser quando necessário. + +O arquivo `vitest.config.mts` seleciona automaticamente o setup correto com base na env `VITEST_BROWSER`. + +```ts +setupFiles: process.env.VITEST_BROWSER + ? ["./tests/setup.browser.ts"] + : ["./vitest.setup.node.ts"], +``` + +## Boas práticas para novos testes + +- **Aliases (`@/`)**: continuam funcionando em ambos os ambientes graças ao `vite-tsconfig-paths`. +- **Variáveis de ambiente no browser**: use `import.meta.env.VITE_*`. Evite `process.env` no código que será executado no navegador. +- **Mocks Playwright**: para testes de browser, use os helpers de `vitest/browser`. Exemplo: + ```ts + import { expect, test } from "vitest" + import { page } from "vitest/browser" + + test("exemplo", async () => { + await page.goto("https://example.com") + await expect(page.getByRole("heading", { level: 1 })).toBeVisible() + }) + ``` + No nosso exemplo atual (`tests/browser/example.browser.test.ts`) manipulamos o DOM diretamente e geramos screenshots com `expect(...).toMatchScreenshot(...)`. +- **Snapshots visuais**: os arquivos de referência ficam em `tests/browser/__screenshots__/`. Ao criar ou atualizar um snapshot, revise e commite apenas se estiver correto. +- **Mocks que dependem de `vi.fn()`**: quando mockar classes/constructores (ex.: `ConvexHttpClient`), use funções nomeadas ou `class` ao definir a implementação para evitar os erros do Vitest 4 (“requires function or class”). + +## Fluxo sugerido no dia a dia + +1. Rode `pnpm test` localmente antes de abrir PRs. +2. Para alterações visuais/lógicas que afetem UI, adicione/atualize um teste em `tests/browser` e valide com `pnpm test:browser`. +3. Se novos snapshots forem criados ou alterados, confirme visualmente e inclua os arquivos em commit. +4. Para tarefas de automação futuras (por exemplo, smoke-tests que renderizam componentes críticos), utilize a mesma estrutura: + - Setup mínimo no `tests/setup.browser.ts`. + - Testes localizados em `tests/browser/**.browser.test.ts`. + - Utilização de Playwright para interagir com a UI e gerar screenshots/asserts. + +Seguindo este guia, conseguimos manter a suíte rápida no ambiente Node e, ao mesmo tempo, aproveitar o modo browser do Vitest 4 para validações visuais e regressões de UI. Quilas regressões detectadas automaticamente economizam tempo de QA manual e agilizam o ciclo de entrega.*** diff --git a/package.json b/package.json index b1ff552..0bf5490 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,8 @@ "prisma:generate": "prisma generate", "convex:dev": "convex dev", "test": "vitest --run --passWithNoTests", + "test:browser": "cross-env VITEST_BROWSER=true vitest --run --browser.headless tests/browser/example.browser.test.ts --passWithNoTests", + "test:all": "cross-env VITEST_BROWSER=true vitest --run --passWithNoTests", "auth:seed": "node scripts/seed-auth.mjs", "queues:ensure": "node scripts/ensure-default-queues.mjs", "desktop:dev": "pnpm --filter appsdesktop tauri dev", @@ -80,14 +82,20 @@ "@types/react-dom": "^18", "@types/sanitize-html": "^2.16.0", "@types/three": "^0.180.0", + "@vitest/browser-playwright": "^4.0.1", "better-sqlite3": "^12.4.1", + "cross-env": "^10.1.0", "eslint": "^9", "eslint-config-next": "^16.0.0", "eslint-plugin-react-hooks": "^5.0.0", + "jsdom": "^27.0.1", + "playwright": "^1.56.1", "prisma": "^6.16.2", "tailwindcss": "^4", + "tsconfig-paths": "^4.2.0", "tw-animate-css": "^1.3.8", "typescript": "^5", - "vitest": "^2.1.4" + "vite-tsconfig-paths": "^5.1.4", + "vitest": "^4.0.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0656abb..df28ec2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -100,7 +100,7 @@ importers: version: 3.6.5 better-auth: specifier: ^1.3.26 - version: 1.3.26(next@16.0.0(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.3.26(next@16.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -121,7 +121,7 @@ importers: version: 0.544.0(react@19.2.0) next: specifier: ^16.0.0 - version: 16.0.0(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 16.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -157,7 +157,7 @@ importers: version: 0.180.0 unicornstudio-react: specifier: ^1.4.31 - version: 1.4.31(next@16.0.0(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.4.31(next@16.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) vaul: specifier: ^1.1.2 version: 1.1.2(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -195,9 +195,15 @@ importers: '@types/three': specifier: ^0.180.0 version: 0.180.0 + '@vitest/browser-playwright': + specifier: ^4.0.1 + version: 4.0.1(playwright@1.56.1)(vite@7.1.11(@types/node@20.19.19)(jiti@2.6.1)(lightningcss@1.30.1))(vitest@4.0.1) better-sqlite3: specifier: ^12.4.1 version: 12.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 eslint: specifier: ^9 version: 9.37.0(jiti@2.6.1) @@ -207,21 +213,33 @@ importers: eslint-plugin-react-hooks: specifier: ^5.0.0 version: 5.2.0(eslint@9.37.0(jiti@2.6.1)) + jsdom: + specifier: ^27.0.1 + version: 27.0.1(postcss@8.5.6) + playwright: + specifier: ^1.56.1 + version: 1.56.1 prisma: specifier: ^6.16.2 version: 6.16.3(typescript@5.9.3) tailwindcss: specifier: ^4 version: 4.1.14 + tsconfig-paths: + specifier: ^4.2.0 + version: 4.2.0 tw-animate-css: specifier: ^1.3.8 version: 1.4.0 typescript: specifier: ^5 version: 5.9.3 + vite-tsconfig-paths: + specifier: ^5.1.4 + version: 5.1.4(typescript@5.9.3)(vite@7.1.11(@types/node@20.19.19)(jiti@2.6.1)(lightningcss@1.30.1)) vitest: - specifier: ^2.1.4 - version: 2.1.9(@types/node@20.19.19)(lightningcss@1.30.1) + specifier: ^4.0.1 + version: 4.0.1(@types/node@20.19.19)(@vitest/browser-playwright@4.0.1)(jiti@2.6.1)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.1) apps/desktop: dependencies: @@ -275,6 +293,15 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} + '@asamuzakjp/css-color@4.0.5': + resolution: {integrity: sha512-lMrXidNhPGsDjytDy11Vwlb6OIGrT3CmLg3VWNFyWkLWtijKl7xjvForlh8vuj0SHGjgl4qZEQzUmYTeQA2JFQ==} + + '@asamuzakjp/dom-selector@6.7.2': + resolution: {integrity: sha512-ccKogJI+0aiDhOahdjANIc9SDixSud1gbwdVrhn7kMopAtLXqsz9MKmQQtIl6Y5aC2IYq+j4dz/oedL2AVMmVQ==} + + '@asamuzakjp/nwsapi@2.3.9': + resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} + '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -371,6 +398,40 @@ packages: '@better-fetch/fetch@1.1.18': resolution: {integrity: sha512-rEFOE1MYIsBmoMJtQbl32PGHHXuG2hDxvEd7rUHE0vCBoFQVSDqaVs9hkZEtHCxRoY+CljXKFCOuJ8uxqw1LcA==} + '@csstools/color-helpers@5.1.0': + resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} + engines: {node: '>=18'} + + '@csstools/css-calc@2.1.4': + resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-color-parser@3.1.0': + resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-parser-algorithms@3.0.5': + resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-syntax-patches-for-csstree@1.0.14': + resolution: {integrity: sha512-zSlIxa20WvMojjpCSy8WrNpcZ61RqfTfX3XTaOeVlGJrt/8HF3YbzgFZa01yTbT4GWQLwfTcC3EB8i3XnB647Q==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/css-tokenizer@3.0.4': + resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} + engines: {node: '>=18'} + '@dimforge/rapier3d-compat@0.12.0': resolution: {integrity: sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==} @@ -411,9 +472,12 @@ packages: '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} + '@epic-web/invariant@1.0.0': + resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} + + '@esbuild/aix-ppc64@0.25.11': + resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} + engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -423,9 +487,9 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} + '@esbuild/android-arm64@0.25.11': + resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} + engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -435,9 +499,9 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} + '@esbuild/android-arm@0.25.11': + resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} + engines: {node: '>=18'} cpu: [arm] os: [android] @@ -447,9 +511,9 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} + '@esbuild/android-x64@0.25.11': + resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} + engines: {node: '>=18'} cpu: [x64] os: [android] @@ -459,9 +523,9 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} + '@esbuild/darwin-arm64@0.25.11': + resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -471,9 +535,9 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} + '@esbuild/darwin-x64@0.25.11': + resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -483,9 +547,9 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} + '@esbuild/freebsd-arm64@0.25.11': + resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -495,9 +559,9 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} + '@esbuild/freebsd-x64@0.25.11': + resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -507,9 +571,9 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} + '@esbuild/linux-arm64@0.25.11': + resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -519,9 +583,9 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} + '@esbuild/linux-arm@0.25.11': + resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} + engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -531,9 +595,9 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} + '@esbuild/linux-ia32@0.25.11': + resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -543,9 +607,9 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} + '@esbuild/linux-loong64@0.25.11': + resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -555,9 +619,9 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} + '@esbuild/linux-mips64el@0.25.11': + resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -567,9 +631,9 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} + '@esbuild/linux-ppc64@0.25.11': + resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -579,9 +643,9 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} + '@esbuild/linux-riscv64@0.25.11': + resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -591,9 +655,9 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} + '@esbuild/linux-s390x@0.25.11': + resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -603,9 +667,9 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} + '@esbuild/linux-x64@0.25.11': + resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} + engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -615,15 +679,21 @@ packages: cpu: [x64] os: [linux] + '@esbuild/netbsd-arm64@0.25.11': + resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.25.4': resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} + '@esbuild/netbsd-x64@0.25.11': + resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -633,15 +703,21 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/openbsd-arm64@0.25.11': + resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.25.4': resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} + '@esbuild/openbsd-x64@0.25.11': + resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -651,9 +727,15 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} + '@esbuild/openharmony-arm64@0.25.11': + resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.11': + resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -663,9 +745,9 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} + '@esbuild/win32-arm64@0.25.11': + resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -675,9 +757,9 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} + '@esbuild/win32-ia32@0.25.11': + resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -687,9 +769,9 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} + '@esbuild/win32-x64@0.25.11': + resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} + engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -1058,6 +1140,9 @@ packages: '@peculiar/x509@1.14.0': resolution: {integrity: sha512-Yc4PDxN3OrxUPiXgU63c+ZRXKGE8YKF2McTciYhUHFtHVB0KMnjeFSU0qpztGhsp4P0uKix4+J2xEpIEDu8oXg==} + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + '@prisma/client@6.16.3': resolution: {integrity: sha512-JfNfAtXG+/lIopsvoZlZiH2k5yNx87mcTS4t9/S5oufM1nKdXYxOvpDC1XoTCFBa5cQh7uXnbMPsmZrwZY80xw==} engines: {node: '>=18.18'} @@ -1636,111 +1721,221 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.52.5': + resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.52.4': resolution: {integrity: sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.52.5': + resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.52.4': resolution: {integrity: sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.52.5': + resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.52.4': resolution: {integrity: sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.52.5': + resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-freebsd-arm64@4.52.4': resolution: {integrity: sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==} cpu: [arm64] os: [freebsd] + '@rollup/rollup-freebsd-arm64@4.52.5': + resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} + cpu: [arm64] + os: [freebsd] + '@rollup/rollup-freebsd-x64@4.52.4': resolution: {integrity: sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==} cpu: [x64] os: [freebsd] + '@rollup/rollup-freebsd-x64@4.52.5': + resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} + cpu: [x64] + os: [freebsd] + '@rollup/rollup-linux-arm-gnueabihf@4.52.4': resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.52.4': resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.52.5': + resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.52.4': resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.52.5': + resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.52.4': resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.52.5': + resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-loong64-gnu@4.52.4': resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==} cpu: [loong64] os: [linux] + '@rollup/rollup-linux-loong64-gnu@4.52.5': + resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} + cpu: [loong64] + os: [linux] + '@rollup/rollup-linux-ppc64-gnu@4.52.4': resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-ppc64-gnu@4.52.5': + resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.52.4': resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.52.5': + resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-riscv64-musl@4.52.4': resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-musl@4.52.5': + resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.52.4': resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.52.5': + resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.52.4': resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.52.5': + resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.52.4': resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.52.5': + resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} + cpu: [x64] + os: [linux] + '@rollup/rollup-openharmony-arm64@4.52.4': resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==} cpu: [arm64] os: [openharmony] + '@rollup/rollup-openharmony-arm64@4.52.5': + resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} + cpu: [arm64] + os: [openharmony] + '@rollup/rollup-win32-arm64-msvc@4.52.4': resolution: {integrity: sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.52.5': + resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.52.4': resolution: {integrity: sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.52.5': + resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-gnu@4.52.4': resolution: {integrity: sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-gnu@4.52.5': + resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} + cpu: [x64] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.52.4': resolution: {integrity: sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.52.5': + resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} + cpu: [x64] + os: [win32] + '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} @@ -2122,6 +2317,9 @@ 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/d3-array@3.2.2': resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} @@ -2149,6 +2347,9 @@ packages: '@types/d3-timer@3.0.2': resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -2380,34 +2581,45 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - '@vitest/expect@2.1.9': - resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} + '@vitest/browser-playwright@4.0.1': + resolution: {integrity: sha512-hp1z7yfubB6saK0NCUiRUjvVWoomCeUIUcnvdzr8tRTe6NjFjgeJqc6bt+iG59OqcIx+acneR+OJuB3P8ajiFg==} + peerDependencies: + playwright: '*' + vitest: 4.0.1 - '@vitest/mocker@2.1.9': - resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==} + '@vitest/browser@4.0.1': + resolution: {integrity: sha512-nXESrLVnYEaFwqPAYa8cCrpTQMAatO1OepV/i27RVz9uawKAQSsSH7T8wjxouKXZAr8dBITYJmcIZNBbDNFn/A==} + peerDependencies: + vitest: 4.0.1 + + '@vitest/expect@4.0.1': + resolution: {integrity: sha512-KtvGLN/IWoZfg68JF2q/zbDEo+UJTWnc7suYJ8RF+ZTBeBcBz4NIOJDxO4Q3bEY9GsOYhgy5cOevcVPFh4+V7g==} + + '@vitest/mocker@4.0.1': + resolution: {integrity: sha512-fwmvg8YvwSAE41Hyhul7dL4UzPhG+k2VaZCcL+aHagLx4qlNQgKYTw7coF4YdjAxSBBt0b408gQFYMX1Qeqweg==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 + vite: ^6.0.0 || ^7.0.0-0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@2.1.9': - resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} + '@vitest/pretty-format@4.0.1': + resolution: {integrity: sha512-6nq3JY/zQ91+oX1vd4fajiVNyA/HMhaF9cOw5P9cQi6ML7PRi7ilVaQ77PulF+4kvUKr9bcLm9GoAtwlVFbGzw==} - '@vitest/runner@2.1.9': - resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==} + '@vitest/runner@4.0.1': + resolution: {integrity: sha512-nxUoWmw7ZX2OiSNwolJeSOOzrrR/o79wRTwP7HhiW/lDFwQHtWMj9snMhrdvccFqanvI8897E81eXjgDbrRvqA==} - '@vitest/snapshot@2.1.9': - resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} + '@vitest/snapshot@4.0.1': + resolution: {integrity: sha512-CvfsEWutEIN/Z9ScXYup7YwlPeK9JICrV7FN9p3pVytsyh+aCHAH0PUi//YlTiQ7T8qYxJYpUrAwZL9XqmZ5ZA==} - '@vitest/spy@2.1.9': - resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==} + '@vitest/spy@4.0.1': + resolution: {integrity: sha512-Hj0/TBQ2EN72wDpfKiUf63mRCkE0ZiSGXGeDDvW9T3LBKVVApItd0GyQLDBIe03kWbyK9gOTEbJVVWthcLFzCg==} - '@vitest/utils@2.1.9': - resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} + '@vitest/utils@4.0.1': + resolution: {integrity: sha512-uRrACgpIz5sxuT87ml7xhh7EdKtW8k0N9oSFVBPl8gHB/JfLObLe9dXO6ZrsNN55FzciGIRqIEILgTQvg1eNHw==} '@webgpu/types@0.1.65': resolution: {integrity: sha512-cYrHab4d6wuVvDW5tdsfI6/o6vcLMDe6w2Citd1oS51Xxu2ycLCnVo4fqwujfKWijrZMInTJIKcXxteoy21nVA==} @@ -2425,6 +2637,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -2596,10 +2812,6 @@ packages: magicast: optional: true - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -2619,18 +2831,14 @@ packages: caniuse-lite@1.0.30001747: resolution: {integrity: sha512-mzFa2DGIhuc5490Nd/G31xN1pnBnYMadtkyTjefPI7wzypqgCEpeWu9bJr0OnDsyKrW75zA9ZAt7pbQFmwLsQg==} - chai@5.3.3: - resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + chai@6.2.0: + resolution: {integrity: sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==} engines: {node: '>=18'} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} - chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -2701,6 +2909,11 @@ packages: crelt@1.0.6: resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + cross-env@10.1.0: + resolution: {integrity: sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==} + engines: {node: '>=20'} + hasBin: true + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -2708,6 +2921,14 @@ packages: crypto-js@4.2.0: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + css-tree@3.1.0: + resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + cssstyle@5.3.1: + resolution: {integrity: sha512-g5PC9Aiph9eiczFpcgUhd9S4UUO3F+LHGRIi5NUMZ+4xtoIYbHNZwZnWA2JsFGe8OU8nl4WyaEFiZuGuxlutJQ==} + engines: {node: '>=20'} + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -2758,6 +2979,10 @@ packages: damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + data-urls@6.0.0: + resolution: {integrity: sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==} + engines: {node: '>=20'} + data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -2793,14 +3018,13 @@ packages: decimal.js-light@2.5.1: resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -2895,6 +3119,10 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + es-abstract@1.24.0: resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} @@ -2930,9 +3158,9 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} + esbuild@0.25.11: + resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} + engines: {node: '>=18'} hasBin: true esbuild@0.25.4: @@ -3163,6 +3391,11 @@ packages: fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + 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} @@ -3232,6 +3465,9 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -3281,12 +3517,28 @@ packages: hsl-to-rgb-for-reals@1.1.1: resolution: {integrity: sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==} + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + hyphen@1.10.6: resolution: {integrity: sha512-fXHXcGFTXOvZTSkPJuGOQf5Lv5T/R2itiiCVPg9LxAje5D00O0pP83yJShFq5V89Ly//Gt6acj7z8pbBr34stw==} + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -3394,6 +3646,9 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -3468,6 +3723,15 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsdom@27.0.1: + resolution: {integrity: sha512-SNSQteBL1IlV2zqhwwolaG9CwhIhTvVHWg3kTss/cLE7H/X4644mtPQqYvCfsSrGQWt9hSZcgOXX8bOZaMN+kA==} + engines: {node: '>=20'} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -3600,8 +3864,9 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.2.1: - resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + lru-cache@11.2.2: + resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==} + engines: {node: 20 || >=22} lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -3622,6 +3887,9 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + mdn-data@2.12.2: + resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} @@ -3664,6 +3932,10 @@ packages: mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -3805,6 +4077,9 @@ packages: parse-svg-path@0.1.2: resolution: {integrity: sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==} + parse5@8.0.0: + resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -3816,16 +4091,9 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.1: - resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} - engines: {node: '>= 14.16'} - pdfkit@0.17.2: resolution: {integrity: sha512-UnwF5fXy08f0dnp4jchFYAROKMNTaPqb/xgR8GtCzIcqoTnbOqtp3bwKvO4688oHI6vzEEs8Q6vqqEnC5IUELw==} @@ -3843,9 +4111,23 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + pixelmatch@7.1.0: + resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==} + hasBin: true + pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + playwright-core@1.56.1: + resolution: {integrity: sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.56.1: + resolution: {integrity: sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==} + engines: {node: '>=18'} + hasBin: true + png-js@1.0.0: resolution: {integrity: sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==} @@ -4135,12 +4417,20 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.52.5: + resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + rope-sequence@1.3.4: resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} rou3@0.5.1: resolution: {integrity: sha512-OXMmJ3zRk2xeXFGfA3K+EOPHC5u7RDFG7lIOx0X1pdnhUkI8MdVrbV+sNsD80ElpUZ+MRHdyxPnFthq9VHs8uQ==} + rrweb-cssom@0.8.0: + resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -4159,9 +4449,16 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sanitize-html@2.17.0: resolution: {integrity: sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA==} + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + scheduler@0.25.0: resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} @@ -4235,6 +4532,10 @@ packages: simple-swizzle@0.2.4: resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} + sonner@2.0.7: resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} peerDependencies: @@ -4251,8 +4552,8 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - std-env@3.9.0: - resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} @@ -4325,6 +4626,9 @@ packages: svg-arc-to-cubic-bezier@3.2.0: resolution: {integrity: sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==} + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + tailwind-merge@3.3.1: resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} @@ -4368,31 +4672,56 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tinypool@1.1.1: - resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} - engines: {node: ^18.0.0 || >=20.0.0} - - tinyrainbow@1.2.0: - resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + tinyrainbow@3.0.3: + resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} - engines: {node: '>=14.0.0'} + tldts-core@7.0.17: + resolution: {integrity: sha512-DieYoGrP78PWKsrXr8MZwtQ7GLCUeLxihtjC1jZsW1DnvSMdKPitJSe8OSYDM2u5H6g3kWJZpePqkp43TfLh0g==} + + tldts@7.0.17: + resolution: {integrity: sha512-Y1KQBgDd/NUc+LfOtKS6mNsC9CCaH+m2P1RoIZy7RAPo3C3/t8X45+zgut31cRZtZ3xKPjfn3TkGTrctC2TQIQ==} + hasBin: true to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + tough-cookie@6.0.0: + resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} + engines: {node: '>=16'} + + tr46@6.0.0: + resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} + engines: {node: '>=20'} + ts-api-utils@2.1.0: resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' + tsconfck@3.1.6: + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -4529,40 +4858,12 @@ packages: resolution: {integrity: sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ==} engines: {node: '>= 6'} - vite-node@2.1.9: - resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - - vite@5.4.20: - resolution: {integrity: sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true + vite-tsconfig-paths@5.1.4: + resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 + vite: '*' peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: + vite: optional: true vite@6.3.6: @@ -4605,23 +4906,72 @@ packages: yaml: optional: true - vitest@2.1.9: - resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==} - engines: {node: ^18.0.0 || >=20.0.0} + vite@7.1.11: + resolution: {integrity: sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.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 + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.0.1: + resolution: {integrity: sha512-4rwTfUNF0MExMZBiNirkzZpeyUZGOs3JD76N2qHNP9i6w6/bff7MRv2I9yFJKd1ICxzn2igpra+E4t9o2EfQhw==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.9 - '@vitest/ui': 2.1.9 + '@types/debug': ^4.1.12 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.1 + '@vitest/browser-preview': 4.0.1 + '@vitest/browser-webdriverio': 4.0.1 + '@vitest/ui': 4.0.1 happy-dom: '*' jsdom: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true + '@types/debug': + optional: true '@types/node': optional: true - '@vitest/browser': + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': optional: true '@vitest/ui': optional: true @@ -4633,6 +4983,26 @@ packages: w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + + webidl-conversions@8.0.0: + resolution: {integrity: sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==} + engines: {node: '>=20'} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@15.1.0: + resolution: {integrity: sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==} + engines: {node: '>=20'} + which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -4666,6 +5036,25 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -4711,6 +5100,24 @@ snapshots: '@alloc/quick-lru@5.2.0': {} + '@asamuzakjp/css-color@4.0.5': + dependencies: + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + lru-cache: 11.2.2 + + '@asamuzakjp/dom-selector@6.7.2': + dependencies: + '@asamuzakjp/nwsapi': 2.3.9 + bidi-js: 1.0.3 + css-tree: 3.1.0 + is-potential-custom-element-name: 1.0.1 + lru-cache: 11.2.2 + + '@asamuzakjp/nwsapi@2.3.9': {} + '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 @@ -4834,6 +5241,30 @@ snapshots: '@better-fetch/fetch@1.1.18': {} + '@csstools/color-helpers@5.1.0': {} + + '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/color-helpers': 5.1.0 + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-syntax-patches-for-csstree@1.0.14(postcss@8.5.6)': + dependencies: + postcss: 8.5.6 + + '@csstools/css-tokenizer@3.0.4': {} + '@dimforge/rapier3d-compat@0.12.0': {} '@dnd-kit/accessibility@3.1.1(react@19.2.0)': @@ -4884,145 +5315,156 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.21.5': + '@epic-web/invariant@1.0.0': {} + + '@esbuild/aix-ppc64@0.25.11': optional: true '@esbuild/aix-ppc64@0.25.4': optional: true - '@esbuild/android-arm64@0.21.5': + '@esbuild/android-arm64@0.25.11': optional: true '@esbuild/android-arm64@0.25.4': optional: true - '@esbuild/android-arm@0.21.5': + '@esbuild/android-arm@0.25.11': optional: true '@esbuild/android-arm@0.25.4': optional: true - '@esbuild/android-x64@0.21.5': + '@esbuild/android-x64@0.25.11': optional: true '@esbuild/android-x64@0.25.4': optional: true - '@esbuild/darwin-arm64@0.21.5': + '@esbuild/darwin-arm64@0.25.11': optional: true '@esbuild/darwin-arm64@0.25.4': optional: true - '@esbuild/darwin-x64@0.21.5': + '@esbuild/darwin-x64@0.25.11': optional: true '@esbuild/darwin-x64@0.25.4': optional: true - '@esbuild/freebsd-arm64@0.21.5': + '@esbuild/freebsd-arm64@0.25.11': optional: true '@esbuild/freebsd-arm64@0.25.4': optional: true - '@esbuild/freebsd-x64@0.21.5': + '@esbuild/freebsd-x64@0.25.11': optional: true '@esbuild/freebsd-x64@0.25.4': optional: true - '@esbuild/linux-arm64@0.21.5': + '@esbuild/linux-arm64@0.25.11': optional: true '@esbuild/linux-arm64@0.25.4': optional: true - '@esbuild/linux-arm@0.21.5': + '@esbuild/linux-arm@0.25.11': optional: true '@esbuild/linux-arm@0.25.4': optional: true - '@esbuild/linux-ia32@0.21.5': + '@esbuild/linux-ia32@0.25.11': optional: true '@esbuild/linux-ia32@0.25.4': optional: true - '@esbuild/linux-loong64@0.21.5': + '@esbuild/linux-loong64@0.25.11': optional: true '@esbuild/linux-loong64@0.25.4': optional: true - '@esbuild/linux-mips64el@0.21.5': + '@esbuild/linux-mips64el@0.25.11': optional: true '@esbuild/linux-mips64el@0.25.4': optional: true - '@esbuild/linux-ppc64@0.21.5': + '@esbuild/linux-ppc64@0.25.11': optional: true '@esbuild/linux-ppc64@0.25.4': optional: true - '@esbuild/linux-riscv64@0.21.5': + '@esbuild/linux-riscv64@0.25.11': optional: true '@esbuild/linux-riscv64@0.25.4': optional: true - '@esbuild/linux-s390x@0.21.5': + '@esbuild/linux-s390x@0.25.11': optional: true '@esbuild/linux-s390x@0.25.4': optional: true - '@esbuild/linux-x64@0.21.5': + '@esbuild/linux-x64@0.25.11': optional: true '@esbuild/linux-x64@0.25.4': optional: true + '@esbuild/netbsd-arm64@0.25.11': + optional: true + '@esbuild/netbsd-arm64@0.25.4': optional: true - '@esbuild/netbsd-x64@0.21.5': + '@esbuild/netbsd-x64@0.25.11': optional: true '@esbuild/netbsd-x64@0.25.4': optional: true + '@esbuild/openbsd-arm64@0.25.11': + optional: true + '@esbuild/openbsd-arm64@0.25.4': optional: true - '@esbuild/openbsd-x64@0.21.5': + '@esbuild/openbsd-x64@0.25.11': optional: true '@esbuild/openbsd-x64@0.25.4': optional: true - '@esbuild/sunos-x64@0.21.5': + '@esbuild/openharmony-arm64@0.25.11': + optional: true + + '@esbuild/sunos-x64@0.25.11': optional: true '@esbuild/sunos-x64@0.25.4': optional: true - '@esbuild/win32-arm64@0.21.5': + '@esbuild/win32-arm64@0.25.11': optional: true '@esbuild/win32-arm64@0.25.4': optional: true - '@esbuild/win32-ia32@0.21.5': + '@esbuild/win32-ia32@0.25.11': optional: true '@esbuild/win32-ia32@0.25.4': optional: true - '@esbuild/win32-x64@0.21.5': + '@esbuild/win32-x64@0.25.11': optional: true '@esbuild/win32-x64@0.25.4': @@ -5384,6 +5826,8 @@ snapshots: tslib: 2.8.1 tsyringe: 4.10.0 + '@polka/url@1.0.0-next.29': {} + '@prisma/client@6.16.3(prisma@6.16.3(typescript@5.9.3))(typescript@5.9.3)': optionalDependencies: prisma: 6.16.3(typescript@5.9.3) @@ -6152,69 +6596,135 @@ snapshots: '@rollup/rollup-android-arm-eabi@4.52.4': optional: true + '@rollup/rollup-android-arm-eabi@4.52.5': + optional: true + '@rollup/rollup-android-arm64@4.52.4': optional: true + '@rollup/rollup-android-arm64@4.52.5': + optional: true + '@rollup/rollup-darwin-arm64@4.52.4': optional: true + '@rollup/rollup-darwin-arm64@4.52.5': + optional: true + '@rollup/rollup-darwin-x64@4.52.4': optional: true + '@rollup/rollup-darwin-x64@4.52.5': + optional: true + '@rollup/rollup-freebsd-arm64@4.52.4': optional: true + '@rollup/rollup-freebsd-arm64@4.52.5': + optional: true + '@rollup/rollup-freebsd-x64@4.52.4': optional: true + '@rollup/rollup-freebsd-x64@4.52.5': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.52.4': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.52.4': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.52.5': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.52.4': optional: true + '@rollup/rollup-linux-arm64-gnu@4.52.5': + optional: true + '@rollup/rollup-linux-arm64-musl@4.52.4': optional: true + '@rollup/rollup-linux-arm64-musl@4.52.5': + optional: true + '@rollup/rollup-linux-loong64-gnu@4.52.4': optional: true + '@rollup/rollup-linux-loong64-gnu@4.52.5': + optional: true + '@rollup/rollup-linux-ppc64-gnu@4.52.4': optional: true + '@rollup/rollup-linux-ppc64-gnu@4.52.5': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.52.4': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.52.5': + optional: true + '@rollup/rollup-linux-riscv64-musl@4.52.4': optional: true + '@rollup/rollup-linux-riscv64-musl@4.52.5': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.52.4': optional: true + '@rollup/rollup-linux-s390x-gnu@4.52.5': + optional: true + '@rollup/rollup-linux-x64-gnu@4.52.4': optional: true + '@rollup/rollup-linux-x64-gnu@4.52.5': + optional: true + '@rollup/rollup-linux-x64-musl@4.52.4': optional: true + '@rollup/rollup-linux-x64-musl@4.52.5': + optional: true + '@rollup/rollup-openharmony-arm64@4.52.4': optional: true + '@rollup/rollup-openharmony-arm64@4.52.5': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.52.4': optional: true + '@rollup/rollup-win32-arm64-msvc@4.52.5': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.52.4': optional: true + '@rollup/rollup-win32-ia32-msvc@4.52.5': + optional: true + '@rollup/rollup-win32-x64-gnu@4.52.4': optional: true + '@rollup/rollup-win32-x64-gnu@4.52.5': + optional: true + '@rollup/rollup-win32-x64-msvc@4.52.4': optional: true + '@rollup/rollup-win32-x64-msvc@4.52.5': + optional: true + '@rtsao/scc@1.1.0': {} '@simplewebauthn/browser@13.2.2': {} @@ -6597,6 +7107,11 @@ snapshots: dependencies: '@babel/types': 7.28.4 + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + '@types/d3-array@3.2.2': {} '@types/d3-color@3.1.3': {} @@ -6621,6 +7136,8 @@ snapshots: '@types/d3-timer@3.0.2': {} + '@types/deep-eql@4.0.2': {} + '@types/estree@1.0.8': {} '@types/json-schema@7.0.15': {} @@ -6861,45 +7378,74 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/expect@2.1.9': + '@vitest/browser-playwright@4.0.1(playwright@1.56.1)(vite@7.1.11(@types/node@20.19.19)(jiti@2.6.1)(lightningcss@1.30.1))(vitest@4.0.1)': dependencies: - '@vitest/spy': 2.1.9 - '@vitest/utils': 2.1.9 - chai: 5.3.3 - tinyrainbow: 1.2.0 + '@vitest/browser': 4.0.1(vite@7.1.11(@types/node@20.19.19)(jiti@2.6.1)(lightningcss@1.30.1))(vitest@4.0.1) + '@vitest/mocker': 4.0.1(vite@7.1.11(@types/node@20.19.19)(jiti@2.6.1)(lightningcss@1.30.1)) + playwright: 1.56.1 + tinyrainbow: 3.0.3 + vitest: 4.0.1(@types/node@20.19.19)(@vitest/browser-playwright@4.0.1)(jiti@2.6.1)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.1) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite - '@vitest/mocker@2.1.9(vite@5.4.20(@types/node@20.19.19)(lightningcss@1.30.1))': + '@vitest/browser@4.0.1(vite@7.1.11(@types/node@20.19.19)(jiti@2.6.1)(lightningcss@1.30.1))(vitest@4.0.1)': dependencies: - '@vitest/spy': 2.1.9 + '@vitest/mocker': 4.0.1(vite@7.1.11(@types/node@20.19.19)(jiti@2.6.1)(lightningcss@1.30.1)) + '@vitest/utils': 4.0.1 + magic-string: 0.30.19 + pixelmatch: 7.1.0 + pngjs: 7.0.0 + sirv: 3.0.2 + tinyrainbow: 3.0.3 + vitest: 4.0.1(@types/node@20.19.19)(@vitest/browser-playwright@4.0.1)(jiti@2.6.1)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.1) + ws: 8.18.3 + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/expect@4.0.1': + dependencies: + '@standard-schema/spec': 1.0.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.0.1 + '@vitest/utils': 4.0.1 + chai: 6.2.0 + tinyrainbow: 3.0.3 + + '@vitest/mocker@4.0.1(vite@7.1.11(@types/node@20.19.19)(jiti@2.6.1)(lightningcss@1.30.1))': + dependencies: + '@vitest/spy': 4.0.1 estree-walker: 3.0.3 magic-string: 0.30.19 optionalDependencies: - vite: 5.4.20(@types/node@20.19.19)(lightningcss@1.30.1) + vite: 7.1.11(@types/node@20.19.19)(jiti@2.6.1)(lightningcss@1.30.1) - '@vitest/pretty-format@2.1.9': + '@vitest/pretty-format@4.0.1': dependencies: - tinyrainbow: 1.2.0 + tinyrainbow: 3.0.3 - '@vitest/runner@2.1.9': + '@vitest/runner@4.0.1': dependencies: - '@vitest/utils': 2.1.9 - pathe: 1.1.2 + '@vitest/utils': 4.0.1 + pathe: 2.0.3 - '@vitest/snapshot@2.1.9': + '@vitest/snapshot@4.0.1': dependencies: - '@vitest/pretty-format': 2.1.9 + '@vitest/pretty-format': 4.0.1 magic-string: 0.30.19 - pathe: 1.1.2 + pathe: 2.0.3 - '@vitest/spy@2.1.9': - dependencies: - tinyspy: 3.0.2 + '@vitest/spy@4.0.1': {} - '@vitest/utils@2.1.9': + '@vitest/utils@4.0.1': dependencies: - '@vitest/pretty-format': 2.1.9 - loupe: 3.2.1 - tinyrainbow: 1.2.0 + '@vitest/pretty-format': 4.0.1 + tinyrainbow: 3.0.3 '@webgpu/types@0.1.65': {} @@ -6911,6 +7457,8 @@ snapshots: acorn@8.15.0: {} + agent-base@7.1.4: {} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -7025,7 +7573,7 @@ snapshots: baseline-browser-mapping@2.8.16: {} - better-auth@1.3.26(next@16.0.0(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + better-auth@1.3.26(next@16.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: '@better-auth/core': 1.3.26 '@better-auth/utils': 0.3.0 @@ -7041,7 +7589,7 @@ snapshots: nanostores: 1.0.1 zod: 4.1.11 optionalDependencies: - next: 16.0.0(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + next: 16.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) @@ -7126,8 +7674,6 @@ snapshots: pkg-types: 2.3.0 rc9: 2.1.2 - cac@6.7.14: {} - call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -7149,21 +7695,13 @@ snapshots: caniuse-lite@1.0.30001747: {} - chai@5.3.3: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.2.1 - pathval: 2.0.1 + chai@6.2.0: {} chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - check-error@2.1.1: {} - chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -7214,6 +7752,11 @@ snapshots: crelt@1.0.6: {} + cross-env@10.1.0: + dependencies: + '@epic-web/invariant': 1.0.0 + cross-spawn: 7.0.6 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -7222,6 +7765,19 @@ snapshots: crypto-js@4.2.0: {} + css-tree@3.1.0: + dependencies: + mdn-data: 2.12.2 + source-map-js: 1.2.1 + + cssstyle@5.3.1(postcss@8.5.6): + dependencies: + '@asamuzakjp/css-color': 4.0.5 + '@csstools/css-syntax-patches-for-csstree': 1.0.14(postcss@8.5.6) + css-tree: 3.1.0 + transitivePeerDependencies: + - postcss + csstype@3.1.3: {} d3-array@3.2.4: @@ -7264,6 +7820,11 @@ snapshots: damerau-levenshtein@1.0.8: {} + data-urls@6.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 15.1.0 + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -7294,12 +7855,12 @@ snapshots: decimal.js-light@2.5.1: {} + decimal.js@10.6.0: {} + decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 - deep-eql@5.0.2: {} - deep-extend@0.6.0: {} deep-is@0.1.4: {} @@ -7389,6 +7950,8 @@ snapshots: entities@4.5.0: {} + entities@6.0.1: {} + es-abstract@1.24.0: dependencies: array-buffer-byte-length: 1.0.2 @@ -7492,31 +8055,34 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - esbuild@0.21.5: + esbuild@0.25.11: optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 + '@esbuild/aix-ppc64': 0.25.11 + '@esbuild/android-arm': 0.25.11 + '@esbuild/android-arm64': 0.25.11 + '@esbuild/android-x64': 0.25.11 + '@esbuild/darwin-arm64': 0.25.11 + '@esbuild/darwin-x64': 0.25.11 + '@esbuild/freebsd-arm64': 0.25.11 + '@esbuild/freebsd-x64': 0.25.11 + '@esbuild/linux-arm': 0.25.11 + '@esbuild/linux-arm64': 0.25.11 + '@esbuild/linux-ia32': 0.25.11 + '@esbuild/linux-loong64': 0.25.11 + '@esbuild/linux-mips64el': 0.25.11 + '@esbuild/linux-ppc64': 0.25.11 + '@esbuild/linux-riscv64': 0.25.11 + '@esbuild/linux-s390x': 0.25.11 + '@esbuild/linux-x64': 0.25.11 + '@esbuild/netbsd-arm64': 0.25.11 + '@esbuild/netbsd-x64': 0.25.11 + '@esbuild/openbsd-arm64': 0.25.11 + '@esbuild/openbsd-x64': 0.25.11 + '@esbuild/openharmony-arm64': 0.25.11 + '@esbuild/sunos-x64': 0.25.11 + '@esbuild/win32-arm64': 0.25.11 + '@esbuild/win32-ia32': 0.25.11 + '@esbuild/win32-x64': 0.25.11 esbuild@0.25.4: optionalDependencies: @@ -7850,6 +8416,9 @@ snapshots: fs-constants@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -7928,6 +8497,8 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 + globrex@0.1.2: {} + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -7968,6 +8539,10 @@ snapshots: hsl-to-rgb-for-reals@1.1.1: {} + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + htmlparser2@8.0.2: dependencies: domelementtype: 2.3.0 @@ -7975,8 +8550,26 @@ snapshots: domutils: 3.2.2 entities: 4.5.0 + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + hyphen@1.10.6: {} + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + ieee754@1.2.1: {} ignore@5.3.2: {} @@ -8079,6 +8672,8 @@ snapshots: is-plain-object@5.0.0: {} + is-potential-custom-element-name@1.0.1: {} + is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -8156,6 +8751,34 @@ snapshots: dependencies: argparse: 2.0.1 + jsdom@27.0.1(postcss@8.5.6): + dependencies: + '@asamuzakjp/dom-selector': 6.7.2 + cssstyle: 5.3.1(postcss@8.5.6) + data-urls: 6.0.0 + decimal.js: 10.6.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + parse5: 8.0.0 + rrweb-cssom: 0.8.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 6.0.0 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 8.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 15.1.0 + ws: 8.18.3 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - postcss + - supports-color + - utf-8-validate + jsesc@3.1.0: {} json-buffer@3.0.1: {} @@ -8262,7 +8885,7 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.2.1: {} + lru-cache@11.2.2: {} lru-cache@5.1.1: dependencies: @@ -8287,6 +8910,8 @@ snapshots: math-intrinsics@1.1.0: {} + mdn-data@2.12.2: {} + mdurl@2.0.0: {} media-engine@1.0.3: {} @@ -8320,6 +8945,8 @@ snapshots: mkdirp-classic@0.5.3: {} + mrmime@2.0.1: {} + ms@2.1.3: {} nanoid@3.3.11: {} @@ -8337,7 +8964,7 @@ snapshots: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - next@16.0.0(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + next@16.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: '@next/env': 16.0.0 '@swc/helpers': 0.5.15 @@ -8345,7 +8972,7 @@ snapshots: postcss: 8.4.31 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - styled-jsx: 5.1.6(@babel/core@7.28.4)(react@19.2.0) + styled-jsx: 5.1.6(react@19.2.0) optionalDependencies: '@next/swc-darwin-arm64': 16.0.0 '@next/swc-darwin-x64': 16.0.0 @@ -8465,18 +9092,18 @@ snapshots: parse-svg-path@0.1.2: {} + parse5@8.0.0: + dependencies: + entities: 6.0.1 + path-exists@4.0.0: {} path-key@3.1.1: {} path-parse@1.0.7: {} - pathe@1.1.2: {} - pathe@2.0.3: {} - pathval@2.0.1: {} - pdfkit@0.17.2: dependencies: crypto-js: 4.2.0 @@ -8493,12 +9120,24 @@ snapshots: picomatch@4.0.3: {} + pixelmatch@7.1.0: + dependencies: + pngjs: 7.0.0 + pkg-types@2.3.0: dependencies: confbox: 0.2.2 exsolve: 1.0.7 pathe: 2.0.3 + playwright-core@1.56.1: {} + + playwright@1.56.1: + dependencies: + playwright-core: 1.56.1 + optionalDependencies: + fsevents: 2.3.2 + png-js@1.0.0: {} png-to-ico@3.0.1: @@ -8866,10 +9505,40 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.52.4 fsevents: 2.3.3 + rollup@4.52.5: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.52.5 + '@rollup/rollup-android-arm64': 4.52.5 + '@rollup/rollup-darwin-arm64': 4.52.5 + '@rollup/rollup-darwin-x64': 4.52.5 + '@rollup/rollup-freebsd-arm64': 4.52.5 + '@rollup/rollup-freebsd-x64': 4.52.5 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 + '@rollup/rollup-linux-arm-musleabihf': 4.52.5 + '@rollup/rollup-linux-arm64-gnu': 4.52.5 + '@rollup/rollup-linux-arm64-musl': 4.52.5 + '@rollup/rollup-linux-loong64-gnu': 4.52.5 + '@rollup/rollup-linux-ppc64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-musl': 4.52.5 + '@rollup/rollup-linux-s390x-gnu': 4.52.5 + '@rollup/rollup-linux-x64-gnu': 4.52.5 + '@rollup/rollup-linux-x64-musl': 4.52.5 + '@rollup/rollup-openharmony-arm64': 4.52.5 + '@rollup/rollup-win32-arm64-msvc': 4.52.5 + '@rollup/rollup-win32-ia32-msvc': 4.52.5 + '@rollup/rollup-win32-x64-gnu': 4.52.5 + '@rollup/rollup-win32-x64-msvc': 4.52.5 + fsevents: 2.3.3 + rope-sequence@1.3.4: {} rou3@0.5.1: {} + rrweb-cssom@0.8.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -8895,6 +9564,8 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 + safer-buffer@2.1.2: {} + sanitize-html@2.17.0: dependencies: deepmerge: 4.3.1 @@ -8904,6 +9575,10 @@ snapshots: parse-srcset: 1.0.2 postcss: 8.5.6 + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + scheduler@0.25.0: {} scheduler@0.25.0-rc-603e6108-20241029: {} @@ -9016,6 +9691,12 @@ snapshots: dependencies: is-arrayish: 0.3.4 + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + sonner@2.0.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: react: 19.2.0 @@ -9027,7 +9708,7 @@ snapshots: stackback@0.0.2: {} - std-env@3.9.0: {} + std-env@3.10.0: {} stop-iteration-iterator@1.1.0: dependencies: @@ -9094,12 +9775,10 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(@babel/core@7.28.4)(react@19.2.0): + styled-jsx@5.1.6(react@19.2.0): dependencies: client-only: 0.0.1 react: 19.2.0 - optionalDependencies: - '@babel/core': 7.28.4 supports-color@7.2.0: dependencies: @@ -9113,6 +9792,8 @@ snapshots: svg-arc-to-cubic-bezier@3.2.0: {} + symbol-tree@3.2.4: {} + tailwind-merge@3.3.1: {} tailwindcss@4.1.14: {} @@ -9159,20 +9840,36 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tinypool@1.1.1: {} + tinyrainbow@3.0.3: {} - tinyrainbow@1.2.0: {} + tldts-core@7.0.17: {} - tinyspy@3.0.2: {} + tldts@7.0.17: + dependencies: + tldts-core: 7.0.17 to-regex-range@5.0.1: dependencies: is-number: 7.0.0 + totalist@3.0.1: {} + + tough-cookie@6.0.0: + dependencies: + tldts: 7.0.17 + + tr46@6.0.0: + dependencies: + punycode: 2.3.1 + ts-api-utils@2.1.0(typescript@5.9.3): dependencies: typescript: 5.9.3 + tsconfck@3.1.6(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 @@ -9180,6 +9877,12 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + tslib@1.14.1: {} tslib@2.8.1: {} @@ -9269,12 +9972,12 @@ snapshots: pako: 0.2.9 tiny-inflate: 1.0.3 - unicornstudio-react@1.4.31(next@16.0.0(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + unicornstudio-react@1.4.31(next@16.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: - next: 16.0.0(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + next: 16.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) unrs-resolver@1.11.1: dependencies: @@ -9363,33 +10066,16 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - vite-node@2.1.9(@types/node@20.19.19)(lightningcss@1.30.1): + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.1.11(@types/node@20.19.19)(jiti@2.6.1)(lightningcss@1.30.1)): dependencies: - cac: 6.7.14 debug: 4.4.3 - es-module-lexer: 1.7.0 - pathe: 1.1.2 - vite: 5.4.20(@types/node@20.19.19)(lightningcss@1.30.1) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vite@5.4.20(@types/node@20.19.19)(lightningcss@1.30.1): - dependencies: - esbuild: 0.21.5 - postcss: 8.5.6 - rollup: 4.52.4 + globrex: 0.1.2 + tsconfck: 3.1.6(typescript@5.9.3) optionalDependencies: - '@types/node': 20.19.19 - fsevents: 2.3.3 - lightningcss: 1.30.1 + vite: 7.1.11(@types/node@20.19.19)(jiti@2.6.1)(lightningcss@1.30.1) + transitivePeerDependencies: + - supports-color + - typescript vite@6.3.6(@types/node@22.18.11)(jiti@2.6.1)(lightningcss@1.30.1): dependencies: @@ -9405,31 +10091,48 @@ snapshots: jiti: 2.6.1 lightningcss: 1.30.1 - vitest@2.1.9(@types/node@20.19.19)(lightningcss@1.30.1): + vite@7.1.11(@types/node@20.19.19)(jiti@2.6.1)(lightningcss@1.30.1): dependencies: - '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.20(@types/node@20.19.19)(lightningcss@1.30.1)) - '@vitest/pretty-format': 2.1.9 - '@vitest/runner': 2.1.9 - '@vitest/snapshot': 2.1.9 - '@vitest/spy': 2.1.9 - '@vitest/utils': 2.1.9 - chai: 5.3.3 + esbuild: 0.25.11 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.52.5 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 20.19.19 + fsevents: 2.3.3 + jiti: 2.6.1 + lightningcss: 1.30.1 + + vitest@4.0.1(@types/node@20.19.19)(@vitest/browser-playwright@4.0.1)(jiti@2.6.1)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.1): + dependencies: + '@vitest/expect': 4.0.1 + '@vitest/mocker': 4.0.1(vite@7.1.11(@types/node@20.19.19)(jiti@2.6.1)(lightningcss@1.30.1)) + '@vitest/pretty-format': 4.0.1 + '@vitest/runner': 4.0.1 + '@vitest/snapshot': 4.0.1 + '@vitest/spy': 4.0.1 + '@vitest/utils': 4.0.1 debug: 4.4.3 + es-module-lexer: 1.7.0 expect-type: 1.2.2 magic-string: 0.30.19 - pathe: 1.1.2 - std-env: 3.9.0 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinypool: 1.1.1 - tinyrainbow: 1.2.0 - vite: 5.4.20(@types/node@20.19.19)(lightningcss@1.30.1) - vite-node: 2.1.9(@types/node@20.19.19)(lightningcss@1.30.1) + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.1.11(@types/node@20.19.19)(jiti@2.6.1)(lightningcss@1.30.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.19.19 + '@vitest/browser-playwright': 4.0.1(playwright@1.56.1)(vite@7.1.11(@types/node@20.19.19)(jiti@2.6.1)(lightningcss@1.30.1))(vitest@4.0.1) + jsdom: 27.0.1(postcss@8.5.6) transitivePeerDependencies: + - jiti - less - lightningcss - msw @@ -9439,9 +10142,28 @@ snapshots: - sugarss - supports-color - terser + - tsx + - yaml w3c-keyname@2.2.8: {} + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + + webidl-conversions@8.0.0: {} + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + whatwg-url@15.1.0: + dependencies: + tr46: 6.0.0 + webidl-conversions: 8.0.0 + which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 @@ -9496,6 +10218,12 @@ snapshots: wrappy@1.0.2: {} + ws@8.18.3: {} + + xml-name-validator@5.0.0: {} + + xmlchars@2.2.0: {} + yallist@3.1.1: {} yallist@5.0.0: {} diff --git a/src/app/api/admin/machines/delete/route.test.ts b/src/app/api/admin/machines/delete/route.test.ts index e2ff774..3936cd7 100644 --- a/src/app/api/admin/machines/delete/route.test.ts +++ b/src/app/api/admin/machines/delete/route.test.ts @@ -4,11 +4,17 @@ const mutationMock = vi.fn() const deleteManyMock = vi.fn() const assertAuthenticatedSession = vi.fn() -vi.mock("convex/browser", () => ({ - ConvexHttpClient: vi.fn().mockImplementation(() => ({ - mutation: mutationMock, - })), -})) +vi.mock("convex/browser", () => { + const ConvexHttpClient = vi.fn(function ConvexHttpClientMock() { + return { + mutation: mutationMock, + } + }) + + return { + ConvexHttpClient, + } +}) vi.mock("@/lib/prisma", () => ({ prisma: { @@ -32,6 +38,12 @@ describe("POST /api/admin/machines/delete", () => { mutationMock.mockReset() deleteManyMock.mockReset() assertAuthenticatedSession.mockReset() + mutationMock.mockImplementation(async (_ctx, payload) => { + if (payload && typeof payload === "object" && "machineId" in payload) { + return { ok: true } + } + return { _id: "user_123" } + }) assertAuthenticatedSession.mockResolvedValue({ user: { email: "admin@example.com", @@ -41,8 +53,7 @@ describe("POST /api/admin/machines/delete", () => { avatarUrl: null, }, }) - mutationMock.mockResolvedValueOnce({ _id: "user_123" }) - const consoleSpy = vi.spyOn(console, "error").mockImplementation(() => {}) + const consoleSpy = vi.spyOn(console, "error").mockImplementation(function noop() {}) restoreConsole = () => consoleSpy.mockRestore() }) @@ -52,7 +63,6 @@ describe("POST /api/admin/machines/delete", () => { }) it("returns ok when the machine removal succeeds", async () => { - mutationMock.mockResolvedValueOnce({ ok: true }) const { POST } = await import("./route") const response = await POST( new Request("http://localhost/api/admin/machines/delete", { @@ -69,7 +79,12 @@ describe("POST /api/admin/machines/delete", () => { }) it("still succeeds when the Convex machine is already missing", async () => { - mutationMock.mockRejectedValueOnce(new Error("Máquina não encontrada")) + mutationMock.mockImplementation(async (_ctx, payload) => { + if (payload && typeof payload === "object" && "machineId" in payload) { + throw new Error("Máquina não encontrada") + } + return { _id: "user_123" } + }) const { POST } = await import("./route") const response = await POST( new Request("http://localhost/api/admin/machines/delete", { @@ -84,7 +99,12 @@ describe("POST /api/admin/machines/delete", () => { }) it("returns an error for other Convex failures", async () => { - mutationMock.mockRejectedValueOnce(new Error("timeout error")) + mutationMock.mockImplementation(async (_ctx, payload) => { + if (payload && typeof payload === "object" && "machineId" in payload) { + throw new Error("timeout error") + } + return { _id: "user_123" } + }) const { POST } = await import("./route") const response = await POST( new Request("http://localhost/api/admin/machines/delete", { diff --git a/tests/browser/__screenshots__/example.browser.test.ts/CTA-button-snapshot-1.png b/tests/browser/__screenshots__/example.browser.test.ts/CTA-button-snapshot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bf6013672df9afac7716e22bddca44c6da07442a GIT binary patch literal 43455 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 ZuHRo2TXA(R0sBi_dld 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 Bf1UsU literal 0 HcmV?d00001 diff --git a/tests/browser/__screenshots__/example.browser.test.ts/cta-button-chromium-linux.png b/tests/browser/__screenshots__/example.browser.test.ts/cta-button-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..0c48634dc0aeb08110aa14b5988ad0d6b57c3772 GIT binary patch literal 94214 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 literal 0 HcmV?d00001 diff --git a/tests/browser/example.browser.test.ts b/tests/browser/example.browser.test.ts new file mode 100644 index 0000000..0984739 --- /dev/null +++ b/tests/browser/example.browser.test.ts @@ -0,0 +1,40 @@ +import { expect, test } from "vitest" + +test("CTA button snapshot", async () => { + const html = ` +
+ +
+ ` + + document.body.innerHTML = html + + const ctaButton = document.querySelector("[data-testid='cta']") + expect(ctaButton).toBeTruthy() + + await expect(document.body).toMatchScreenshot("cta-button") +}) diff --git a/tests/setup.browser.ts b/tests/setup.browser.ts new file mode 100644 index 0000000..7938c3e --- /dev/null +++ b/tests/setup.browser.ts @@ -0,0 +1,2 @@ +// Browser-specific Vitest bootstrap. Keep this file free of Node globals. +// Add global mocks or polyfills here when we start writing browser tests. diff --git a/vitest.config.mts b/vitest.config.mts index 6a13589..8253c42 100644 --- a/vitest.config.mts +++ b/vitest.config.mts @@ -1,22 +1,61 @@ import path from "path" import { fileURLToPath } from "url" import { defineConfig } from "vitest/config" +import { playwright } from "@vitest/browser-playwright" +import tsconfigPaths from "vite-tsconfig-paths" const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const srcDir = path.resolve(__dirname, "./src") +const convexDir = path.resolve(__dirname, "./convex") +const isCI = process.env.CI === "true" +const isBrowserRun = process.env.VITEST_BROWSER === "true" export default defineConfig({ + root: __dirname, + plugins: [tsconfigPaths()], resolve: { alias: { - "@": path.resolve(__dirname, "./src"), - "@/convex": path.resolve(__dirname, "./convex"), + "@": srcDir, + "@/convex": convexDir, }, }, test: { - pool: (process.env.VITEST_POOL as "threads" | "forks" | "vmThreads" | undefined) ?? "threads", - environment: "node", globals: true, + setupFiles: isBrowserRun ? ["./tests/setup.browser.ts"] : ["./vitest.setup.node.ts"], + pool: (process.env.VITEST_POOL as "threads" | "forks" | "vmThreads" | undefined) ?? "threads", + testTimeout: isBrowserRun ? 30000 : 15000, + coverage: { + provider: "v8", + include: ["src/**/*.{ts,tsx}", "convex/**/*.ts"], + exclude: ["**/*.d.ts", "**/*.test.*", "tests/**"], + reportsDirectory: "./coverage", + }, + deps: { + registerNodeLoader: true, + }, + alias: { + "@": srcDir, + "@/convex": convexDir, + }, + browser: { + enabled: isBrowserRun, + provider: playwright({ + launchOptions: { + headless: isCI ? true : undefined, + }, + }), + instances: [ + { + browser: "chromium", + launch: { + headless: isCI ? true : false, + }, + }, + ], + trace: isCI ? "on-first-retry" : "off", + }, + environment: "jsdom", include: ["src/**/*.test.ts", "tests/**/*.test.ts"], - setupFiles: ["./vitest.setup.ts"], - testTimeout: 15000, + exclude: isBrowserRun ? [] : ["tests/browser/**/*.browser.test.ts"], }, }) diff --git a/vitest.setup.node.ts b/vitest.setup.node.ts new file mode 100644 index 0000000..ad7fd39 --- /dev/null +++ b/vitest.setup.node.ts @@ -0,0 +1,8 @@ +// Node-only Vitest bootstrap: keep browser runs free from process dependencies. +if (typeof process !== "undefined" && process.versions?.node) { + await import("tsconfig-paths/register") + + process.env.BETTER_AUTH_SECRET = process.env.BETTER_AUTH_SECRET ?? "test-secret" + process.env.NEXT_PUBLIC_APP_URL = process.env.NEXT_PUBLIC_APP_URL ?? "http://localhost:3000" + process.env.BETTER_AUTH_URL = process.env.BETTER_AUTH_URL ?? process.env.NEXT_PUBLIC_APP_URL +} diff --git a/vitest.setup.ts b/vitest.setup.ts deleted file mode 100644 index ddae267..0000000 --- a/vitest.setup.ts +++ /dev/null @@ -1,3 +0,0 @@ -process.env.BETTER_AUTH_SECRET = process.env.BETTER_AUTH_SECRET ?? "test-secret" -process.env.NEXT_PUBLIC_APP_URL = process.env.NEXT_PUBLIC_APP_URL ?? "http://localhost:3000" -process.env.BETTER_AUTH_URL = process.env.BETTER_AUTH_URL ?? process.env.NEXT_PUBLIC_APP_URL