From 39716a0018445e6e47fa55a68c0272746432ccd9 Mon Sep 17 00:00:00 2001 From: Guilherme de Andrade Date: Fri, 1 May 2026 17:21:16 +0100 Subject: [PATCH 1/7] chore: remove all astro files for remix rewrite --- .github/dependabot.yml | 31 - .github/workflows/ci.yml | 80 - .gitignore | 27 - .nvmrc | 1 - .superset/config.json | 4 - .vite-hooks/pre-commit | 1 - .vscode/extensions.json | 4 - .vscode/launch.json | 11 - AGENTS.md | 43 - CLAUDE.md | 1 - README.md | 37 - astro.config.mjs | 41 - conductor.json | 7 - package.json | 45 - pnpm-lock.yaml | 5936 ----------------- public/favicon.ico | Bin 179507 -> 0 bytes public/fonts/CommitMono-400-Italic.otf | Bin 274500 -> 0 bytes public/fonts/CommitMono-400-Regular.otf | Bin 274776 -> 0 bytes public/fonts/CommitMono-700-Italic.otf | Bin 276008 -> 0 bytes public/fonts/CommitMono-700-Regular.otf | Bin 276208 -> 0 bytes public/og-image.jpg | Bin 86165 -> 0 bytes public/resume.pdf | Bin 59998 -> 0 bytes resume/resume.typ | 149 - src/components/BaseHead.astro | 39 - src/components/FormattedDate.astro | 17 - src/components/Header.astro | 11 - src/components/LedgerLabel.astro | 26 - src/components/PostCard.astro | 25 - src/components/SectionHeading.astro | 12 - src/components/SubtleLink.astro | 17 - src/consts.ts | 18 - src/content.config.ts | 32 - .../agentic-engineering-without-lock-in.md | 36 - ...to-functional-programming-in-javascript.md | 737 -- .../blog/use-an-object-instead-of-a-switch.md | 99 - ...-prompts-to-predictable-user-interfaces.md | 545 -- src/env.d.ts | 2 - src/layouts/BaseLayout.astro | 39 - src/layouts/BlogPost.astro | 41 - src/layouts/Talk.astro | 69 - src/pages/index.astro | 86 - src/pages/rss.xml.js | 16 - src/pages/talks.astro | 38 - src/pages/talks/[...slug].astro | 21 - src/pages/writing.astro | 38 - src/pages/writing/[...slug].astro | 21 - src/styles/base.css | 150 - src/utils.ts | 6 - tsconfig.json | 10 - vite.config.ts | 14 - 50 files changed, 8583 deletions(-) delete mode 100644 .github/dependabot.yml delete mode 100644 .github/workflows/ci.yml delete mode 100644 .gitignore delete mode 100644 .nvmrc delete mode 100644 .superset/config.json delete mode 100755 .vite-hooks/pre-commit delete mode 100644 .vscode/extensions.json delete mode 100644 .vscode/launch.json delete mode 100644 AGENTS.md delete mode 100644 CLAUDE.md delete mode 100644 README.md delete mode 100644 astro.config.mjs delete mode 100644 conductor.json delete mode 100644 package.json delete mode 100644 pnpm-lock.yaml delete mode 100644 public/favicon.ico delete mode 100644 public/fonts/CommitMono-400-Italic.otf delete mode 100644 public/fonts/CommitMono-400-Regular.otf delete mode 100644 public/fonts/CommitMono-700-Italic.otf delete mode 100644 public/fonts/CommitMono-700-Regular.otf delete mode 100644 public/og-image.jpg delete mode 100644 public/resume.pdf delete mode 100644 resume/resume.typ delete mode 100644 src/components/BaseHead.astro delete mode 100644 src/components/FormattedDate.astro delete mode 100644 src/components/Header.astro delete mode 100644 src/components/LedgerLabel.astro delete mode 100644 src/components/PostCard.astro delete mode 100644 src/components/SectionHeading.astro delete mode 100644 src/components/SubtleLink.astro delete mode 100644 src/consts.ts delete mode 100644 src/content.config.ts delete mode 100644 src/content/blog/agentic-engineering-without-lock-in.md delete mode 100644 src/content/blog/introduction-to-functional-programming-in-javascript.md delete mode 100644 src/content/blog/use-an-object-instead-of-a-switch.md delete mode 100644 src/content/talks/from-prompts-to-predictable-user-interfaces.md delete mode 100644 src/env.d.ts delete mode 100644 src/layouts/BaseLayout.astro delete mode 100644 src/layouts/BlogPost.astro delete mode 100644 src/layouts/Talk.astro delete mode 100644 src/pages/index.astro delete mode 100644 src/pages/rss.xml.js delete mode 100644 src/pages/talks.astro delete mode 100644 src/pages/talks/[...slug].astro delete mode 100644 src/pages/writing.astro delete mode 100644 src/pages/writing/[...slug].astro delete mode 100644 src/styles/base.css delete mode 100644 src/utils.ts delete mode 100644 tsconfig.json delete mode 100644 vite.config.ts diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 6883fe1..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,31 +0,0 @@ -version: 2 -updates: - # Keep GitHub Actions up to date - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "monthly" - groups: - github-actions: - patterns: - - "*" - - # Keep npm dependencies up to date - - package-ecosystem: "npm" - directory: "/" - schedule: - interval: "weekly" - groups: - # Group all non-major updates together - dependencies: - patterns: - - "*" - update-types: - - "minor" - - "patch" - # Keep major updates separate for easier review - major-dependencies: - patterns: - - "*" - update-types: - - "major" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 6dc663d..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,80 +0,0 @@ -name: CI - -on: - push: - branches: [main] - pull_request: - branches: [main] - -jobs: - lint-and-format: - name: Lint & Format Check - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v6 - - - name: Setup pnpm - uses: pnpm/action-setup@v5 - with: - version: 10.32.1 - - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version-file: ".nvmrc" - cache: "pnpm" - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - - name: Check code formatting - run: pnpm run format:check - - type-check: - name: Type Check - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v6 - - - name: Setup pnpm - uses: pnpm/action-setup@v5 - with: - version: 10.32.1 - - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version-file: ".nvmrc" - cache: "pnpm" - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - - name: Run Astro type check - run: pnpm exec astro check - - build: - name: Build - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v6 - - - name: Setup pnpm - uses: pnpm/action-setup@v5 - with: - version: 10.32.1 - - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version-file: ".nvmrc" - cache: "pnpm" - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - - name: Build site - run: pnpm run build diff --git a/.gitignore b/.gitignore deleted file mode 100644 index ca44c56..0000000 --- a/.gitignore +++ /dev/null @@ -1,27 +0,0 @@ -# build output -dist/ - -# generated types -.astro/ - -# dependencies -node_modules/ - -# logs -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* - -# environment variables -.env -.env.production - -# macOS-specific files -.DS_Store - -# playwright -playwright-report/ -test-results/ -tests/visual.spec.ts-snapshots/ -.worktrees/ diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index 2bd5a0a..0000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -22 diff --git a/.superset/config.json b/.superset/config.json deleted file mode 100644 index 580d6d3..0000000 --- a/.superset/config.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "setup": ["pnpm install", "vp config"], - "teardown": [] -} diff --git a/.vite-hooks/pre-commit b/.vite-hooks/pre-commit deleted file mode 100755 index 85fb65b..0000000 --- a/.vite-hooks/pre-commit +++ /dev/null @@ -1 +0,0 @@ -vp staged diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index 56f043d..0000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "recommendations": ["astro-build.astro-vscode", "unifiedjs.vscode-mdx"], - "unwantedRecommendations": [] -} diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index d642209..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "command": "./node_modules/.bin/astro dev", - "name": "Development server", - "request": "launch", - "type": "node-terminal" - } - ] -} diff --git a/AGENTS.md b/AGENTS.md deleted file mode 100644 index f1e97de..0000000 --- a/AGENTS.md +++ /dev/null @@ -1,43 +0,0 @@ -# Agent Guide — ubmit.dev - -## Comms -- be extremely concise, drop grammar if needed - -## Commands (pnpm) -- dev: `pnpm run dev` (localhost:4321) -- build: `pnpm run build` (astro check + build) -- format: `pnpm run format` -- typecheck: `pnpm exec astro check` - -## Stack + tools -- package mgr: pnpm -- github: gh -- web automation: `agent-browser` (see `agent-browser --help`) -- use `agent-browser` for UI validation only after larger UI changes or a batch of small tweaks; skip for tiny single change if confident -- frontend tasks: use `/frontend-design` - -## Code style -- TS strict, no `any`, no default exports, inline `export` -- avoid new abstractions unless needed; prefer clear names over comments -- avoid helpers for trivial expressions -- no `try/catch` unless necessary -- Astro: use frontmatter (`---`), keep markup semantic -- formatting: Prettier (astro + tailwind plugins) - -## UI + styling -- Tailwind v4 only; use built-ins; rare globals -- avoid custom CSS classes/vars for typography if Tailwind utilities suffice; prefer components with inline utilities -- colors: Radix gray scale `--gray-1`…`--gray-12` -- fonts: Commit Mono (mono), Work Sans (sans) -- dark mode: `prefers-color-scheme` - -## Content -- blog: `src/content/blog/` (MD/MDX + frontmatter) -- validate via Zod in `src/content/config.ts` - -## Tests + CI -- CI jobs: lint-and-format, type-check, build - -## Git -- commits: Conventional Commits, small + intentional -- branches: prefix `gui/` diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index dd096a2..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1 +0,0 @@ -See AGENTS.md for agent instructions diff --git a/README.md b/README.md deleted file mode 100644 index d756464..0000000 --- a/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# ubmit.dev - -## 🚀 Project Structure - -```text -├── public/ -├── src/ -│   ├── components/ -│   ├── content/ -│   ├── layouts/ -│   └── pages/ -├── astro.config.mjs -├── README.md -├── package.json -└── tsconfig.json -``` - -Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name. - -There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components. - -The `src/content/` directory contains "collections" of related Markdown and MDX documents. Use `getCollection()` to retrieve posts from `src/content/blog/`, and type-check your frontmatter using an optional schema. See [Astro's Content Collections docs](https://docs.astro.build/en/guides/content-collections/) to learn more. - -Any static assets, like images, can be placed in the `public/` directory. - -## 🧞 Commands - -All commands are run from the root of the project, from a terminal: - -| Command | Action | -| :---------------------- | :-------------------------------------------- | -| `pnpm install` | Installs dependencies | -| `pnpm run dev` | Starts local dev server at `localhost:4321` | -| `pnpm run build` | Build your production site to `./dist/` | -| `pnpm run format` | Format code with Prettier | -| `pnpm run format:check` | Check code formatting without modifying files | -| `pnpm run astro check` | Type-check Astro files | diff --git a/astro.config.mjs b/astro.config.mjs deleted file mode 100644 index b18a1d9..0000000 --- a/astro.config.mjs +++ /dev/null @@ -1,41 +0,0 @@ -import { defineConfig } from "astro/config"; -import mdx from "@astrojs/mdx"; -import tailwindcss from "@tailwindcss/vite"; - -import sitemap from "@astrojs/sitemap"; - -// https://astro.build/config -export default defineConfig({ - site: "https://ubmit.dev", - markdown: { - shikiConfig: { - themes: { - light: "catppuccin-latte", - dark: "catppuccin-mocha", - }, - }, - }, - vite: { - plugins: [tailwindcss()], - }, - integrations: [mdx(), sitemap()], - redirects: { - "/twitter": "https://x.com/ubmit", - "/x": "https://x.com/ubmit", - "/linkedin": "https://www.linkedin.com/in/ubmit/", - "/github": "https://github.com/ubmit", - "/meet": "https://cal.com/ubmit/30min", - "/resume": "/resume.pdf", - /** - * Blog post redirects: Preserve SEO and prevent broken links. - * Blog posts were moved from root (/{slug}/) to /writing/{slug}/ route on Dec 23, 2025. - * These 301 redirects maintain backwards compatibility for existing URLs. - */ - "/agentic-engineering-without-lock-in/": - "/writing/agentic-engineering-without-lock-in/", - "/introduction-to-functional-programming-in-javascript/": - "/writing/introduction-to-functional-programming-in-javascript/", - "/use-an-object-instead-of-a-switch/": - "/writing/use-an-object-instead-of-a-switch/", - }, -}); diff --git a/conductor.json b/conductor.json deleted file mode 100644 index 8a98207..0000000 --- a/conductor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "scripts": { - "setup": "cp \"$CONDUCTOR_ROOT_PATH/.env\" .env; pnpm install; vp config", - "run": "pnpm run dev --port $CONDUCTOR_PORT", - "archive": "rm -rf \"$HOME/Library/Application Support/com.conductor.app.dev.$CONDUCTOR_WORKSPACE_NAME\"" - } -} diff --git a/package.json b/package.json deleted file mode 100644 index e5c557d..0000000 --- a/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "ubmit-dev", - "type": "module", - "version": "0.0.1", - "scripts": { - "dev": "astro dev", - "start": "astro dev", - "build": "astro build", - "preview": "astro preview", - "astro": "astro", - "format": "vp fmt ./src", - "format:check": "vp fmt --check ./src", - "resume:compile": "typst compile ./resume/resume.typ ./public/resume.pdf", - "resume:watch": "typst watch ./resume/resume.typ ./public/resume.pdf", - "prepare": "vp config" - }, - "dependencies": { - "@astrojs/check": "^0.9.8", - "@astrojs/mdx": "^5.0.2", - "@astrojs/rss": "^4.0.17", - "@astrojs/sitemap": "^3.7.1", - "@fontsource/work-sans": "^5.0.18", - "@radix-ui/colors": "^3.0.0", - "astro": "^6.0.6", - "chart.js": "^4.5.1", - "clsx": "^2.1.0", - "tailwind-merge": "^3.4.0", - "typescript": "^5.9.3" - }, - "devDependencies": { - "@astrojs/upgrade": "^0.7.1", - "@myriaddreamin/typst-ts-node-compiler": "0.7.0-rc2", - "@tailwindcss/typography": "^0.5.19", - "@tailwindcss/vite": "^4.1.18", - "tailwindcss": "^4.1.18", - "vite-plus": "latest" - }, - "packageManager": "pnpm@10.32.1", - "pnpm": { - "overrides": { - "vite": "npm:@voidzero-dev/vite-plus-core@latest", - "vitest": "npm:@voidzero-dev/vite-plus-test@latest" - } - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 2144ee7..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,5936 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -overrides: - vite: npm:@voidzero-dev/vite-plus-core@latest - vitest: npm:@voidzero-dev/vite-plus-test@latest - -importers: - - .: - dependencies: - '@astrojs/check': - specifier: ^0.9.8 - version: 0.9.8(prettier-plugin-astro@0.14.1)(prettier@3.8.1)(typescript@5.9.3) - '@astrojs/mdx': - specifier: ^5.0.2 - version: 5.0.2(astro@6.0.6(@types/node@24.12.0)(jiti@2.6.1)(rollup@4.59.0)(typescript@5.9.3)(yaml@2.8.2)) - '@astrojs/rss': - specifier: ^4.0.17 - version: 4.0.17 - '@astrojs/sitemap': - specifier: ^3.7.1 - version: 3.7.1 - '@fontsource/work-sans': - specifier: ^5.0.18 - version: 5.2.8 - '@radix-ui/colors': - specifier: ^3.0.0 - version: 3.0.0 - astro: - specifier: ^6.0.6 - version: 6.0.6(@types/node@24.12.0)(jiti@2.6.1)(rollup@4.59.0)(typescript@5.9.3)(yaml@2.8.2) - chart.js: - specifier: ^4.5.1 - version: 4.5.1 - clsx: - specifier: ^2.1.0 - version: 2.1.1 - tailwind-merge: - specifier: ^3.4.0 - version: 3.5.0 - typescript: - specifier: ^5.9.3 - version: 5.9.3 - devDependencies: - '@astrojs/upgrade': - specifier: ^0.7.1 - version: 0.7.1 - '@myriaddreamin/typst-ts-node-compiler': - specifier: 0.7.0-rc2 - version: 0.7.0-rc2 - '@tailwindcss/typography': - specifier: ^0.5.19 - version: 0.5.19(tailwindcss@4.2.2) - '@tailwindcss/vite': - specifier: ^4.1.18 - version: 4.2.2(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2)) - tailwindcss: - specifier: ^4.1.18 - version: 4.2.2 - vite-plus: - specifier: latest - version: 0.1.12(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(typescript@5.9.3)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(yaml@2.8.2) - -packages: - - '@astrojs/check@0.9.8': - resolution: {integrity: sha512-LDng8446QLS5ToKjRHd3bgUdirvemVVExV7nRyJfW2wV36xuv7vDxwy5NWN9zqeSEDgg0Tv84sP+T3yEq+Zlkw==} - hasBin: true - peerDependencies: - typescript: ^5.0.0 - - '@astrojs/cli-kit@0.4.1': - resolution: {integrity: sha512-bVzyKzEpIwqjihBU/aUzt1LQckJuHK0agd3/ITdXhPUYculrc6K1/K7H+XG4rwjXtg+ikT3PM05V1MVYWiIvQw==} - engines: {node: '>=18.14.1'} - - '@astrojs/compiler@2.13.1': - resolution: {integrity: sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==} - - '@astrojs/compiler@3.0.1': - resolution: {integrity: sha512-z97oYbdebO5aoWzuJ/8q5hLK232+17KcLZ7cJ8BCWk6+qNzVxn/gftC0KzMBUTD8WAaBkPpNSQK6PXLnNrZ0CA==} - - '@astrojs/internal-helpers@0.8.0': - resolution: {integrity: sha512-J56GrhEiV+4dmrGLPNOl2pZjpHXAndWVyiVDYGDuw6MWKpBSEMLdFxHzeM/6sqaknw9M+HFfHZAcvi3OfT3D/w==} - - '@astrojs/language-server@2.16.6': - resolution: {integrity: sha512-N990lu+HSFiG57owR0XBkr02BYMgiLCshLf+4QG4v6jjSWkBeQGnzqi+E1L08xFPPJ7eEeXnxPXGLaVv5pa4Ug==} - hasBin: true - peerDependencies: - prettier: ^3.0.0 - prettier-plugin-astro: '>=0.11.0' - peerDependenciesMeta: - prettier: - optional: true - prettier-plugin-astro: - optional: true - - '@astrojs/markdown-remark@7.0.1': - resolution: {integrity: sha512-zAfLJmn07u9SlDNNHTpjv0RT4F8D4k54NR7ReRas8CO4OeGoqSvOuKwqCFg2/cqN3wHwdWlK/7Yv/lMXlhVIaw==} - - '@astrojs/mdx@5.0.2': - resolution: {integrity: sha512-0as6odPH9ZQhS3pdH9dWmVOwgXuDtytJiE4VvYgR0lSFBvF4PSTyE0HdODHm/d7dBghvWTPc2bQaBm4y4nTBNw==} - engines: {node: '>=22.12.0'} - peerDependencies: - astro: ^6.0.0 - - '@astrojs/prism@4.0.1': - resolution: {integrity: sha512-nksZQVjlferuWzhPsBpQ1JE5XuKAf1id1/9Hj4a9KG4+ofrlzxUUwX4YGQF/SuDiuiGKEnzopGOt38F3AnVWsQ==} - engines: {node: '>=22.12.0'} - - '@astrojs/rss@4.0.17': - resolution: {integrity: sha512-eV+wdMbeVKC9+sPaV0LN8JL1LGo9YAh3GKl4Ou4nzMNLmXM/aswYpSGxVEAuHilgBZ6/++/Pv08ICmuOqX107w==} - - '@astrojs/sitemap@3.7.1': - resolution: {integrity: sha512-IzQqdTeskaMX+QDZCzMuJIp8A8C1vgzMBp/NmHNnadepHYNHcxQdGLQZYfkbd2EbRXUfOS+UDIKx8sKg0oWVdw==} - - '@astrojs/telemetry@3.3.0': - resolution: {integrity: sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==} - engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} - - '@astrojs/upgrade@0.7.1': - resolution: {integrity: sha512-ToVSYvDF7y0b1CxgPgnrY1uTO+ES0yWa9j806nDvrDu0atkPjuKNgeGvEMJuLGbl2KbjrVeg2us8rZxB1FzMVg==} - engines: {node: '>=22.12.0'} - hasBin: true - - '@astrojs/yaml2ts@0.2.3': - resolution: {integrity: sha512-PJzRmgQzUxI2uwpdX2lXSHtP4G8ocp24/t+bZyf5Fy0SZLSF9f9KXZoMlFM/XCGue+B0nH/2IZ7FpBYQATBsCg==} - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.29.2': - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} - engines: {node: '>=6.9.0'} - - '@capsizecss/unpack@4.0.0': - resolution: {integrity: sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==} - engines: {node: '>=18'} - - '@clack/core@1.1.0': - resolution: {integrity: sha512-SVcm4Dqm2ukn64/8Gub2wnlA5nS2iWJyCkdNHcvNHPIeBTGojpdJ+9cZKwLfmqy7irD4N5qLteSilJlE0WLAtA==} - - '@clack/prompts@1.1.0': - resolution: {integrity: sha512-pkqbPGtohJAvm4Dphs2M8xE29ggupihHdy1x84HNojZuMtFsHiUlRvqD24tM2+XmI+61LlfNceM3Wr7U5QES5g==} - - '@emmetio/abbreviation@2.3.3': - resolution: {integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==} - - '@emmetio/css-abbreviation@2.1.8': - resolution: {integrity: sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==} - - '@emmetio/css-parser@0.4.1': - resolution: {integrity: sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ==} - - '@emmetio/html-matcher@1.3.0': - resolution: {integrity: sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==} - - '@emmetio/scanner@1.0.4': - resolution: {integrity: sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==} - - '@emmetio/stream-reader-utils@0.1.0': - resolution: {integrity: sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==} - - '@emmetio/stream-reader@2.2.0': - resolution: {integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==} - - '@emnapi/runtime@1.9.0': - resolution: {integrity: sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==} - - '@esbuild/aix-ppc64@0.27.4': - resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.27.4': - resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.27.4': - resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.27.4': - resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.27.4': - resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.27.4': - resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.27.4': - resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.27.4': - resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.27.4': - resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.27.4': - resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.27.4': - resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.27.4': - resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.27.4': - resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.27.4': - resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.27.4': - resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.27.4': - resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.27.4': - resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.27.4': - resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.27.4': - resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.27.4': - resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.27.4': - resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.27.4': - resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.27.4': - resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.27.4': - resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.27.4': - resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.27.4': - resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@fontsource/work-sans@5.2.8': - resolution: {integrity: sha512-6LaHjVVgts+rnrcqvEkP2+iUB/jw1oDSYsGO0+TltAhnWki9Hnf/UGpgMQh2jcm0GEH8VqCPnq4PpmHLFzxXtQ==} - - '@img/colour@1.1.0': - resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} - engines: {node: '>=18'} - - '@img/sharp-darwin-arm64@0.34.5': - resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] - - '@img/sharp-darwin-x64@0.34.5': - resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-darwin-arm64@1.2.4': - resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} - cpu: [arm64] - os: [darwin] - - '@img/sharp-libvips-darwin-x64@1.2.4': - resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-linux-arm64@1.2.4': - resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-arm@1.2.4': - resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-ppc64@1.2.4': - resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-riscv64@1.2.4': - resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-s390x@1.2.4': - resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-x64@1.2.4': - resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@img/sharp-linux-arm64@0.34.5': - resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-arm@0.34.5': - resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-ppc64@0.34.5': - resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-riscv64@0.34.5': - resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-s390x@0.34.5': - resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-x64@0.34.5': - resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@img/sharp-linuxmusl-arm64@0.34.5': - resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@img/sharp-linuxmusl-x64@0.34.5': - resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@img/sharp-wasm32@0.34.5': - resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - - '@img/sharp-win32-arm64@0.34.5': - resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [win32] - - '@img/sharp-win32-ia32@0.34.5': - resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] - - '@img/sharp-win32-x64@0.34.5': - resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - - '@kurkle/color@0.3.4': - resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==} - - '@mdx-js/mdx@3.1.1': - resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} - - '@myriaddreamin/typst-ts-node-compiler-android-arm-eabi@0.7.0-rc2': - resolution: {integrity: sha512-OnfUH3XbGel3+QUZc4G3+V1npXYGCDc3b7WhFw88ihCH/Xpw+NNjidLrFkY6kK2a5vVHnY2AEG0hJSwZzvOw0Q==} - engines: {node: '>= 10'} - cpu: [arm] - os: [android] - - '@myriaddreamin/typst-ts-node-compiler-android-arm64@0.7.0-rc2': - resolution: {integrity: sha512-LR76t0jXcKp0F0vMViinS6+RBxyTFqBUFiUoZcGRPQD/DhLNBReTS7tJ14Jp5Mwuqe76RUshSeQSrKbJUoaQ3A==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - - '@myriaddreamin/typst-ts-node-compiler-darwin-arm64@0.7.0-rc2': - resolution: {integrity: sha512-xJndoR6Kn6UUYQDui41R7tx/avpfyY6c8dV5udyHP5FkeUSVgRAoFcjOtlI9Lpc84alFusIPwp4QR6V+xjOAhA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@myriaddreamin/typst-ts-node-compiler-darwin-x64@0.7.0-rc2': - resolution: {integrity: sha512-kmh37eshR40LVAM6P59uLWEYt5ffyUhKWcBOzsd/1QYNtsH28kLRUOShugAdxQN164Re+47z2nkSgd7HejASFg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@myriaddreamin/typst-ts-node-compiler-linux-arm-gnueabihf@0.7.0-rc2': - resolution: {integrity: sha512-giroa96wdN0mxARN1NbRrKp9t+qqUNUSBzWBQp1RMPqGNPwtahEqJnpf5zmRSrEJYhEzVZbs9+CwxFjj5lw7VQ==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@myriaddreamin/typst-ts-node-compiler-linux-arm64-gnu@0.7.0-rc2': - resolution: {integrity: sha512-pDdc6hQrGdqr0BT+nNe0tJmdcmyp9yhn3WDeGlTi4YpYG2IybP7fBVIwDI3Mzr/IdCMtPbQxew4AfmAoJwIz6A==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@myriaddreamin/typst-ts-node-compiler-linux-arm64-musl@0.7.0-rc2': - resolution: {integrity: sha512-wNEYhpjuwnhd7VrArL4EHd652z8YEGxG6C8haUjkVhGseFBetrL51yD1Ymg5fWEa+3+O4oZ1+IUN0Fu4/fKgHw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@myriaddreamin/typst-ts-node-compiler-linux-x64-gnu@0.7.0-rc2': - resolution: {integrity: sha512-Z4i78r5MtFDYGHqgYrWfAcvqb3xW49WlLI35l1G818lYmkmGZAjAkVKb946ChOx+bBQIuMWefykCABLOlBkgKA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@myriaddreamin/typst-ts-node-compiler-linux-x64-musl@0.7.0-rc2': - resolution: {integrity: sha512-PXteqxa3RITEh5v3lQ4c5VGn16KHvUKVXjSZ2BudCe6C0gEuOO16JS9JU8DZVwd0dbtH0Mky6Q5V7tf6erpXGA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@myriaddreamin/typst-ts-node-compiler-win32-arm64-msvc@0.7.0-rc2': - resolution: {integrity: sha512-wN1tjdRxabJzT8WuDVdOs2QKQuMzKht3QWPU/H7OjuDta1WcrYs/3IKnF67HNiphe/33MU8bKeih2GBVU+AuLg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@myriaddreamin/typst-ts-node-compiler-win32-x64-msvc@0.7.0-rc2': - resolution: {integrity: sha512-6DUe2iepqptLkJsOdUC4yHWM3/USCW82YieA+lPAeky37XSJ5KuLuLL6zOQiQt3IWot7jB+m9oKIvBqJh7yriA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@myriaddreamin/typst-ts-node-compiler@0.7.0-rc2': - resolution: {integrity: sha512-a4Vicil6Tu0S87C3+J2EMtFDdQEmT18zYAW6Srmt32lgjrTq3HLy+WN0lA/bgaBgw2wNEkXdogz3yRg49vXs8w==} - engines: {node: '>= 10'} - - '@oslojs/encoding@1.1.0': - resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} - - '@oxc-project/runtime@0.115.0': - resolution: {integrity: sha512-Rg8Wlt5dCbXhQnsXPrkOjL1DTSvXLgb2R/KYfnf1/K+R0k6UMLEmbQXPM+kwrWqSmWA2t0B1EtHy2/3zikQpvQ==} - engines: {node: ^20.19.0 || >=22.12.0} - - '@oxc-project/types@0.115.0': - resolution: {integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==} - - '@oxfmt/binding-android-arm-eabi@0.40.0': - resolution: {integrity: sha512-S6zd5r1w/HmqR8t0CTnGjFTBLDq2QKORPwriCHxo4xFNuhmOTABGjPaNvCJJVnrKBLsohOeiDX3YqQfJPF+FXw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [android] - - '@oxfmt/binding-android-arm64@0.40.0': - resolution: {integrity: sha512-/mbS9UUP/5Vbl2D6osIdcYiP0oie63LKMoTyGj5hyMCK/SFkl3EhtyRAfdjPvuvHC0SXdW6ePaTKkBSq1SNcIw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - - '@oxfmt/binding-darwin-arm64@0.40.0': - resolution: {integrity: sha512-wRt8fRdfLiEhnRMBonlIbKrJWixoEmn6KCjKE9PElnrSDSXETGZfPb8ee+nQNTobXkCVvVLytp2o0obAsxl78Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@oxfmt/binding-darwin-x64@0.40.0': - resolution: {integrity: sha512-fzowhqbOE/NRy+AE5ob0+Y4X243WbWzDb00W+pKwD7d9tOqsAFbtWUwIyqqCoCLxj791m2xXIEeLH/3uz7zCCg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@oxfmt/binding-freebsd-x64@0.40.0': - resolution: {integrity: sha512-agZ9ITaqdBjcerRRFEHB8s0OyVcQW8F9ZxsszjxzeSthQ4fcN2MuOtQFWec1ed8/lDa50jSLHVE2/xPmTgtCfQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - - '@oxfmt/binding-linux-arm-gnueabihf@0.40.0': - resolution: {integrity: sha512-ZM2oQ47p28TP1DVIp7HL1QoMUgqlBFHey0ksHct7tMXoU5BqjNvPWw7888azzMt25lnyPODVuye1wvNbvVUFOA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@oxfmt/binding-linux-arm-musleabihf@0.40.0': - resolution: {integrity: sha512-RBFPAxRAIsMisKM47Oe6Lwdv6agZYLz02CUhVCD1sOv5ajAcRMrnwCFBPWwGXpazToW2mjnZxFos8TuFjTU15A==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@oxfmt/binding-linux-arm64-gnu@0.40.0': - resolution: {integrity: sha512-Nb2XbQ+wV3W2jSIihXdPj7k83eOxeSgYP3N/SRXvQ6ZYPIk6Q86qEh5Gl/7OitX3bQoQrESqm1yMLvZV8/J7dA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@oxfmt/binding-linux-arm64-musl@0.40.0': - resolution: {integrity: sha512-tGmWhLD/0YMotCdfezlT6tC/MJG/wKpo4vnQ3Cq+4eBk/BwNv7EmkD0VkD5F/dYkT3b8FNU01X2e8vvJuWoM1w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@oxfmt/binding-linux-ppc64-gnu@0.40.0': - resolution: {integrity: sha512-rVbFyM3e7YhkVnp0IVYjaSHfrBWcTRWb60LEcdNAJcE2mbhTpbqKufx0FrhWfoxOrW/+7UJonAOShoFFLigDqQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@oxfmt/binding-linux-riscv64-gnu@0.40.0': - resolution: {integrity: sha512-3ZqBw14JtWeEoLiioJcXSJz8RQyPE+3jLARnYM1HdPzZG4vk+Ua8CUupt2+d+vSAvMyaQBTN2dZK+kbBS/j5mA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@oxfmt/binding-linux-riscv64-musl@0.40.0': - resolution: {integrity: sha512-JJ4PPSdcbGBjPvb+O7xYm2FmAsKCyuEMYhqatBAHMp/6TA6rVlf9Z/sYPa4/3Bommb+8nndm15SPFRHEPU5qFA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@oxfmt/binding-linux-s390x-gnu@0.40.0': - resolution: {integrity: sha512-Kp0zNJoX9Ik77wUya2tpBY3W9f40VUoMQLWVaob5SgCrblH/t2xr/9B2bWHfs0WCefuGmqXcB+t0Lq77sbBmZw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@oxfmt/binding-linux-x64-gnu@0.40.0': - resolution: {integrity: sha512-7YTCNzleWTaQTqNGUNQ66qVjpoV6DjbCOea+RnpMBly2bpzrI/uu7Rr+2zcgRfNxyjXaFTVQKaRKjqVdeUfeVA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@oxfmt/binding-linux-x64-musl@0.40.0': - resolution: {integrity: sha512-hWnSzJ0oegeOwfOEeejYXfBqmnRGHusgtHfCPzmvJvHTwy1s3Neo59UKc1CmpE3zxvrCzJoVHos0rr97GHMNPw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@oxfmt/binding-openharmony-arm64@0.40.0': - resolution: {integrity: sha512-28sJC1lR4qtBJGzSRRbPnSW3GxU2+4YyQFE6rCmsUYqZ5XYH8jg0/w+CvEzQ8TuAQz5zLkcA25nFQGwoU0PT3Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - - '@oxfmt/binding-win32-arm64-msvc@0.40.0': - resolution: {integrity: sha512-cDkRnyT0dqwF5oIX1Cv59HKCeZQFbWWdUpXa3uvnHFT2iwYSSZspkhgjXjU6iDp5pFPaAEAe9FIbMoTgkTmKPg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@oxfmt/binding-win32-ia32-msvc@0.40.0': - resolution: {integrity: sha512-7rPemBJjqm5Gkv6ZRCPvK8lE6AqQ/2z31DRdWazyx2ZvaSgL7QGofHXHNouRpPvNsT9yxRNQJgigsWkc+0qg4w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ia32] - os: [win32] - - '@oxfmt/binding-win32-x64-msvc@0.40.0': - resolution: {integrity: sha512-/Zmj0yTYSvmha6TG1QnoLqVT7ZMRDqXvFXXBQpIjteEwx9qvUYMBH2xbiOFhDeMUJkGwC3D6fdKsFtaqUvkwNA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@oxlint-tsgolint/darwin-arm64@0.17.0': - resolution: {integrity: sha512-z3XwCDuOAKgk7bO4y5tyH8Zogwr51G56R0XGKC3tlAbrAq8DecoxAd3qhRZqWBMG2Gzl5bWU3Ghu7lrxuLPzYw==} - cpu: [arm64] - os: [darwin] - - '@oxlint-tsgolint/darwin-x64@0.17.0': - resolution: {integrity: sha512-TZgVXy0MtI8nt0MYiceuZhHPwHcwlIZ/YwzFTAKrgdHiTvVzFbqHVdXi5wbZfT/o1nHGw9fbGWPlb6qKZ4uZ9Q==} - cpu: [x64] - os: [darwin] - - '@oxlint-tsgolint/linux-arm64@0.17.0': - resolution: {integrity: sha512-IDfhFl/Y8bjidCvAP6QAxVyBsl78TmfCHlfjtEv2XtJXgYmIwzv6muO18XMp74SZ2qAyD4y2n2dUedrmghGHeA==} - cpu: [arm64] - os: [linux] - - '@oxlint-tsgolint/linux-x64@0.17.0': - resolution: {integrity: sha512-Bgdgqx/m8EnfjmmlRLEeYy9Yhdt1GdFrMr5mTu/NyLRGkB1C9VLAikdxB7U9QambAGTAmjMbHNFDFk8Vx69Huw==} - cpu: [x64] - os: [linux] - - '@oxlint-tsgolint/win32-arm64@0.17.0': - resolution: {integrity: sha512-dO6wyKMDqFWh1vwr+zNZS7/ovlfGgl4S3P1LDy4CKjP6V6NGtdmEwWkWax8j/I8RzGZdfXKnoUfb/qhVg5bx0w==} - cpu: [arm64] - os: [win32] - - '@oxlint-tsgolint/win32-x64@0.17.0': - resolution: {integrity: sha512-lPGYFp3yX2nh6hLTpIuMnJbZnt3Df42VkoA/fSkMYi2a/LXdDytQGpgZOrb5j47TICARd34RauKm0P3OA4Oxbw==} - cpu: [x64] - os: [win32] - - '@oxlint/binding-android-arm-eabi@1.55.0': - resolution: {integrity: sha512-NhvgAhncTSOhRahQSCnkK/4YIGPjTmhPurQQ2dwt2IvwCMTvZRW5vF2K10UBOxFve4GZDMw6LtXZdC2qeuYIVQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [android] - - '@oxlint/binding-android-arm64@1.55.0': - resolution: {integrity: sha512-P9iWRh+Ugqhg+D7rkc7boHX8o3H2h7YPcZHQIgvVBgnua5tk4LR2L+IBlreZs58/95cd2x3/004p5VsQM9z4SA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - - '@oxlint/binding-darwin-arm64@1.55.0': - resolution: {integrity: sha512-esakkJIt7WFAhT30P/Qzn96ehFpzdZ1mNuzpOb8SCW7lI4oB8VsyQnkSHREM671jfpuBb/o2ppzBCx5l0jpgMA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@oxlint/binding-darwin-x64@1.55.0': - resolution: {integrity: sha512-xDMFRCCAEK9fOH6As2z8ELsC+VDGSFRHwIKVSilw+xhgLwTDFu37rtmRbmUlx8rRGS6cWKQPTc47AVxAZEVVPQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@oxlint/binding-freebsd-x64@1.55.0': - resolution: {integrity: sha512-mYZqnwUD7ALCRxGenyLd1uuG+rHCL+OTT6S8FcAbVm/ZT2AZMGjvibp3F6k1SKOb2aeqFATmwRykrE41Q0GWVw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - - '@oxlint/binding-linux-arm-gnueabihf@1.55.0': - resolution: {integrity: sha512-LcX6RYcF9vL9ESGwJW3yyIZ/d/ouzdOKXxCdey1q0XJOW1asrHsIg5MmyKdEBR4plQx+shvYeQne7AzW5f3T1w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@oxlint/binding-linux-arm-musleabihf@1.55.0': - resolution: {integrity: sha512-C+8GS1rPtK+dI7mJFkqoRBkDuqbrNihnyYQsJPS9ez+8zF9JzfvU19lawqt4l/Y23o5uQswE/DORa8aiXUih3w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@oxlint/binding-linux-arm64-gnu@1.55.0': - resolution: {integrity: sha512-ErLE4XbmcCopA4/CIDiH6J1IAaDOMnf/KSx/aFObs4/OjAAM3sFKWGZ57pNOMxhhyBdcmcXwYymph9GwcpcqgQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@oxlint/binding-linux-arm64-musl@1.55.0': - resolution: {integrity: sha512-/kp65avi6zZfqEng56TTuhiy3P/3pgklKIdf38yvYeJ9/PgEeRA2A2AqKAKbZBNAqUzrzHhz9jF6j/PZvhJzTQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@oxlint/binding-linux-ppc64-gnu@1.55.0': - resolution: {integrity: sha512-A6pTdXwcEEwL/nmz0eUJ6WxmxcoIS+97GbH96gikAyre3s5deC7sts38ZVVowjS2QQFuSWkpA4ZmQC0jZSNvJQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@oxlint/binding-linux-riscv64-gnu@1.55.0': - resolution: {integrity: sha512-clj0lnIN+V52G9tdtZl0LbdTSurnZ1NZj92Je5X4lC7gP5jiCSW+Y/oiDiSauBAD4wrHt2S7nN3pA0zfKYK/6Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@oxlint/binding-linux-riscv64-musl@1.55.0': - resolution: {integrity: sha512-NNu08pllN5x/O94/sgR3DA8lbrGBnTHsINZZR0hcav1sj79ksTiKKm1mRzvZvacwQ0hUnGinFo+JO75ok2PxYg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@oxlint/binding-linux-s390x-gnu@1.55.0': - resolution: {integrity: sha512-BvfQz3PRlWZRoEZ17dZCqgQsMRdpzGZomJkVATwCIGhHVVeHJMQdmdXPSjcT1DCNUrOjXnVyj1RGDj5+/Je2+Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@oxlint/binding-linux-x64-gnu@1.55.0': - resolution: {integrity: sha512-ngSOoFCSBMKVQd24H8zkbcBNc7EHhjnF1sv3mC9NNXQ/4rRjI/4Dj9+9XoDZeFEkF1SX1COSBXF1b2Pr9rqdEw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@oxlint/binding-linux-x64-musl@1.55.0': - resolution: {integrity: sha512-BDpP7W8GlaG7BR6QjGZAleYzxoyKc/D24spZIF2mB3XsfALQJJT/OBmP8YpeTb1rveFSBHzl8T7l0aqwkWNdGA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@oxlint/binding-openharmony-arm64@1.55.0': - resolution: {integrity: sha512-PS6GFvmde/pc3fCA2Srt51glr8Lcxhpf6WIBFfLphndjRrD34NEcses4TSxQrEcxYo6qVywGfylM0ZhSCF2gGA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - - '@oxlint/binding-win32-arm64-msvc@1.55.0': - resolution: {integrity: sha512-P6JcLJGs/q1UOvDLzN8otd9JsH4tsuuPDv+p7aHqHM3PrKmYdmUvkNj4K327PTd35AYcznOCN+l4ZOaq76QzSw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@oxlint/binding-win32-ia32-msvc@1.55.0': - resolution: {integrity: sha512-gzkk4zE2zsE+WmRxFOiAZHpCpUNDFytEakqNXoNHW+PnYEOTPKDdW6nrzgSeTbGKVPXNAKQnRnMgrh7+n3Xueg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ia32] - os: [win32] - - '@oxlint/binding-win32-x64-msvc@1.55.0': - resolution: {integrity: sha512-ZFALNow2/og75gvYzNP7qe+rREQ5xunktwA+lgykoozHZ6hw9bqg4fn5j2UvG4gIn1FXqrZHkOAXuPf5+GOYTQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@polka/url@1.0.0-next.29': - resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - - '@radix-ui/colors@3.0.0': - resolution: {integrity: sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==} - - '@rollup/pluginutils@5.3.0': - resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/rollup-android-arm-eabi@4.59.0': - resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.59.0': - resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.59.0': - resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.59.0': - resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.59.0': - resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.59.0': - resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.59.0': - resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm-musleabihf@4.59.0': - resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} - cpu: [arm] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-arm64-gnu@4.59.0': - resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm64-musl@4.59.0': - resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-loong64-gnu@4.59.0': - resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} - cpu: [loong64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-loong64-musl@4.59.0': - resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} - cpu: [loong64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-ppc64-gnu@4.59.0': - resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-ppc64-musl@4.59.0': - resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} - cpu: [ppc64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-riscv64-gnu@4.59.0': - resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-riscv64-musl@4.59.0': - resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-s390x-gnu@4.59.0': - resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-gnu@4.59.0': - resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-musl@4.59.0': - resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@rollup/rollup-openbsd-x64@4.59.0': - resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.59.0': - resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.59.0': - resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.59.0': - resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.59.0': - resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.59.0': - resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} - cpu: [x64] - os: [win32] - - '@shikijs/core@4.0.2': - resolution: {integrity: sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==} - engines: {node: '>=20'} - - '@shikijs/engine-javascript@4.0.2': - resolution: {integrity: sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag==} - engines: {node: '>=20'} - - '@shikijs/engine-oniguruma@4.0.2': - resolution: {integrity: sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==} - engines: {node: '>=20'} - - '@shikijs/langs@4.0.2': - resolution: {integrity: sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==} - engines: {node: '>=20'} - - '@shikijs/primitive@4.0.2': - resolution: {integrity: sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw==} - engines: {node: '>=20'} - - '@shikijs/themes@4.0.2': - resolution: {integrity: sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==} - engines: {node: '>=20'} - - '@shikijs/types@4.0.2': - resolution: {integrity: sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==} - engines: {node: '>=20'} - - '@shikijs/vscode-textmate@10.0.2': - resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - - '@standard-schema/spec@1.1.0': - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - - '@tailwindcss/node@4.2.2': - resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==} - - '@tailwindcss/oxide-android-arm64@4.2.2': - resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [android] - - '@tailwindcss/oxide-darwin-arm64@4.2.2': - resolution: {integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [darwin] - - '@tailwindcss/oxide-darwin-x64@4.2.2': - resolution: {integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==} - engines: {node: '>= 20'} - cpu: [x64] - os: [darwin] - - '@tailwindcss/oxide-freebsd-x64@4.2.2': - resolution: {integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==} - engines: {node: '>= 20'} - cpu: [x64] - os: [freebsd] - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': - resolution: {integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==} - engines: {node: '>= 20'} - cpu: [arm] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': - resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@tailwindcss/oxide-linux-arm64-musl@4.2.2': - resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@tailwindcss/oxide-linux-x64-gnu@4.2.2': - resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==} - engines: {node: '>= 20'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@tailwindcss/oxide-linux-x64-musl@4.2.2': - resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==} - engines: {node: '>= 20'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@tailwindcss/oxide-wasm32-wasi@4.2.2': - resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - bundledDependencies: - - '@napi-rs/wasm-runtime' - - '@emnapi/core' - - '@emnapi/runtime' - - '@tybys/wasm-util' - - '@emnapi/wasi-threads' - - tslib - - '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': - resolution: {integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [win32] - - '@tailwindcss/oxide-win32-x64-msvc@4.2.2': - resolution: {integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==} - engines: {node: '>= 20'} - cpu: [x64] - os: [win32] - - '@tailwindcss/oxide@4.2.2': - resolution: {integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==} - engines: {node: '>= 20'} - - '@tailwindcss/typography@0.5.19': - resolution: {integrity: sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' - - '@tailwindcss/vite@4.2.2': - resolution: {integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==} - peerDependencies: - vite: ^5.2.0 || ^6 || ^7 || ^8 - - '@types/chai@5.2.3': - resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} - - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - - '@types/deep-eql@4.0.2': - resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - - '@types/estree-jsx@1.0.5': - resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - - '@types/mdx@2.0.13': - resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - - '@types/nlcst@2.0.3': - resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} - - '@types/node@24.12.0': - resolution: {integrity: sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==} - - '@types/sax@1.2.7': - resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} - - '@types/unist@2.0.11': - resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - - '@voidzero-dev/vite-plus-core@0.1.12': - resolution: {integrity: sha512-j8YNe7A+8JcSoddztf5whvom/yJ7OKUO3Y5a3UoLIUmOL8YEKVv5nPANrxJ7eaFfHJoMnBEwzBpq1YVZ+H3uPA==} - engines: {node: ^20.19.0 || >=22.12.0} - peerDependencies: - '@arethetypeswrong/core': ^0.18.1 - '@tsdown/css': 0.21.3 - '@tsdown/exe': 0.21.3 - '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.0.0-alpha.31 - esbuild: ^0.27.0 - jiti: '>=1.21.0' - less: ^4.0.0 - publint: ^0.3.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 - typescript: ^5.0.0 - unplugin-unused: ^0.5.0 - yaml: ^2.4.2 - peerDependenciesMeta: - '@arethetypeswrong/core': - optional: true - '@tsdown/css': - optional: true - '@tsdown/exe': - optional: true - '@types/node': - optional: true - '@vitejs/devtools': - optional: true - esbuild: - optional: true - jiti: - optional: true - less: - optional: true - publint: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - typescript: - optional: true - unplugin-unused: - optional: true - yaml: - optional: true - - '@voidzero-dev/vite-plus-darwin-arm64@0.1.12': - resolution: {integrity: sha512-tYQrfmcLxIqqr/de00oN7ayu+rYobEOjyR9AxoeJoNUqRyNQCdT0A5vg78kJNPaQCyL6ctgRRvpEKr0WHVmduQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@voidzero-dev/vite-plus-darwin-x64@0.1.12': - resolution: {integrity: sha512-852hO/Onx9Z5u0tOYOVEUVzYJUmWdlHeqYnNT6pj0IClgVp0+KSabxr7A2paTWEFWp6XbKWvqw5Y5cVwUV3A6Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.12': - resolution: {integrity: sha512-/gTh4tGyJKCNBn9SZUs3sq9QVRUmyuyseZefBgS223QRxdwFaxc7tIKaw91X59WXXYOzUYZOD5zsTcaIF4hc9A==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.12': - resolution: {integrity: sha512-9oN9ITjK/Xq9Werx+6G6jnI3+F1S3g9lB36J1VAHyRlAEtuiCDV0E3YMoW2O7KzM/PlodZIZ8LStVkH7aA5ZCw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@voidzero-dev/vite-plus-test@0.1.12': - resolution: {integrity: sha512-EE8Y2vQvqS4c/1qSa7qlhUY9koAG6wYev0NFAtDZsijQCHUqE7nYXGJYnyUInAE6GX4zlQDGg7tf2DAl+CISYw==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/ui': 4.1.0 - happy-dom: '*' - jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - - '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.12': - resolution: {integrity: sha512-JanAb6Y+6BmPhKNLvpZB/syeyY99bt7EPJCaLlbaCt3V0Y2Iw7c7dWBM4Sg4GZ7szGYdGw385fRz0n2M32f1rg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.12': - resolution: {integrity: sha512-Ei/UtTTp7UgeEGyV83jhDpSMXhwaZZzfS7Xiaj+zj80GGOwsBre0i+oHGZ7+TuVsZ7Im0sD8IZ9enCpKpV//AQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@volar/kit@2.4.28': - resolution: {integrity: sha512-cKX4vK9dtZvDRaAzeoUdaAJEew6IdxHNCRrdp5Kvcl6zZOqb6jTOfk3kXkIkG3T7oTFXguEMt5+9ptyqYR84Pg==} - peerDependencies: - typescript: '*' - - '@volar/language-core@2.4.28': - resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} - - '@volar/language-server@2.4.28': - resolution: {integrity: sha512-NqcLnE5gERKuS4PUFwlhMxf6vqYo7hXtbMFbViXcbVkbZ905AIVWhnSo0ZNBC2V127H1/2zP7RvVOVnyITFfBw==} - - '@volar/language-service@2.4.28': - resolution: {integrity: sha512-Rh/wYCZJrI5vCwMk9xyw/Z+MsWxlJY1rmMZPsxUoJKfzIRjS/NF1NmnuEcrMbEVGja00aVpCsInJfixQTMdvLw==} - - '@volar/source-map@2.4.28': - resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==} - - '@volar/typescript@2.4.28': - resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} - - '@vscode/emmet-helper@2.11.0': - resolution: {integrity: sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==} - - '@vscode/l10n@0.0.18': - resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} - engines: {node: '>=0.4.0'} - hasBin: true - - ajv-draft-04@1.0.0: - resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} - peerDependencies: - ajv: ^8.5.0 - peerDependenciesMeta: - ajv: - optional: true - - ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} - - ansi-escapes@5.0.0: - resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} - engines: {node: '>=12'} - - ansi-escapes@7.3.0: - resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} - engines: {node: '>=18'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} - - array-iterate@2.0.1: - resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} - - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - - astring@1.9.0: - resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} - hasBin: true - - astro@6.0.6: - resolution: {integrity: sha512-Fg25tok0RF+ToCcfdfNdtkv7MutTfbE0Lc4UhZpQyoc8/iiTdAaNw1nHPxPD6Nfa/ql3lGAp9uOWaTTnnFY2Zg==} - engines: {node: '>=22.12.0', npm: '>=9.6.5', pnpm: '>=7.1.0'} - hasBin: true - - axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} - - bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - - ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - - character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - - character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - - character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - - character-reference-invalid@2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - - chart.js@4.5.1: - resolution: {integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==} - engines: {pnpm: '>=8'} - - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - - chokidar@5.0.0: - resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} - engines: {node: '>= 20.19.0'} - - ci-info@4.4.0: - resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} - engines: {node: '>=8'} - - cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - collapse-white-space@2.1.0: - resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - - commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} - - common-ancestor-path@2.0.0: - resolution: {integrity: sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==} - engines: {node: '>= 18'} - - cookie-es@1.2.2: - resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} - - cookie@1.1.1: - resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} - engines: {node: '>=18'} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - crossws@0.3.5: - resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} - - css-select@5.2.2: - resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - - css-tree@2.2.1: - resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - - css-tree@3.2.1: - resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - - css-what@6.2.2: - resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} - engines: {node: '>= 6'} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - csso@5.0.5: - resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decode-named-character-reference@1.3.0: - resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} - - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - destr@2.0.5: - resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} - - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} - - devalue@5.6.4: - resolution: {integrity: sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==} - - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - - diff@8.0.3: - resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==} - engines: {node: '>=0.3.1'} - - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - - dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - - domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - - dset@3.1.4: - resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} - engines: {node: '>=4'} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - emmet@2.4.11: - resolution: {integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - enhanced-resolve@5.20.1: - resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} - engines: {node: '>=10.13.0'} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} - - environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} - - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - - es-module-lexer@2.0.0: - resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} - - esast-util-from-estree@2.0.0: - resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} - - esast-util-from-js@2.0.1: - resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} - - esbuild@0.27.4: - resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==} - engines: {node: '>=18'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - - estree-util-attach-comments@3.0.0: - resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} - - estree-util-build-jsx@3.0.1: - resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} - - estree-util-is-identifier-name@3.0.0: - resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} - - estree-util-scope@1.0.0: - resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} - - estree-util-to-js@2.0.0: - resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} - - estree-util-visit@2.0.0: - resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} - - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - - eventemitter3@5.0.4: - resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-uri@3.1.0: - resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - - fast-xml-builder@1.1.4: - resolution: {integrity: sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg==} - - fast-xml-parser@5.4.1: - resolution: {integrity: sha512-BQ30U1mKkvXQXXkAGcuyUA/GA26oEB7NzOtsxCDtyu62sjGw5QraKFhx2Em3WQNjPw9PG6MQ9yuIIgkSDfGu5A==} - hasBin: true - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - flattie@1.1.1: - resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} - engines: {node: '>=8'} - - fontace@0.4.1: - resolution: {integrity: sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==} - - fontkitten@1.0.3: - resolution: {integrity: sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==} - engines: {node: '>=20'} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - github-slugger@2.0.0: - resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - h3@1.15.8: - resolution: {integrity: sha512-iOH6Vl8mGd9nNfu9C0IZ+GuOAfJHcyf3VriQxWaSWIB76Fg4BnFuk4cxBxjmQSSxJS664+pgjP6e7VBnUzFfcg==} - - has-flag@5.0.1: - resolution: {integrity: sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==} - engines: {node: '>=12'} - - hast-util-from-html@2.0.3: - resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} - - hast-util-from-parse5@8.0.3: - resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} - - hast-util-is-element@3.0.0: - resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} - - hast-util-parse-selector@4.0.0: - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} - - hast-util-raw@9.1.0: - resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} - - hast-util-to-estree@3.1.3: - resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} - - hast-util-to-html@9.0.5: - resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} - - hast-util-to-jsx-runtime@2.3.6: - resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} - - hast-util-to-parse5@8.0.1: - resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} - - hast-util-to-text@4.0.2: - resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} - - hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - - hastscript@9.0.1: - resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} - - html-escaper@3.0.3: - resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} - - html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - - http-cache-semantics@4.2.0: - resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - - inline-style-parser@0.2.7: - resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} - - iron-webcrypto@1.2.1: - resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} - - is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - - is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - - is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - - is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - - is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - - is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - - is-wsl@3.1.1: - resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} - engines: {node: '>=16'} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true - - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} - hasBin: true - - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - - jsonc-parser@2.3.1: - resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} - - jsonc-parser@3.3.1: - resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - - lightningcss-android-arm64@1.32.0: - resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [android] - - lightningcss-darwin-arm64@1.32.0: - resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - - lightningcss-darwin-x64@1.32.0: - resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - - lightningcss-freebsd-x64@1.32.0: - resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - - lightningcss-linux-arm-gnueabihf@1.32.0: - resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - - lightningcss-linux-arm64-gnu@1.32.0: - resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - lightningcss-linux-arm64-musl@1.32.0: - resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - libc: [musl] - - lightningcss-linux-x64-gnu@1.32.0: - resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - libc: [glibc] - - lightningcss-linux-x64-musl@1.32.0: - resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - libc: [musl] - - lightningcss-win32-arm64-msvc@1.32.0: - resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] - - lightningcss-win32-x64-msvc@1.32.0: - resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - - lightningcss@1.32.0: - resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} - engines: {node: '>= 12.0.0'} - - log-update@5.0.1: - resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - - lru-cache@11.2.7: - resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==} - engines: {node: 20 || >=22} - - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - - magicast@0.5.2: - resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} - - markdown-extensions@2.0.0: - resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} - engines: {node: '>=16'} - - markdown-table@3.0.4: - resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - - mdast-util-definitions@6.0.0: - resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} - - mdast-util-find-and-replace@3.0.2: - resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} - - mdast-util-from-markdown@2.0.3: - resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} - - mdast-util-gfm-autolink-literal@2.0.1: - resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} - - mdast-util-gfm-footnote@2.1.0: - resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} - - mdast-util-gfm-strikethrough@2.0.0: - resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} - - mdast-util-gfm-table@2.0.0: - resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} - - mdast-util-gfm-task-list-item@2.0.0: - resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} - - mdast-util-gfm@3.1.0: - resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} - - mdast-util-mdx-expression@2.0.1: - resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} - - mdast-util-mdx-jsx@3.2.0: - resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} - - mdast-util-mdx@3.0.0: - resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} - - mdast-util-mdxjs-esm@2.0.1: - resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} - - mdast-util-phrasing@4.1.0: - resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - - mdast-util-to-hast@13.2.1: - resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} - - mdast-util-to-markdown@2.1.2: - resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} - - mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - - mdn-data@2.0.28: - resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} - - mdn-data@2.27.1: - resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} - - micromark-core-commonmark@2.0.3: - resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} - - micromark-extension-gfm-autolink-literal@2.1.0: - resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} - - micromark-extension-gfm-footnote@2.1.0: - resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} - - micromark-extension-gfm-strikethrough@2.1.0: - resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} - - micromark-extension-gfm-table@2.1.1: - resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} - - micromark-extension-gfm-tagfilter@2.0.0: - resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} - - micromark-extension-gfm-task-list-item@2.1.0: - resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} - - micromark-extension-gfm@3.0.0: - resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} - - micromark-extension-mdx-expression@3.0.1: - resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} - - micromark-extension-mdx-jsx@3.0.2: - resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} - - micromark-extension-mdx-md@2.0.0: - resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} - - micromark-extension-mdxjs-esm@3.0.0: - resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} - - micromark-extension-mdxjs@3.0.0: - resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} - - micromark-factory-destination@2.0.1: - resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} - - micromark-factory-label@2.0.1: - resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} - - micromark-factory-mdx-expression@2.0.3: - resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} - - micromark-factory-space@2.0.1: - resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} - - micromark-factory-title@2.0.1: - resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} - - micromark-factory-whitespace@2.0.1: - resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} - - micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} - - micromark-util-chunked@2.0.1: - resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} - - micromark-util-classify-character@2.0.1: - resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} - - micromark-util-combine-extensions@2.0.1: - resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} - - micromark-util-decode-numeric-character-reference@2.0.2: - resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} - - micromark-util-decode-string@2.0.1: - resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} - - micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - - micromark-util-events-to-acorn@2.0.3: - resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} - - micromark-util-html-tag-name@2.0.1: - resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} - - micromark-util-normalize-identifier@2.0.1: - resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} - - micromark-util-resolve-all@2.0.1: - resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} - - micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - - micromark-util-subtokenize@2.1.0: - resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} - - micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - - micromark-util-types@2.0.2: - resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} - - micromark@4.0.2: - resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - mrmime@2.0.1: - resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} - engines: {node: '>=10'} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - muggle-string@0.4.1: - resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - neotraverse@0.6.18: - resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} - engines: {node: '>= 10'} - - nlcst-to-string@4.0.0: - resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} - - node-fetch-native@1.6.7: - resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} - - node-mock-http@1.0.4: - resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - - obug@2.1.1: - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} - - ofetch@1.5.1: - resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} - - ohash@2.0.11: - resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - oniguruma-parser@0.12.1: - resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} - - oniguruma-to-es@4.3.5: - resolution: {integrity: sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==} - - oxfmt@0.40.0: - resolution: {integrity: sha512-g0C3I7xUj4b4DcagevM9kgH6+pUHytikxUcn3/VUkvzTNaaXBeyZqb7IBsHwojeXm4mTBEC/aBjBTMVUkZwWUQ==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - - oxlint-tsgolint@0.17.0: - resolution: {integrity: sha512-TdrKhDZCgEYqONFo/j+KvGan7/k3tP5Ouz88wCqpOvJtI2QmcLfGsm1fcMvDnTik48Jj6z83IJBqlkmK9DnY1A==} - hasBin: true - - oxlint@1.55.0: - resolution: {integrity: sha512-T+FjepiyWpaZMhekqRpH8Z3I4vNM610p6w+Vjfqgj5TZUxHXl7N8N5IPvmOU8U4XdTRxqtNNTh9Y4hLtr7yvFg==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - oxlint-tsgolint: '>=0.15.0' - peerDependenciesMeta: - oxlint-tsgolint: - optional: true - - p-limit@7.3.0: - resolution: {integrity: sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw==} - engines: {node: '>=20'} - - p-queue@9.1.0: - resolution: {integrity: sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==} - engines: {node: '>=20'} - - p-timeout@7.0.1: - resolution: {integrity: sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==} - engines: {node: '>=20'} - - package-manager-detector@1.6.0: - resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} - - parse-entities@4.0.2: - resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} - - parse-latin@7.0.0: - resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} - - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - - path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - - path-expression-matcher@1.1.3: - resolution: {integrity: sha512-qdVgY8KXmVdJZRSS1JdEPOKPdTiEK/pi0RkcT2sw1RhXxohdujUlJFPuS1TSkevZ9vzd3ZlL7ULl1MHGTApKzQ==} - engines: {node: '>=14.0.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - piccolore@0.1.3: - resolution: {integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - - pixelmatch@7.1.0: - resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==} - hasBin: true - - pngjs@7.0.0: - resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} - engines: {node: '>=14.19.0'} - - postcss-selector-parser@6.0.10: - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} - engines: {node: '>=4'} - - postcss@8.5.8: - resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} - engines: {node: ^10 || ^12 || >=14} - - prettier-plugin-astro@0.14.1: - resolution: {integrity: sha512-RiBETaaP9veVstE4vUwSIcdATj6dKmXljouXc/DDNwBSPTp8FRkLGDSGFClKsAFeeg+13SB0Z1JZvbD76bigJw==} - engines: {node: ^14.15.0 || >=16.0.0} - - prettier@3.8.1: - resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} - engines: {node: '>=14'} - hasBin: true - - prismjs@1.30.0: - resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} - engines: {node: '>=6'} - - property-information@7.1.0: - resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} - - radix3@1.1.2: - resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} - - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - - readdirp@5.0.0: - resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} - engines: {node: '>= 20.19.0'} - - recma-build-jsx@1.0.0: - resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} - - recma-jsx@1.0.1: - resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - recma-parse@1.0.0: - resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} - - recma-stringify@1.0.0: - resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} - - regex-recursion@6.0.2: - resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} - - regex-utilities@2.3.0: - resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - - regex@6.1.0: - resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} - - rehype-parse@9.0.1: - resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} - - rehype-raw@7.0.0: - resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} - - rehype-recma@1.0.0: - resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} - - rehype-stringify@10.0.1: - resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} - - rehype@13.0.2: - resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} - - remark-gfm@4.0.1: - resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} - - remark-mdx@3.1.1: - resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} - - remark-parse@11.0.0: - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - - remark-rehype@11.1.2: - resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} - - remark-smartypants@3.0.2: - resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} - engines: {node: '>=16.0.0'} - - remark-stringify@11.0.0: - resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} - - request-light@0.5.8: - resolution: {integrity: sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==} - - request-light@0.7.0: - resolution: {integrity: sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - - restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - retext-latin@4.0.0: - resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} - - retext-smartypants@6.2.0: - resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} - - retext-stringify@4.0.0: - resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} - - retext@9.0.0: - resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} - - rollup@4.59.0: - resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - s.color@0.0.15: - resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==} - - sass-formatter@0.7.9: - resolution: {integrity: sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw==} - - sax@1.6.0: - resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} - engines: {node: '>=11.0.0'} - - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} - engines: {node: '>=10'} - hasBin: true - - sharp@0.34.5: - resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - shiki@4.0.2: - resolution: {integrity: sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==} - engines: {node: '>=20'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - sirv@3.0.2: - resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} - engines: {node: '>=18'} - - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - sitemap@9.0.1: - resolution: {integrity: sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==} - engines: {node: '>=20.19.5', npm: '>=10.8.2'} - hasBin: true - - slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} - - smol-toml@1.6.0: - resolution: {integrity: sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==} - engines: {node: '>= 18'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map@0.7.6: - resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} - engines: {node: '>= 12'} - - space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - - std-env@4.0.0: - resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} - - stream-replace-string@2.0.0: - resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.2.0: - resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} - engines: {node: '>=12'} - - strnum@2.2.0: - resolution: {integrity: sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg==} - - style-to-js@1.1.21: - resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} - - style-to-object@1.0.14: - resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} - - suf-log@2.5.3: - resolution: {integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==} - - supports-color@10.2.2: - resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} - engines: {node: '>=18'} - - supports-hyperlinks@4.4.0: - resolution: {integrity: sha512-UKbpT93hN5Nr9go5UY7bopIB9YQlMz9nm/ct4IXt/irb5YRkn9WaqrOBJGZ5Pwvsd5FQzSVeYlGdXoCAPQZrPg==} - engines: {node: '>=20'} - - svgo@4.0.1: - resolution: {integrity: sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==} - engines: {node: '>=16'} - hasBin: true - - tailwind-merge@3.5.0: - resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} - - tailwindcss@4.2.2: - resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==} - - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} - engines: {node: '>=6'} - - terminal-link@5.0.0: - resolution: {integrity: sha512-qFAy10MTMwjzjU8U16YS4YoZD+NQLHzLssFMNqgravjbvIPNiqkGFR4yjhJfmY9R5OFU7+yHxc6y+uGHkKwLRA==} - engines: {node: '>=20'} - - tiny-inflate@1.0.3: - resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} - - tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - - tinyclip@0.1.12: - resolution: {integrity: sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA==} - engines: {node: ^16.14.0 || >= 17.3.0} - - tinyexec@1.0.4: - resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} - engines: {node: '>=18'} - - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - - tinypool@2.1.0: - resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} - engines: {node: ^20.0.0 || >=22.0.0} - - totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} - - trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - - trough@2.2.0: - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - - 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 - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - - typesafe-path@0.2.2: - resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==} - - typescript-auto-import-cache@0.3.6: - resolution: {integrity: sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==} - - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} - hasBin: true - - ufo@1.6.3: - resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} - - ultrahtml@1.6.0: - resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} - - uncrypto@0.1.3: - resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} - - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - - unified@11.0.5: - resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - - unifont@0.7.4: - resolution: {integrity: sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==} - - unist-util-find-after@5.0.0: - resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} - - unist-util-is@6.0.1: - resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} - - unist-util-modify-children@4.0.0: - resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} - - unist-util-position-from-estree@2.0.0: - resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} - - unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - - unist-util-remove-position@5.0.0: - resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} - - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - - unist-util-visit-children@3.0.0: - resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} - - unist-util-visit-parents@6.0.2: - resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} - - unist-util-visit@5.1.0: - resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} - - unstorage@1.17.4: - resolution: {integrity: sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==} - peerDependencies: - '@azure/app-configuration': ^1.8.0 - '@azure/cosmos': ^4.2.0 - '@azure/data-tables': ^13.3.0 - '@azure/identity': ^4.6.0 - '@azure/keyvault-secrets': ^4.9.0 - '@azure/storage-blob': ^12.26.0 - '@capacitor/preferences': ^6 || ^7 || ^8 - '@deno/kv': '>=0.9.0' - '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 - '@planetscale/database': ^1.19.0 - '@upstash/redis': ^1.34.3 - '@vercel/blob': '>=0.27.1' - '@vercel/functions': ^2.2.12 || ^3.0.0 - '@vercel/kv': ^1 || ^2 || ^3 - aws4fetch: ^1.0.20 - db0: '>=0.2.1' - idb-keyval: ^6.2.1 - ioredis: ^5.4.2 - uploadthing: ^7.4.4 - peerDependenciesMeta: - '@azure/app-configuration': - optional: true - '@azure/cosmos': - optional: true - '@azure/data-tables': - optional: true - '@azure/identity': - optional: true - '@azure/keyvault-secrets': - optional: true - '@azure/storage-blob': - optional: true - '@capacitor/preferences': - optional: true - '@deno/kv': - optional: true - '@netlify/blobs': - optional: true - '@planetscale/database': - optional: true - '@upstash/redis': - optional: true - '@vercel/blob': - optional: true - '@vercel/functions': - optional: true - '@vercel/kv': - optional: true - aws4fetch: - optional: true - db0: - optional: true - idb-keyval: - optional: true - ioredis: - optional: true - uploadthing: - optional: true - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - vfile-location@5.0.3: - resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} - - vfile-message@4.0.3: - resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} - - vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - - vite-plus@0.1.12: - resolution: {integrity: sha512-8s1RzomZkgrJRiwiYWGq3R0txFPYfBBJGp73XNHQnme0KTTVH5dNm/E2GNyBSMFJbeeF7eh1OSgqWVc2FpR6eA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} - 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 - - vitefu@1.1.2: - resolution: {integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0 - peerDependenciesMeta: - vite: - optional: true - - volar-service-css@0.0.70: - resolution: {integrity: sha512-K1qyOvBpE3rzdAv3e4/6Rv5yizrYPy5R/ne3IWCAzLBuMO4qBMV3kSqWzj6KUVe6S0AnN6wxF7cRkiaKfYMYJw==} - peerDependencies: - '@volar/language-service': ~2.4.0 - peerDependenciesMeta: - '@volar/language-service': - optional: true - - volar-service-emmet@0.0.70: - resolution: {integrity: sha512-xi5bC4m/VyE3zy/n2CXspKeDZs3qA41tHLTw275/7dNWM/RqE2z3BnDICQybHIVp/6G1iOQj5c1qXMgQC08TNg==} - peerDependencies: - '@volar/language-service': ~2.4.0 - peerDependenciesMeta: - '@volar/language-service': - optional: true - - volar-service-html@0.0.70: - resolution: {integrity: sha512-eR6vCgMdmYAo4n+gcT7DSyBQbwB8S3HZZvSagTf0sxNaD4WppMCFfpqWnkrlGStPKMZvMiejRRVmqsX9dYcTvQ==} - peerDependencies: - '@volar/language-service': ~2.4.0 - peerDependenciesMeta: - '@volar/language-service': - optional: true - - volar-service-prettier@0.0.70: - resolution: {integrity: sha512-Z6BCFSpGVCd8BPAsZ785Kce1BGlWd5ODqmqZGVuB14MJvrR4+CYz6cDy4F+igmE1gMifqfvMhdgT8Aud4M5ngg==} - peerDependencies: - '@volar/language-service': ~2.4.0 - prettier: ^2.2 || ^3.0 - peerDependenciesMeta: - '@volar/language-service': - optional: true - prettier: - optional: true - - volar-service-typescript-twoslash-queries@0.0.70: - resolution: {integrity: sha512-IdD13Z9N2Bu8EM6CM0fDV1E69olEYGHDU25X51YXmq8Y0CmJ2LNj6gOiBJgpS5JGUqFzECVhMNBW7R0sPdRTMQ==} - peerDependencies: - '@volar/language-service': ~2.4.0 - peerDependenciesMeta: - '@volar/language-service': - optional: true - - volar-service-typescript@0.0.70: - resolution: {integrity: sha512-l46Bx4cokkUedTd74ojO5H/zqHZJ8SUuyZ0IB8JN4jfRqUM3bQFBHoOwlZCyZmOeO0A3RQNkMnFclxO4c++gsg==} - peerDependencies: - '@volar/language-service': ~2.4.0 - peerDependenciesMeta: - '@volar/language-service': - optional: true - - volar-service-yaml@0.0.70: - resolution: {integrity: sha512-0c8bXDBeoATF9F6iPIlOuYTuZAC4c+yi0siQo920u7eiBJk8oQmUmg9cDUbR4+Gl++bvGP4plj3fErbJuPqdcQ==} - peerDependencies: - '@volar/language-service': ~2.4.0 - peerDependenciesMeta: - '@volar/language-service': - optional: true - - vscode-css-languageservice@6.3.10: - resolution: {integrity: sha512-eq5N9Er3fC4vA9zd9EFhyBG90wtCCuXgRSpAndaOgXMh1Wgep5lBgRIeDgjZBW9pa+332yC9+49cZMW8jcL3MA==} - - vscode-html-languageservice@5.6.2: - resolution: {integrity: sha512-ulCrSnFnfQ16YzvwnYUgEbUEl/ZG7u2eV27YhvLObSHKkb8fw1Z9cgsnUwjTEeDIdJDoTDTDpxuhQwoenoLNMg==} - - vscode-json-languageservice@4.1.8: - resolution: {integrity: sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==} - engines: {npm: '>=7.0.0'} - - vscode-jsonrpc@8.2.0: - resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} - engines: {node: '>=14.0.0'} - - vscode-languageserver-protocol@3.17.5: - resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} - - vscode-languageserver-textdocument@1.0.12: - resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} - - vscode-languageserver-types@3.17.5: - resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} - - vscode-languageserver@9.0.1: - resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} - hasBin: true - - vscode-nls@5.2.0: - resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==} - - vscode-uri@3.1.0: - resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} - - web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - - which-pm-runs@1.1.0: - resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} - engines: {node: '>=4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - ws@8.19.0: - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} - 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 - - xxhash-wasm@1.1.0: - resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yaml-language-server@1.20.0: - resolution: {integrity: sha512-qhjK/bzSRZ6HtTvgeFvjNPJGWdZ0+x5NREV/9XZWFjIGezew2b4r5JPy66IfOhd5OA7KeFwk1JfmEbnTvev0cA==} - hasBin: true - - yaml@2.7.1: - resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} - engines: {node: '>= 14'} - hasBin: true - - yaml@2.8.2: - resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} - engines: {node: '>= 14.6'} - hasBin: true - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs-parser@22.0.0: - resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} - engines: {node: ^20.19.0 || ^22.12.0 || >=23} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yocto-queue@1.2.2: - resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} - engines: {node: '>=12.20'} - - zod@4.3.6: - resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} - - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - -snapshots: - - '@astrojs/check@0.9.8(prettier-plugin-astro@0.14.1)(prettier@3.8.1)(typescript@5.9.3)': - dependencies: - '@astrojs/language-server': 2.16.6(prettier-plugin-astro@0.14.1)(prettier@3.8.1)(typescript@5.9.3) - chokidar: 4.0.3 - kleur: 4.1.5 - typescript: 5.9.3 - yargs: 17.7.2 - transitivePeerDependencies: - - prettier - - prettier-plugin-astro - - '@astrojs/cli-kit@0.4.1': - dependencies: - chalk: 5.6.2 - log-update: 5.0.1 - sisteransi: 1.0.5 - - '@astrojs/compiler@2.13.1': {} - - '@astrojs/compiler@3.0.1': {} - - '@astrojs/internal-helpers@0.8.0': - dependencies: - picomatch: 4.0.3 - - '@astrojs/language-server@2.16.6(prettier-plugin-astro@0.14.1)(prettier@3.8.1)(typescript@5.9.3)': - dependencies: - '@astrojs/compiler': 2.13.1 - '@astrojs/yaml2ts': 0.2.3 - '@jridgewell/sourcemap-codec': 1.5.5 - '@volar/kit': 2.4.28(typescript@5.9.3) - '@volar/language-core': 2.4.28 - '@volar/language-server': 2.4.28 - '@volar/language-service': 2.4.28 - muggle-string: 0.4.1 - tinyglobby: 0.2.15 - volar-service-css: 0.0.70(@volar/language-service@2.4.28) - volar-service-emmet: 0.0.70(@volar/language-service@2.4.28) - volar-service-html: 0.0.70(@volar/language-service@2.4.28) - volar-service-prettier: 0.0.70(@volar/language-service@2.4.28)(prettier@3.8.1) - volar-service-typescript: 0.0.70(@volar/language-service@2.4.28) - volar-service-typescript-twoslash-queries: 0.0.70(@volar/language-service@2.4.28) - volar-service-yaml: 0.0.70(@volar/language-service@2.4.28) - vscode-html-languageservice: 5.6.2 - vscode-uri: 3.1.0 - optionalDependencies: - prettier: 3.8.1 - prettier-plugin-astro: 0.14.1 - transitivePeerDependencies: - - typescript - - '@astrojs/markdown-remark@7.0.1': - dependencies: - '@astrojs/internal-helpers': 0.8.0 - '@astrojs/prism': 4.0.1 - github-slugger: 2.0.0 - hast-util-from-html: 2.0.3 - hast-util-to-text: 4.0.2 - js-yaml: 4.1.1 - mdast-util-definitions: 6.0.0 - rehype-raw: 7.0.0 - rehype-stringify: 10.0.1 - remark-gfm: 4.0.1 - remark-parse: 11.0.0 - remark-rehype: 11.1.2 - remark-smartypants: 3.0.2 - shiki: 4.0.2 - smol-toml: 1.6.0 - unified: 11.0.5 - unist-util-remove-position: 5.0.0 - unist-util-visit: 5.1.0 - unist-util-visit-parents: 6.0.2 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@astrojs/mdx@5.0.2(astro@6.0.6(@types/node@24.12.0)(jiti@2.6.1)(rollup@4.59.0)(typescript@5.9.3)(yaml@2.8.2))': - dependencies: - '@astrojs/markdown-remark': 7.0.1 - '@mdx-js/mdx': 3.1.1 - acorn: 8.16.0 - astro: 6.0.6(@types/node@24.12.0)(jiti@2.6.1)(rollup@4.59.0)(typescript@5.9.3)(yaml@2.8.2) - es-module-lexer: 2.0.0 - estree-util-visit: 2.0.0 - hast-util-to-html: 9.0.5 - piccolore: 0.1.3 - rehype-raw: 7.0.0 - remark-gfm: 4.0.1 - remark-smartypants: 3.0.2 - source-map: 0.7.6 - unist-util-visit: 5.1.0 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@astrojs/prism@4.0.1': - dependencies: - prismjs: 1.30.0 - - '@astrojs/rss@4.0.17': - dependencies: - fast-xml-parser: 5.4.1 - piccolore: 0.1.3 - zod: 4.3.6 - - '@astrojs/sitemap@3.7.1': - dependencies: - sitemap: 9.0.1 - stream-replace-string: 2.0.0 - zod: 4.3.6 - - '@astrojs/telemetry@3.3.0': - dependencies: - ci-info: 4.4.0 - debug: 4.4.3 - dlv: 1.1.3 - dset: 3.1.4 - is-docker: 3.0.0 - is-wsl: 3.1.1 - which-pm-runs: 1.1.0 - transitivePeerDependencies: - - supports-color - - '@astrojs/upgrade@0.7.1': - dependencies: - '@astrojs/cli-kit': 0.4.1 - package-manager-detector: 1.6.0 - semver: 7.7.4 - terminal-link: 5.0.0 - - '@astrojs/yaml2ts@0.2.3': - dependencies: - yaml: 2.8.2 - - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-validator-identifier@7.28.5': {} - - '@babel/parser@7.29.2': - dependencies: - '@babel/types': 7.29.0 - - '@babel/types@7.29.0': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - - '@capsizecss/unpack@4.0.0': - dependencies: - fontkitten: 1.0.3 - - '@clack/core@1.1.0': - dependencies: - sisteransi: 1.0.5 - - '@clack/prompts@1.1.0': - dependencies: - '@clack/core': 1.1.0 - sisteransi: 1.0.5 - - '@emmetio/abbreviation@2.3.3': - dependencies: - '@emmetio/scanner': 1.0.4 - - '@emmetio/css-abbreviation@2.1.8': - dependencies: - '@emmetio/scanner': 1.0.4 - - '@emmetio/css-parser@0.4.1': - dependencies: - '@emmetio/stream-reader': 2.2.0 - '@emmetio/stream-reader-utils': 0.1.0 - - '@emmetio/html-matcher@1.3.0': - dependencies: - '@emmetio/scanner': 1.0.4 - - '@emmetio/scanner@1.0.4': {} - - '@emmetio/stream-reader-utils@0.1.0': {} - - '@emmetio/stream-reader@2.2.0': {} - - '@emnapi/runtime@1.9.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@esbuild/aix-ppc64@0.27.4': - optional: true - - '@esbuild/android-arm64@0.27.4': - optional: true - - '@esbuild/android-arm@0.27.4': - optional: true - - '@esbuild/android-x64@0.27.4': - optional: true - - '@esbuild/darwin-arm64@0.27.4': - optional: true - - '@esbuild/darwin-x64@0.27.4': - optional: true - - '@esbuild/freebsd-arm64@0.27.4': - optional: true - - '@esbuild/freebsd-x64@0.27.4': - optional: true - - '@esbuild/linux-arm64@0.27.4': - optional: true - - '@esbuild/linux-arm@0.27.4': - optional: true - - '@esbuild/linux-ia32@0.27.4': - optional: true - - '@esbuild/linux-loong64@0.27.4': - optional: true - - '@esbuild/linux-mips64el@0.27.4': - optional: true - - '@esbuild/linux-ppc64@0.27.4': - optional: true - - '@esbuild/linux-riscv64@0.27.4': - optional: true - - '@esbuild/linux-s390x@0.27.4': - optional: true - - '@esbuild/linux-x64@0.27.4': - optional: true - - '@esbuild/netbsd-arm64@0.27.4': - optional: true - - '@esbuild/netbsd-x64@0.27.4': - optional: true - - '@esbuild/openbsd-arm64@0.27.4': - optional: true - - '@esbuild/openbsd-x64@0.27.4': - optional: true - - '@esbuild/openharmony-arm64@0.27.4': - optional: true - - '@esbuild/sunos-x64@0.27.4': - optional: true - - '@esbuild/win32-arm64@0.27.4': - optional: true - - '@esbuild/win32-ia32@0.27.4': - optional: true - - '@esbuild/win32-x64@0.27.4': - optional: true - - '@fontsource/work-sans@5.2.8': {} - - '@img/colour@1.1.0': - optional: true - - '@img/sharp-darwin-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.4 - optional: true - - '@img/sharp-darwin-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.4 - optional: true - - '@img/sharp-libvips-darwin-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-darwin-x64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-arm@1.2.4': - optional: true - - '@img/sharp-libvips-linux-ppc64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-riscv64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-s390x@1.2.4': - optional: true - - '@img/sharp-libvips-linux-x64@1.2.4': - optional: true - - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - optional: true - - '@img/sharp-linux-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.4 - optional: true - - '@img/sharp-linux-arm@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.4 - optional: true - - '@img/sharp-linux-ppc64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.4 - optional: true - - '@img/sharp-linux-riscv64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-riscv64': 1.2.4 - optional: true - - '@img/sharp-linux-s390x@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.4 - optional: true - - '@img/sharp-linux-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.4 - optional: true - - '@img/sharp-linuxmusl-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - optional: true - - '@img/sharp-linuxmusl-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - optional: true - - '@img/sharp-wasm32@0.34.5': - dependencies: - '@emnapi/runtime': 1.9.0 - optional: true - - '@img/sharp-win32-arm64@0.34.5': - optional: true - - '@img/sharp-win32-ia32@0.34.5': - optional: true - - '@img/sharp-win32-x64@0.34.5': - optional: true - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@kurkle/color@0.3.4': {} - - '@mdx-js/mdx@3.1.1': - dependencies: - '@types/estree': 1.0.8 - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdx': 2.0.13 - acorn: 8.16.0 - collapse-white-space: 2.1.0 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - estree-util-scope: 1.0.0 - estree-walker: 3.0.3 - hast-util-to-jsx-runtime: 2.3.6 - markdown-extensions: 2.0.0 - recma-build-jsx: 1.0.0 - recma-jsx: 1.0.1(acorn@8.16.0) - recma-stringify: 1.0.0 - rehype-recma: 1.0.0 - remark-mdx: 3.1.1 - remark-parse: 11.0.0 - remark-rehype: 11.1.2 - source-map: 0.7.6 - unified: 11.0.5 - unist-util-position-from-estree: 2.0.0 - unist-util-stringify-position: 4.0.0 - unist-util-visit: 5.1.0 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@myriaddreamin/typst-ts-node-compiler-android-arm-eabi@0.7.0-rc2': - optional: true - - '@myriaddreamin/typst-ts-node-compiler-android-arm64@0.7.0-rc2': - optional: true - - '@myriaddreamin/typst-ts-node-compiler-darwin-arm64@0.7.0-rc2': - optional: true - - '@myriaddreamin/typst-ts-node-compiler-darwin-x64@0.7.0-rc2': - optional: true - - '@myriaddreamin/typst-ts-node-compiler-linux-arm-gnueabihf@0.7.0-rc2': - optional: true - - '@myriaddreamin/typst-ts-node-compiler-linux-arm64-gnu@0.7.0-rc2': - optional: true - - '@myriaddreamin/typst-ts-node-compiler-linux-arm64-musl@0.7.0-rc2': - optional: true - - '@myriaddreamin/typst-ts-node-compiler-linux-x64-gnu@0.7.0-rc2': - optional: true - - '@myriaddreamin/typst-ts-node-compiler-linux-x64-musl@0.7.0-rc2': - optional: true - - '@myriaddreamin/typst-ts-node-compiler-win32-arm64-msvc@0.7.0-rc2': - optional: true - - '@myriaddreamin/typst-ts-node-compiler-win32-x64-msvc@0.7.0-rc2': - optional: true - - '@myriaddreamin/typst-ts-node-compiler@0.7.0-rc2': - optionalDependencies: - '@myriaddreamin/typst-ts-node-compiler-android-arm-eabi': 0.7.0-rc2 - '@myriaddreamin/typst-ts-node-compiler-android-arm64': 0.7.0-rc2 - '@myriaddreamin/typst-ts-node-compiler-darwin-arm64': 0.7.0-rc2 - '@myriaddreamin/typst-ts-node-compiler-darwin-x64': 0.7.0-rc2 - '@myriaddreamin/typst-ts-node-compiler-linux-arm-gnueabihf': 0.7.0-rc2 - '@myriaddreamin/typst-ts-node-compiler-linux-arm64-gnu': 0.7.0-rc2 - '@myriaddreamin/typst-ts-node-compiler-linux-arm64-musl': 0.7.0-rc2 - '@myriaddreamin/typst-ts-node-compiler-linux-x64-gnu': 0.7.0-rc2 - '@myriaddreamin/typst-ts-node-compiler-linux-x64-musl': 0.7.0-rc2 - '@myriaddreamin/typst-ts-node-compiler-win32-arm64-msvc': 0.7.0-rc2 - '@myriaddreamin/typst-ts-node-compiler-win32-x64-msvc': 0.7.0-rc2 - - '@oslojs/encoding@1.1.0': {} - - '@oxc-project/runtime@0.115.0': {} - - '@oxc-project/types@0.115.0': {} - - '@oxfmt/binding-android-arm-eabi@0.40.0': - optional: true - - '@oxfmt/binding-android-arm64@0.40.0': - optional: true - - '@oxfmt/binding-darwin-arm64@0.40.0': - optional: true - - '@oxfmt/binding-darwin-x64@0.40.0': - optional: true - - '@oxfmt/binding-freebsd-x64@0.40.0': - optional: true - - '@oxfmt/binding-linux-arm-gnueabihf@0.40.0': - optional: true - - '@oxfmt/binding-linux-arm-musleabihf@0.40.0': - optional: true - - '@oxfmt/binding-linux-arm64-gnu@0.40.0': - optional: true - - '@oxfmt/binding-linux-arm64-musl@0.40.0': - optional: true - - '@oxfmt/binding-linux-ppc64-gnu@0.40.0': - optional: true - - '@oxfmt/binding-linux-riscv64-gnu@0.40.0': - optional: true - - '@oxfmt/binding-linux-riscv64-musl@0.40.0': - optional: true - - '@oxfmt/binding-linux-s390x-gnu@0.40.0': - optional: true - - '@oxfmt/binding-linux-x64-gnu@0.40.0': - optional: true - - '@oxfmt/binding-linux-x64-musl@0.40.0': - optional: true - - '@oxfmt/binding-openharmony-arm64@0.40.0': - optional: true - - '@oxfmt/binding-win32-arm64-msvc@0.40.0': - optional: true - - '@oxfmt/binding-win32-ia32-msvc@0.40.0': - optional: true - - '@oxfmt/binding-win32-x64-msvc@0.40.0': - optional: true - - '@oxlint-tsgolint/darwin-arm64@0.17.0': - optional: true - - '@oxlint-tsgolint/darwin-x64@0.17.0': - optional: true - - '@oxlint-tsgolint/linux-arm64@0.17.0': - optional: true - - '@oxlint-tsgolint/linux-x64@0.17.0': - optional: true - - '@oxlint-tsgolint/win32-arm64@0.17.0': - optional: true - - '@oxlint-tsgolint/win32-x64@0.17.0': - optional: true - - '@oxlint/binding-android-arm-eabi@1.55.0': - optional: true - - '@oxlint/binding-android-arm64@1.55.0': - optional: true - - '@oxlint/binding-darwin-arm64@1.55.0': - optional: true - - '@oxlint/binding-darwin-x64@1.55.0': - optional: true - - '@oxlint/binding-freebsd-x64@1.55.0': - optional: true - - '@oxlint/binding-linux-arm-gnueabihf@1.55.0': - optional: true - - '@oxlint/binding-linux-arm-musleabihf@1.55.0': - optional: true - - '@oxlint/binding-linux-arm64-gnu@1.55.0': - optional: true - - '@oxlint/binding-linux-arm64-musl@1.55.0': - optional: true - - '@oxlint/binding-linux-ppc64-gnu@1.55.0': - optional: true - - '@oxlint/binding-linux-riscv64-gnu@1.55.0': - optional: true - - '@oxlint/binding-linux-riscv64-musl@1.55.0': - optional: true - - '@oxlint/binding-linux-s390x-gnu@1.55.0': - optional: true - - '@oxlint/binding-linux-x64-gnu@1.55.0': - optional: true - - '@oxlint/binding-linux-x64-musl@1.55.0': - optional: true - - '@oxlint/binding-openharmony-arm64@1.55.0': - optional: true - - '@oxlint/binding-win32-arm64-msvc@1.55.0': - optional: true - - '@oxlint/binding-win32-ia32-msvc@1.55.0': - optional: true - - '@oxlint/binding-win32-x64-msvc@1.55.0': - optional: true - - '@polka/url@1.0.0-next.29': {} - - '@radix-ui/colors@3.0.0': {} - - '@rollup/pluginutils@5.3.0(rollup@4.59.0)': - dependencies: - '@types/estree': 1.0.8 - estree-walker: 2.0.2 - picomatch: 4.0.3 - optionalDependencies: - rollup: 4.59.0 - - '@rollup/rollup-android-arm-eabi@4.59.0': - optional: true - - '@rollup/rollup-android-arm64@4.59.0': - optional: true - - '@rollup/rollup-darwin-arm64@4.59.0': - optional: true - - '@rollup/rollup-darwin-x64@4.59.0': - optional: true - - '@rollup/rollup-freebsd-arm64@4.59.0': - optional: true - - '@rollup/rollup-freebsd-x64@4.59.0': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.59.0': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.59.0': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.59.0': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.59.0': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.59.0': - optional: true - - '@rollup/rollup-linux-loong64-musl@4.59.0': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.59.0': - optional: true - - '@rollup/rollup-linux-ppc64-musl@4.59.0': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.59.0': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.59.0': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.59.0': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.59.0': - optional: true - - '@rollup/rollup-linux-x64-musl@4.59.0': - optional: true - - '@rollup/rollup-openbsd-x64@4.59.0': - optional: true - - '@rollup/rollup-openharmony-arm64@4.59.0': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.59.0': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.59.0': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.59.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.59.0': - optional: true - - '@shikijs/core@4.0.2': - dependencies: - '@shikijs/primitive': 4.0.2 - '@shikijs/types': 4.0.2 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 - - '@shikijs/engine-javascript@4.0.2': - dependencies: - '@shikijs/types': 4.0.2 - '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 4.3.5 - - '@shikijs/engine-oniguruma@4.0.2': - dependencies: - '@shikijs/types': 4.0.2 - '@shikijs/vscode-textmate': 10.0.2 - - '@shikijs/langs@4.0.2': - dependencies: - '@shikijs/types': 4.0.2 - - '@shikijs/primitive@4.0.2': - dependencies: - '@shikijs/types': 4.0.2 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - '@shikijs/themes@4.0.2': - dependencies: - '@shikijs/types': 4.0.2 - - '@shikijs/types@4.0.2': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - '@shikijs/vscode-textmate@10.0.2': {} - - '@standard-schema/spec@1.1.0': {} - - '@tailwindcss/node@4.2.2': - dependencies: - '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.20.1 - jiti: 2.6.1 - lightningcss: 1.32.0 - magic-string: 0.30.21 - source-map-js: 1.2.1 - tailwindcss: 4.2.2 - - '@tailwindcss/oxide-android-arm64@4.2.2': - optional: true - - '@tailwindcss/oxide-darwin-arm64@4.2.2': - optional: true - - '@tailwindcss/oxide-darwin-x64@4.2.2': - optional: true - - '@tailwindcss/oxide-freebsd-x64@4.2.2': - optional: true - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': - optional: true - - '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': - optional: true - - '@tailwindcss/oxide-linux-arm64-musl@4.2.2': - optional: true - - '@tailwindcss/oxide-linux-x64-gnu@4.2.2': - optional: true - - '@tailwindcss/oxide-linux-x64-musl@4.2.2': - optional: true - - '@tailwindcss/oxide-wasm32-wasi@4.2.2': - optional: true - - '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': - optional: true - - '@tailwindcss/oxide-win32-x64-msvc@4.2.2': - optional: true - - '@tailwindcss/oxide@4.2.2': - optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.2.2 - '@tailwindcss/oxide-darwin-arm64': 4.2.2 - '@tailwindcss/oxide-darwin-x64': 4.2.2 - '@tailwindcss/oxide-freebsd-x64': 4.2.2 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.2 - '@tailwindcss/oxide-linux-arm64-gnu': 4.2.2 - '@tailwindcss/oxide-linux-arm64-musl': 4.2.2 - '@tailwindcss/oxide-linux-x64-gnu': 4.2.2 - '@tailwindcss/oxide-linux-x64-musl': 4.2.2 - '@tailwindcss/oxide-wasm32-wasi': 4.2.2 - '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 - '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 - - '@tailwindcss/typography@0.5.19(tailwindcss@4.2.2)': - dependencies: - postcss-selector-parser: 6.0.10 - tailwindcss: 4.2.2 - - '@tailwindcss/vite@4.2.2(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))': - dependencies: - '@tailwindcss/node': 4.2.2 - '@tailwindcss/oxide': 4.2.2 - tailwindcss: 4.2.2 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) - - '@types/chai@5.2.3': - dependencies: - '@types/deep-eql': 4.0.2 - assertion-error: 2.0.1 - - '@types/debug@4.1.12': - dependencies: - '@types/ms': 2.1.0 - - '@types/deep-eql@4.0.2': {} - - '@types/estree-jsx@1.0.5': - dependencies: - '@types/estree': 1.0.8 - - '@types/estree@1.0.8': {} - - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/mdast@4.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/mdx@2.0.13': {} - - '@types/ms@2.1.0': {} - - '@types/nlcst@2.0.3': - dependencies: - '@types/unist': 3.0.3 - - '@types/node@24.12.0': - dependencies: - undici-types: 7.16.0 - - '@types/sax@1.2.7': - dependencies: - '@types/node': 24.12.0 - - '@types/unist@2.0.11': {} - - '@types/unist@3.0.3': {} - - '@ungap/structured-clone@1.3.0': {} - - '@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.2)': - dependencies: - '@oxc-project/runtime': 0.115.0 - '@oxc-project/types': 0.115.0 - lightningcss: 1.32.0 - postcss: 8.5.8 - optionalDependencies: - '@types/node': 24.12.0 - esbuild: 0.27.4 - fsevents: 2.3.3 - jiti: 2.6.1 - typescript: 5.9.3 - yaml: 2.8.2 - - '@voidzero-dev/vite-plus-darwin-arm64@0.1.12': - optional: true - - '@voidzero-dev/vite-plus-darwin-x64@0.1.12': - optional: true - - '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.12': - optional: true - - '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.12': - optional: true - - '@voidzero-dev/vite-plus-test@0.1.12(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(typescript@5.9.3)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(yaml@2.8.2)': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@voidzero-dev/vite-plus-core': 0.1.12(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.2) - es-module-lexer: 1.7.0 - obug: 2.1.1 - pixelmatch: 7.1.0 - pngjs: 7.0.0 - sirv: 3.0.2 - std-env: 4.0.0 - tinybench: 2.9.0 - tinyexec: 1.0.4 - tinyglobby: 0.2.15 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2) - ws: 8.19.0 - optionalDependencies: - '@types/node': 24.12.0 - transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@tsdown/css' - - '@tsdown/exe' - - '@vitejs/devtools' - - bufferutil - - esbuild - - jiti - - less - - publint - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - typescript - - unplugin-unused - - utf-8-validate - - yaml - - '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.12': - optional: true - - '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.12': - optional: true - - '@volar/kit@2.4.28(typescript@5.9.3)': - dependencies: - '@volar/language-service': 2.4.28 - '@volar/typescript': 2.4.28 - typesafe-path: 0.2.2 - typescript: 5.9.3 - vscode-languageserver-textdocument: 1.0.12 - vscode-uri: 3.1.0 - - '@volar/language-core@2.4.28': - dependencies: - '@volar/source-map': 2.4.28 - - '@volar/language-server@2.4.28': - dependencies: - '@volar/language-core': 2.4.28 - '@volar/language-service': 2.4.28 - '@volar/typescript': 2.4.28 - path-browserify: 1.0.1 - request-light: 0.7.0 - vscode-languageserver: 9.0.1 - vscode-languageserver-protocol: 3.17.5 - vscode-languageserver-textdocument: 1.0.12 - vscode-uri: 3.1.0 - - '@volar/language-service@2.4.28': - dependencies: - '@volar/language-core': 2.4.28 - vscode-languageserver-protocol: 3.17.5 - vscode-languageserver-textdocument: 1.0.12 - vscode-uri: 3.1.0 - - '@volar/source-map@2.4.28': {} - - '@volar/typescript@2.4.28': - dependencies: - '@volar/language-core': 2.4.28 - path-browserify: 1.0.1 - vscode-uri: 3.1.0 - - '@vscode/emmet-helper@2.11.0': - dependencies: - emmet: 2.4.11 - jsonc-parser: 2.3.1 - vscode-languageserver-textdocument: 1.0.12 - vscode-languageserver-types: 3.17.5 - vscode-uri: 3.1.0 - - '@vscode/l10n@0.0.18': {} - - acorn-jsx@5.3.2(acorn@8.16.0): - dependencies: - acorn: 8.16.0 - - acorn@8.16.0: {} - - ajv-draft-04@1.0.0(ajv@8.18.0): - optionalDependencies: - ajv: 8.18.0 - - ajv@8.18.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - - ansi-escapes@5.0.0: - dependencies: - type-fest: 1.4.0 - - ansi-escapes@7.3.0: - dependencies: - environment: 1.1.0 - - ansi-regex@5.0.1: {} - - ansi-regex@6.2.2: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@6.2.3: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - arg@5.0.2: {} - - argparse@2.0.1: {} - - aria-query@5.3.2: {} - - array-iterate@2.0.1: {} - - assertion-error@2.0.1: {} - - astring@1.9.0: {} - - astro@6.0.6(@types/node@24.12.0)(jiti@2.6.1)(rollup@4.59.0)(typescript@5.9.3)(yaml@2.8.2): - dependencies: - '@astrojs/compiler': 3.0.1 - '@astrojs/internal-helpers': 0.8.0 - '@astrojs/markdown-remark': 7.0.1 - '@astrojs/telemetry': 3.3.0 - '@capsizecss/unpack': 4.0.0 - '@clack/prompts': 1.1.0 - '@oslojs/encoding': 1.1.0 - '@rollup/pluginutils': 5.3.0(rollup@4.59.0) - aria-query: 5.3.2 - axobject-query: 4.1.0 - ci-info: 4.4.0 - clsx: 2.1.1 - common-ancestor-path: 2.0.0 - cookie: 1.1.1 - devalue: 5.6.4 - diff: 8.0.3 - dlv: 1.1.3 - dset: 3.1.4 - es-module-lexer: 2.0.0 - esbuild: 0.27.4 - flattie: 1.1.1 - fontace: 0.4.1 - github-slugger: 2.0.0 - html-escaper: 3.0.3 - http-cache-semantics: 4.2.0 - js-yaml: 4.1.1 - magic-string: 0.30.21 - magicast: 0.5.2 - mrmime: 2.0.1 - neotraverse: 0.6.18 - obug: 2.1.1 - p-limit: 7.3.0 - p-queue: 9.1.0 - package-manager-detector: 1.6.0 - piccolore: 0.1.3 - picomatch: 4.0.3 - rehype: 13.0.2 - semver: 7.7.4 - shiki: 4.0.2 - smol-toml: 1.6.0 - svgo: 4.0.1 - tinyclip: 0.1.12 - tinyexec: 1.0.4 - tinyglobby: 0.2.15 - tsconfck: 3.1.6(typescript@5.9.3) - ultrahtml: 1.6.0 - unifont: 0.7.4 - unist-util-visit: 5.1.0 - unstorage: 1.17.4 - vfile: 6.0.3 - vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.2)' - vitefu: 1.1.2(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.2)) - xxhash-wasm: 1.1.0 - yargs-parser: 22.0.0 - zod: 4.3.6 - optionalDependencies: - sharp: 0.34.5 - transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@tsdown/css' - - '@tsdown/exe' - - '@types/node' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - '@vitejs/devtools' - - aws4fetch - - db0 - - idb-keyval - - ioredis - - jiti - - less - - publint - - rollup - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - typescript - - unplugin-unused - - uploadthing - - yaml - - axobject-query@4.1.0: {} - - bail@2.0.2: {} - - boolbase@1.0.0: {} - - cac@6.7.14: {} - - ccount@2.0.1: {} - - chalk@5.6.2: {} - - character-entities-html4@2.1.0: {} - - character-entities-legacy@3.0.0: {} - - character-entities@2.0.2: {} - - character-reference-invalid@2.0.1: {} - - chart.js@4.5.1: - dependencies: - '@kurkle/color': 0.3.4 - - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - - chokidar@5.0.0: - dependencies: - readdirp: 5.0.0 - - ci-info@4.4.0: {} - - cli-cursor@4.0.0: - dependencies: - restore-cursor: 4.0.0 - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - clsx@2.1.1: {} - - collapse-white-space@2.1.0: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - comma-separated-tokens@2.0.3: {} - - commander@11.1.0: {} - - common-ancestor-path@2.0.0: {} - - cookie-es@1.2.2: {} - - cookie@1.1.1: {} - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - crossws@0.3.5: - dependencies: - uncrypto: 0.1.3 - - css-select@5.2.2: - dependencies: - boolbase: 1.0.0 - css-what: 6.2.2 - domhandler: 5.0.3 - domutils: 3.2.2 - nth-check: 2.1.1 - - css-tree@2.2.1: - dependencies: - mdn-data: 2.0.28 - source-map-js: 1.2.1 - - css-tree@3.2.1: - dependencies: - mdn-data: 2.27.1 - source-map-js: 1.2.1 - - css-what@6.2.2: {} - - cssesc@3.0.0: {} - - csso@5.0.5: - dependencies: - css-tree: 2.2.1 - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - decode-named-character-reference@1.3.0: - dependencies: - character-entities: 2.0.2 - - defu@6.1.4: {} - - dequal@2.0.3: {} - - destr@2.0.5: {} - - detect-libc@2.1.2: {} - - devalue@5.6.4: {} - - devlop@1.1.0: - dependencies: - dequal: 2.0.3 - - diff@8.0.3: {} - - dlv@1.1.3: {} - - dom-serializer@2.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.5.0 - - domelementtype@2.3.0: {} - - domhandler@5.0.3: - dependencies: - domelementtype: 2.3.0 - - domutils@3.2.2: - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - - dset@3.1.4: {} - - eastasianwidth@0.2.0: {} - - emmet@2.4.11: - dependencies: - '@emmetio/abbreviation': 2.3.3 - '@emmetio/css-abbreviation': 2.1.8 - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - enhanced-resolve@5.20.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.3.0 - - entities@4.5.0: {} - - entities@6.0.1: {} - - environment@1.1.0: {} - - es-module-lexer@1.7.0: {} - - es-module-lexer@2.0.0: {} - - esast-util-from-estree@2.0.0: - dependencies: - '@types/estree-jsx': 1.0.5 - devlop: 1.1.0 - estree-util-visit: 2.0.0 - unist-util-position-from-estree: 2.0.0 - - esast-util-from-js@2.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - acorn: 8.16.0 - esast-util-from-estree: 2.0.0 - vfile-message: 4.0.3 - - esbuild@0.27.4: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.4 - '@esbuild/android-arm': 0.27.4 - '@esbuild/android-arm64': 0.27.4 - '@esbuild/android-x64': 0.27.4 - '@esbuild/darwin-arm64': 0.27.4 - '@esbuild/darwin-x64': 0.27.4 - '@esbuild/freebsd-arm64': 0.27.4 - '@esbuild/freebsd-x64': 0.27.4 - '@esbuild/linux-arm': 0.27.4 - '@esbuild/linux-arm64': 0.27.4 - '@esbuild/linux-ia32': 0.27.4 - '@esbuild/linux-loong64': 0.27.4 - '@esbuild/linux-mips64el': 0.27.4 - '@esbuild/linux-ppc64': 0.27.4 - '@esbuild/linux-riscv64': 0.27.4 - '@esbuild/linux-s390x': 0.27.4 - '@esbuild/linux-x64': 0.27.4 - '@esbuild/netbsd-arm64': 0.27.4 - '@esbuild/netbsd-x64': 0.27.4 - '@esbuild/openbsd-arm64': 0.27.4 - '@esbuild/openbsd-x64': 0.27.4 - '@esbuild/openharmony-arm64': 0.27.4 - '@esbuild/sunos-x64': 0.27.4 - '@esbuild/win32-arm64': 0.27.4 - '@esbuild/win32-ia32': 0.27.4 - '@esbuild/win32-x64': 0.27.4 - - escalade@3.2.0: {} - - escape-string-regexp@5.0.0: {} - - estree-util-attach-comments@3.0.0: - dependencies: - '@types/estree': 1.0.8 - - estree-util-build-jsx@3.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - estree-walker: 3.0.3 - - estree-util-is-identifier-name@3.0.0: {} - - estree-util-scope@1.0.0: - dependencies: - '@types/estree': 1.0.8 - devlop: 1.1.0 - - estree-util-to-js@2.0.0: - dependencies: - '@types/estree-jsx': 1.0.5 - astring: 1.9.0 - source-map: 0.7.6 - - estree-util-visit@2.0.0: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/unist': 3.0.3 - - estree-walker@2.0.2: {} - - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.8 - - eventemitter3@5.0.4: {} - - extend@3.0.2: {} - - fast-deep-equal@3.1.3: {} - - fast-uri@3.1.0: {} - - fast-xml-builder@1.1.4: - dependencies: - path-expression-matcher: 1.1.3 - - fast-xml-parser@5.4.1: - dependencies: - fast-xml-builder: 1.1.4 - strnum: 2.2.0 - - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - - flattie@1.1.1: {} - - fontace@0.4.1: - dependencies: - fontkitten: 1.0.3 - - fontkitten@1.0.3: - dependencies: - tiny-inflate: 1.0.3 - - fsevents@2.3.3: - optional: true - - get-caller-file@2.0.5: {} - - github-slugger@2.0.0: {} - - graceful-fs@4.2.11: {} - - h3@1.15.8: - dependencies: - cookie-es: 1.2.2 - crossws: 0.3.5 - defu: 6.1.4 - destr: 2.0.5 - iron-webcrypto: 1.2.1 - node-mock-http: 1.0.4 - radix3: 1.1.2 - ufo: 1.6.3 - uncrypto: 0.1.3 - - has-flag@5.0.1: {} - - hast-util-from-html@2.0.3: - dependencies: - '@types/hast': 3.0.4 - devlop: 1.1.0 - hast-util-from-parse5: 8.0.3 - parse5: 7.3.0 - vfile: 6.0.3 - vfile-message: 4.0.3 - - hast-util-from-parse5@8.0.3: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - devlop: 1.1.0 - hastscript: 9.0.1 - property-information: 7.1.0 - vfile: 6.0.3 - vfile-location: 5.0.3 - web-namespaces: 2.0.1 - - hast-util-is-element@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-parse-selector@4.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-raw@9.1.0: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - '@ungap/structured-clone': 1.3.0 - hast-util-from-parse5: 8.0.3 - hast-util-to-parse5: 8.0.1 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.1 - parse5: 7.3.0 - unist-util-position: 5.0.0 - unist-util-visit: 5.1.0 - vfile: 6.0.3 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - - hast-util-to-estree@3.1.3: - dependencies: - '@types/estree': 1.0.8 - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-attach-comments: 3.0.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.1.0 - space-separated-tokens: 2.0.2 - style-to-js: 1.1.21 - unist-util-position: 5.0.0 - zwitch: 2.0.4 - transitivePeerDependencies: - - supports-color - - hast-util-to-html@9.0.5: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - comma-separated-tokens: 2.0.3 - hast-util-whitespace: 3.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.1 - property-information: 7.1.0 - space-separated-tokens: 2.0.2 - stringify-entities: 4.0.4 - zwitch: 2.0.4 - - hast-util-to-jsx-runtime@2.3.6: - dependencies: - '@types/estree': 1.0.8 - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.1.0 - space-separated-tokens: 2.0.2 - style-to-js: 1.1.21 - unist-util-position: 5.0.0 - vfile-message: 4.0.3 - transitivePeerDependencies: - - supports-color - - hast-util-to-parse5@8.0.1: - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - property-information: 7.1.0 - space-separated-tokens: 2.0.2 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - - hast-util-to-text@4.0.2: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - hast-util-is-element: 3.0.0 - unist-util-find-after: 5.0.0 - - hast-util-whitespace@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hastscript@9.0.1: - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - hast-util-parse-selector: 4.0.0 - property-information: 7.1.0 - space-separated-tokens: 2.0.2 - - html-escaper@3.0.3: {} - - html-void-elements@3.0.0: {} - - http-cache-semantics@4.2.0: {} - - inline-style-parser@0.2.7: {} - - iron-webcrypto@1.2.1: {} - - is-alphabetical@2.0.1: {} - - is-alphanumerical@2.0.1: - dependencies: - is-alphabetical: 2.0.1 - is-decimal: 2.0.1 - - is-decimal@2.0.1: {} - - is-docker@3.0.0: {} - - is-fullwidth-code-point@3.0.0: {} - - is-fullwidth-code-point@4.0.0: {} - - is-hexadecimal@2.0.1: {} - - is-inside-container@1.0.0: - dependencies: - is-docker: 3.0.0 - - is-plain-obj@4.1.0: {} - - is-wsl@3.1.1: - dependencies: - is-inside-container: 1.0.0 - - isexe@2.0.0: {} - - jiti@2.6.1: {} - - js-yaml@4.1.1: - dependencies: - argparse: 2.0.1 - - json-schema-traverse@1.0.0: {} - - jsonc-parser@2.3.1: {} - - jsonc-parser@3.3.1: {} - - kleur@4.1.5: {} - - lightningcss-android-arm64@1.32.0: - optional: true - - lightningcss-darwin-arm64@1.32.0: - optional: true - - lightningcss-darwin-x64@1.32.0: - optional: true - - lightningcss-freebsd-x64@1.32.0: - optional: true - - lightningcss-linux-arm-gnueabihf@1.32.0: - optional: true - - lightningcss-linux-arm64-gnu@1.32.0: - optional: true - - lightningcss-linux-arm64-musl@1.32.0: - optional: true - - lightningcss-linux-x64-gnu@1.32.0: - optional: true - - lightningcss-linux-x64-musl@1.32.0: - optional: true - - lightningcss-win32-arm64-msvc@1.32.0: - optional: true - - lightningcss-win32-x64-msvc@1.32.0: - optional: true - - lightningcss@1.32.0: - dependencies: - detect-libc: 2.1.2 - optionalDependencies: - lightningcss-android-arm64: 1.32.0 - lightningcss-darwin-arm64: 1.32.0 - lightningcss-darwin-x64: 1.32.0 - lightningcss-freebsd-x64: 1.32.0 - lightningcss-linux-arm-gnueabihf: 1.32.0 - lightningcss-linux-arm64-gnu: 1.32.0 - lightningcss-linux-arm64-musl: 1.32.0 - lightningcss-linux-x64-gnu: 1.32.0 - lightningcss-linux-x64-musl: 1.32.0 - lightningcss-win32-arm64-msvc: 1.32.0 - lightningcss-win32-x64-msvc: 1.32.0 - - log-update@5.0.1: - dependencies: - ansi-escapes: 5.0.0 - cli-cursor: 4.0.0 - slice-ansi: 5.0.0 - strip-ansi: 7.2.0 - wrap-ansi: 8.1.0 - - longest-streak@3.1.0: {} - - lru-cache@11.2.7: {} - - magic-string@0.30.21: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - - magicast@0.5.2: - dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 - source-map-js: 1.2.1 - - markdown-extensions@2.0.0: {} - - markdown-table@3.0.4: {} - - mdast-util-definitions@6.0.0: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - unist-util-visit: 5.1.0 - - mdast-util-find-and-replace@3.0.2: - dependencies: - '@types/mdast': 4.0.4 - escape-string-regexp: 5.0.0 - unist-util-is: 6.0.1 - unist-util-visit-parents: 6.0.2 - - mdast-util-from-markdown@2.0.3: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - decode-named-character-reference: 1.3.0 - devlop: 1.1.0 - mdast-util-to-string: 4.0.0 - micromark: 4.0.2 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-decode-string: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - unist-util-stringify-position: 4.0.0 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-autolink-literal@2.0.1: - dependencies: - '@types/mdast': 4.0.4 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-find-and-replace: 3.0.2 - micromark-util-character: 2.1.1 - - mdast-util-gfm-footnote@2.1.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 - micromark-util-normalize-identifier: 2.0.1 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-strikethrough@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-table@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - markdown-table: 3.0.4 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-task-list-item@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm@3.1.0: - dependencies: - mdast-util-from-markdown: 2.0.3 - mdast-util-gfm-autolink-literal: 2.0.1 - mdast-util-gfm-footnote: 2.1.0 - mdast-util-gfm-strikethrough: 2.0.0 - mdast-util-gfm-table: 2.0.0 - mdast-util-gfm-task-list-item: 2.0.0 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-expression@2.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-jsx@3.2.0: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 - parse-entities: 4.0.2 - stringify-entities: 4.0.4 - unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.3 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx@3.0.0: - dependencies: - mdast-util-from-markdown: 2.0.3 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-mdxjs-esm@2.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-phrasing@4.1.0: - dependencies: - '@types/mdast': 4.0.4 - unist-util-is: 6.0.1 - - mdast-util-to-hast@13.2.1: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.0 - devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.1 - trim-lines: 3.0.1 - unist-util-position: 5.0.0 - unist-util-visit: 5.1.0 - vfile: 6.0.3 - - mdast-util-to-markdown@2.1.2: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - longest-streak: 3.1.0 - mdast-util-phrasing: 4.1.0 - mdast-util-to-string: 4.0.0 - micromark-util-classify-character: 2.0.1 - micromark-util-decode-string: 2.0.1 - unist-util-visit: 5.1.0 - zwitch: 2.0.4 - - mdast-util-to-string@4.0.0: - dependencies: - '@types/mdast': 4.0.4 - - mdn-data@2.0.28: {} - - mdn-data@2.27.1: {} - - micromark-core-commonmark@2.0.3: - dependencies: - decode-named-character-reference: 1.3.0 - devlop: 1.1.0 - micromark-factory-destination: 2.0.1 - micromark-factory-label: 2.0.1 - micromark-factory-space: 2.0.1 - micromark-factory-title: 2.0.1 - micromark-factory-whitespace: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-html-tag-name: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-autolink-literal@2.1.0: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-footnote@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-strikethrough@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-table@2.1.1: - dependencies: - devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-tagfilter@2.0.0: - dependencies: - micromark-util-types: 2.0.2 - - micromark-extension-gfm-task-list-item@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm@3.0.0: - dependencies: - micromark-extension-gfm-autolink-literal: 2.1.0 - micromark-extension-gfm-footnote: 2.1.0 - micromark-extension-gfm-strikethrough: 2.1.0 - micromark-extension-gfm-table: 2.1.1 - micromark-extension-gfm-tagfilter: 2.0.0 - micromark-extension-gfm-task-list-item: 2.1.0 - micromark-util-combine-extensions: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-mdx-expression@3.0.1: - dependencies: - '@types/estree': 1.0.8 - devlop: 1.1.0 - micromark-factory-mdx-expression: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-mdx-jsx@3.0.2: - dependencies: - '@types/estree': 1.0.8 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - micromark-factory-mdx-expression: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - vfile-message: 4.0.3 - - micromark-extension-mdx-md@2.0.0: - dependencies: - micromark-util-types: 2.0.2 - - micromark-extension-mdxjs-esm@3.0.0: - dependencies: - '@types/estree': 1.0.8 - devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.3 - - micromark-extension-mdxjs@3.0.0: - dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) - micromark-extension-mdx-expression: 3.0.1 - micromark-extension-mdx-jsx: 3.0.2 - micromark-extension-mdx-md: 2.0.0 - micromark-extension-mdxjs-esm: 3.0.0 - micromark-util-combine-extensions: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-destination@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-label@2.0.1: - dependencies: - devlop: 1.1.0 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-mdx-expression@2.0.3: - dependencies: - '@types/estree': 1.0.8 - devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.3 - - micromark-factory-space@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-types: 2.0.2 - - micromark-factory-title@2.0.1: - dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-whitespace@2.0.1: - dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-character@2.1.1: - dependencies: - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-chunked@2.0.1: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-classify-character@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-combine-extensions@2.0.1: - dependencies: - micromark-util-chunked: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-decode-numeric-character-reference@2.0.2: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-decode-string@2.0.1: - dependencies: - decode-named-character-reference: 1.3.0 - micromark-util-character: 2.1.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-symbol: 2.0.1 - - micromark-util-encode@2.0.1: {} - - micromark-util-events-to-acorn@2.0.3: - dependencies: - '@types/estree': 1.0.8 - '@types/unist': 3.0.3 - devlop: 1.1.0 - estree-util-visit: 2.0.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - vfile-message: 4.0.3 - - micromark-util-html-tag-name@2.0.1: {} - - micromark-util-normalize-identifier@2.0.1: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-resolve-all@2.0.1: - dependencies: - micromark-util-types: 2.0.2 - - micromark-util-sanitize-uri@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-encode: 2.0.1 - micromark-util-symbol: 2.0.1 - - micromark-util-subtokenize@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-symbol@2.0.1: {} - - micromark-util-types@2.0.2: {} - - micromark@4.0.2: - dependencies: - '@types/debug': 4.1.12 - debug: 4.4.3 - decode-named-character-reference: 1.3.0 - devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-combine-extensions: 2.0.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-encode: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - transitivePeerDependencies: - - supports-color - - mimic-fn@2.1.0: {} - - mrmime@2.0.1: {} - - ms@2.1.3: {} - - muggle-string@0.4.1: {} - - nanoid@3.3.11: {} - - neotraverse@0.6.18: {} - - nlcst-to-string@4.0.0: - dependencies: - '@types/nlcst': 2.0.3 - - node-fetch-native@1.6.7: {} - - node-mock-http@1.0.4: {} - - normalize-path@3.0.0: {} - - nth-check@2.1.1: - dependencies: - boolbase: 1.0.0 - - obug@2.1.1: {} - - ofetch@1.5.1: - dependencies: - destr: 2.0.5 - node-fetch-native: 1.6.7 - ufo: 1.6.3 - - ohash@2.0.11: {} - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - oniguruma-parser@0.12.1: {} - - oniguruma-to-es@4.3.5: - dependencies: - oniguruma-parser: 0.12.1 - regex: 6.1.0 - regex-recursion: 6.0.2 - - oxfmt@0.40.0: - dependencies: - tinypool: 2.1.0 - optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.40.0 - '@oxfmt/binding-android-arm64': 0.40.0 - '@oxfmt/binding-darwin-arm64': 0.40.0 - '@oxfmt/binding-darwin-x64': 0.40.0 - '@oxfmt/binding-freebsd-x64': 0.40.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.40.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.40.0 - '@oxfmt/binding-linux-arm64-gnu': 0.40.0 - '@oxfmt/binding-linux-arm64-musl': 0.40.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.40.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.40.0 - '@oxfmt/binding-linux-riscv64-musl': 0.40.0 - '@oxfmt/binding-linux-s390x-gnu': 0.40.0 - '@oxfmt/binding-linux-x64-gnu': 0.40.0 - '@oxfmt/binding-linux-x64-musl': 0.40.0 - '@oxfmt/binding-openharmony-arm64': 0.40.0 - '@oxfmt/binding-win32-arm64-msvc': 0.40.0 - '@oxfmt/binding-win32-ia32-msvc': 0.40.0 - '@oxfmt/binding-win32-x64-msvc': 0.40.0 - - oxlint-tsgolint@0.17.0: - optionalDependencies: - '@oxlint-tsgolint/darwin-arm64': 0.17.0 - '@oxlint-tsgolint/darwin-x64': 0.17.0 - '@oxlint-tsgolint/linux-arm64': 0.17.0 - '@oxlint-tsgolint/linux-x64': 0.17.0 - '@oxlint-tsgolint/win32-arm64': 0.17.0 - '@oxlint-tsgolint/win32-x64': 0.17.0 - - oxlint@1.55.0(oxlint-tsgolint@0.17.0): - optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.55.0 - '@oxlint/binding-android-arm64': 1.55.0 - '@oxlint/binding-darwin-arm64': 1.55.0 - '@oxlint/binding-darwin-x64': 1.55.0 - '@oxlint/binding-freebsd-x64': 1.55.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.55.0 - '@oxlint/binding-linux-arm-musleabihf': 1.55.0 - '@oxlint/binding-linux-arm64-gnu': 1.55.0 - '@oxlint/binding-linux-arm64-musl': 1.55.0 - '@oxlint/binding-linux-ppc64-gnu': 1.55.0 - '@oxlint/binding-linux-riscv64-gnu': 1.55.0 - '@oxlint/binding-linux-riscv64-musl': 1.55.0 - '@oxlint/binding-linux-s390x-gnu': 1.55.0 - '@oxlint/binding-linux-x64-gnu': 1.55.0 - '@oxlint/binding-linux-x64-musl': 1.55.0 - '@oxlint/binding-openharmony-arm64': 1.55.0 - '@oxlint/binding-win32-arm64-msvc': 1.55.0 - '@oxlint/binding-win32-ia32-msvc': 1.55.0 - '@oxlint/binding-win32-x64-msvc': 1.55.0 - oxlint-tsgolint: 0.17.0 - - p-limit@7.3.0: - dependencies: - yocto-queue: 1.2.2 - - p-queue@9.1.0: - dependencies: - eventemitter3: 5.0.4 - p-timeout: 7.0.1 - - p-timeout@7.0.1: {} - - package-manager-detector@1.6.0: {} - - parse-entities@4.0.2: - dependencies: - '@types/unist': 2.0.11 - character-entities-legacy: 3.0.0 - character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.3.0 - is-alphanumerical: 2.0.1 - is-decimal: 2.0.1 - is-hexadecimal: 2.0.1 - - parse-latin@7.0.0: - dependencies: - '@types/nlcst': 2.0.3 - '@types/unist': 3.0.3 - nlcst-to-string: 4.0.0 - unist-util-modify-children: 4.0.0 - unist-util-visit-children: 3.0.0 - vfile: 6.0.3 - - parse5@7.3.0: - dependencies: - entities: 6.0.1 - - path-browserify@1.0.1: {} - - path-expression-matcher@1.1.3: {} - - path-key@3.1.1: {} - - piccolore@0.1.3: {} - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - picomatch@4.0.3: {} - - pixelmatch@7.1.0: - dependencies: - pngjs: 7.0.0 - - pngjs@7.0.0: {} - - postcss-selector-parser@6.0.10: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss@8.5.8: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - prettier-plugin-astro@0.14.1: - dependencies: - '@astrojs/compiler': 2.13.1 - prettier: 3.8.1 - sass-formatter: 0.7.9 - optional: true - - prettier@3.8.1: {} - - prismjs@1.30.0: {} - - property-information@7.1.0: {} - - radix3@1.1.2: {} - - readdirp@4.1.2: {} - - readdirp@5.0.0: {} - - recma-build-jsx@1.0.0: - dependencies: - '@types/estree': 1.0.8 - estree-util-build-jsx: 3.0.1 - vfile: 6.0.3 - - recma-jsx@1.0.1(acorn@8.16.0): - dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) - estree-util-to-js: 2.0.0 - recma-parse: 1.0.0 - recma-stringify: 1.0.0 - unified: 11.0.5 - - recma-parse@1.0.0: - dependencies: - '@types/estree': 1.0.8 - esast-util-from-js: 2.0.1 - unified: 11.0.5 - vfile: 6.0.3 - - recma-stringify@1.0.0: - dependencies: - '@types/estree': 1.0.8 - estree-util-to-js: 2.0.0 - unified: 11.0.5 - vfile: 6.0.3 - - regex-recursion@6.0.2: - dependencies: - regex-utilities: 2.3.0 - - regex-utilities@2.3.0: {} - - regex@6.1.0: - dependencies: - regex-utilities: 2.3.0 - - rehype-parse@9.0.1: - dependencies: - '@types/hast': 3.0.4 - hast-util-from-html: 2.0.3 - unified: 11.0.5 - - rehype-raw@7.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-raw: 9.1.0 - vfile: 6.0.3 - - rehype-recma@1.0.0: - dependencies: - '@types/estree': 1.0.8 - '@types/hast': 3.0.4 - hast-util-to-estree: 3.1.3 - transitivePeerDependencies: - - supports-color - - rehype-stringify@10.0.1: - dependencies: - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 - unified: 11.0.5 - - rehype@13.0.2: - dependencies: - '@types/hast': 3.0.4 - rehype-parse: 9.0.1 - rehype-stringify: 10.0.1 - unified: 11.0.5 - - remark-gfm@4.0.1: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-gfm: 3.1.0 - micromark-extension-gfm: 3.0.0 - remark-parse: 11.0.0 - remark-stringify: 11.0.0 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-mdx@3.1.1: - dependencies: - mdast-util-mdx: 3.0.0 - micromark-extension-mdxjs: 3.0.0 - transitivePeerDependencies: - - supports-color - - remark-parse@11.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.3 - micromark-util-types: 2.0.2 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-rehype@11.1.2: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - mdast-util-to-hast: 13.2.1 - unified: 11.0.5 - vfile: 6.0.3 - - remark-smartypants@3.0.2: - dependencies: - retext: 9.0.0 - retext-smartypants: 6.2.0 - unified: 11.0.5 - unist-util-visit: 5.1.0 - - remark-stringify@11.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-to-markdown: 2.1.2 - unified: 11.0.5 - - request-light@0.5.8: {} - - request-light@0.7.0: {} - - require-directory@2.1.1: {} - - require-from-string@2.0.2: {} - - restore-cursor@4.0.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - - retext-latin@4.0.0: - dependencies: - '@types/nlcst': 2.0.3 - parse-latin: 7.0.0 - unified: 11.0.5 - - retext-smartypants@6.2.0: - dependencies: - '@types/nlcst': 2.0.3 - nlcst-to-string: 4.0.0 - unist-util-visit: 5.1.0 - - retext-stringify@4.0.0: - dependencies: - '@types/nlcst': 2.0.3 - nlcst-to-string: 4.0.0 - unified: 11.0.5 - - retext@9.0.0: - dependencies: - '@types/nlcst': 2.0.3 - retext-latin: 4.0.0 - retext-stringify: 4.0.0 - unified: 11.0.5 - - rollup@4.59.0: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.59.0 - '@rollup/rollup-android-arm64': 4.59.0 - '@rollup/rollup-darwin-arm64': 4.59.0 - '@rollup/rollup-darwin-x64': 4.59.0 - '@rollup/rollup-freebsd-arm64': 4.59.0 - '@rollup/rollup-freebsd-x64': 4.59.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.59.0 - '@rollup/rollup-linux-arm-musleabihf': 4.59.0 - '@rollup/rollup-linux-arm64-gnu': 4.59.0 - '@rollup/rollup-linux-arm64-musl': 4.59.0 - '@rollup/rollup-linux-loong64-gnu': 4.59.0 - '@rollup/rollup-linux-loong64-musl': 4.59.0 - '@rollup/rollup-linux-ppc64-gnu': 4.59.0 - '@rollup/rollup-linux-ppc64-musl': 4.59.0 - '@rollup/rollup-linux-riscv64-gnu': 4.59.0 - '@rollup/rollup-linux-riscv64-musl': 4.59.0 - '@rollup/rollup-linux-s390x-gnu': 4.59.0 - '@rollup/rollup-linux-x64-gnu': 4.59.0 - '@rollup/rollup-linux-x64-musl': 4.59.0 - '@rollup/rollup-openbsd-x64': 4.59.0 - '@rollup/rollup-openharmony-arm64': 4.59.0 - '@rollup/rollup-win32-arm64-msvc': 4.59.0 - '@rollup/rollup-win32-ia32-msvc': 4.59.0 - '@rollup/rollup-win32-x64-gnu': 4.59.0 - '@rollup/rollup-win32-x64-msvc': 4.59.0 - fsevents: 2.3.3 - - s.color@0.0.15: - optional: true - - sass-formatter@0.7.9: - dependencies: - suf-log: 2.5.3 - optional: true - - sax@1.6.0: {} - - semver@7.7.4: {} - - sharp@0.34.5: - dependencies: - '@img/colour': 1.1.0 - detect-libc: 2.1.2 - semver: 7.7.4 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.5 - '@img/sharp-darwin-x64': 0.34.5 - '@img/sharp-libvips-darwin-arm64': 1.2.4 - '@img/sharp-libvips-darwin-x64': 1.2.4 - '@img/sharp-libvips-linux-arm': 1.2.4 - '@img/sharp-libvips-linux-arm64': 1.2.4 - '@img/sharp-libvips-linux-ppc64': 1.2.4 - '@img/sharp-libvips-linux-riscv64': 1.2.4 - '@img/sharp-libvips-linux-s390x': 1.2.4 - '@img/sharp-libvips-linux-x64': 1.2.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - '@img/sharp-linux-arm': 0.34.5 - '@img/sharp-linux-arm64': 0.34.5 - '@img/sharp-linux-ppc64': 0.34.5 - '@img/sharp-linux-riscv64': 0.34.5 - '@img/sharp-linux-s390x': 0.34.5 - '@img/sharp-linux-x64': 0.34.5 - '@img/sharp-linuxmusl-arm64': 0.34.5 - '@img/sharp-linuxmusl-x64': 0.34.5 - '@img/sharp-wasm32': 0.34.5 - '@img/sharp-win32-arm64': 0.34.5 - '@img/sharp-win32-ia32': 0.34.5 - '@img/sharp-win32-x64': 0.34.5 - optional: true - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - shiki@4.0.2: - dependencies: - '@shikijs/core': 4.0.2 - '@shikijs/engine-javascript': 4.0.2 - '@shikijs/engine-oniguruma': 4.0.2 - '@shikijs/langs': 4.0.2 - '@shikijs/themes': 4.0.2 - '@shikijs/types': 4.0.2 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - signal-exit@3.0.7: {} - - sirv@3.0.2: - dependencies: - '@polka/url': 1.0.0-next.29 - mrmime: 2.0.1 - totalist: 3.0.1 - - sisteransi@1.0.5: {} - - sitemap@9.0.1: - dependencies: - '@types/node': 24.12.0 - '@types/sax': 1.2.7 - arg: 5.0.2 - sax: 1.6.0 - - slice-ansi@5.0.0: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 4.0.0 - - smol-toml@1.6.0: {} - - source-map-js@1.2.1: {} - - source-map@0.7.6: {} - - space-separated-tokens@2.0.2: {} - - std-env@4.0.0: {} - - stream-replace-string@2.0.0: {} - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.2.0 - - stringify-entities@4.0.4: - dependencies: - character-entities-html4: 2.1.0 - character-entities-legacy: 3.0.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.2.0: - dependencies: - ansi-regex: 6.2.2 - - strnum@2.2.0: {} - - style-to-js@1.1.21: - dependencies: - style-to-object: 1.0.14 - - style-to-object@1.0.14: - dependencies: - inline-style-parser: 0.2.7 - - suf-log@2.5.3: - dependencies: - s.color: 0.0.15 - optional: true - - supports-color@10.2.2: {} - - supports-hyperlinks@4.4.0: - dependencies: - has-flag: 5.0.1 - supports-color: 10.2.2 - - svgo@4.0.1: - dependencies: - commander: 11.1.0 - css-select: 5.2.2 - css-tree: 3.2.1 - css-what: 6.2.2 - csso: 5.0.5 - picocolors: 1.1.1 - sax: 1.6.0 - - tailwind-merge@3.5.0: {} - - tailwindcss@4.2.2: {} - - tapable@2.3.0: {} - - terminal-link@5.0.0: - dependencies: - ansi-escapes: 7.3.0 - supports-hyperlinks: 4.4.0 - - tiny-inflate@1.0.3: {} - - tinybench@2.9.0: {} - - tinyclip@0.1.12: {} - - tinyexec@1.0.4: {} - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - - tinypool@2.1.0: {} - - totalist@3.0.1: {} - - trim-lines@3.0.1: {} - - trough@2.2.0: {} - - tsconfck@3.1.6(typescript@5.9.3): - optionalDependencies: - typescript: 5.9.3 - - tslib@2.8.1: - optional: true - - type-fest@1.4.0: {} - - typesafe-path@0.2.2: {} - - typescript-auto-import-cache@0.3.6: - dependencies: - semver: 7.7.4 - - typescript@5.9.3: {} - - ufo@1.6.3: {} - - ultrahtml@1.6.0: {} - - uncrypto@0.1.3: {} - - undici-types@7.16.0: {} - - unified@11.0.5: - dependencies: - '@types/unist': 3.0.3 - bail: 2.0.2 - devlop: 1.1.0 - extend: 3.0.2 - is-plain-obj: 4.1.0 - trough: 2.2.0 - vfile: 6.0.3 - - unifont@0.7.4: - dependencies: - css-tree: 3.2.1 - ofetch: 1.5.1 - ohash: 2.0.11 - - unist-util-find-after@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - - unist-util-is@6.0.1: - dependencies: - '@types/unist': 3.0.3 - - unist-util-modify-children@4.0.0: - dependencies: - '@types/unist': 3.0.3 - array-iterate: 2.0.1 - - unist-util-position-from-estree@2.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-remove-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-visit: 5.1.0 - - unist-util-stringify-position@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-children@3.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-parents@6.0.2: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - - unist-util-visit@5.1.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - unist-util-visit-parents: 6.0.2 - - unstorage@1.17.4: - dependencies: - anymatch: 3.1.3 - chokidar: 5.0.0 - destr: 2.0.5 - h3: 1.15.8 - lru-cache: 11.2.7 - node-fetch-native: 1.6.7 - ofetch: 1.5.1 - ufo: 1.6.3 - - util-deprecate@1.0.2: {} - - vfile-location@5.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile: 6.0.3 - - vfile-message@4.0.3: - dependencies: - '@types/unist': 3.0.3 - unist-util-stringify-position: 4.0.0 - - vfile@6.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile-message: 4.0.3 - - vite-plus@0.1.12(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(typescript@5.9.3)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(yaml@2.8.2): - dependencies: - '@oxc-project/types': 0.115.0 - '@voidzero-dev/vite-plus-core': 0.1.12(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.2) - '@voidzero-dev/vite-plus-test': 0.1.12(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(typescript@5.9.3)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2))(yaml@2.8.2) - cac: 6.7.14 - cross-spawn: 7.0.6 - oxfmt: 0.40.0 - oxlint: 1.55.0(oxlint-tsgolint@0.17.0) - oxlint-tsgolint: 0.17.0 - picocolors: 1.1.1 - optionalDependencies: - '@voidzero-dev/vite-plus-darwin-arm64': 0.1.12 - '@voidzero-dev/vite-plus-darwin-x64': 0.1.12 - '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.12 - '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.12 - '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.12 - '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.12 - transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@edge-runtime/vm' - - '@opentelemetry/api' - - '@tsdown/css' - - '@tsdown/exe' - - '@types/node' - - '@vitejs/devtools' - - '@vitest/ui' - - bufferutil - - esbuild - - happy-dom - - jiti - - jsdom - - less - - publint - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - typescript - - unplugin-unused - - utf-8-validate - - vite - - yaml - - vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.2): - dependencies: - esbuild: 0.27.4 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.8 - rollup: 4.59.0 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 24.12.0 - fsevents: 2.3.3 - jiti: 2.6.1 - lightningcss: 1.32.0 - yaml: 2.8.2 - - vitefu@1.1.2(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.2)): - optionalDependencies: - vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(typescript@5.9.3)(yaml@2.8.2)' - - volar-service-css@0.0.70(@volar/language-service@2.4.28): - dependencies: - vscode-css-languageservice: 6.3.10 - vscode-languageserver-textdocument: 1.0.12 - vscode-uri: 3.1.0 - optionalDependencies: - '@volar/language-service': 2.4.28 - - volar-service-emmet@0.0.70(@volar/language-service@2.4.28): - dependencies: - '@emmetio/css-parser': 0.4.1 - '@emmetio/html-matcher': 1.3.0 - '@vscode/emmet-helper': 2.11.0 - vscode-uri: 3.1.0 - optionalDependencies: - '@volar/language-service': 2.4.28 - - volar-service-html@0.0.70(@volar/language-service@2.4.28): - dependencies: - vscode-html-languageservice: 5.6.2 - vscode-languageserver-textdocument: 1.0.12 - vscode-uri: 3.1.0 - optionalDependencies: - '@volar/language-service': 2.4.28 - - volar-service-prettier@0.0.70(@volar/language-service@2.4.28)(prettier@3.8.1): - dependencies: - vscode-uri: 3.1.0 - optionalDependencies: - '@volar/language-service': 2.4.28 - prettier: 3.8.1 - - volar-service-typescript-twoslash-queries@0.0.70(@volar/language-service@2.4.28): - dependencies: - vscode-uri: 3.1.0 - optionalDependencies: - '@volar/language-service': 2.4.28 - - volar-service-typescript@0.0.70(@volar/language-service@2.4.28): - dependencies: - path-browserify: 1.0.1 - semver: 7.7.4 - typescript-auto-import-cache: 0.3.6 - vscode-languageserver-textdocument: 1.0.12 - vscode-nls: 5.2.0 - vscode-uri: 3.1.0 - optionalDependencies: - '@volar/language-service': 2.4.28 - - volar-service-yaml@0.0.70(@volar/language-service@2.4.28): - dependencies: - vscode-uri: 3.1.0 - yaml-language-server: 1.20.0 - optionalDependencies: - '@volar/language-service': 2.4.28 - - vscode-css-languageservice@6.3.10: - dependencies: - '@vscode/l10n': 0.0.18 - vscode-languageserver-textdocument: 1.0.12 - vscode-languageserver-types: 3.17.5 - vscode-uri: 3.1.0 - - vscode-html-languageservice@5.6.2: - dependencies: - '@vscode/l10n': 0.0.18 - vscode-languageserver-textdocument: 1.0.12 - vscode-languageserver-types: 3.17.5 - vscode-uri: 3.1.0 - - vscode-json-languageservice@4.1.8: - dependencies: - jsonc-parser: 3.3.1 - vscode-languageserver-textdocument: 1.0.12 - vscode-languageserver-types: 3.17.5 - vscode-nls: 5.2.0 - vscode-uri: 3.1.0 - - vscode-jsonrpc@8.2.0: {} - - vscode-languageserver-protocol@3.17.5: - dependencies: - vscode-jsonrpc: 8.2.0 - vscode-languageserver-types: 3.17.5 - - vscode-languageserver-textdocument@1.0.12: {} - - vscode-languageserver-types@3.17.5: {} - - vscode-languageserver@9.0.1: - dependencies: - vscode-languageserver-protocol: 3.17.5 - - vscode-nls@5.2.0: {} - - vscode-uri@3.1.0: {} - - web-namespaces@2.0.1: {} - - which-pm-runs@1.1.0: {} - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 5.1.2 - strip-ansi: 7.2.0 - - ws@8.19.0: {} - - xxhash-wasm@1.1.0: {} - - y18n@5.0.8: {} - - yaml-language-server@1.20.0: - dependencies: - '@vscode/l10n': 0.0.18 - ajv: 8.18.0 - ajv-draft-04: 1.0.0(ajv@8.18.0) - prettier: 3.8.1 - request-light: 0.5.8 - vscode-json-languageservice: 4.1.8 - vscode-languageserver: 9.0.1 - vscode-languageserver-textdocument: 1.0.12 - vscode-languageserver-types: 3.17.5 - vscode-uri: 3.1.0 - yaml: 2.7.1 - - yaml@2.7.1: {} - - yaml@2.8.2: {} - - yargs-parser@21.1.1: {} - - yargs-parser@22.0.0: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yocto-queue@1.2.2: {} - - zod@4.3.6: {} - - zwitch@2.0.4: {} diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index 119e6626d6d2416c028afea8cad8aaff5e0b1cf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179507 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

sWwVty>60<5gWIo%OfUO>ZuuRfi*lGh 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 diff --git a/public/fonts/CommitMono-400-Italic.otf b/public/fonts/CommitMono-400-Italic.otf deleted file mode 100644 index 3c88f89aba86685f383afa4e44fd27c54ede6f19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 274500 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 aIXPnek(?Z{{zy)aSX+~mBi7aoBKm(v!bOe% diff --git a/public/fonts/CommitMono-700-Italic.otf b/public/fonts/CommitMono-700-Italic.otf deleted file mode 100644 index 6386a6de9516ccecd12419efb8e2ffc907599cd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 276008 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

>D zLX3QKO#G4jWtsy-qiJ-y?`cm&NN(U5*#%lvb_gX3jS^Zna*0Q}PfQ4S`avnxTTa@y zpZ&k_4EI}F$%Y>jYlOaM#``GE$O{ubg;&Y4aku=-AH(Cn6E0jIqQjDfW4zpDe-xE` z_ftec7>%K^E>&KRkc=H;O{v2BIF~w{^ZDX}{7;xNkI`3>-NV}gUu0H5nZgepr7z_d ze{50Uvq$KQKY3P4XTyiLJuEx1Gt`em;U$TRn}Ux@T-hRAh|6#(uE4T#L`+ z3lc-N5jRQXz!r%oTaOzgir`Ir2Tk1A6Q^0-spZCM_NT!#NaQzGBs-cOrnxkq=Ftf{EK>f0 zj?kAPov%cO{`k#v%A~}DgU+EV*MZeP-I!!6`2LqiI8AOOw!X^G~w8(C( z^wN0g)4N4V{s_;JJkfV5^K_oZGdY>(@{R~sNR8Ey& zMXG|5vFUnMOVw64sI)lHWZA_(OQI=eOJ>h`g0CVX?Wxj*B5x6jNEQ4iprO0D2v@)oIHbx%MUeNUube6XM3WMo) z0sEb%uVIv+Z90q-{%68$X~A5WBW+j-bEOq)V4k#NGdyBiB72vm9kAH60+yLJz$%Gc zn-5O}AhEK<)Lq_a4nML@O)uc9g0C%-36z~2PB_h=+0v&!@O?a0IZCT4s-_yQMvGh@ z79O(}OOrNYO-+|G8Y6v8Yw=|nH=FPe84KFUP19(WVD+S6ZL$KTR3%ki4OJrrFAx16 zZJI3prGjf@Cw(P}*hqpd&=-cl6nFq0fmQG{ye9k4_rPH|0jDts#$YL|gtf2<-imFo zlk9*0!YM*GQX^VQkJ3Bz8ok91U&95tESKO`+<|Z9e*7pu#UJqZs;FwIda4y_lP;sL z({*(V-BjPICkXfdypNkEdm|B#8+%zR?GXV_^T$&6#)A*HBj9O4rT1k)52eg5d+NeHiwR%UF(^Ygs-CEzId+K|GP$D@Y7UCpwslLP& zb(eUh5fWK6SEAt7NW9V;5?^#sVwHXr_c9zyU_4gGy4VbRVF&Dn&*0ZiacW74w2GF{ zR(gZpX3eo2%@sI~+i_R!#e;bXujTFhiz=zws=n&q>Rnx4SJjPl8{J&@k_foq(<2rm uqoh~-zKgLn79$xYV*Qbf60!bBMu}K|B%?&EKax=**4AW{h_yAN0R9K;yJAoP diff --git a/public/fonts/CommitMono-700-Regular.otf b/public/fonts/CommitMono-700-Regular.otf deleted file mode 100644 index b877cecfc44e5f34891db4cc0b46a28cc153bf66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 276208 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

^%M;Bj+1Xsm77v-8 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 do~LE}QXd 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 - - - - - - - - - -{title} - - - - - - - - - - - - - - - - diff --git a/src/components/FormattedDate.astro b/src/components/FormattedDate.astro deleted file mode 100644 index f264044..0000000 --- a/src/components/FormattedDate.astro +++ /dev/null @@ -1,17 +0,0 @@ ---- -interface Props { - date: Date; -} - -const { date } = Astro.props; ---- - - diff --git a/src/components/Header.astro b/src/components/Header.astro deleted file mode 100644 index 7c8f9ef..0000000 --- a/src/components/Header.astro +++ /dev/null @@ -1,11 +0,0 @@ ---- -import { SITE_TITLE } from "../consts"; -import LedgerLabel from "./LedgerLabel.astro"; ---- - -

- - {SITE_TITLE} - - Frontend Engineer -
diff --git a/src/components/LedgerLabel.astro b/src/components/LedgerLabel.astro deleted file mode 100644 index e267dd4..0000000 --- a/src/components/LedgerLabel.astro +++ /dev/null @@ -1,26 +0,0 @@ ---- -interface Props { - as?: "h2" | "span" | "div"; - href?: string; - class?: string; -} - -const { as: Tag = "span", href, class: className } = Astro.props as Props; -const classes = - "text-gray-1000 font-sans text-sm font-medium uppercase tracking-wide leading-6"; -const classList = [classes, className]; ---- - -{ - href ? ( - - - - - - ) : ( - - - - ) -} diff --git a/src/components/PostCard.astro b/src/components/PostCard.astro deleted file mode 100644 index c69979f..0000000 --- a/src/components/PostCard.astro +++ /dev/null @@ -1,25 +0,0 @@ ---- -interface Props { - title: string; - description?: string; - href: string; -} - -const { title, description, href } = Astro.props; ---- - -
  • - - {title} - { - description && ( - - {description} - - ) - } - -
  • diff --git a/src/components/SectionHeading.astro b/src/components/SectionHeading.astro deleted file mode 100644 index ce0e762..0000000 --- a/src/components/SectionHeading.astro +++ /dev/null @@ -1,12 +0,0 @@ ---- -import LedgerLabel from "./LedgerLabel.astro"; - -interface Props { - title: string; - href?: string; -} - -const { title, href } = Astro.props; ---- - -{title} diff --git a/src/components/SubtleLink.astro b/src/components/SubtleLink.astro deleted file mode 100644 index 36cf2b5..0000000 --- a/src/components/SubtleLink.astro +++ /dev/null @@ -1,17 +0,0 @@ ---- -interface Props { - href: string; - target?: string; -} - -const { href, target } = Astro.props; ---- - - - diff --git a/src/consts.ts b/src/consts.ts deleted file mode 100644 index 9effb07..0000000 --- a/src/consts.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Place any global data in this file. -// You can import this data from anywhere in your site by using the `import` keyword. - -import { getCollection, type CollectionEntry } from "astro:content"; - -export const SITE_TITLE = "Guilherme de Andrade"; -export const SITE_DESCRIPTION = - "Guilherme de Andrade (@ubmit). Building user-first products and exploring agentic engineering."; - -export const postsSortedByPubDate = (await getCollection("blog")).sort( - (a: CollectionEntry<"blog">, b: CollectionEntry<"blog">) => - b.data.pubDate.valueOf() - a.data.pubDate.valueOf(), -); - -export const talksSortedByPubDate = (await getCollection("talks")).sort( - (a: CollectionEntry<"talks">, b: CollectionEntry<"talks">) => - b.data.pubDate.valueOf() - a.data.pubDate.valueOf(), -); diff --git a/src/content.config.ts b/src/content.config.ts deleted file mode 100644 index 35fc1d9..0000000 --- a/src/content.config.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { defineCollection, z } from "astro:content"; -import { glob } from "astro/loaders"; - -const blog = defineCollection({ - loader: glob({ pattern: "**/*.{md,mdx}", base: "./src/content/blog" }), - schema: z.object({ - title: z.string(), - description: z.string(), - // Transform string to Date object - pubDate: z.coerce.date(), - updatedDate: z.coerce.date().optional(), - heroImage: z.string().optional(), - }), -}); - -const talks = defineCollection({ - loader: glob({ - pattern: "**/*.{md,mdx}", - base: "./src/content/talks", - }), - schema: z.object({ - title: z.string(), - description: z.string(), - pubDate: z.coerce.date(), - updatedDate: z.coerce.date().optional(), - event: z.string().optional(), - slides: z.string().optional(), - recording: z.string().optional(), - }), -}); - -export const collections = { blog, talks }; diff --git a/src/content/blog/agentic-engineering-without-lock-in.md b/src/content/blog/agentic-engineering-without-lock-in.md deleted file mode 100644 index 51d3857..0000000 --- a/src/content/blog/agentic-engineering-without-lock-in.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: "Agentic engineering without lock-in" -description: "Building a lock-in-free agentic coding setup with OpenCode and Zed." -pubDate: "Dec 08 2025" ---- - -## Chasing the summit - -The race to the summit that represents the best coding Large Language Model (LLM) started a long time ago, and we have yet to see who will arrive first. It feels like one of those mountain ultramarathon races such as the Madeira Island Ultra Trail (MIUT) with distances over 100km and elevation gains of more than 6,000 meters—except the competitors have no idea how long they'll need to run or how much they'll need to climb, because the finish line is actually unknown. - -One player has definitely put a considerable gap on the chasing group: Anthropic. In my personal experience, the coding LLM that gave me that magical "A-HA" moment was Claude 3.5 Sonnet in conjunction with Cursor. That was the turning point of my experience coding alongside an LLM. Before that, I wasn't really interested in the topic, although I had already been using GitHub Copilot since its early days. Back then, I had no idea which model was powering that experience—and no motivation or curiosity to find out. That was probably because, even though the experience was positive and helpful, it never felt groundbreaking in the sense that it would make me totally rethink how I write code—or perhaps not even write most of the code myself and manage multiple agents instead. But Claude 3.5 Sonnet was enough motivation to make me dig deeper and understand how to leverage AI in my workflow. - -I was a happy user of Claude 3.5 Sonnet (and later versions) with Cursor for months, thinking that would be it—in my mind, it would be pretty difficult to beat. I couldn't have been more wrong. Two weeks ago, I saw a Claude Code demo along with Claude Opus 4.5, and I was fascinated by how much is possible once you rewire your brain and understand that you can manage multiple agents, each with their own specific role, working together on the same project. All while focusing your attention on more complex problems—or even improving specifications or writing new ones to feed into another agent. I wish I had discovered it sooner, but better late than never, right? - -## My own agentic engineering journey - -As you probably expected, I'm now diving deeper into tools like Claude Code and learning how to leverage them to build software. Although Claude Code felt amazing, I wasn't sure about subscribing while other players could appear in a few weeks with something even better—as has been happening if we look at how close together the last best coding LLMs were released. - -As someone who wants freedom but still wants access to great software and AI models, I started searching for the pieces I needed to meet the following requirements while spending the least amount of money on subscriptions: - -- Access to recent and powerful coding models such as Claude Opus 4.5, Claude Sonnet 4.5, GPT-5.1, and Gemini 3 Pro -- An agentic coding assistant as close as possible to Claude Code -- An IDE-integrated coding agent -- Bring Your Own Key (BYOK) policy - -After an entire evening of searching, here's what I found and was able to put together: - -- **[GitHub Copilot Pro](https://github.com/features/copilot/plans)** subscription for $10/mo (with a free 1-month trial), which offers me the models I wanted at a fair price -- **[OpenCode](https://opencode.ai/)**, "the open source AI coding agent" as a Claude Code alternative that provides agentic coding assistance, supports BYOK, and can be integrated with various IDEs for a customizable, lock-in-free workflow. -- **[Zed](https://zed.dev/)**, which not only lets me choose any model I have access to through GitHub Copilot Pro for autocompletion, but also integrates nicely with OpenCode using the [ACP protocol](https://zed.dev/acp). - -## The meta layer - -The first version of this article, which was really raw, was written entirely by me. After putting out all the ideas I wanted to convey, I reached out to Claude Opus 4.5 for help ensuring my grammar was correct, the text was clear, and there wasn't any false or incorrect information about the mentioned models and tools. - -And that's pretty much how I leverage coding agents when I'm actively writing code in my IDE of choice. In most situations, I know I can write code faster without focusing too much on details because I'll be able to sharpen those rough edges with the AI coding agent's help. Also, when the code I need to write is too boilerplate-heavy, I do it the other way around: I let the agent take care of the boilerplate and then only need to sprinkle in some code to get a good output. diff --git a/src/content/blog/introduction-to-functional-programming-in-javascript.md b/src/content/blog/introduction-to-functional-programming-in-javascript.md deleted file mode 100644 index a94f158..0000000 --- a/src/content/blog/introduction-to-functional-programming-in-javascript.md +++ /dev/null @@ -1,737 +0,0 @@ ---- -title: "Introduction to Functional Programming in JavaScript" -description: "A friendly introduction to the functional world through JS." -pubDate: "Jan 08 2022" ---- - -The motivation behind this blog post is to challenge the myth that functional programming, FP for short, is hard to learn and isn't possible to be used with JavaScript. - -## Origins of Functional Programming in JavaScript - -The functional paradigm has noticeably grown in the past years. Currently, there are interesting functional languages with good JavaScript intertop. Some of those languages included PureScript, ClojureScript, Elm and ReScript. They help us creating solutions to real-world problems. FP, however, is not all that new and in fact it's quite old! It started with LISP at 1968 and came from a project led by John McCarthy at MIT. - -## Why Should I Care? - -Now, you may be asking yourself whether or not you should care about FP. To help answer this question, let's take a look at a problem being solved in different ways, starting with a typical procedural approach and gradually improving it using functional programming concepts. - -### The Procedural Way - -Imagine we're building a feature to validate and process user input for a registration form. Here's how many developers might approach it: - -```js -// Procedural approach -function processUserRegistration(userInput) { - let username = userInput.username; - let errors = []; - - // Validation logic mixed with processing - if (username) { - username = username.trim(); - - if (username.length > 0) { - username = username.toLowerCase(); - - // Check database - const existingUser = database.users[username]; - if (existingUser) { - errors.push("Username already exists"); - return { success: false, errors: errors }; - } else { - // More validation - if (username.length < 3) { - errors.push("Username too short"); - return { success: false, errors: errors }; - } - - if (!/^[a-z0-9]+$/.test(username)) { - errors.push("Username contains invalid characters"); - return { success: false, errors: errors }; - } - - // Success case buried at the bottom - return { success: true, username: username }; - } - } else { - errors.push("Username cannot be empty"); - return { success: false, errors: errors }; - } - } else { - errors.push("Username is required"); - return { success: false, errors: errors }; - } -} -``` - -This code works, but it has several problems: - -- **Nested conditionals** make it hard to follow the logic -- **Multiple return points** scattered throughout -- **Mutations** (`let` variables being reassigned) -- **Mixed concerns** (validation, transformation, and database checks all in one function) -- **Hard to test** (you'd need to mock the database for every test) -- **Hard to reuse** (can't use individual validation rules elsewhere) - -### The Functional Way (Pure Functions) - -Let's refactor this using pure functions. First, we'll break down the problem into small, testable pieces: - -```js -// Small, pure functions that do one thing each -const trim = (str) => str.trim(); -const toLowerCase = (str) => str.toLowerCase(); -const isNotEmpty = (str) => str.length > 0; -const isMinLength = (min) => (str) => str.length >= min; -const isAlphanumeric = (str) => /^[a-z0-9]+$/.test(str); - -// Validation functions that return error messages or null -const validateNotEmpty = (username) => - isNotEmpty(username) ? null : "Username cannot be empty"; - -const validateMinLength = (username) => - isMinLength(3)(username) ? null : "Username too short"; - -const validateAlphanumeric = (username) => - isAlphanumeric(username) ? null : "Username contains invalid characters"; - -const checkUserExists = (database) => (username) => - database.users[username] ? "Username already exists" : null; - -// Compose them together -function processUserRegistration(userInput, database) { - if (!userInput.username) { - return { success: false, errors: ["Username is required"] }; - } - - // Transform the input - const username = toLowerCase(trim(userInput.username)); - - // Run all validations - const validations = [ - validateNotEmpty, - validateMinLength, - validateAlphanumeric, - checkUserExists(database), - ]; - - const errors = validations - .map((validate) => validate(username)) - .filter((error) => error !== null); - - // Return result - if (errors.length > 0) { - return { success: false, errors }; - } - - return { success: true, username }; -} -``` - -Notice the improvements: - -- **Single responsibility**: Each function does exactly one thing -- **Easy to test**: You can test `isMinLength` without touching a database -- **Reusable**: These validation functions can be used anywhere -- **Composable**: Easy to add or remove validations -- **Readable**: The main function reads like a story - -But we can make this even better! Let's introduce function composition. - -### Function Composition with Pipe - -One powerful concept in FP is **function composition** - combining simple functions to build complex behavior. Let's look at two ways to do this: - -```js -// compose: applies functions right to left (like math notation) -const compose = - (...fns) => - (arg) => - fns.reduceRight((prev, fn) => fn(prev), arg); - -// pipe: applies functions left to right (more intuitive for reading) -const pipe = - (...fns) => - (arg) => - fns.reduce((prev, fn) => fn(prev), arg); -``` - -Now we can transform data in a clear, linear way: - -```js -// Transform the username: trim, then lowercase -const prepareUsername = pipe(trim, toLowerCase); - -// Or with compose (reads right to left) -const prepareUsername = compose(toLowerCase, trim); - -// Usage -prepareUsername(" JohnDoe "); // "johndoe" -``` - -The difference is just ordering: - -- **`pipe`**: calls functions left to right (trim → toLowerCase) -- **`compose`**: calls functions right to left, matching math notation `f∘g` where `g` is applied first - -Most people find `pipe` more intuitive, so we'll use that from now on. - -Here's our registration function using `pipe`: - -```js -// Now our transformation is crystal clear -const prepareUsername = pipe(trim, toLowerCase); - -function processUserRegistration(userInput, database) { - if (!userInput.username) { - return { success: false, errors: ["Username is required"] }; - } - - const username = prepareUsername(userInput.username); - - const validations = [ - validateNotEmpty, - validateMinLength, - validateAlphanumeric, - checkUserExists(database), - ]; - - const errors = validations - .map((validate) => validate(username)) - .filter((error) => error !== null); - - if (errors.length > 0) { - return { success: false, errors }; - } - - return { success: true, username }; -} -``` - -### Why This Matters - -By using pure functions and composition, we've gained several benefits: - -**Predictability**: Pure functions always return the same output for the same input. No surprises, no hidden behavior. This makes debugging significantly easier. - -**Testability**: Each function can be tested in isolation. Want to test username validation? Just call `validateMinLength("ab")` - no setup required. - -**Reusability**: Need to validate usernames in multiple places? Just import the functions you need. - -**Refactoring confidence**: Since functions don't depend on external state, you can refactor fearlessly. Change the implementation without worrying about breaking distant parts of your code. - -**Readability**: The code reads top-to-bottom like a recipe. No mental juggling of state or jumping around to follow the logic. - -In the next sections, we'll explore the core concepts that make this possible, and then introduce some powerful patterns for handling common scenarios like null values and error handling. - -## Cornerstones of Functional Programming - -### Pure Functions - -The concept of a pure function comes from mathematics. To fully understand it, let's take a step back and discuss the mathematical definition of a function. - -> "A function is a relation between two sets (A and B), where A is a set of inputs and B is a set of possible outputs. However, each input must be related to exactly one output." - -The definition brings up some interesting things: - -- An input cannot be related to multiple outputs, it must be related to a single one -- A function doesn't care about its context, it only cares about returning an output for a given input -- A function not only doesn't care about its context, it also doesn't bother affecting it - -A pure function holds all of these properties. Let's see what this means in practice: - -```js -// ❌ Impure: depends on external state -let maxPrice = 2.0; -const checkPrice = (price) => price <= maxPrice; - -checkPrice(1.5); // true -maxPrice = 1.0; // Someone changed it! -checkPrice(1.5); // false - same input, different output! - -// ✅ Pure: all inputs are explicit -const checkPrice = (price, maxPrice) => price <= maxPrice; - -checkPrice(1.5, 2.0); // true -checkPrice(1.5, 2.0); // true - always the same! -``` - -The impure version is unpredictable because it depends on external state. The pure version always returns the same output for the same inputs. - -Here's another example showing **side effects**: - -```js -// ❌ Impure: has side effects -const users = []; -const registerUser = (username) => { - users.push(username); // Modifies external state! - console.log(`Registered: ${username}`); // Side effect! - return username; -}; - -// ✅ Pure: no side effects, returns new state -const registerUser = (users, username) => { - return [...users, username]; // Returns new array -}; - -// The caller handles side effects -const newUsers = registerUser([], "alice"); -console.log(`Registered: ${newUsers[0]}`); -``` - -**Common side effects to avoid in pure functions:** - -- Modifying variables outside the function scope -- Mutating input parameters -- Making API calls or database queries -- Writing to files or console -- Getting the current time or random numbers - -Pure functions make your code more predictable, testable, and easier to reason about. When you see a pure function, you know exactly what it does just by looking at its inputs and outputs. - -## First-Class Functions - -A programming language is said to have first-class functions if it holds the following conditions: - -✅ A function can be assigned to a variable - -```js -function foo(x, y) { - return x + y; -} - -const add = foo; - -add(1, 2); // 3 -``` - -✅ A function can be an argument of another function - -```js -const fibonacci = [0, 1, 1, 2, 3, 5, 8]; - -fibonacci.map(checkPrice); -// [ true, true, true, true, false, false, false ] - -fibonacci.filter(checkPrice); -// [ 0, 1, 1, 2 ] - -fibonacci.reduce(add); -// 20 -``` - -✅ A function can be returned from another function - -```js -const checkPrice = (max) => (price) => price <= max; - -const checkPriceBelowOrEqualTwo = checkPrice(2); - -checkPriceBelowOrEqualTwo(5); // false -``` - -## Immutability - -> "...the true constant is change. Mutation hides change. Hidden change creates chaos." — Eric Elliott - -Immutable data structures cannot be modified after they are defined. Instead of changing existing data, you create new versions with the desired changes. This might sound wasteful, but it brings huge benefits for debugging and reasoning about your code. - -In JavaScript, only primitive values (strings, numbers, booleans) are immutable by default. When working with objects and arrays, you need to be deliberate about avoiding mutations. - -**Why immutability matters:** - -- **Predictability**: If data can't change, you always know what you're working with -- **Time-travel debugging**: You can keep old versions of state and replay changes -- **Easier testing**: No need to worry about test pollution from mutations -- **Safe concurrency**: Multiple functions can work with the same data without conflicts - -Let's see what mutation looks like and why it's problematic: - -```js -// ❌ Mutation can cause bugs -const settings = { theme: "dark", fontSize: 14 }; - -function updateTheme(settings) { - settings.theme = "light"; // Mutates the original! - return settings; -} - -const newSettings = updateTheme(settings); -console.log(settings.theme); // "light" - Oops! Original was changed -``` - -Now let's see the immutable approach: - -```js -// ✅ Immutable update using spread operator -const settings = { theme: "dark", fontSize: 14 }; - -function updateTheme(settings) { - return { ...settings, theme: "light" }; // Creates new object -} - -const newSettings = updateTheme(settings); -console.log(settings.theme); // "dark" - Original unchanged! -console.log(newSettings.theme); // "light" - New version -``` - -**Important note about `const`**: Using `const` doesn't make objects immutable! It only prevents reassignment of the variable: - -```js -const user = { name: "Alice" }; -user.name = "Bob"; // This works! const doesn't prevent mutation -user = { name: "Charlie" }; // This fails! const prevents reassignment -``` - -**Working with nested objects:** - -```js -const order = { - customer: "Alice", - items: { - drinks: ["coffee", "tea"], - food: ["sandwich"], - }, -}; - -// Update nested data immutably -const updatedOrder = { - ...order, - items: { - ...order.items, - drinks: [...order.items.drinks, "juice"], // Add new drink - }, -}; - -// Original is unchanged -console.log(order.items.drinks); // ["coffee", "tea"] -console.log(updatedOrder.items.drinks); // ["coffee", "tea", "juice"] -``` - -**Working with arrays:** - -```js -const fruits = ["apple", "banana", "orange"]; - -// ✅ Adding items (immutable) -const moreFruits = [...fruits, "mango"]; - -// ✅ Removing items (immutable) -const lessFruits = fruits.filter((fruit) => fruit !== "banana"); - -// ✅ Updating items (immutable) -const updatedFruits = fruits.map((fruit) => - fruit === "apple" ? "green apple" : fruit, -); - -// ❌ Mutating operations to avoid -fruits.push("grape"); // Mutates original -fruits.pop(); // Mutates original -fruits.sort(); // Mutates original -``` - -As you can see in these examples, the spread operator (`...`) along with array methods like `map` and `filter` help us avoid mutations while working with arrays and objects. - -For complex nested updates, there are libraries such as [Immer](https://github.com/immerjs/immer) and [Immutable.js](https://github.com/immutable-js/immutable-js) that make working with immutable data much easier. - -## Practical Functional Patterns - -Now that we understand the fundamentals—pure functions, first-class functions, and immutability—let's explore some practical patterns that functional programmers use to handle real-world scenarios. Specifically, we'll look at how to safely work with values that might be `null` or `undefined`. - -### The Problem with Null - -One of the most common bugs in JavaScript comes from trying to access properties on `null` or `undefined`: - -```js -const getUserEmail = (userId) => { - const user = database.findUser(userId); // Might return null - return user.email; // 💥 Cannot read property 'email' of null -}; -``` - -The traditional solution is defensive checks everywhere: - -```js -const getUserEmail = (userId) => { - const user = database.findUser(userId); - if (user !== null && user !== undefined) { - return user.email; - } else { - return null; - } -}; -``` - -This works, but it's verbose and error-prone. Forget one check and your app crashes. There's a better way! - -### Introducing the Box Pattern - -The **Box** (also called Identity functor) is a simple wrapper that lets us chain operations on a value: - -```js -const Box = (x) => ({ - // map: transform the value inside the box - map: (f) => Box(f(x)), - - // fold: extract the final value - fold: (f) => f(x), - - // inspect: for debugging - inspect: () => `Box(${x})`, -}); -``` - -Here's how it works: - -```js -const result = Box(5) - .map((x) => x * 2) // Box(10) - .map((x) => x + 3) // Box(13) - .fold((x) => x); // 13 - -console.log(result); // 13 -``` - -**Why is this useful?** It lets us chain transformations without manually passing values between functions. Think of it like a pipeline where data flows through. - -Let's see a more practical example: - -```js -// Without Box: manual passing -const formatPrice = (price) => { - const doubled = price * 2; - const withTax = doubled * 1.1; - const rounded = Math.round(withTax); - const formatted = `$${rounded}`; - return formatted; -}; - -// With Box: clear pipeline -const formatPrice = (price) => - Box(price) - .map((x) => x * 2) // Double it - .map((x) => x * 1.1) // Add tax - .map(Math.round) // Round - .map((x) => `$${x}`) // Format - .fold((x) => x); // Extract - -formatPrice(5); // "$11" -``` - -The `Box` version reads like a recipe: "take the price, double it, add tax, round it, format it." No temporary variables needed! - -### Understanding map and fold - -Let's break down these two key methods: - -**`map(f)`**: Applies a function to the value inside the `Box`, and returns a new `Box` with the transformed value. - -```js -Box(10) - .map((x) => x * 2) // Returns Box(20) - .map((x) => x + 5); // Returns Box(25) -``` - -Think of `map` like Array's `map`, but for a single value. It keeps the value "boxed" so you can keep chaining. - -**`fold(f)`**: Extracts the value from the `Box` by applying a function to it. - -```js -const result = Box(10) - .map((x) => x * 2) - .fold((x) => x); // Extracts 20 -``` - -You can think of `fold` as "unboxing" the value to get back to regular JavaScript. - -### Extending Box to Handle Null: The Maybe Pattern - -Now let's make `Box` smarter so it can handle `null` and `undefined` safely. We'll call this **Maybe** (also known as Option in some languages): - -```js -const Maybe = (x) => ({ - // Check if the value is null or undefined - isNothing: x === null || x === undefined, - - // map: only transform if we have a value - map(f) { - return this.isNothing ? Maybe(null) : Maybe(f(x)); - }, - - // chain: for functions that return another Maybe - // prevents Maybe(Maybe(value)) - chain(f) { - return this.isNothing ? Maybe(null) : f(x); - }, - - // fold: handle both cases (null and value) - fold(onNothing, onValue) { - return this.isNothing ? onNothing() : onValue(x); - }, - - // inspect: for debugging - inspect() { - return this.isNothing ? "Maybe(Nothing)" : `Maybe(${x})`; - }, -}); - -// Helper function to create a Maybe from a nullable value -const fromNullable = (x) => Maybe(x); -``` - -Now we can safely chain operations without checking for null at each step: - -```js -const getStreetName = (user) => - Maybe(user) - .map((u) => u.address) // Might be null - .map((a) => a.street) // Might be null - .map((s) => s.name) // Might be null - .fold( - () => "Unknown street", // Handle null case - (name) => name, // Handle success case - ); - -// Test it -const user1 = { address: { street: { name: "Main St" } } }; -const user2 = { address: null }; -const user3 = null; - -getStreetName(user1); // "Main St" -getStreetName(user2); // "Unknown street" -getStreetName(user3); // "Unknown street" -``` - -No null checks, no crashes! If any step returns null, the rest of the chain is skipped, and we go straight to the `onNothing` function in `fold`. - -### Understanding chain vs map - -You might be wondering: when do I use `chain` instead of `map`? Let's clarify: - -**Use `map`** when your function returns a regular value: - -```js -Maybe(5) - .map((x) => x * 2) // Returns Maybe(10) ✅ - .fold( - () => 0, - (x) => x, - ); -``` - -**Use `chain`** when your function returns another Maybe: - -```js -const safeDivide = (a, b) => (b === 0 ? Maybe(null) : Maybe(a / b)); - -// ❌ Using map creates Maybe(Maybe(5)) -Maybe(10).map((x) => safeDivide(x, 2)); // Maybe(Maybe(5)) - nested! - -// ✅ Using chain flattens it to Maybe(5) -Maybe(10).chain((x) => safeDivide(x, 2)); // Maybe(5) - flat! -``` - -`chain` "flattens" the result, preventing nested Maybes. - -### A Complete Example: Safe Data Access - -Let's revisit our juice store example from earlier, now using Maybe: - -```js -const juices = { - passionfruit: "$2.50", - orange: "$2.00", - apple: "$1.50", -}; - -// Helper functions (pure!) -const trim = (str) => str.trim(); -const toLowerCase = (str) => str.toLowerCase(); -const removeAccents = (str) => - str.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); - -// Process juice name and look up price safely -const getJuicePrice = (inputValue) => - Maybe(inputValue) - .map(trim) // Remove whitespace - .map(toLowerCase) // Normalize case - .map(removeAccents) // Remove accents - .chain((juiceName) => fromNullable(juices[juiceName])) // Lookup (might be null) - .fold( - () => "error", // If any step failed or juice not found - (price) => price, // Success! Return the price - ); - -// Test it -getJuicePrice(" Passionfruit "); // "$2.50" -getJuicePrice("ORANGE"); // "$2.00" -getJuicePrice("banana"); // "error" - not in our list -getJuicePrice(null); // "error" - null input -``` - -Notice how clean this is compared to nested if-statements! Each transformation is clearly stated, and null handling is automatic. - -### Comparing to Traditional Error Handling - -You might be wondering: how does this compare to try/catch? Let's see: - -```js -// Traditional try/catch approach -function getUserDiscount(userId) { - try { - const user = database.findUser(userId); - if (!user) throw new Error("User not found"); - - const membership = user.membership; - if (!membership) throw new Error("No membership"); - - const discount = membership.discount; - if (!discount) throw new Error("No discount"); - - return discount; - } catch (error) { - console.error(error.message); - return 0; - } -} - -// Functional approach with Maybe -const getUserDiscount = (userId) => - Maybe(database.findUser(userId)) - .map((user) => user.membership) - .map((membership) => membership.discount) - .fold( - () => 0, // Default if anything is null - (discount) => discount, - ); -``` - -The `Maybe` version is shorter, doesn't need try/catch, and makes the "happy path" obvious. Plus, it's composable—you can easily chain more operations. - -### When to Use These Patterns - -Here's a quick guide for beginners: - -**Use pure functions + pipe/compose** for: - -- Transforming data -- Simple validations -- Business logic -- Most day-to-day programming - -**Use Maybe/Box** when: - -- Dealing with nullable values (API responses, database queries, user input) -- You want to chain operations that might fail -- You want to avoid nested if-statements -- You're working with optional data - -**Use traditional try/catch** when: - -- Dealing with actual exceptions (network errors, file system errors) -- Using libraries that throw errors -- You need to log detailed error information - -These patterns aren't about replacing all your code—they're tools in your toolbox. Use them when they make your code clearer and safer. - -## Dive Deeper - -Fortunately, as it has been shown in this article, it’s definitely possible to use functional programming with plain JavaScript. However, if you really want to dive deeper into this paradigm while using JavaScript, you’ll probably want to use some already existing functional libraries such as [Sanctuary](https://github.com/sanctuary-js/sanctuary), [Fluture](https://github.com/fluture-js/Fluture), [Ramda](https://github.com/ramda/ramda) and others. diff --git a/src/content/blog/use-an-object-instead-of-a-switch.md b/src/content/blog/use-an-object-instead-of-a-switch.md deleted file mode 100644 index ec30f4d..0000000 --- a/src/content/blog/use-an-object-instead-of-a-switch.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: "Replace switch statements with object lookups" -description: "A quick refactoring tip to improve readability when mapping keys to values." -pubDate: "Jan 02 2022" ---- - -Sometimes we can do a simple refactor and achieve a lot with it! The example I'm going to show was taken from a real project that has been working just fine for a long time. Still, that doesn't mean we shouldn't take the initiative to improve simply because it's already working. However, we also need to be pragmatic and not fall into the perfectionism trap—endlessly polishing code that's already "good enough." Basically, we should find the sweet spot where the effort necessary is paid by its own results. - -I was working on a module that had a `getMonth` function which would return the translation key according to the given month: - -```ts -const getMonth = (month: string) => { - let translationKey = ""; - switch (month) { - case "January": - translationKey = "JANUARY_TRANSLATION_KEY"; - break; - case "February": - translationKey = "FEBRUARY_TRANSLATION_KEY"; - break; - case "March": - translationKey = "MARCH_TRANSLATION_KEY"; - break; - case "April": - translationKey = "APRIL_TRANSLATION_KEY"; - break; - case "May": - translationKey = "MAY_TRANSLATION_KEY"; - break; - case "June": - translationKey = "JUNE_TRANSLATION_KEY"; - break; - case "July": - translationKey = "JULY_TRANSLATION_KEY"; - break; - case "August": - translationKey = "AUGUST_TRANSLATION_KEY"; - break; - case "September": - translationKey = "SEPTEMBER_TRANSLATION_KEY"; - break; - case "October": - translationKey = "OCTOBER_TRANSLATION_KEY"; - break; - case "November": - translationKey = "NOVEMBER_TRANSLATION_KEY"; - break; - case "December": - translationKey = "DECEMBER_TRANSLATION_KEY"; - } - return translationKey; -}; -``` - -In this case, it was clear to me what I would accomplish using an object instead of a switch statement: better readability and reduced [cognitive complexity](https://www.sonarsource.com/resources/white-papers/cognitive-complexity/). - -Why an object? Well, if you take a closer look at what the `getMonth` function is doing, you realize that it's doing nothing but mapping keys to values, which is exactly what an object does! - -Therefore, a switch statement isn't needed at all. Actually, it just makes the code less readable and increases its cognitive complexity. So, after refactoring: - -```ts -const MONTH_TO_TRANSLATION_KEY = { - January: "JANUARY_TRANSLATION_KEY", - February: "FEBRUARY_TRANSLATION_KEY", - March: "MARCH_TRANSLATION_KEY", - April: "APRIL_TRANSLATION_KEY", - May: "MAY_TRANSLATION_KEY", - June: "JUNE_TRANSLATION_KEY", - July: "JULY_TRANSLATION_KEY", - August: "AUGUST_TRANSLATION_KEY", - September: "SEPTEMBER_TRANSLATION_KEY", - October: "OCTOBER_TRANSLATION_KEY", - November: "NOVEMBER_TRANSLATION_KEY", - December: "DECEMBER_TRANSLATION_KEY", -} as const; - -type Month = keyof typeof MONTH_TO_TRANSLATION_KEY; - -const getMonth = (month: Month) => MONTH_TO_TRANSLATION_KEY[month]; -``` - -Notice that the refactored version is also **safer**. The original switch returns an empty string for invalid months—a silent failure that could cause bugs downstream. With the `Month` type, invalid inputs become a compile-time error. TypeScript won't even let you call `getMonth("Janaury")` (typo intended). - -If you need to handle unknown inputs at runtime (e.g., from an API), you can add a fallback: - -```ts -const getMonth = (month: string) => - MONTH_TO_TRANSLATION_KEY[month as Month] ?? "UNKNOWN_MONTH_KEY"; -``` - -## When to keep the switch - -This pattern works great when you're purely mapping keys to values. However, a switch statement is still the right choice when: - -- Cases have complex logic beyond simple value mapping -- You need fall-through behavior -- You're matching against non-string types or patterns - -**tl;dr:** whenever we notice that the switch is doing nothing more than mapping keys to values, we should use an object instead. diff --git a/src/content/talks/from-prompts-to-predictable-user-interfaces.md b/src/content/talks/from-prompts-to-predictable-user-interfaces.md deleted file mode 100644 index 854c296..0000000 --- a/src/content/talks/from-prompts-to-predictable-user-interfaces.md +++ /dev/null @@ -1,545 +0,0 @@ ---- -title: "From Prompts to Predictable User Interfaces" -description: "Three techniques for building reliable AI-generated UIs: structured output formats, feedback loops, and design system contracts." -pubDate: "January 22 2026" ---- - -You give a coding agent the same prompt twice. You get two completely different UIs. - -That's not a bug, it's just how LLMs work. Non-determinism is baked into these models. Same input, different output. Every time. When you're generating code, this creates a predictability problem: you don't know what you're going to get. One run gives you clean, modular components. The next? A spaghetti mess with a totally different framework approach. - -If you've built anything with LLMs, you've felt this. You craft the "perfect" prompt, it works during your demo, then you run it for a customer and it produces something completely different. Not necessarily wrong, just _different_. And in software, different usually means unreliable. - -The fix isn't writing "better" prompts. It's adding constraints. - -## Constraints are features - -When you limit choices, you get predictable results. This works for design systems, code architecture, and AI-generated UIs. Instead of letting the LLM wander through infinite possibilities, give it a small, well-defined map to follow. - -I spoke at [FE.OPO #9](https://www.youtube.com/live/omoDqK2kWKU?si=zsB14TzXFnZyJfKe&t=429) about three ways to tame this unpredictability: - -1. **Figma MCP (Design System Contracts)**: Turning Figma into a machine-readable source of truth. -2. **agent-browser (Visual Feedback Loops)**: A "Generate → Validate → Iterate" cycle that actually sees what it built. -3. **json-render (Structured Output)**: Swapping free-form code for a strict component catalog. - -Let's break down how they work. - -## 1. Figma MCP: Design as contract - -**The frustration**: The "telephone game" of design handoff. - -A designer builds a mockup, a developer interprets the visuals, and somewhere the implementation drifts. Colors are a hex code off. Spacing feels wrong. Typography doesn't quite match. This gap between intent and implementation is where UI quality dies. - -**The fix**: Stop interpreting. Start extracting. - -Figma MCP (Model Context Protocol) lets an agent read Figma files programmatically. Extract components, design tokens, variants. Generate code that matches design exactly. No interpretation gap. - -**Step 1: Extract design tokens** - -```typescript -// Use Figma MCP -mcp__figma__get_variable_defs(fileKey, nodeId); - -// Generates tokens.ts: - -// Design tokens extracted from Figma Simple Design System -// https://www.figma.com/design/dHqyIhebbTxZSzOun8aAaA/Simple-Design-System--Community- -export const tokens = { - color: { - text: { - brandOnBrand: "#f5f5f5", - default: "#1e1e1e", - subtle: "#666666", - }, - background: { - brandDefault: "#1e1e1e", - brandHover: "#2d2d2d", - neutral: "#e5e5e5", - neutralHover: "#d4d4d4", - subtle: "transparent", - subtleHover: "#f5f5f5", - }, - border: { - neutral: "#d4d4d4", - subtle: "#e5e5e5", - }, - }, - typography: { - body: { - fontFamily: "Inter, sans-serif", - fontWeightRegular: 400, - sizeMedium: "16px", - sizeSmall: "14px", - }, - }, - spacing: { - xs: "4px", - sm: "8px", - md: "12px", - lg: "16px", - }, - borderRadius: { - sm: "4px", - md: "6px", - }, -} as const; -``` - -If you are using Tailwind CSS you could easily ask your coding agent to convert this file to Tailwind's V4 CSS configuration: - -```css -/* don't worry about the variable names */ -/* they are bad, but that's just an example */ -@import "tailwindcss"; - -@theme { - /* Colors - Text */ - --color-brand-on-brand: #f5f5f5; - --color-default: #1e1e1e; - --color-subtle: #666666; - --color-disabled: #a3a3a3; - - /* Colors - Background */ - --color-bg-brand: #2c2c2c; - --color-bg-brand-hover: #1e1e1e; - --color-bg-neutral: #e3e3e3; - --color-bg-neutral-hover: #cdcdcd; - --color-bg-subtle-hover: #f5f5f5; - --color-bg-disabled: #e5e5e5; - - /* Colors - Border */ - --color-border-primary: #2c2c2c; - --color-border-neutral: #767676; - --color-border-subtle: #d9d9d9; - --color-border-disabled: #b3b3b3; - - /* Typography */ - --font-body: "Inter", sans-serif; - - /* Border Radius */ - --radius-md: 8px; - - /* Spacing */ - --spacing-sm: 8px; - --spacing-md: 12px; -} -``` - -These become your single source of truth. Change Figma variable, re-extract, update tokens.ts. Design stays in sync with code. - -**Step 2: Extract component structure** - -```typescript -// Extract Button component -mcp__figma__get_design_context(fileKey, buttonNodeId); -``` - -```tsx -// Returns React component code with Base UI + Tailwind CSS: -import * as React from "react"; -import { Button as BaseButton } from "@base-ui/react/button"; -import { cva, type VariantProps } from "class-variance-authority"; - -export interface ButtonProps - extends - Omit, "disabled">, - VariantProps {} - -const buttonVariants = cva( - "inline-flex items-center justify-center gap-2 border font-body font-normal leading-none rounded-md transition-colors", - { - variants: { - variant: { - primary: "bg-bg-brand text-brand-on-brand", - neutral: "bg-bg-neutral text-default", - subtle: "bg-transparent text-default border-transparent", - }, - size: { - small: "h-8 p-sm text-sm", - medium: "h-10 p-md text-base", - }, - disabled: { - false: null, - true: "bg-bg-disabled text-disabled cursor-not-allowed border-border-disabled", - }, - }, - compoundVariants: [ - { - variant: "primary", - disabled: false, - className: "border-border-primary hover:bg-bg-brand-hover", - }, - { - variant: "neutral", - disabled: false, - className: "border-border-neutral hover:bg-bg-neutral-hover", - }, - { - variant: "subtle", - disabled: false, - className: "hover:border-border-subtle", - }, - ], - defaultVariants: { - variant: "primary", - size: "medium", - disabled: false, - }, - }, -); - -export function Button({ - className, - variant, - size, - children, - disabled, - ...props -}: ButtonProps) { - return ( - - {children} - - ); -} -``` - -For a Button component with 18 variants (3 visual styles × 3 states × 2 sizes), Figma MCP extracts all of them and maps to accessible primitives like Base UI. - -**Step 3: Generate Storybook stories** - -For each Figma variant, generate a Storybook story: - -```typescript -// examples/design-system-demo/src/components/button.stories.tsx -export const PrimaryDefaultMedium: Story = { - args: { - variant: "primary", - size: "medium", - children: "Button", - }, -}; - -export const PrimaryHoverMedium: Story = { - args: { - variant: "primary", - size: "medium", - children: "Button", - }, - parameters: { - pseudo: { hover: true }, - }, -}; - -export const PrimaryDisabledMedium: Story = { - args: { - variant: "primary", - size: "medium", - children: "Button", - disabled: true, - }, -}; - -// ...15 more variants -``` - -Storybook becomes documentation that matches Figma exactly. Designers and developers reference the same source. - -**Why this works**: - -- Design tokens aren't scattered across Slack messages and CSS files. They live in Figma and sync to code. -- Stop hand-coding 18 button variants. Let the machine do the grunt work. -- When a designer changes "Primary Blue," the code updates automatically. -- You can compare a screenshot of the code against the original Figma node to verify they match. - -**When to use it**: You have a solid design system in Figma. You're building a component library. The gap between design and dev is causing friction. - -**When to skip it**: You don't have a design system yet. Your designs are changing so fast that extraction becomes a bottleneck. - -The power is in the constraint. Figma becomes the boss. You're not guessing, you're following a contract. - -## 2. Visual feedback loops: Giving the AI eyes - -**The blind spot**: LLMs reason about code well, but they're blind to how that code actually _looks_. - -An LLM knows `justify-center` should center an item. It understands a footer belongs at the bottom. But it has no idea about browser quirks, z-index collisions, or parent container constraints. It's writing code into a void. - -We've all seen it: - -- **Prompt**: "Center the login form." -- **Code**: Looks perfect on paper. -- **Reality**: Shoved into the top-left corner because of a CSS reset it didn't see coming. - -**The fix**: A "Generate → Validate → Iterate" loop. - -Build a feedback loop: the LLM generates code, you (or a tool) validate the rendered output, then feed results back for iteration. The constraint is forcing validation before considering work done. - -Two tools enable this: **agent-browser** (natural language) and **Playwright MCP** (screenshots). Different tradeoffs. - -A login form I built for the demo: - -```tsx -// examples/feedback-loop-demo/app/page.tsx -export default function Page() { - return ( -
    -
    -
    -

    - Welcome back -

    -

    - Sign in to your account to continue -

    - -
    -
    - - -
    - {/* password, checkbox, button... */} -
    -
    -
    -
    - ); -} -``` - -To validate with **agent-browser**: - -```bash -# Navigate and get snapshot -Navigate to http://localhost:3001 and validate the login form layout. -Check if email input, password input, and submit button are all visible -and properly aligned. -``` - -agent-browser returns natural language: - -``` -* Page loaded successfully -* Login form card visible at center -* Email input: visible, properly labeled, placeholder present -* Password input: visible, properly labeled, placeholder present -* Submit button: visible, blue background, prominent -* Visual hierarchy: excellent (title → inputs → button → footer) -* Accessibility: labels properly associated with inputs -! Minor: "Forgot password" link small, could be more prominent - -Overall: Form displays correctly with good UX -``` - -This output validates all key elements, identifies an improvement opportunity, and uses ~500 bytes vs ~50KB for screenshots. That means 100+ iterations within a typical context window. - -Compare to **Playwright MCP**: - -```typescript -// Would require: -mcp__playwright__browser_navigate({ url: "http://localhost:3001" }); -mcp__playwright__browser_snapshot({ filename: "login-form.md" }); -mcp__playwright__browser_take_screenshot({ filename: "login-form.png" }); -``` - -Returns full page snapshot (markdown + accessibility tree) plus base64 PNG screenshot. ~50KB+ added to context window per screenshot. - -Context budget comparison: - -| Aspect | agent-browser | Playwright MCP | -| --------------- | ------------------- | ------------------------ | -| Output format | Natural language | Markdown + base64 images | -| Context impact | Low (~1KB) | High (~50KB+) | -| Use case | Quick visual checks | Deep inspection | -| Iteration speed | Fast (text-based) | Slower (image-heavy) | -| Precision | Semantic validation | Pixel-perfect validation | - -**When to use agent-browser**: Validating layout, positioning, or basic visibility. Iterating fast. Watching your context window budget. - -**When to use Playwright MCP**: Pixel-perfect comparisons. Complex multi-step user flows. Screenshots for documentation or regression testing. - -The workflow: Generate → Render → Validate → Fix. Forcing the AI to "look" at its work before moving on kills 90% of visual bugs that haunt AI-generated UIs. - -For agentic workflows where an agent iterates autonomously, agent-browser preserves context budget for code changes instead of bloating it with images. - -## 3. json-render: UI as data - -**The chaos**: Free-form code generation is a wild west. - -Even within the same framework, naming conventions and component structures shift every time you hit "Regenerate." - -**The fix**: Stop asking for code. Ask for data. - -json-render implements this pattern: AI → JSONL → UI. Instead of asking the LLM to output React/Vue/whatever directly, you teach it to output JSON Lines patches describing the UI structure. A separate renderer applies those patches and maps them to your component library. - -The key constraint is the **component catalog**. You define available components upfront with Zod schemas: - -```typescript -export const catalog = createCatalog({ - components: { - Card: { - props: z.object({ - title: z.string(), - description: z.string().nullable(), - }), - hasChildren: true, - }, - Button: { - props: z.object({ - label: z.string(), - action: z.string(), - params: z.record(z.string(), z.any()).optional(), - variant: z.enum(["default", "outline", "ghost"]).optional(), - size: z.enum(["default", "sm", "lg"]).optional(), - }), - }, - Text: { - props: z.object({ - content: z.string(), - }), - }, - }, - actions: { - submit: { - params: z.object({ formId: z.string() }), - }, - navigate: { - params: z.object({ url: z.string() }), - }, - }, -}); -``` - -This catalog serves two purposes: - -1. Generates the system prompt teaching the LLM the JSONL format -2. Validates runtime props via `@json-render/core` - -The system prompt becomes your contract: - -```typescript -const SYSTEM_PROMPT = `You are a UI generator that outputs JSONL (JSON Lines) patches. - -AVAILABLE COMPONENTS: -Card, Button, Text - -COMPONENT DETAILS: -- Card: { title: string, description?: string | null } - Container with title, can have children -- Button: { label: string, action: string, params?: object, variant?: "default" | "outline" | "ghost", size?: "default" | "sm" | "lg" } - Clickable button that triggers an action -- Text: { content: string } - Text paragraph - -OUTPUT FORMAT: -Output JSONL where each line is a patch operation. Use a FLAT key-based structure: - -OPERATIONS: -- {"op":"set","path":"/root","value":"main-card"} - Set the root element key -- {"op":"add","path":"/elements/main-card","value":{...}} - Add an element by unique key - -ELEMENT STRUCTURE: -{ - "key": "unique-key", - "type": "ComponentType", - "props": { ... }, - "children": ["child-key-1", "child-key-2"] // Array of child element keys (only for Card) -} - -RULES: -1. First set /root to the root element's key -2. Add each element with a unique key using /elements/{key} -3. Parent elements list child keys in their "children" array -4. Stream elements progressively - parent first, then children -5. Each element must have: key, type, props -6. Children array contains STRING KEYS, not nested objects -7. Only Card can have children - -Generate JSONL patches now:`; -``` - -Notice the constraints: - -- Only 3 components (Card, Button, Text) -- Flat key-based structure (no nesting) -- Only Card supports children -- Children are string keys, not objects -- Specific operations (set, add) - -When you prompt "Create a welcome card with a button," the model generates: - -```jsonl -{"op":"set","path":"/root","value":"welcome-card"} -{"op":"add","path":"/elements/welcome-card","value":{"key":"welcome-card","type":"Card","props":{"title":"Welcome","description":"Thanks for trying json-render"},"children":["greeting-text","get-started-btn"]}} -{"op":"add","path":"/elements/greeting-text","value":{"key":"greeting-text","type":"Text","props":{"content":"This demo shows how AI can generate predictable UIs using structured output formats."}}} -{"op":"add","path":"/elements/get-started-btn","value":{"key":"get-started-btn","type":"Button","props":{"label":"Get Started","action":"navigate","params":{"url":"/home"},"variant":"default"}}} -``` - -These patches stream to the frontend. The `useUIStream` hook parses them. The `Renderer` component applies them to a tree structure. Finally, the component registry maps types to React implementations: - -```tsx -export const registry: ComponentRegistry = { - Card: ({ element, children }) => ( -
    -
    -

    {element.props.title}

    - {element.props.description && ( -

    {element.props.description}

    - )} -
    -
    {children}
    -
    - ), - Button, - Text: ({ element }) =>

    {element.props.content}

    , -}; -``` - -**Why this works**: The LLM _cannot_ deviate. It knows it has exactly three components. It knows what props they take. It has a strict recipe to follow. Limited choices, predictable results. - -**When to use json-render**: You have a set component library and want the AI to assemble UIs. You want progressive streaming. You need to validate output at runtime before it hits the user. - -**When to skip it**: You need total design freedom (custom landing pages). Your layout has deep nesting that's hard to represent flat. Your component library is constantly changing. - -The catalog is your design contract. Change it, regenerate the system prompt, done. - -## Which one should you use? - -These aren't competing tools. They're different layers of the same stack. - -- **Figma MCP**: Your design system is law. You need 1:1 match with Figma files. -- **agent-browser**: Speed and cost matter. The AI gets "semantic vision" to fix its own mistakes without burning context on screenshots. -- **json-render**: You need absolute consistency. Dashboards or internal tools where the AI assembles pre-approved building blocks. - -**Watch your context budget.** If the agent is iterating autonomously, every byte counts. - -- agent-browser (~1KB) beats Playwright screenshots (~50KB) -- json-render patches (~2KB) beat full code generation (~20KB) - -The more expensive your feedback, the fewer chances the AI gets to iterate. - -## The bottom line - -Same prompt, different outputs. That's how LLMs work. Constraints change the game. - -Design contracts (Figma MCP), feedback loops (agent-browser), and structured output (json-render) turn a chaotic generator into something predictable. - -These aren't silver bullets. Figma MCP has rate limits. agent-browser won't catch every pixel-perfect glitch. json-render isn't built for infinite design freedom. - -But guardrails work. When you constrain the problem space and make choices finite, you get code you can trust. - -Predictability through constraints. Not despite them. - ---- - -All code from this post is available at [ubmit/from-prompts-to-predictable-user-interfaces](https://github.com/ubmit/from-prompts-to-predictable-user-interfaces). Slides, demos, and full examples are all there. diff --git a/src/env.d.ts b/src/env.d.ts deleted file mode 100644 index aabef7f..0000000 --- a/src/env.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import "../.astro/types.d.ts"; -import "astro/client"; diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro deleted file mode 100644 index 6a772fd..0000000 --- a/src/layouts/BaseLayout.astro +++ /dev/null @@ -1,39 +0,0 @@ ---- -import Header from "../components/Header.astro"; ---- - - -
    -
    -
    -
    -
    - -
    -
    -
    - - - diff --git a/src/layouts/BlogPost.astro b/src/layouts/BlogPost.astro deleted file mode 100644 index e065e95..0000000 --- a/src/layouts/BlogPost.astro +++ /dev/null @@ -1,41 +0,0 @@ ---- -import type { CollectionEntry } from "astro:content"; -import BaseHead from "../components/BaseHead.astro"; -import FormattedDate from "../components/FormattedDate.astro"; -import BaseLayout from "../layouts/BaseLayout.astro"; - -type Props = CollectionEntry<"blog">["data"]; - -const { title, description, pubDate, updatedDate } = Astro.props; ---- - - - - - - - -
    -
    -
    -

    {title}

    -
    - -
    - { - updatedDate && ( -
    - Last updated on -
    - ) - } -
    -
    -
    -
    - -
    -
    -
    -
    - diff --git a/src/layouts/Talk.astro b/src/layouts/Talk.astro deleted file mode 100644 index fa67d7e..0000000 --- a/src/layouts/Talk.astro +++ /dev/null @@ -1,69 +0,0 @@ ---- -import type { CollectionEntry } from "astro:content"; -import BaseHead from "../components/BaseHead.astro"; -import FormattedDate from "../components/FormattedDate.astro"; -import BaseLayout from "../layouts/BaseLayout.astro"; - -type Props = CollectionEntry<"talks">["data"]; - -const { title, description, pubDate, updatedDate, event, slides, recording } = - Astro.props; ---- - - - - - - - -
    -
    -
    -

    {title}

    -
    - -
    - {event &&
    Event: {event}
    } - { - (slides || recording) && ( -
    - {slides && ( - - Slides → - - )} - {recording && ( - - Recording → - - )} -
    - ) - } - { - updatedDate && ( -
    - Last updated on -
    - ) - } -
    -
    -
    -
    - -
    -
    -
    -
    - diff --git a/src/pages/index.astro b/src/pages/index.astro deleted file mode 100644 index 036e8e3..0000000 --- a/src/pages/index.astro +++ /dev/null @@ -1,86 +0,0 @@ ---- -import BaseHead from "../components/BaseHead.astro"; -import { - SITE_TITLE, - SITE_DESCRIPTION, - postsSortedByPubDate, - talksSortedByPubDate, -} from "../consts"; -import BaseLayout from "../layouts/BaseLayout.astro"; -import SectionHeading from "../components/SectionHeading.astro"; -import PostCard from "../components/PostCard.astro"; -import SubtleLink from "../components/SubtleLink.astro"; -import "../styles/base.css"; ---- - - - - - - -
    - -

    - I'm Gui, a Frontend Engineer focused on crafting polished and user-first - products. I work with AI agents to build software and explore new ways - of engineering. You can read my ramblings on Twitter, take a look at my code on GitHub, and find more about my experience on LinkedIn. -

    -
    - -
    - -
    -

    - I'm diving deep into agentic engineering. I'm building software alongside AI coding agents and exploring how - to orchestrate multiple agents, manage context effectively, and - building predictable UIs from prompts. -

    -

    - On the same topic, I'm reading Vibe Coding by Gene Kim and Steve Yegge. Planning to write about it once I finish. -

    -
    -
    - -
    - -
      - { - postsSortedByPubDate.map((post, index) => ( - - )) - } -
    -
    - -
    - -
      - { - talksSortedByPubDate.map((talk, index) => ( - - )) - } -
    -
    -
    - diff --git a/src/pages/rss.xml.js b/src/pages/rss.xml.js deleted file mode 100644 index 52c03cd..0000000 --- a/src/pages/rss.xml.js +++ /dev/null @@ -1,16 +0,0 @@ -import rss from "@astrojs/rss"; -import { getCollection } from "astro:content"; -import { SITE_TITLE, SITE_DESCRIPTION } from "../consts"; - -export async function GET(context) { - const posts = await getCollection("blog"); - return rss({ - title: SITE_TITLE, - description: SITE_DESCRIPTION, - site: context.site, - items: posts.map((post) => ({ - ...post.data, - link: `/writing/${post.id}/`, - })), - }); -} diff --git a/src/pages/talks.astro b/src/pages/talks.astro deleted file mode 100644 index 92bb573..0000000 --- a/src/pages/talks.astro +++ /dev/null @@ -1,38 +0,0 @@ ---- -import BaseHead from "../components/BaseHead.astro"; -import BaseLayout from "../layouts/BaseLayout.astro"; -import FormattedDate from "../components/FormattedDate.astro"; -import SectionHeading from "../components/SectionHeading.astro"; -import "../styles/base.css"; -import { SITE_DESCRIPTION, talksSortedByPubDate } from "../consts"; ---- - - - - - - -
    - - -
    -
    - diff --git a/src/pages/talks/[...slug].astro b/src/pages/talks/[...slug].astro deleted file mode 100644 index f64f14e..0000000 --- a/src/pages/talks/[...slug].astro +++ /dev/null @@ -1,21 +0,0 @@ ---- -import { type CollectionEntry, getCollection, render } from "astro:content"; -import Talk from "../../layouts/Talk.astro"; -import "../../styles/base.css"; - -export async function getStaticPaths() { - const talks = await getCollection("talks"); - return talks.map((talk) => ({ - params: { slug: talk.id }, - props: talk, - })); -} -type Props = CollectionEntry<"talks">; - -const talk = Astro.props; -const { Content } = await render(talk); ---- - - - - diff --git a/src/pages/writing.astro b/src/pages/writing.astro deleted file mode 100644 index e7aef34..0000000 --- a/src/pages/writing.astro +++ /dev/null @@ -1,38 +0,0 @@ ---- -import BaseHead from "../components/BaseHead.astro"; -import BaseLayout from "../layouts/BaseLayout.astro"; -import FormattedDate from "../components/FormattedDate.astro"; -import SectionHeading from "../components/SectionHeading.astro"; -import "../styles/base.css"; -import { SITE_DESCRIPTION, postsSortedByPubDate } from "../consts"; ---- - - - - - - -
    - - -
    -
    - diff --git a/src/pages/writing/[...slug].astro b/src/pages/writing/[...slug].astro deleted file mode 100644 index 4ea0ac9..0000000 --- a/src/pages/writing/[...slug].astro +++ /dev/null @@ -1,21 +0,0 @@ ---- -import { type CollectionEntry, getCollection, render } from "astro:content"; -import BlogPost from "../../layouts/BlogPost.astro"; -import "../../styles/base.css"; - -export async function getStaticPaths() { - const posts = await getCollection("blog"); - return posts.map((post) => ({ - params: { slug: post.id }, - props: post, - })); -} -type Props = CollectionEntry<"blog">; - -const post = Astro.props; -const { Content } = await render(post); ---- - - - - diff --git a/src/styles/base.css b/src/styles/base.css deleted file mode 100644 index 62059f7..0000000 --- a/src/styles/base.css +++ /dev/null @@ -1,150 +0,0 @@ -@import "tailwindcss"; -@import "@radix-ui/colors/slate.css"; -@import "@radix-ui/colors/slate-dark.css"; - -@plugin "@tailwindcss/typography"; - -@theme { - /* Using Radix slate for a subtle blue-gray tint */ - --color-gray-100: var(--slate-1); - --color-gray-200: var(--slate-2); - --color-gray-300: var(--slate-3); - --color-gray-400: var(--slate-4); - --color-gray-500: var(--slate-5); - --color-gray-600: var(--slate-6); - --color-gray-700: var(--slate-7); - --color-gray-800: var(--slate-8); - --color-gray-900: var(--slate-9); - --color-gray-1000: var(--slate-10); - --color-gray-1100: var(--slate-11); - --color-gray-1200: var(--slate-12); - - --font-sans: "Work Sans", ui-sans-serif, system-ui, sans-serif; - --font-mono: "Commit Mono", ui-monospace, monospace; -} - -@layer utilities { - /* Prose styles - in utilities layer to match typography plugin */ - .prose h1 { - color: var(--color-gray-1200); - font-size: var(--text-2xl); - } - - .prose h2 { - color: var(--color-gray-1200); - font-size: var(--text-xl); - } - - .prose h3 { - color: var(--color-gray-1200); - font-size: var(--text-lg); - } - - .prose p, - .prose li { - color: var(--color-gray-1100); - } - - .prose a { - text-decoration-line: underline; - text-decoration-color: var(--color-gray-400); - text-underline-offset: 4px; - transition: - color 0.2s ease, - text-decoration-color 0.2s ease; - } - - .prose a:hover { - color: var(--color-gray-1200); - text-decoration-color: var(--color-gray-600); - } - - .prose code { - color: var(--color-gray-1200); - } - - .prose time { - color: var(--color-gray-1000); - font-family: var(--font-mono); - font-size: var(--text-sm); - font-weight: var(--font-weight-light); - } -} - -@utility scrollbar-hide { - -ms-overflow-style: none; - scrollbar-width: none; - - &::-webkit-scrollbar { - display: none; - } -} - -html { - scrollbar-gutter: stable; -} - -@font-face { - font-family: "Commit Mono"; - src: url("/fonts/CommitMono-400-Regular.otf") format("opentype"); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: "Commit Mono"; - src: url("/fonts/CommitMono-400-Italic.otf") format("opentype"); - font-weight: normal; - font-style: italic; -} - -@font-face { - font-family: "Commit Mono"; - src: url("/fonts/CommitMono-700-Regular.otf") format("opentype"); - font-weight: 700; - font-style: normal; -} - -@font-face { - font-family: "Commit Mono"; - src: url("/fonts/CommitMono-700-Italic.otf") format("opentype"); - font-weight: 700; - font-style: italic; -} - -@media (prefers-color-scheme: dark) { - .astro-code, - .astro-code span { - color: var(--shiki-dark) !important; - background-color: var(--shiki-dark-bg) !important; - } - - /* Mermaid dark mode */ - .prose svg[id^="mermaid-"] .node rect, - .prose svg[id^="mermaid-"] .node circle, - .prose svg[id^="mermaid-"] .node ellipse, - .prose svg[id^="mermaid-"] .node polygon { - fill: var(--color-gray-300) !important; - stroke: var(--color-gray-700) !important; - } - - .prose svg[id^="mermaid-"] .label, - .prose svg[id^="mermaid-"] .label text, - .prose svg[id^="mermaid-"] .nodeLabel, - .prose svg[id^="mermaid-"] .nodeLabel p, - .prose svg[id^="mermaid-"] .edgeLabel { - color: var(--color-gray-1100) !important; - fill: var(--color-gray-1100) !important; - } - - .prose svg[id^="mermaid-"] .edgePath .path, - .prose svg[id^="mermaid-"] .flowchart-link { - stroke: var(--color-gray-600) !important; - } - - .prose svg[id^="mermaid-"] .arrowheadPath, - .prose svg[id^="mermaid-"] .marker { - fill: var(--color-gray-600) !important; - stroke: var(--color-gray-600) !important; - } -} diff --git a/src/utils.ts b/src/utils.ts deleted file mode 100644 index a5ef193..0000000 --- a/src/utils.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { clsx, type ClassValue } from "clsx"; -import { twMerge } from "tailwind-merge"; - -export function cn(...inputs: ClassValue[]) { - return twMerge(clsx(inputs)); -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index f37be9e..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "astro/tsconfigs/strict", - "compilerOptions": { - "strictNullChecks": true, - "jsx": "react-jsx", - "jsxImportSource": "react" - }, - "include": [".astro/types.d.ts", "**/*"], - "exclude": ["dist"] -} diff --git a/vite.config.ts b/vite.config.ts deleted file mode 100644 index 3d5355f..0000000 --- a/vite.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { defineConfig } from "vite-plus"; - -export default defineConfig({ - staged: { - "*": "vp check --fix", - }, - lint: { options: { typeAware: true, typeCheck: true } }, - fmt: { - sortTailwindcss: {}, - printWidth: 80, - sortPackageJson: false, - ignorePatterns: ["AGENTS.md"], - }, -}); From 1b702d36f12ecbd6331d896c5bfa3b66d4297b11 Mon Sep 17 00:00:00 2001 From: Guilherme de Andrade Date: Fri, 1 May 2026 21:00:00 +0100 Subject: [PATCH 2/7] feat: scaffold remix 3 app --- .agents/skills/remix/SKILL.md | 501 +++++ .../remix/references/animate-elements.md | 195 ++ .../references/assets-and-browser-modules.md | 122 + .../remix/references/auth-and-sessions.md | 420 ++++ .../remix/references/component-model.md | 282 +++ .../skills/remix/references/create-mixins.md | 158 ++ .../remix/references/data-and-validation.md | 363 +++ .../references/hydration-frames-navigation.md | 297 +++ .../remix/references/middleware-and-server.md | 243 ++ .../remix/references/mixins-styling-events.md | 213 ++ .../references/routing-and-controllers.md | 324 +++ .../remix/references/testing-patterns.md | 156 ++ .gitignore | 16 + AGENTS.md | 39 + README.md | 27 + app/assets.ts | 18 + app/assets/entry.ts | 19 + app/controllers/home.tsx | 25 + app/controllers/writing/controller.tsx | 66 + app/data/posts.ts | 37 + app/router.ts | 16 + app/routes.ts | 10 + app/ui/document.tsx | 26 + app/ui/layout.tsx | 23 + app/utils/render.tsx | 26 + package.json | 23 + pnpm-lock.yaml | 1987 +++++++++++++++++ server.ts | 37 + tsconfig.json | 18 + 29 files changed, 5687 insertions(+) create mode 100644 .agents/skills/remix/SKILL.md create mode 100644 .agents/skills/remix/references/animate-elements.md create mode 100644 .agents/skills/remix/references/assets-and-browser-modules.md create mode 100644 .agents/skills/remix/references/auth-and-sessions.md create mode 100644 .agents/skills/remix/references/component-model.md create mode 100644 .agents/skills/remix/references/create-mixins.md create mode 100644 .agents/skills/remix/references/data-and-validation.md create mode 100644 .agents/skills/remix/references/hydration-frames-navigation.md create mode 100644 .agents/skills/remix/references/middleware-and-server.md create mode 100644 .agents/skills/remix/references/mixins-styling-events.md create mode 100644 .agents/skills/remix/references/routing-and-controllers.md create mode 100644 .agents/skills/remix/references/testing-patterns.md create mode 100644 .gitignore create mode 100644 AGENTS.md create mode 100644 README.md create mode 100644 app/assets.ts create mode 100644 app/assets/entry.ts create mode 100644 app/controllers/home.tsx create mode 100644 app/controllers/writing/controller.tsx create mode 100644 app/data/posts.ts create mode 100644 app/router.ts create mode 100644 app/routes.ts create mode 100644 app/ui/document.tsx create mode 100644 app/ui/layout.tsx create mode 100644 app/utils/render.tsx create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 server.ts create mode 100644 tsconfig.json diff --git a/.agents/skills/remix/SKILL.md b/.agents/skills/remix/SKILL.md new file mode 100644 index 0000000..03fd659 --- /dev/null +++ b/.agents/skills/remix/SKILL.md @@ -0,0 +1,501 @@ +--- +name: remix +description: Build and review Remix 3 applications using the `remix` npm package and subpath imports. Use when working on Remix app structure, routes, controllers, middleware, validation, data access, auth, sessions, file uploads, server setup, UI components, hydration, navigation, or tests. +--- + +# Build a Remix App + +Use this skill for end-to-end Remix app work. It should help the agent choose the right layer +first, reach for the right package, and avoid the most common Remix-specific mistakes. + +## What Remix Is + +Remix 3 is a server-first web framework built on Web APIs such as `Request`, `Response`, `URL`, +and `FormData`. All packages ship from a single npm package, `remix`, and are imported via +subpath. There is no top-level `remix` import. + +A Remix app has four main pieces: + +- **Routes** in `app/routes.ts` define the typed URL contract and power `href()` generation. +- **Controllers and actions** implement that contract and return `Response` objects. +- **Middleware** composes request lifecycle behavior and populates typed context via + `context.set(Key, value)`. +- **Components** render UI with `remix/ui`. This is not React. A component receives a + `handle`, reads current props from `handle.props`, and returns a render function. + +## When To Use This Skill + +Use this skill for: + +- new features or refactors that touch routing, controllers, middleware, data, auth, sessions, UI, + or tests +- reviewing Remix app code for correctness, architecture, or framework usage +- answering "how should this be structured in Remix?" questions +- finding the right package, reference doc, or default pattern for a task + +## Load Only The References You Need + +Classify the task first, then load the smallest useful reference set. Each reference file starts +with a "What This Covers" section that lists the topics inside it — read that first to confirm +the file is relevant before reading the rest. + +Use the table below to find candidates. Loading more than two or three files at once is usually a +sign that the task hasn't been narrowed enough yet. + +| Task involves... | Start with | +| ----------------------------------------------------------------------------- | ------------------------------------------- | +| Defining URLs, writing controllers and actions, returning responses | `references/routing-and-controllers.md` | +| Composing the request lifecycle, ordering middleware, bridging to a server | `references/middleware-and-server.md` | +| Compiling and serving browser modules, asset URL namespaces, preloads | `references/assets-and-browser-modules.md` | +| Parsing input, validating with schemas, defining tables, querying, migrations | `references/data-and-validation.md` | +| Per-browser state, login flows, route protection, identity | `references/auth-and-sessions.md` | +| Component setup, state, lifecycle, updates, `queueTask`, context | `references/component-model.md` | +| Event handlers, styles, refs, click/key behavior, simple animations | `references/mixins-styling-events.md` | +| `clientEntry`, `run`, ``, navigation, `` | `references/hydration-frames-navigation.md` | +| Router tests, component tests, test isolation | `references/testing-patterns.md` | +| Spring physics, tweens, layout transitions | `references/animate-elements.md` | +| Authoring custom reusable mixins | `references/create-mixins.md` | + +Common bundles: + +- **Form or CRUD feature** -> routing, data and validation, testing; add auth if user-specific +- **Protected area** -> auth and sessions, routing, testing +- **Interactive widget** -> component model, mixins and styling; add hydration only if it runs in + the browser +- **Browser asset pipeline** -> assets and browser modules, hydration, middleware and server +- **File upload** -> middleware and server, data and validation, testing +- **Navigation or frames** -> hydration, frames, navigation + +## Default Workflow + +1. **Classify the change.** Decide whether it changes the route contract, request lifecycle, data + model, auth or session behavior, or only UI. +2. **Start from the server contract.** Add or update `app/routes.ts` before wiring handlers or UI. +3. **Put code in the narrowest owner.** Favor route-local code first, then promote only when reuse + is real. +4. **Make the server path correct before adding browser behavior.** A route should return the right + `Response` via `router.fetch(...)` before you add `clientEntry(...)`, animations, or DOM + effects. +5. **Add middleware deliberately.** Keep fast-exit middleware early and request-enriching + middleware later. Export a typed `AppContext` from the root middleware stack and use it in + controllers. +6. **Validate input at the boundary.** Parse and validate `Request`, `FormData`, params, cookies, + and external payloads before they reach rendering or persistence logic. +7. **Hydrate only when necessary.** Prefer server-rendered UI. Use `clientEntry(...)` and `run(...)` + only for real browser interactivity or browser-only APIs. +8. **Test the narrowest meaningful layer.** Prefer router tests for route behavior. Use component + tests when the behavior is truly interactive or DOM-specific. +9. **Finish with verification.** Re-read the route flow, confirm auth and authorization boundaries, + and run the smallest relevant test and typecheck loop. + +## Project Layout + +Use these root directories consistently: + +- `app/` for runtime application code +- `db/` for migrations and local database files +- `public/` for static assets served as-is +- `test/` for shared helpers, fixtures, and integration coverage +- `tmp/` for uploads, caches, local session files, and other scratch data + +Inside `app/`, organize by responsibility: + +- `assets/` for client entrypoints and client-owned browser behavior +- `controllers/` for route-owned handlers and route-local UI +- `data/` for schema, queries, persistence setup, migrations, and runtime data initialization +- `middleware/` for request lifecycle concerns such as auth, sessions, uploads, and database + injection +- `ui/` for shared cross-route UI primitives +- `utils/` only for genuinely cross-layer helpers that do not clearly belong elsewhere +- `routes.ts` for the route contract +- `router.ts` for router setup and wiring + +### Placement Precedence + +When code could live in multiple places: + +1. Put it in the narrowest owner first. +2. If it belongs to one route, keep it with that route. +3. If it is shared UI across route areas, move it to `app/ui/`. +4. If it is request lifecycle setup, keep it in `app/middleware/`. +5. If it is schema, query, persistence, or startup data logic, keep it in `app/data/`. +6. Use `app/utils/` only as a last resort for truly cross-layer helpers. + +### Route Ownership + +- Use a flat file in `app/controllers/` for a simple leaf action, such as `app/controllers/home.tsx` +- Use a folder with `controller.tsx` when a route owns nested routes or multiple actions, such as + `app/controllers/account/controller.tsx` +- Mirror nested route structure on disk, such as `app/controllers/auth/login/controller.tsx` +- Keep route-local UI next to its owner, such as `app/controllers/contact/page.tsx` +- Move shared UI to `app/ui/` +- If a flat leaf grows child routes or multiple actions, promote it to a controller folder + +### Layout Anti-Patterns + +- Do not create `app/lib/` as a generic dumping ground +- Do not create `app/components/` as a second shared UI bucket when `app/ui/` already owns that + role +- Do not put shared cross-route UI in `app/controllers/` +- Do not put middleware or persistence helpers in `app/utils/` when they have a clearer home +- Do not create folders for simple leaf actions unless they are real controllers + +## Core Remix Rules + +- Import from `remix/`, never `import { ... } from 'remix'` +- Treat `app/routes.ts` as the source of truth for URLs. Use `routes..href(...)` for + redirects, links, tests, and internal URL construction +- Controllers and actions should return explicit `Response` objects, including redirects, 404s, and + validation failures. At the route boundary, prefer returning a `Response` for expected outcomes + (validation errors, conflicts, not found) over throwing for control flow +- Model HTTP behavior explicitly. Status codes, headers, redirects, cache rules, and content types + are part of the route contract +- Make the server route correct first. A POST should already return the right HTML, redirect, or + error response on its own before `clientEntry(...)` layers interactivity on top +- Validate input at the boundary using `remix/data-schema` (and `remix/data-schema/form-data` for + forms). `parseSafe` makes the failure path a return value instead of an exception +- Derive `AppContext` from the root middleware stack so `get(Database)`, `get(Session)`, + `get(Auth)`, and similar keys stay typed. If the controller never reads from context, it doesn't + need the harness +- Outside actions and controllers, only use `getContext()` when `asyncContext()` is in the + middleware stack +- Remix Component is not React: read props from `handle.props`, keep state in setup-scope + variables, call `handle.update()` explicitly, and do DOM-sensitive work in event handlers or + `queueTask(...)`, not in render +- Prefer host-element mixins via `mix={mixin(...)}` for behavior and styling instead of inventing + custom host prop conventions. Use `mix={[...]}` only when composing multiple mixins +- Hydrated `clientEntry(...)` props must be serializable. Do not pass functions, class instances, or + opaque runtime objects + +## Security And Session Defaults + +- Never ship demo secrets. In non-test environments, require session and provider secrets from the + environment and fail fast if they are missing +- Use hardened cookies: `httpOnly` always, `sameSite` by default, and `secure` when serving over + HTTPS +- Regenerate session IDs on login, logout, and privilege changes +- Use `requireAuth()` to protect authenticated route areas, but still authorize resource ownership + inside handlers and data writes +- Add CSRF protection when browser forms mutate state using cookie-backed sessions +- Add CORS only for endpoints that must be called cross-origin. Prefer same-origin by default +- Prefer JSX or `remix/html-template` for HTML generation so escaping stays correct +- Validate uploads for size, type, and destination. Treat filenames and content as untrusted input + +## Testing Defaults + +- Prefer server and router tests first. Drive the app with `router.fetch(new Request(...))` and + assert on the returned `Response` +- Build a fresh router per test or per suite so sessions, in-memory storage, and database state + stay isolated +- Use `routes..href(...)` in tests so URLs stay coupled to the route contract +- For auth or session scenarios, use a test cookie and `createMemorySessionStorage()` instead of + production storage +- Use component tests only for interactive or DOM-specific behavior. Render with `createRoot(...)`, + interact with the real DOM, and call `root.flush()` between steps +- Prefer one representative behavior test over many repetitive assertion variants + +## Common Mistakes To Avoid + +- Treating Remix Component like React and reaching for hooks or implicit rerendering +- Importing from a top-level `remix` entry instead of a subpath +- Adding `clientEntry(...)` before the server-rendered route behavior is correct +- Passing non-serializable props into `clientEntry(...)` +- Calling `getContext()` without `asyncContext()` in the middleware stack +- Getting middleware order wrong; fast exits like static files belong early, request enrichment later +- Skipping boundary validation and trusting raw `FormData`, params, cookies, or external payloads +- Letting route-local domain errors leak out of the controller. Translate expected outcomes + (validation, conflicts, not-found) into the HTTP `Response` the route means to return rather than + throwing a custom `Error` subclass and catching it elsewhere +- Reaching for `createCookie` when a tamper-sensitive or server-managed per-browser fact really + wants `remix/session`. If editing the value would be a bug, use a session +- Building a JSON-only RPC layer when a normal form POST, redirect, or resource route would be + simpler. Fetch-from-the-client is a layer on top of sound route behavior, not a replacement for + it +- Treating JSON state endpoints and `` reloads as mutually exclusive patterns. Pick the + lightest sync mechanism that fits the UX; small widgets may reasonably poll a JSON endpoint +- Assuming authentication is enough without per-resource authorization checks +- Dropping shared code into vague buckets like `utils.ts`, `helpers.ts`, or `common.ts` when + ownership is known +- Writing only component tests for a feature whose main behavior is really an HTTP route concern + +## Package Map + +Use this map to find the right package quickly. Each entry says what the package is for, not just +what it exports. Open the linked reference file when you need full examples. + +### Routing, Server, and Responses + +- `remix/fetch-router` — the router itself. Use for `createRouter`, controller and middleware + types, and registering routes +- `remix/fetch-router/routes` — declarative route builders. Use for `route`, `get`, `post`, `put`, + `del`, `form`, `resources` when defining `app/routes.ts` +- `remix/node-fetch-server` — adapter from Node's `http` module to a Fetch-style router. Use for + `createRequestListener` in `server.ts` +- `remix/assets` — browser asset server. Use for `createAssetServer` when serving compiled + scripts and styles, getting public hrefs, and emitting preloads. Shared compiler options such as + `target`, `sourceMaps`, `sourceMapSourcePaths`, and `minify` live at the top level +- `remix/headers` — typed header parsers and builders. Use when reading `Accept`, `Cookie`, or + setting `CacheControl`, `Vary`, etc., instead of hand-formatting strings +- `remix/response/redirect` — `redirect(href, status?)`. Use for the canonical "POST then redirect" + pattern and other location changes +- `remix/response/html` — `createHtmlResponse`. Use when you need an HTML `Response` from a string + or stream without rendering through `remix/ui` +- `remix/response/compress` — `compressResponse`. Use when compressing one-off responses outside + the global `compression()` middleware +- `remix/response/file` — file-download responses. Use for `Content-Disposition: attachment` + responses +- `remix/route-pattern` — low-level URL matching and generation. Use when working with raw + patterns outside the router (custom matchers, scripts) +- `remix/fetch-proxy` — Fetch-based HTTP proxying. Use to forward a request to another origin; pass + `xForwardedHeaders` when the upstream needs forwarded proto, host, and port + +### Data, Validation, and Persistence + +- `remix/data-schema` — schema builders for runtime validation. Use for `parse` and `parseSafe` + to validate any input that crosses a trust boundary, and `.transform(...)` when validated output + should map to a different value or type +- `remix/data-schema/checks` — common check helpers (`email`, `minLength`, `maxLength`, etc.). + Use to compose into a schema +- `remix/data-schema/coerce` — coercion helpers for strings, numbers, booleans, dates, and ids. + Use when input arrives as a string but should be a typed value +- `remix/data-schema/form-data` — `f.object` and `f.field` for parsing `FormData` directly. Use + in actions that read browser forms +- `remix/data-table` — typed tables and a `Database` interface. Use for `table`, `column`, + `createDatabase` when modeling persisted data +- `remix/data-table-sqlite`, `remix/data-table-postgres`, `remix/data-table-mysql` — adapters. + Use to back `createDatabase` with a real engine. SQLite accepts Node, Bun, and compatible + synchronous clients with the shared `prepare`/`exec` surface +- `remix/data-table/migrations` — migration authoring and runners. Use for `createMigration`, + `createMigrationRunner` +- `remix/data-table/migrations/node` — `loadMigrations` from disk. Use in startup scripts that + apply migrations +- `remix/data-table/operators` — query operators such as `inList(...)`. Use when `where` clauses + need set or comparison logic + +### Auth, Sessions, and Cookies + +- `remix/session` — the `Session` object: `get`, `set`, `flash`, `unset`, `regenerateId`. Use for + any per-browser state where tampering would be a bug (login, "I submitted this form already", + cart, flash messages) +- `remix/session-middleware` — `session(cookie, storage)`. Use to wire a session cookie and + storage backend into the root middleware stack +- `remix/session/fs-storage`, `remix/session/memory-storage`, `remix/session/cookie-storage` — + storage backends. Use `fs-storage` for single-process apps, `memory-storage` for tests, + `cookie-storage` for stateless deployments where data fits in a cookie +- `remix/session-storage-redis` — Redis-backed storage. Use for multi-process or multi-host + deployments +- `remix/session-storage-memcache` — Memcache-backed storage. Same multi-host use case as Redis +- `remix/cookie` — `createCookie` for plain signed/unsigned cookies. Use for non-sensitive + preferences where the client is allowed to control the value (theme, locale, dismissed banner). + For state where tampering matters, prefer `remix/session` +- `remix/auth` — credentials, OAuth, OIDC, and Atmosphere providers. Use to define how identity is + verified, start/finish external login, and refresh stored OAuth/OIDC token bundles with + `refreshExternalAuth(...)` +- `remix/auth-middleware` — `auth({ schemes })`, `requireAuth`, the `Auth` context key. Use to + resolve identity into the request context and to gate routes + +### UI, Hydration, and Browser Behavior + +- `remix/ui` — the component runtime: components, core mixins, `clientEntry`, `run`, ``, + navigation helpers, and `createRoot`. Use for app UI behavior +- `remix/ui/server` — server rendering: `renderToStream`, `renderToString`. Use in the + `render(...)` helper that returns HTML responses +- `remix/ui/animation` — animation APIs: `animateEntrance`, `animateExit`, `animateLayout`, + `spring`, `tween`, and `easings` +- `remix/ui/` — UI primitives, mixins, glyphs, and theme helpers. Import from + `remix/ui/accordion`, `remix/ui/button`, `remix/ui/select`, etc. +- `remix/ui/test` — component test rendering helpers such as `render` +- `remix/ui/jsx-runtime` — JSX transform target. Configured in `tsconfig.json`, rarely + imported directly +- `remix/html-template` — escaped HTML template literals. Use when generating HTML outside the + component system (RSS feeds, email bodies, error pages) +- `remix/file-storage` — backend-agnostic `File` storage interface. Use as the type bound for + upload destinations +- `remix/file-storage/fs`, `remix/file-storage/memory`, `remix/file-storage-s3` — storage + backends. Use to implement an upload destination + +### Middleware + +- `remix/static-middleware` — `staticFiles(dir)`. Use to serve files from `public/` exactly as + they exist on disk +- `remix/form-data-middleware` — `formData()`. Use to parse `FormData` once and expose it via + `get(FormData)` instead of calling `await request.formData()` in each action +- `remix/form-data-parser` — lower-level `parseFormData`, `FileUpload`. Use when implementing + custom upload handlers. Upload handler errors propagate directly +- `remix/multipart-parser` and `remix/multipart-parser/node` — low-level multipart stream parsing. + `MultipartPart.headers` is a plain object keyed by lower-case header name; read values with + bracket notation such as `part.headers['content-type']` +- `remix/compression-middleware` — `compression()`. Use globally for text-like responses +- `remix/logger-middleware` — `logger()`. Use in development for request logs; pass `colors` to + force terminal color output on or off +- `remix/method-override-middleware` — `methodOverride()`. Use when HTML forms need `PUT`, + `PATCH`, or `DELETE` +- `remix/async-context-middleware` — `asyncContext()`, `getContext()`. Use when helpers outside + actions need request context without threading it through every call +- `remix/cors-middleware` — `cors(opts?)`. Use for endpoints called cross-origin +- `remix/csrf-middleware` — `csrf(opts?)`. Use when session-backed forms mutate state and need + synchronizer-token CSRF protection +- `remix/cop-middleware` — cross-origin protection. Use to reject unsafe cross-origin browser + requests + +### Test + +- `remix/test` — `describe`, `it`, and lifecycle hooks. Use as the test framework +- `remix/test/cli` — programmatic test runner APIs such as `runRemixTest` +- `remix/cli` — programmatic Remix CLI API. Use the `remix` executable for project commands such + as `remix test`, `remix routes`, and `remix doctor` +- `remix/assert` — assertion helpers. Use in place of `node:assert` so messages render cleanly + in the runner +- `remix/terminal` — ANSI styles, color detection, style factories, and testable terminal streams. + Use for CLIs and terminal output instead of hand-rolled escape sequences + +## Canonical Patterns + +### Define routes first + +```typescript +import { form, get, post, resources, route } from "remix/fetch-router/routes"; + +export const routes = route({ + home: "/", + contact: form("contact"), + books: { + index: "/books", + show: "/books/:slug", + }, + auth: route("auth", { + login: form("login"), + logout: post("logout"), + }), + admin: route("admin", { + index: get("/"), + books: resources("books", { param: "bookId" }), + }), +}); +``` + +### Type controllers against the route contract + +```typescript +import type { Controller } from 'remix/fetch-router' + +import type { AppContext } from '../router.ts' +import { routes } from '../routes.ts' + +export default { + actions: { + async index({ get }) { + let db = get(Database) + let allBooks = await db.findMany(books, { orderBy: ['id', 'asc'] }) + return render() + }, + async show({ get, params }) { + let db = get(Database) + let book = await db.findOne(books, { where: { slug: params.slug } }) + if (!book) return new Response('Not Found', { status: 404 }) + return render() + }, + }, +} satisfies Controller +``` + +### Compose middleware deliberately + +```typescript +import { + createRouter, + type AnyParams, + type MiddlewareContext, + type WithParams, +} from "remix/fetch-router"; + +export type RootMiddleware = [ + ReturnType, + ReturnType, + ReturnType, + ReturnType, +]; + +export type AppContext = WithParams< + MiddlewareContext, + params +>; + +let middleware = []; + +if (process.env.NODE_ENV === "development") { + middleware.push(logger()); +} + +middleware.push(compression()); +middleware.push(staticFiles("./public")); +middleware.push(formData()); +middleware.push(methodOverride()); +middleware.push(session(cookie, storage)); +middleware.push(asyncContext()); +middleware.push(loadDatabase()); +middleware.push(loadAuth()); + +let router = createRouter({ middleware }); +``` + +### Mutate, validate, and respond + +```typescript +import { redirect } from 'remix/response/redirect' +import * as s from 'remix/data-schema' +import * as f from 'remix/data-schema/form-data' +import { Session } from 'remix/session' +import { Database } from 'remix/data-table' + +let bookSchema = f.object({ + slug: f.field(s.string()), + title: f.field(s.string()), +}) + +export default { + actions: { + async create({ get }) { + let parsed = s.parseSafe(bookSchema, get(FormData)) + if (!parsed.success) { + return render(, { status: 400 }) + } + + let db = get(Database) + let book = await db.create(books, parsed.value) + + let session = get(Session) + session.flash('message', `Added ${book.title}.`) + + return redirect(routes.books.show.href({ slug: book.slug })) + }, + }, +} satisfies Controller +``` + +This shape works without JavaScript, returns a `Response` for every outcome, and is ready for +`clientEntry(...)` interactivity when the UI needs it. + +### Build UI from handle props plus render + +```tsx +import { on, type Handle } from "remix/ui"; + +function Counter(handle: Handle<{ initialCount?: number; label: string }>) { + let count = handle.props.initialCount ?? 0; + + return () => ( + + ); +} +``` + +Only add `clientEntry(...)` and `run(...)` when the component needs browser interactivity or +browser-only APIs. diff --git a/.agents/skills/remix/references/animate-elements.md b/.agents/skills/remix/references/animate-elements.md new file mode 100644 index 0000000..71515c2 --- /dev/null +++ b/.agents/skills/remix/references/animate-elements.md @@ -0,0 +1,195 @@ +# Animating Elements + +## What This Covers + +How to animate insertion, removal, and layout changes of elements. Read this when the task +involves: + +- Adding entrance, exit, or shared-layout transitions to UI +- Choosing between spring physics (`spring(...)`) and time-based easing (`tween`) +- Coordinating CSS transitions with the same easing as JS animations +- Imperative animation loops via `requestAnimationFrame` + +Import animation APIs from `remix/ui/animation`. For the smaller set of animation helpers that +show up alongside other mixins, see `mixins-styling-events.md`. + +## Animation Mixins + +### `animateEntrance(config)` + +Animates an element when inserted. Config specifies the **starting** style the element animates +**from**: + +```tsx +
    +``` + +### `animateExit(config)` + +Animates an element when removed. Config specifies the **ending** style the element animates +**to**. The element stays in the DOM until the animation completes: + +```tsx +{ + isVisible && ( +
    + ); +} +``` + +### `animateLayout(config?)` + +Animates layout changes (position/size) using FLIP-style transforms: + +```tsx +{ + items.map((item) => ( +
  • + )); +} +``` + +Options: `duration` (default 200ms), `easing` (default spring snappy), `size` (default true — +include scale projection for size changes). + +### Combining mixins + +```tsx +
    +``` + +### Shared-layout swap + +```tsx +
    *": { gridArea: "1 / 1" } })}> + {stateA ? ( +
    + ) : ( +
    + )} +
    +``` + +## Spring API + +Physics-based spring animation. Returns a `SpringIterator` with `duration`, `easing`, and +`toString()` for CSS. + +### Presets + +| Preset | Bounce | Duration | Character | +| -------- | ------ | -------- | --------------------------- | +| `smooth` | -0.3 | 400ms | Overdamped, no overshoot | +| `snappy` | 0 | 200ms | Critically damped, quick | +| `bouncy` | 0.3 | 400ms | Underdamped, visible bounce | + +```tsx +spring("bouncy"); +spring("snappy"); +spring("smooth"); +spring("bouncy", { duration: 300 }); // override duration +``` + +### Custom spring + +```tsx +spring({ duration: 500, bounce: 0.3 }); +spring({ duration: 500, bounce: 0.3, velocity: 2 }); // continue momentum from gesture +``` + +### Spread into animation mixins + +Spreading a spring gives both `duration` and `easing`: + +```tsx +animateEntrance({ opacity: 0, ...spring("bouncy") }); +``` + +### CSS transitions + +The iterator stringifies to `"550ms linear(...)"`: + +```tsx +css({ transition: `width ${spring("bouncy")}` }); +``` + +Or use the `spring.transition()` helper for multiple properties: + +```tsx +css({ transition: spring.transition("width", "bouncy") }); +css({ transition: spring.transition(["left", "top"], "snappy") }); +``` + +### Web Animations API + +```tsx +element.animate(keyframes, { ...spring("bouncy") }); +``` + +### JS iteration + +The iterator yields position values from 0 to 1, one per frame: + +```tsx +for (let t of spring("bouncy")) { + let x = from + (to - from) * t; + updateSomething(x); + await nextFrame(); +} +``` + +## Tween API + +Generator-based tween for animating values over time with cubic bezier easing. Prefer animation +mixins or CSS transitions with `spring` for most UI work. Use `tween` for imperative +`requestAnimationFrame` loops, canvas/WebGL, or non-CSS properties. + +```tsx +import { tween, easings } from "remix/ui/animation"; + +let animation = tween({ + from: 0, + to: 100, + duration: 300, + curve: easings.easeOut, +}); + +animation.next(); // initialize +function tick(timestamp: number) { + if (handle.signal.aborted) return; + let { value, done } = animation.next(timestamp); + element.style.transform = `translateX(${value}px)`; + if (!done) requestAnimationFrame(tick); +} +requestAnimationFrame(tick); +``` + +Built-in easings: `easings.linear`, `easings.ease`, `easings.easeIn`, `easings.easeOut`, +`easings.easeInOut`. + +## Practical Guidance + +- Always key conditional or switching elements you expect to animate. +- Use `animateLayout` only on the element whose position or size changes. +- Prefer one clear transition intent per mixin: entrance starts from a style, exit ends at a style. +- Default to `...spring()` for duration and easing in most cases. +- Keep DOM work in `handle.queueTask(...)` or `ref(...)`, not in render. diff --git a/.agents/skills/remix/references/assets-and-browser-modules.md b/.agents/skills/remix/references/assets-and-browser-modules.md new file mode 100644 index 0000000..e7ff6e0 --- /dev/null +++ b/.agents/skills/remix/references/assets-and-browser-modules.md @@ -0,0 +1,122 @@ +# Assets and Browser Modules + +## What This Covers + +How to serve browser scripts and styles from source. Read this when the task involves: + +- Configuring `createAssetServer` (`fileMap`, `allow`, `deny`, fingerprinting, compiler options) +- Choosing between `staticFiles()` for already-built files and `createAssetServer()` for source + assets that need import rewriting, preloads, or fingerprinted URLs +- Generating script URLs or `` tags for a client entry +- Keeping server-only files out of the browser via `deny` rules + +For routing the URL namespace itself, see `routing-and-controllers.md`. For client entry +hydration, see `hydration-frames-navigation.md`. + +## When To Reach For It + +Use `remix/assets` when the app serves browser JavaScript, TypeScript, or CSS from source files. +This is the right tool for client entrypoints, browser-only helpers, styles under `app/assets/`, +and monorepo code that should be compiled and served under a public URL namespace. + +Use `staticFiles()` for files that already exist on disk exactly as they should be served. Use +`createAssetServer()` for source scripts or styles that need rewriting, dependency scanning, +preloads, sourcemaps, or fingerprinted URLs. + +## Default Pattern + +```typescript +import * as path from "node:path"; + +import { createAssetServer } from "remix/assets"; +import { createRouter } from "remix/fetch-router"; + +let assetServer = createAssetServer({ + rootDir: path.resolve(import.meta.dirname, ".."), + fileMap: { + "/assets/app/*path": "app/*path", + "/assets/packages/*path": "../packages/*path", + }, + allow: ["app/assets/**", "../packages/**"], + deny: ["app/**/*.server.*"], + target: { es: "2020", chrome: "109", safari: "16.4" }, + sourceMaps: process.env.NODE_ENV === "development" ? "external" : undefined, + minify: process.env.NODE_ENV === "production", + scripts: { + define: { + "process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV ?? "development"), + }, + }, +}); + +let router = createRouter(); + +router.get("/assets/*path", ({ request }) => { + return assetServer.fetch(request); +}); +``` + +## Rules + +- Treat `allow` and `deny` as the security boundary for browser-reachable source files. +- Add a `deny` list for server-only modules such as `*.server.*`, private config, or other files + that should never be exposed. +- Set `rootDir` explicitly in monorepos so relative paths resolve from the intended project root. +- `fileMap` keys are public URL patterns and values are root-relative file path patterns. They use + `route-pattern` syntax on both sides. +- Keep the same wildcard params on both sides of a `fileMap` entry so import rewriting can map + source files back to public URLs. +- CSS files are compiled and served alongside scripts. Local CSS `@import` rules are rewritten and + fingerprinted with the same asset server routing rules. + +## Rendering HTML + +Use `getHref()` when you need the public URL for one module, and `getPreloads()` when you want +`` tags or `Link` headers for one or more entrypoints and their +dependencies. + +```typescript +let entryHref = await assetServer.getHref("app/assets/entry.ts"); +let preloads = await assetServer.getPreloads(["app/assets/entry.ts"]); +``` + +Use this when rendering documents or layouts that boot browser behavior with a known client entry. + +When resolving hydrated client entries during server rendering, pass the source entry ID from +`clientEntry(import.meta.url, ...)` to `getHref()` inside `resolveClientEntry`. Keep export-name +resolution in that render helper, and avoid hard-coding public asset URLs in source-owned component +modules. + +## Development vs Deployment + +In development: + +- Keep `watch` enabled so source changes are picked up without restarting the server +- Prefer stable URLs with normal revalidation +- Enable source maps when debugging browser code + +In deployment: + +- Set `watch: false` +- Use `fingerprint: { buildId }` for long-lived immutable caching +- Make sure `buildId` changes for each deploy + +Fingerprinting assumes files on disk are stable and requires `watch: false`. + +## Useful Compiler Options + +- `minify` for production minification of scripts and styles +- `sourceMaps` for `'external'` or `'inline'` source maps for scripts and styles +- `sourceMapSourcePaths` for `'url'` or `'absolute'` source map paths +- `target` as an object for shared browser targets and script-only ECMAScript output, such as + `{ es: '2020', chrome: '109', safari: '16.4' }` +- `scripts.define` to replace globals such as `process.env.NODE_ENV` +- `scripts.external` to leave specific script imports untouched + +Do not nest shared compiler options under `scripts`. Use top-level `minify`, `sourceMaps`, +`sourceMapSourcePaths`, and `target` so they apply to styles as well as scripts. + +## Lifecycle + +If the asset server is long-lived and watching the file system, call `await assetServer.close()` +when shutting down dev servers or disposing tests. diff --git a/.agents/skills/remix/references/auth-and-sessions.md b/.agents/skills/remix/references/auth-and-sessions.md new file mode 100644 index 0000000..74d81e4 --- /dev/null +++ b/.agents/skills/remix/references/auth-and-sessions.md @@ -0,0 +1,420 @@ +# Authentication and Sessions + +## What This Covers + +How to remember things about a browser between requests and how to identify a user. Read this when +the task involves: + +- Storing per-browser state across requests (login, cart, "I have submitted this form") +- Adding a credentials login flow or an OAuth provider +- Protecting routes with `requireAuth()` or stacking authorization checks +- Reading or writing `Session`, `Auth`, or other identity-related context values +- Logging in, logging out, or rotating session IDs + +For raw cookies that are not session-backed (theme, locale, dismissed-banner), see +`createCookie` in this file plus the broader `Package Map` in `SKILL.md`. + +## Sessions vs Plain Cookies + +Reach for `remix/session` when state is sensitive, must be tamper-resistant, or represents the +identity of a request: who is logged in, which form a browser already submitted, what items are in +a cart. Sessions sign or encrypt their backing cookie with a server-held secret and give you a +typed `Session` object you can `get`, `set`, `flash`, `unset`, and `regenerateId`. + +Reach for `remix/cookie` directly when the browser is allowed to carry the value and the server +does not need session semantics. This often means preferences (theme, locale, dismissed banner), +but a signed cookie can also be fine for small low-risk values where you truly only need one +cookie-shaped fact and do not need `Session` helpers. + +If a malicious user editing the value would be a bug, or if the value needs server-managed +lifecycle, reach for a session. + +### Quick chooser + +| Need | Best fit | Why | +| ------------------------------------------------------------------- | --------------- | -------------------------------------------------- | +| Theme, locale, dismissed banner | `remix/cookie` | Browser-controlled preference | +| Small signed hint with minimal lifecycle | `remix/cookie` | One value, no `Session` helpers needed | +| "This browser already submitted", cart, flash messages, login state | `remix/session` | Tamper-sensitive, server-managed per-browser state | +| "One real person only", ownership, durable identity | account/auth | Cookies or sessions alone do not prove personhood | + +## Session Setup + +### Create a session cookie + +```typescript +import { createCookie } from "remix/cookie"; + +let sessionSecret = process.env.SESSION_SECRET; +if (!sessionSecret && process.env.NODE_ENV !== "test") { + throw new Error("SESSION_SECRET is required"); +} + +export let sessionCookie = createCookie("session", { + secrets: [sessionSecret ?? "test-only-secret"], + httpOnly: true, + sameSite: "Lax", + secure: process.env.NODE_ENV === "production", + maxAge: 2592000, // 30 days + path: "/", +}); +``` + +The cookie should always be `httpOnly`, default to `sameSite: 'Lax'`, and be `secure` in +production. Demo defaults like `'s3cr3t'` are fine in tests but should never reach production — +fail fast when the secret is missing. + +### Create session storage + +```typescript +// Filesystem storage +import { createFsSessionStorage } from "remix/session/fs-storage"; +export let sessionStorage = createFsSessionStorage("./tmp/sessions"); + +// Memory storage (for tests) +import { createMemorySessionStorage } from "remix/session/memory-storage"; +export let sessionStorage = createMemorySessionStorage(); +``` + +### Add session middleware + +```typescript +import { session } from "remix/session-middleware"; + +let router = createRouter({ + middleware: [ + session(sessionCookie, sessionStorage), + // ... other middleware + ], +}); +``` + +### Using sessions in handlers + +```typescript +import { Session } from "remix/session"; + +async function handler({ get }) { + let session = get(Session); + + // Read + let userId = session.get("userId"); + + // Write + session.set("userId", 42); + + // Flash (read once, then cleared) + session.flash("message", "Settings saved!"); + let message = session.get("message"); // returns and clears + + // Remove a key + session.unset("userId"); + + // Regenerate session ID (after login/logout) + session.regenerateId(true); +} +``` + +### Sessions for non-auth state + +Sessions are not just for login. They are the right place to store any tamper-sensitive +per-browser fact: which form a browser already submitted, how many free actions are left in a +trial, which feature flags a tester opted into, what items are in a cart. + +```typescript +async function submit({ get }) { + let session = get(Session) + if (session.get('hasSubmitted')) { + return render(, { status: 409 }) + } + + let parsed = s.parseSafe(submitSchema, get(FormData)) + if (!parsed.success) { + return render(, { status: 400 }) + } + + await saveSubmission(parsed.value) + session.set('hasSubmitted', true) + session.flash('message', 'Thanks for submitting!') + + return redirect(routes.thanks.href()) +} +``` + +Notice that there is no manual `Set-Cookie` plumbing in the action — the session middleware handles +that, and the handler returns an ordinary `Response`. Per-browser state enforced this way is still +bypassable by clearing cookies; if the guarantee needs to survive that, you also need an account +(see auth providers below). + +## Auth Middleware + +### Basic setup + +```typescript +import { auth, createSessionAuthScheme } from "remix/auth-middleware"; +import { Session } from "remix/session"; +import { Database } from "remix/data-table"; + +export function loadAuth() { + return auth({ + schemes: [ + createSessionAuthScheme({ + read(session) { + let data = session.get("auth"); + return data ?? null; + }, + async verify(value, context) { + let db = context.get(Database); + return (await db.find(users, value.userId)) ?? null; + }, + invalidate(session) { + session.unset("auth"); + }, + }), + ], + }); +} +``` + +### Reading auth state + +```typescript +import { Auth } from "remix/auth-middleware"; + +function handler({ get }) { + let auth = get(Auth); + + if (auth.ok) { + // User is authenticated + let user = auth.identity; + } +} +``` + +## Credentials Auth + +### Define a credentials provider + +```typescript +import { createCredentialsAuthProvider, verifyCredentials, completeAuth } from "remix/auth"; +import * as s from "remix/data-schema"; +import * as f from "remix/data-schema/form-data"; + +let loginSchema = f.object({ + email: f.field(s.defaulted(s.string(), "")), + password: f.field(s.defaulted(s.string(), "")), +}); + +export let passwordProvider = createCredentialsAuthProvider({ + parse(context) { + let formData = context.get(FormData); + return s.parse(loginSchema, formData); + }, + async verify({ email, password }, context) { + let db = context.get(Database); + let user = await db.findOne(users, { where: { email } }); + if (!user || !(await verifyPassword(password, user.password_hash))) { + return null; + } + return user; + }, +}); +``` + +### Login action + +```typescript +import { verifyCredentials, completeAuth } from 'remix/auth' +import { redirect } from 'remix/response/redirect' + +async action(context) { + let user = await verifyCredentials(passwordProvider, context) + + if (user == null) { + let session = context.get(Session) + session.flash('error', 'Invalid email or password.') + return redirect(routes.auth.login.href()) + } + + let session = completeAuth(context) + session.set('auth', { userId: user.id }) + + return redirect(routes.home.href()) +}, +``` + +### Logout action + +```typescript +import { Session } from "remix/session"; +import { redirect } from "remix/response/redirect"; + +function logout(context) { + let session = context.get(Session); + session.unset("auth"); + session.regenerateId(true); + return redirect(routes.home.href()); +} +``` + +## OAuth / External Auth + +### Create providers + +```typescript +import { + createAtmosphereAuthProvider, + createGoogleAuthProvider, + createGitHubAuthProvider, + startExternalAuth, + finishExternalAuth, + completeAuth, + refreshExternalAuth, +} from "remix/auth"; + +let googleProvider = createGoogleAuthProvider({ + clientId: process.env.GOOGLE_CLIENT_ID, + clientSecret: process.env.GOOGLE_CLIENT_SECRET, + redirectUri: new URL(routes.auth.google.callback.href(), origin), +}); + +let githubProvider = createGitHubAuthProvider({ + clientId: process.env.GITHUB_CLIENT_ID, + clientSecret: process.env.GITHUB_CLIENT_SECRET, + redirectUri: new URL(routes.auth.github.callback.href(), origin), +}); + +let atmosphereSessionSecret = process.env.ATMOSPHERE_SESSION_SECRET; +if (!atmosphereSessionSecret && process.env.NODE_ENV !== "test") { + throw new Error("ATMOSPHERE_SESSION_SECRET is required"); +} + +let atmosphereProvider = createAtmosphereAuthProvider({ + clientId: "https://app.example.com/oauth/client-metadata.json", + redirectUri: new URL(routes.auth.atmosphere.callback.href(), origin), + sessionSecret: atmosphereSessionSecret ?? "test-only-secret", +}); +``` + +For Atmosphere-compatible atproto OAuth, create the provider once, call +`atmosphereProvider.prepare(handleOrDid)` before `startExternalAuth(...)`, then pass the same +module-scope provider to `finishExternalAuth(...)` and `refreshExternalAuth(...)`. + +### OAuth controller + +```typescript +export default { + actions: { + // GET /auth/google — redirect to Google + async index(context) { + return await startExternalAuth(googleProvider, context, { + returnTo: context.url.searchParams.get("returnTo"), + }); + }, + + // GET /auth/google/callback — handle redirect back + async callback(context) { + let { result, returnTo } = await finishExternalAuth(googleProvider, context); + + let db = context.get(Database); + let { user, authAccount } = await resolveExternalAuth(db, result); + + let session = completeAuth(context); + session.set("auth", { + userId: user.id, + loginMethod: result.provider, + authAccountId: authAccount.id, + }); + + return redirect(returnTo ?? routes.account.href()); + }, + }, +} satisfies Controller; +``` + +### Refresh stored provider tokens + +Use `refreshExternalAuth(provider, tokens)` when an app has stored OAuth/OIDC tokens and needs a +fresh access token from a refresh token. Built-in OIDC providers, X, and Atmosphere support +refresh-token exchange. If the provider does not rotate the refresh token, the refreshed bundle +preserves the current one. + +```typescript +async function refreshGoogleTokens({ get }) { + let db = get(Database); + let account = await db.findOne(authAccounts, { where: { provider: "google" } }); + if (!account) return null; + + let refreshed = await refreshExternalAuth(googleProvider, account.tokens); + await db.update(authAccounts, account.id, { tokens: refreshed.tokens }); + + return refreshed.tokens; +} +``` + +## Protecting Routes + +### Controller-level protection + +Apply `requireAuth()` to an entire controller subtree: + +```typescript +import { requireAuth } from "remix/auth-middleware"; + +export default { + middleware: [requireAuth()], + actions: { + index() { + /* guaranteed authenticated */ + }, + settings: settingsController, + }, +} satisfies Controller; +``` + +### Stacking middleware + +Combine auth checks with role checks: + +```typescript +export default { + middleware: [requireAuth(), requireAdmin()], + actions: { + index() { + /* requires auth + admin */ + }, + }, +} satisfies Controller; +``` + +### Action-level protection + +Apply middleware to a single route: + +```typescript +import { Auth, requireAuth } from 'remix/auth-middleware' + +router.get(routes.account, { + middleware: [requireAuth()], + handler(context) { + let auth = context.get(Auth) + return render() + }, +}) +``` + +### Redirect on auth failure + +```typescript +import { requireAuth } from "remix/auth-middleware"; +import { redirect } from "remix/response/redirect"; + +export function requireAuthRedirect() { + return requireAuth({ + onFailure(context) { + let returnTo = encodeURIComponent(context.url.pathname); + return redirect(routes.auth.login.href() + `?returnTo=${returnTo}`, 303); + }, + }); +} +``` diff --git a/.agents/skills/remix/references/component-model.md b/.agents/skills/remix/references/component-model.md new file mode 100644 index 0000000..7c112e0 --- /dev/null +++ b/.agents/skills/remix/references/component-model.md @@ -0,0 +1,282 @@ +# Component Model + +## What This Covers + +How a Remix Component is shaped and how its state, lifecycle, and updates behave. Read this when +the task involves: + +- Writing a component (`handle` plus render function) +- Managing component-local state, derived values, or post-render DOM work +- Using `handle.props`, `handle.update()`, `handle.queueTask()`, `handle.signal`, `handle.id`, or + `handle.context` +- Listening to global events with cleanup tied to the component lifecycle + +For host-element behavior (event handlers, styles, refs, animations), see +`mixins-styling-events.md`. For browser hydration, frames, and navigation, see +`hydration-frames-navigation.md`. + +## Phases + +A component has two phases: + +1. **Setup phase** — runs once when the component is created +2. **Render phase** — returned function runs on initial render and every update + +```tsx +import { on, type Handle } from "remix/ui"; + +function Counter(handle: Handle<{ initialCount?: number; label: string }>) { + let count = handle.props.initialCount ?? 0; + + return () => ( + + ); +} +``` + +## Props + +Components receive all JSX props through `handle.props`. The object identity is stable for the +component lifetime, and its values are updated before each render. Put initialization inputs on +normal JSX props and read them from `handle.props`: + +```tsx +function Timer(handle: Handle<{ initialSeconds: number; paused?: boolean }>) { + let seconds = handle.props.initialSeconds; + + return () =>
    Time remaining: {seconds}s
    ; +} + +// Usage: +``` + +Because `handle.props` is stable, destructuring `let { props } = handle` is safe when helpers need +to read current values later. Destructuring individual prop values is only a snapshot; prefer +`handle.props.name` inside callbacks and render output when values can change. + +## State Rules + +- Keep state in setup scope as plain JavaScript variables. +- Store only what affects rendering. Derive computed values in render. +- Do not mirror input state unless you truly need controlled behavior. +- Do work in event handlers, not in render. Use the handler scope for transient state. + +```tsx +// Derive computed values in render +function TodoList(handle: Handle) { + let todos: Array<{ text: string; completed: boolean }> = []; + + return () => { + let completedCount = todos.filter((t) => t.completed).length; + return
    Completed: {completedCount}
    ; + }; +} +``` + +## Handle API + +### `handle.update()` + +Schedules a rerender. Returns a promise that resolves with an `AbortSignal` after the update +completes. Await it when you need the updated DOM before follow-up work: + +```tsx +on("click", async () => { + isPlaying = true; + let signal = await handle.update(); + // DOM is now updated, safe to focus or measure + stopButton.focus(); +}); +``` + +### `handle.queueTask(task)` + +Schedules a task to run after the next update. The task receives an `AbortSignal` that aborts when +the component re-renders or is removed. Use for post-render DOM work, reactive data loading, or +hydration-sensitive setup: + +```tsx +let data = null; +let requestedUrl: string | null = null; + +// Post-render DOM work in an event handler +on("click", () => { + showDetails = true; + handle.update(); + handle.queueTask(() => { + detailsSection.scrollIntoView({ behavior: "smooth" }); + }); +}); + +// Reactive data loading keyed by props.url +return () => { + if (requestedUrl !== handle.props.url) { + let nextUrl = handle.props.url; + requestedUrl = nextUrl; + data = null; + + handle.queueTask(async (signal) => { + let response = await fetch(nextUrl, { signal }); + let json = await response.json(); + if (signal.aborted || requestedUrl !== nextUrl) return; + data = json; + handle.update(); + }); + } + + return
    {data ?? "Loading..."}
    ; +}; +``` + +Avoid creating intermediate state just to trigger `queueTask`. Do the work directly in the handler +or the queued task. + +### `handle.signal` + +An `AbortSignal` aborted when the component disconnects. Use for cleanup: + +```tsx +function Clock(handle: Handle) { + let interval = setInterval(handle.update, 1000); + handle.signal.addEventListener("abort", () => clearInterval(interval)); + + return () => {new Date().toString()}; +} +``` + +### `handle.id` + +Stable identifier per component instance. Useful for `htmlFor`, `aria-owns`, etc.: + +```tsx +function LabeledInput(handle: Handle) { + return () => ( +
    + + +
    + ); +} +``` + +### `handle.frame` and `handle.frames` + +Frame-aware behavior for client entries rendered inside frames: + +- `handle.frame.reload()` — reload the containing frame +- `handle.frame.src` — the URL of the containing frame +- `handle.frames.top` — the root frame (the whole page) +- `handle.frames.top.reload()` — reload the entire page/frame tree +- `handle.frames.get(name)` — look up a named frame; returns `FrameHandle | undefined` + +```tsx +function RefreshButton(handle: Handle) { + return () => ; +} +``` + +### `handle.context` + +Context for ancestor/descendant communication. See the context section below. + +## Context + +Use `handle.context.set()` to provide values and `handle.context.get(Provider)` to consume them. +`set()` does **not** trigger updates — call `handle.update()` if the tree needs to rerender. + +```tsx +function ThemeProvider(handle: Handle<{ children?: RemixNode }, { theme: "light" | "dark" }>) { + let theme: "light" | "dark" = "light"; + handle.context.set({ theme }); + + return () => ( +
    + + {handle.props.children} +
    + ); +} + +function ThemedContent(handle: Handle) { + let { theme } = handle.context.get(ThemeProvider); + return () =>
    Current theme: {theme}
    ; +} +``` + +For granular updates without re-rendering the full subtree, use `TypedEventTarget`: + +```tsx +import { TypedEventTarget, addEventListeners } from "remix/ui"; + +class Theme extends TypedEventTarget<{ change: Event }> { + #value: "light" | "dark" = "light"; + get value() { + return this.#value; + } + setValue(value: "light" | "dark") { + this.#value = value; + this.dispatchEvent(new Event("change")); + } +} + +function ThemeProvider(handle: Handle<{ children?: RemixNode }, Theme>) { + let theme = new Theme(); + handle.context.set(theme); + + return () => ( +
    + + {handle.props.children} +
    + ); +} + +function ThemedContent(handle: Handle) { + let theme = handle.context.get(ThemeProvider); + addEventListeners(theme, handle.signal, { + change() { + handle.update(); + }, + }); + return () =>
    Theme: {theme.value}
    ; +} +``` + +## Global Events + +Use `addEventListeners(target, handle.signal, listeners)` to listen to global targets with +automatic cleanup when the component disconnects: + +```tsx +import { addEventListeners, type Handle } from "remix/ui"; + +function ResizeTracker(handle: Handle) { + let width = window.innerWidth; + + addEventListeners(window, handle.signal, { + resize() { + width = window.innerWidth; + handle.update(); + }, + }); + + return () =>
    {width}
    ; +} +``` diff --git a/.agents/skills/remix/references/create-mixins.md b/.agents/skills/remix/references/create-mixins.md new file mode 100644 index 0000000..cb4f379 --- /dev/null +++ b/.agents/skills/remix/references/create-mixins.md @@ -0,0 +1,158 @@ +# Creating Mixins + +## What This Covers + +How to author your own reusable host-element behavior with `createMixin`. Read this when the task +involves: + +- Combining multiple low-level events or DOM hooks into one semantic mixin +- Dispatching custom DOM events from a host node +- Encapsulating imperative DOM setup that several components share +- Typing custom events on `HTMLElementEventMap` for use with `on(...)` + +For the built-in mixins most code should use, see `mixins-styling-events.md`. + +Use `createMixin` from `remix/ui` to author reusable host-element behavior. + +Most app code should use built-in core mixins (`on`, `css`, `ref`, `link`, `attrs`) and animation +mixins from `remix/ui/animation`. Create custom mixins when combining multiple low-level events +into one semantic event, or when the pattern is reused across components. + +## Core Semantics + +1. A mixin handle is tied to one mounted host node lifecycle. +2. `insert` is the host-node availability point for imperative setup. +3. `remove` is teardown for that same lifecycle. +4. `queueTask` runs post-commit and receives `(node, signal)` for mixins. +5. Mixin render functions should stay pure; side effects belong in `insert`, `remove`, or queued + work. + +```tsx +import { createMixin } from "remix/ui"; + +let myMixin = createMixin((handle) => { + handle.addEventListener("insert", (event) => { + // event.node is the mounted host node + }); + + handle.addEventListener("remove", () => { + // Clean up listeners, timers, observers + }); + + return (props) => { + handle.queueTask((node) => { + // Post-commit work that needs the concrete host node + }); + return ; + }; +}); +``` + +## Patterns + +### Pure prop transform + +```tsx +let withTitle = createMixin((handle) => (title: string, props: { title?: string }) => ( + +)); +``` + +### Lifecycle-managed imperative setup + +```tsx +let withFocus = createMixin((handle) => { + handle.addEventListener("insert", (event) => { + event.node.focus(); + }); + return (props) => ; +}); +``` + +## Custom Event Mixins + +Create event mixins when you combine multiple low-level events into one semantic custom event that +is reused across components. + +1. Namespace custom event names (`myapp:*`) to avoid collisions. +2. Extend `Event` with the data consumers need. +3. Declare the event on `HTMLElementEventMap` for type safety with `on(...)`. +4. Dispatch from the host node inside the mixin. + +```tsx +import { createMixin, on } from "remix/ui"; + +export let dragReleaseType = "myapp:drag-release" as const; + +declare global { + interface HTMLElementEventMap { + [dragReleaseType]: DragReleaseEvent; + } +} + +export class DragReleaseEvent extends Event { + velocityX: number; + velocityY: number; + constructor(init: { velocityX: number; velocityY: number }) { + super(dragReleaseType, { bubbles: true, cancelable: true }); + this.velocityX = init.velocityX; + this.velocityY = init.velocityY; + } +} + +export let dragRelease = createMixin((handle) => { + let node: HTMLElement | undefined; + let tracking = false; + let velocityX = 0; + let velocityY = 0; + let lastX = 0; + let lastY = 0; + let lastT = 0; + + handle.addEventListener("insert", (event) => { + node = event.node; + }); + + return () => ( + { + if (!event.isPrimary) return; + tracking = true; + lastX = event.clientX; + lastY = event.clientY; + lastT = event.timeStamp; + node?.setPointerCapture(event.pointerId); + }), + on("pointermove", (event) => { + if (!tracking) return; + let dt = Math.max(1, event.timeStamp - lastT); + velocityX = (event.clientX - lastX) / dt; + velocityY = (event.clientY - lastY) / dt; + lastX = event.clientX; + lastY = event.clientY; + lastT = event.timeStamp; + }), + on("pointerup", () => { + if (!tracking) return; + tracking = false; + node?.dispatchEvent(new DragReleaseEvent({ velocityX, velocityY })); + }), + ]} + /> + ); +}); +``` + +Consume it: + +```tsx +
    { + console.log("velocity:", event.velocityX, event.velocityY); + }), + ]} +/> +``` diff --git a/.agents/skills/remix/references/data-and-validation.md b/.agents/skills/remix/references/data-and-validation.md new file mode 100644 index 0000000..5eb4510 --- /dev/null +++ b/.agents/skills/remix/references/data-and-validation.md @@ -0,0 +1,363 @@ +# Data Access and Validation + +## What This Covers + +How input becomes a value the app trusts, and how that value reaches storage. Read this when the +task involves: + +- Defining database tables, columns, relations, and migrations +- Querying or mutating persisted data with `Database` +- Parsing and validating user input from forms, query strings, or external payloads +- Choosing between schema-level checks, table validation hooks, and migration-level constraints + +For where validation runs in the request lifecycle, see `routing-and-controllers.md`. For session +or identity-bound writes, see `auth-and-sessions.md`. + +## Table Definitions (`remix/data-table`) + +Define tables with typed columns, relations, and optional validation hooks: + +```typescript +import { belongsTo, column as c, hasMany, table } from "remix/data-table"; +import type { TableRow, TableRowWith } from "remix/data-table"; + +export const books = table({ + name: "books", + columns: { + id: c.integer().primaryKey().autoIncrement(), + slug: c.text().notNull().unique(), + title: c.text().notNull(), + author: c.text().notNull(), + price: c.decimal(10, 2).notNull(), + genre: c.text().notNull(), + in_stock: c.boolean(), + }, +}); + +export const orders = table({ + name: "orders", + columns: { + id: c.integer().primaryKey().autoIncrement(), + user_id: c.integer().notNull().references("users", "id"), + total: c.decimal(10, 2).notNull(), + created_at: c.integer().notNull(), + }, + relations: { + user: belongsTo("users", "user_id"), + items: hasMany("order_items", "order_id"), + }, +}); + +export type Book = TableRow; +export type Order = TableRow; +export type OrderWithItems = TableRowWith; +``` + +### Column types + +| Method | SQL type | +| ----------------------------- | ------------------ | +| `c.integer()` | INTEGER | +| `c.text()` | TEXT | +| `c.boolean()` | BOOLEAN | +| `c.decimal(precision, scale)` | DECIMAL | +| `c.enum([...])` | TEXT (string enum) | +| `c.uuid()` | UUID / TEXT | +| `c.varchar(length)` | VARCHAR | + +Column modifiers: `.primaryKey()`, `.autoIncrement()`, `.notNull()`, `.unique()`, +`.references(table, column, fkName?)`, `.onDelete(action)`, `.default(value)`. + +Composite primary keys go on the table option, not the column: `primaryKey: ['order_id', 'book_id']`. + +### Schema vs migrations + +Column modifiers describe SQL constraints — the source of truth for them is your **migration** +files, where they generate the actual DDL. Runtime `table(...)` definitions in `app/data/schema.ts` +can use the same modifiers, or they can stay minimal (`c.integer()`, `c.text()`, ...) since the +runtime only needs the column shape and validation hooks. Two valid patterns: + +- **Modifiers in both** — schema and migrations stay in sync visually; useful when you want + schema-level docs. +- **Bare columns in schema, full modifiers in migrations** — schema describes what the app reads + and writes; migrations own the DDL and constraints. + +Pick one and apply it consistently across the app. + +### Table validation hooks + +Tables can define `validate`, `beforeWrite`, and `afterRead` hooks: + +```typescript +export const books = table({ + name: "books", + columns: { + /* ... */ + }, + validate({ operation, value }) { + let issues = []; + if (operation === "create" && !value.slug) { + issues.push({ message: "Slug is required.", path: ["slug"] }); + } + return issues.length > 0 ? { issues } : { value }; + }, +}); +``` + +## Database Setup + +Create a database with an adapter and expose it via middleware: + +```typescript +import BetterSqlite3 from "better-sqlite3"; +import { createDatabase, Database } from "remix/data-table"; +import { createSqliteDatabaseAdapter } from "remix/data-table-sqlite"; + +let sqlite = new BetterSqlite3("./db/app.db"); +sqlite.pragma("foreign_keys = ON"); +let adapter = createSqliteDatabaseAdapter(sqlite); +export let db = createDatabase(adapter); +``` + +`createSqliteDatabaseAdapter` accepts synchronous SQLite clients with a shared `prepare`/`exec` +surface, including Node's `node:sqlite`, Bun's `bun:sqlite`, and compatible clients. Use whichever +client fits the runtime instead of assuming `better-sqlite3` is required. + +### Database middleware + +```typescript +import type { Middleware } from "remix/fetch-router"; +import { Database } from "remix/data-table"; + +export function loadDatabase(): Middleware { + return async (context, next) => { + context.set(Database, db); + return next(); + }; +} +``` + +### Querying + +```typescript +let db = get(Database); + +// Find by primary key +let book = await db.find(books, id); + +// Find one by condition +let user = await db.findOne(users, { where: { email } }); + +// Find many with ordering +let allBooks = await db.findMany(books, { orderBy: ["id", "asc"] }); + +// Count +let total = await db.count(orders, { where: { user_id: userId } }); + +// Query builder +let genres = await db.query(books).select("genre").distinct().orderBy("genre", "asc").all(); + +// Create +let newBook = await db.create(books, { slug: "new-book", title: "New Book" /* ... */ }); + +// Update +await db.update(books, bookId, { title: "Updated Title" }); + +// Delete +await db.delete(books, bookId); +``` + +### Operators + +```typescript +import { inList } from "remix/data-table/operators"; + +let featured = await db.findMany(books, { + where: inList("slug", ["book-a", "book-b", "book-c"]), +}); +``` + +## Migrations + +### Writing migrations + +```typescript +import { column as c, createMigration } from "remix/data-table/migrations"; +import { table } from "remix/data-table"; + +export default createMigration({ + async up({ schema }) { + let users = table({ + name: "users", + columns: { + id: c.integer().primaryKey().autoIncrement(), + email: c.text().notNull().unique(), + name: c.text().notNull(), + }, + }); + await schema.createTable(users); + await schema.createIndex(users, "email", { name: "users_email_idx", unique: true }); + }, + + async down({ schema }) { + await schema.dropTable("users"); + }, +}); +``` + +Migrations can also import table definitions from the app schema to avoid duplication: + +```typescript +import { createMigration } from "remix/data-table/migrations"; +import { users, authAccounts } from "../../app/data/schema.ts"; + +export default createMigration({ + async up({ schema }) { + await schema.createTable(users); + await schema.createTable(authAccounts); + }, +}); +``` + +### Running migrations + +```typescript +import { createMigrationRunner } from "remix/data-table/migrations"; +import { loadMigrations } from "remix/data-table/migrations/node"; + +let migrations = await loadMigrations("./db/migrations"); +let runner = createMigrationRunner(adapter, migrations); +await runner.up(); +``` + +### Migration file naming + +Name migration files with a timestamp prefix: `20260228090000_create_users.ts`. Place them in +`db/migrations/`. + +## Input Validation (`remix/data-schema`) + +Use `data-schema` to validate user input (forms, query params, API payloads). This is separate from +table-level `validate` hooks which run at persistence. + +### Schema builders + +```typescript +import * as s from "remix/data-schema"; +import { email, minLength, maxLength } from "remix/data-schema/checks"; + +let userSchema = s.object({ + name: s.string().pipe(minLength(1)), + email: s.string().pipe(email()), + age: s.optional(s.number()), +}); + +let result = s.parse(userSchema, data); +``` + +### FormData validation + +Use `remix/data-schema/form-data` to validate `FormData` directly: + +```typescript +import * as s from "remix/data-schema"; +import * as f from "remix/data-schema/form-data"; +import { email, minLength } from "remix/data-schema/checks"; + +let signupSchema = f.object({ + name: f.field(s.string().pipe(minLength(1))), + email: f.field(s.string().pipe(email())), + password: f.field(s.string().pipe(minLength(8))), +}); + +// In a controller action: +let formData = get(FormData); +let { name, email, password } = s.parse(signupSchema, formData); +``` + +### Reading FormData: middleware vs `request.formData()` + +There are two ways to get a `FormData` value inside an action. + +The recommended way: register `formData()` middleware in the root stack and read with +`get(FormData)`. The body is parsed once per request, and the typed `FormData` value flows through +the context system. This also lets `methodOverride()` and CSRF middleware work uniformly. + +```typescript +import { formData } from "remix/form-data-middleware"; + +let router = createRouter({ + middleware: [, /* ... */ formData() /* ... */], +}); + +// In an action: +let parsed = s.parseSafe(signupSchema, get(FormData)); +``` + +The fallback: `await request.formData()` directly. This works without middleware and is fine for +small one-off cases, but it bypasses the context system, runs once per call site, and doesn't +compose with middleware that depends on parsed form fields. + +### Safe parsing + +`s.parse` throws on invalid input. `s.parseSafe` returns a tagged result and is usually what an +action wants, since validation failure is an expected outcome (re-render the form with errors) +rather than an exception: + +```typescript +let result = s.parseSafe(signupSchema, get(FormData)) +if (!result.success) { + return render(, { status: 400 }) +} +let { name, email, password } = result.value +``` + +Returning a `Response` for validation failures keeps the route contract honest: the same action +returns 200 on success, 400 with errors on bad input, no out-of-band exception flow. + +### Transforming validated output + +Use `.transform(...)` when a schema should validate one shape but return another value or output +type. Transforms run after validation and compose with `.pipe(...)` and `.refine(...)`: + +```typescript +import * as coerce from "remix/data-schema/coerce"; + +let slugSchema = s + .string() + .pipe(minLength(1)) + .transform((value) => value.trim().toLowerCase().replace(/\s+/g, "-")); + +let pageSchema = f.object({ + page: f.field(s.defaulted(coerce.coerceNumber(), 1).refine(Number.isInteger)), + q: f.field(s.defaulted(s.string(), "").transform((value) => value.trim())), +}); + +let { page, q } = s.parse(pageSchema, formData); +``` + +### Anti-patterns + +Avoid these shapes when reading and validating input: + +- **Raw `formData.get('name')` plus an `if (typeof name !== 'string')` guard**, then a thrown + custom error. This reinvents what `data-schema` already does, loses the typed result, and + pushes error translation into a `try/catch` instead of a return value. +- **Letting route-local domain errors leak out of the action.** Translate expected outcomes (bad + input, missing record, duplicate entry) into the `Response` the route means to return instead of + throwing a custom `Error` subclass with a `status` field and catching it later. +- **Trusting `params`, query strings, or external payloads without a schema.** Anything that + crosses a trust boundary should be parsed before it reaches business logic. + +### Common patterns + +```typescript +// Optional with default +let limitSchema = f.field(s.defaulted(s.string(), "10")); + +// Union types +let methodSchema = s.union([s.literal("credentials"), s.literal("google"), s.literal("github")]); + +// Refinements +let idSchema = s.number().refine(Number.isInteger, "Expected an integer"); +``` diff --git a/.agents/skills/remix/references/hydration-frames-navigation.md b/.agents/skills/remix/references/hydration-frames-navigation.md new file mode 100644 index 0000000..0d2d1b0 --- /dev/null +++ b/.agents/skills/remix/references/hydration-frames-navigation.md @@ -0,0 +1,297 @@ +# Hydration, Frames, and Navigation + +## What This Covers + +How server-rendered UI becomes interactive in the browser, and how the page updates without a full +navigation. Read this when the task involves: + +- Marking a component for client-side hydration with `clientEntry` +- Booting the client runtime with `run` +- Streaming server content into a region of the page with `` and reloading those regions +- Triggering Navigation API transitions with `navigate(...)` or `link(...)` +- Server rendering with `renderToStream` or `renderToString` +- Managing the document `` + +For component-local state and updates, see `component-model.md`. For host-element behavior and +events, see `mixins-styling-events.md`. + +## Server First, Then Hydrate + +Make the server route correct before adding `clientEntry(...)`. A POST should already do the right +thing on its own — return HTML, a redirect, or an error response — and a GET should already render +the page the user expects. `clientEntry` exists to layer interactivity on top of UI that already +works without it. + +When server state changes after a mutation, prefer reloading a `` when the UI region already +maps cleanly to a server-rendered route. Frames re-fetch the same route, so the rendering logic +stays in one place and the client does not need a parallel "state" API. + +```tsx +on("submit", async (event, signal) => { + event.preventDefault(); + await fetch(routes.cart.add.href(), { + method: "POST", + body: new FormData(event.currentTarget), + signal, + }); + if (signal.aborted) return; + await handle.frames.get("cart-summary")?.reload(); +}); +``` + +Use polling or a small JSON state endpoint when the data changes outside this page, or when a tiny +shared widget would be heavier to model as a frame. Pick the lightest sync mechanism that preserves +clear ownership of rendering logic. + +## Client Entries + +Use `clientEntry` to mark a component for client-side hydration. In source-served apps, prefer the +source module's `import.meta.url` as the entry ID and let server rendering map it to the public +asset URL: + +```tsx +import { clientEntry, on, type Handle } from "remix/ui"; + +export const Counter = clientEntry( + import.meta.url, + function Counter(handle: Handle<{ initialCount: number; label: string }>) { + let count = handle.props.initialCount; + + return () => ( +
    + + {handle.props.label}: {count} + + +
    + ); + }, +); +``` + +On the server, provide `resolveClientEntry` to `renderToStream(...)` so source file URLs become +browser-loadable asset URLs. Keep this resolution in the render helper so component modules do not +hard-code deployment-specific asset paths: + +```tsx +let stream = renderToStream(, { + async resolveClientEntry(entryId, component) { + let exportName = entryId.split("#")[1] || component.name; + if (!exportName) { + throw new Error(`Unable to resolve client entry export for ${entryId}`); + } + + return { + href: await assetServer.getHref(entryId), + exportName, + }; + }, +}); +``` + +If the module export name differs from the component function name, include `#ExportName` in the +entry ID or return the exact export name from `resolveClientEntry`. A render helper that only +supports source-owned entries can also fail fast when `entryId` is not a `file://` URL. + +On the server, `clientEntry` components render like any other component. The server wraps their +output in comment markers and serializes props into a ` + + + ); +} diff --git a/app/ui/layout.tsx b/app/ui/layout.tsx new file mode 100644 index 0000000..424ddd1 --- /dev/null +++ b/app/ui/layout.tsx @@ -0,0 +1,23 @@ +import type { RemixNode } from "remix/ui"; + +import { routes } from "../routes.ts"; +import { Document } from "./document.tsx"; + +export interface LayoutProps { + children?: RemixNode; + title?: string; +} + +export function Layout() { + return ({ title, children }: LayoutProps) => ( + +
    + +
    +
    {children}
    +
    + ); +} diff --git a/app/utils/render.tsx b/app/utils/render.tsx new file mode 100644 index 0000000..29d8bb2 --- /dev/null +++ b/app/utils/render.tsx @@ -0,0 +1,26 @@ +import type { RemixNode } from "remix/ui"; +import { renderToStream } from "remix/ui/server"; + +import { router } from "../router.ts"; + +export function render(node: RemixNode, request: Request, init?: ResponseInit) { + let stream = renderToStream(node, { + frameSrc: request.url, + async resolveFrame(src, target) { + let headers = new Headers({ accept: "text/html" }); + let cookie = request.headers.get("cookie"); + if (cookie) headers.set("cookie", cookie); + if (target) headers.set("x-remix-target", target); + + let response = await router.fetch(new Request(new URL(src, request.url), { headers })); + return response.body ?? response.text(); + }, + }); + + let headers = new Headers(init?.headers); + if (!headers.has("Content-Type")) { + headers.set("Content-Type", "text/html; charset=utf-8"); + } + + return new Response(stream, { ...init, headers }); +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..6c61c07 --- /dev/null +++ b/package.json @@ -0,0 +1,23 @@ +{ + "name": "ubmit-dev", + "private": true, + "type": "module", + "scripts": { + "dev": "tsx watch server.ts", + "start": "tsx server.ts", + "test": "tsx --test", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "remix": "^3.0.0-beta.0", + "tsx": "latest" + }, + "devDependencies": { + "@types/node": "latest", + "typescript": "latest" + }, + "engines": { + "node": ">=24.3.0" + }, + "packageManager": "pnpm@10.33.2" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..99e914c --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,1987 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + remix: + specifier: ^3.0.0-beta.0 + version: 3.0.0-beta.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + tsx: + specifier: latest + version: 4.21.0 + devDependencies: + '@types/node': + specifier: latest + version: 25.6.0 + typescript: + specifier: latest + version: 6.0.3 + +packages: + + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.7': + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.7': + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.7': + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.7': + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.7': + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.7': + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.7': + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.7': + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.7': + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.7': + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.7': + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.7': + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.7': + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.7': + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + + '@oxc-minify/binding-android-arm-eabi@0.121.0': + resolution: {integrity: sha512-RcQXLj3JLLVm41n80/6+7OUion2PSQWOH5EUvlD9kCWSF1fWLXCNX1A6t/+nFNjeyaCXZ3YbIWwCTiGXhxxHEw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-minify/binding-android-arm64@0.121.0': + resolution: {integrity: sha512-VnFvB9DgADWpgwQb6LmeRv302xwdgpD/45WlQNWI380YUgWVXmhoZoNOgnaCSbuFEz+ElQDb/iE2U2LADkfu8w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-minify/binding-darwin-arm64@0.121.0': + resolution: {integrity: sha512-0EKcroW5oMgJ27DOUWD724nQmLhV1PLArkXW5F4t7cUoRZy81OlFMqS97AOWIrQPlNPaC/1MYfCtIoZIW8OElQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-minify/binding-darwin-x64@0.121.0': + resolution: {integrity: sha512-DvsiLCZQ7KvufItkGuU45ovM4paB99M3/J5ZqpzjSnHpyFmcWUx19gwG9RTDOmHHA+7TPCq3b02aQoCiX6xiaA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-minify/binding-freebsd-x64@0.121.0': + resolution: {integrity: sha512-b+ngbloTvuei3HxfOz6nCwWkIl8dhgp42W1TREBUVRRe80iKe4bclrpZHxacFQYmVZ/bDjIV7ePPRSCSKM93RA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-minify/binding-linux-arm-gnueabihf@0.121.0': + resolution: {integrity: sha512-Vj1xJ46zDTJlnF4UQgAVqX4xb2uv6hpmtHkypCMiaNbuop7bJ+VbqSfs7SCKvg23fygK530XTUxr+A7YDbkEzQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-minify/binding-linux-arm-musleabihf@0.121.0': + resolution: {integrity: sha512-lVhZ/y6Piqi+TlM+VB3UdRWWtqm7ks2He5VrYmZfO0a8A/wBE7KTpIK+RoUFGW3ii3wr4Hc8AEWZNEjU4fs38Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-minify/binding-linux-arm64-gnu@0.121.0': + resolution: {integrity: sha512-FMEtjwWKVRehcs4ebsmM8nj7F7/kVH54dcFZodNFsk1iUsVdqPrOWhzanMcU55AYrGmXHeKFx7PlrimDOz2ZdA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-minify/binding-linux-arm64-musl@0.121.0': + resolution: {integrity: sha512-ZFCqQWU7TP4oCiu9q0q9xg1wg78Et4bRSCv9LzMAn/N9zJezPa+u3kVqKXkQnvAgrA7fBo9VPSaEx0XMpXsPhA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-minify/binding-linux-ppc64-gnu@0.121.0': + resolution: {integrity: sha512-WSV2TNT7a6wfwfWHHvpaOoHVKwB0tKyJpMjj3P401k8tFEZpH/xNqDNofdvXQznKqJ3nyYxIC4llvNGCXUtTzQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-minify/binding-linux-riscv64-gnu@0.121.0': + resolution: {integrity: sha512-hTToDA4mEd4P4HdwnmULtyyWP6CsNwuxdiToGZ5LjQvznpF5acRi9KEAqF8zmNXQ9r1RbrbGbYHATfRWogEbfw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-minify/binding-linux-riscv64-musl@0.121.0': + resolution: {integrity: sha512-zhgxjY8IkVZ2MpuElCiK37DjEwX2uk9r7fawRh0J4yjkYWVQR5kmmMEo5oMPbBMtri61vnSiqLZmD25cTFP1vw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-minify/binding-linux-s390x-gnu@0.121.0': + resolution: {integrity: sha512-YruvsabXqUdhtfe9Qjv2F1tb0u1PqqNBnf0jFhC8K4qJLctgveH/2rBYE8WAqdahxfdR59ByFZd0u6dqwDCKPg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-minify/binding-linux-x64-gnu@0.121.0': + resolution: {integrity: sha512-OOUpoGKeGN6D9bP9dr2lczK3SgOFeMLFiJuldPxOcY21VAxlemEiTPFTPXp4VWzw65sy3bCx0k8R6wyE8TA3EQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-minify/binding-linux-x64-musl@0.121.0': + resolution: {integrity: sha512-ixdrFcKUdRXsavlAe+ttKQHtR6nUyXSrCjLTkB4eiy8U/5f5A1BQXAKDdw9rUNoPkLc4vrKohG8frI0pjg7S6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-minify/binding-openharmony-arm64@0.121.0': + resolution: {integrity: sha512-P52luYhm78qAPjACwHEMWJQag4hgX3InczjXazLqSWJPf5ismBWDmrSiccVWi2B6nPGSuYd4YQVR3j0h2IELyA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-minify/binding-wasm32-wasi@0.121.0': + resolution: {integrity: sha512-1XDHPrAJa6W8dGqaDnlt+0k5In5JzGE0EOI87cJnOkSGsUAb1Sk8mKNhUe3/PuGiBDDat8eZ0wlq/VcUeOmsoA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-minify/binding-win32-arm64-msvc@0.121.0': + resolution: {integrity: sha512-FvUEX7eTfSh1OBB+/AGSWhkNX/8jPFGM2jvMwrrAZ5vj8kTtnETNTkJdkkPMUEiIEVupxoARKc5UFU2/k+3THw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-minify/binding-win32-ia32-msvc@0.121.0': + resolution: {integrity: sha512-ZNcMq+yy9QBgekrBP/NxTD4RW1sZKHOWO+aH5SgqRvfU035Bldvns7zHC8VdaY4Sz3PcaChfmSeapfUoUGqT5w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-minify/binding-win32-x64-msvc@0.121.0': + resolution: {integrity: sha512-/0qRGvYnBVhzwSXHcJ6sF+2rb2QpotbJeAr1wmADgq/hm7JjdRukktngmwXQuIILmC+UELYLoVpa0PTBoEqwrg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxc-parser/binding-android-arm-eabi@0.121.0': + resolution: {integrity: sha512-n07FQcySwOlzap424/PLMtOkbS7xOu8nsJduKL8P3COGHKgKoDYXwoAHCbChfgFpHnviehrLWIPX0lKGtbEk/A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-parser/binding-android-arm64@0.121.0': + resolution: {integrity: sha512-/Dd1xIXboYAicw+twT2utxPD7bL8qh7d3ej0qvaYIMj3/EgIrGR+tSnjCUkiCT6g6uTC0neSS4JY8LxhdSU/sA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-parser/binding-darwin-arm64@0.121.0': + resolution: {integrity: sha512-A0jNEvv7QMtCO1yk205t3DWU9sWUjQ2KNF0hSVO5W9R9r/R1BIvzG01UQAfmtC0dQm7sCrs5puixurKSfr2bRQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.121.0': + resolution: {integrity: sha512-SsHzipdxTKUs3I9EOAPmnIimEeJOemqRlRDOp9LIj+96wtxZejF51gNibmoGq8KoqbT1ssAI5po/E3J+vEtXGA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-freebsd-x64@0.121.0': + resolution: {integrity: sha512-v1APOTkCp+RWOIDAHRoaeW/UoaHF15a60E8eUL6kUQXh+i4K7PBwq2Wi7jm8p0ymID5/m/oC1w3W31Z/+r7HQw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-parser/binding-linux-arm-gnueabihf@0.121.0': + resolution: {integrity: sha512-PmqPQuqHZyFVWA4ycr0eu4VnTMmq9laOHZd+8R359w6kzuNZPvmmunmNJ8ybkm769A0nCoVp3TJ6dUz7B3FYIQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-musleabihf@0.121.0': + resolution: {integrity: sha512-vF24htj+MOH+Q7y9A8NuC6pUZu8t/C2Fr/kDOi2OcNf28oogr2xadBPXAbml802E8wRAVfbta6YLDQTearz+jw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm64-gnu@0.121.0': + resolution: {integrity: sha512-wjH8cIG2Lu/3d64iZpbYr73hREMgKAfu7fqpXjgM2S16y2zhTfDIp8EQjxO8vlDtKP5Rc7waZW72lh8nZtWrpA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-arm64-musl@0.121.0': + resolution: {integrity: sha512-qT663J/W8yQFw3dtscbEi9LKJevr20V7uWs2MPGTnvNZ3rm8anhhE16gXGpxDOHeg9raySaSHKhd4IGa3YZvuw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-ppc64-gnu@0.121.0': + resolution: {integrity: sha512-mYNe4NhVvDBbPkAP8JaVS8lC1dsoJZWH5WCjpw5E+sjhk1R08wt3NnXYUzum7tIiWPfgQxbCMcoxgeemFASbRw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-gnu@0.121.0': + resolution: {integrity: sha512-+QiFoGxhAbaI/amqX567784cDyyuZIpinBrJNxUzb+/L2aBRX67mN6Jv40pqduHf15yYByI+K5gUEygCuv0z9w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-musl@0.121.0': + resolution: {integrity: sha512-9ykEgyTa5JD/Uhv2sttbKnCfl2PieUfOjyxJC/oDL2UO0qtXOtjPLl7H8Kaj5G7p3hIvFgu3YWvAxvE0sqY+hQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-s390x-gnu@0.121.0': + resolution: {integrity: sha512-DB1EW5VHZdc1lIRjOI3bW/wV6R6y0xlfvdVrqj6kKi7Ayu2U3UqUBdq9KviVkcUGd5Oq+dROqvUEEFRXGAM7EQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-gnu@0.121.0': + resolution: {integrity: sha512-s4lfobX9p4kPTclvMiH3gcQUd88VlnkMTF6n2MTMDAyX5FPNRhhRSFZK05Ykhf8Zy5NibV4PbGR6DnK7FGNN6A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-musl@0.121.0': + resolution: {integrity: sha512-P9KlyTpuBuMi3NRGpJO8MicuGZfOoqZVRP1WjOecwx8yk4L/+mrCRNc5egSi0byhuReblBF2oVoDSMgV9Bj4Hw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-openharmony-arm64@0.121.0': + resolution: {integrity: sha512-R+4jrWOfF2OAPPhj3Eb3U5CaKNAH9/btMveMULIrcNW/hjfysFQlF8wE0GaVBr81dWz8JLgQlsxwctoL78JwXw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-parser/binding-wasm32-wasi@0.121.0': + resolution: {integrity: sha512-5TFISkPTymKvsmIlKasPVTPuWxzCcrT8pM+p77+mtQbIZDd1UC8zww4CJcRI46kolmgrEX6QpKO8AvWMVZ+ifw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-parser/binding-win32-arm64-msvc@0.121.0': + resolution: {integrity: sha512-V0pxh4mql4XTt3aiEtRNUeBAUFOw5jzZNxPABLaOKAWrVzSr9+XUaB095lY7jqMf5t8vkfh8NManGB28zanYKw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-ia32-msvc@0.121.0': + resolution: {integrity: sha512-4Ob1qvYMPnlF2N9rdmKdkQFdrq16QVcQwBsO8yiPZXof0fHKFF+LmQV501XFbi7lHyrKm8rlJRfQ/M8bZZPVLw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.121.0': + resolution: {integrity: sha512-BOp1KCzdboB1tPqoCPXgntgFs0jjeSyOXHzgxVFR7B/qfr3F8r4YDacHkTOUNXtDgM8YwKnkf3rE5gwALYX7NA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxc-project/runtime@0.121.0': + resolution: {integrity: sha512-p0bQukD8OEHxzY4T9OlANBbEFGnOnjo1CYi50HES7OD36UO2yPh6T+uOJKLtlg06eclxroipRCpQGMpeH8EJ/g==} + engines: {node: ^20.19.0 || >=22.12.0} + + '@oxc-project/types@0.121.0': + resolution: {integrity: sha512-CGtOARQb9tyv7ECgdAlFxi0Fv7lmzvmlm2rpD/RdijOO9rfk/JvB1CjT8EnoD+tjna/IYgKKw3IV7objRb+aYw==} + + '@oxc-resolver/binding-android-arm-eabi@11.19.1': + resolution: {integrity: sha512-aUs47y+xyXHUKlbhqHUjBABjvycq6YSD7bpxSW7vplUmdzAlJ93yXY6ZR0c1o1x5A/QKbENCvs3+NlY8IpIVzg==} + cpu: [arm] + os: [android] + + '@oxc-resolver/binding-android-arm64@11.19.1': + resolution: {integrity: sha512-oolbkRX+m7Pq2LNjr/kKgYeC7bRDMVTWPgxBGMjSpZi/+UskVo4jsMU3MLheZV55jL6c3rNelPl4oD60ggYmqA==} + cpu: [arm64] + os: [android] + + '@oxc-resolver/binding-darwin-arm64@11.19.1': + resolution: {integrity: sha512-nUC6d2i3R5B12sUW4O646qD5cnMXf2oBGPLIIeaRfU9doJRORAbE2SGv4eW6rMqhD+G7nf2Y8TTJTLiiO3Q/dQ==} + cpu: [arm64] + os: [darwin] + + '@oxc-resolver/binding-darwin-x64@11.19.1': + resolution: {integrity: sha512-cV50vE5+uAgNcFa3QY1JOeKDSkM/9ReIcc/9wn4TavhW/itkDGrXhw9jaKnkQnGbjJ198Yh5nbX/Gr2mr4Z5jQ==} + cpu: [x64] + os: [darwin] + + '@oxc-resolver/binding-freebsd-x64@11.19.1': + resolution: {integrity: sha512-xZOQiYGFxtk48PBKff+Zwoym7ScPAIVp4c14lfLxizO2LTTTJe5sx9vQNGrBymrf/vatSPNMD4FgsaaRigPkqw==} + cpu: [x64] + os: [freebsd] + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.19.1': + resolution: {integrity: sha512-lXZYWAC6kaGe/ky2su94e9jN9t6M0/6c+GrSlCqL//XO1cxi5lpAhnJYdyrKfm0ZEr/c7RNyAx3P7FSBcBd5+A==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm-musleabihf@11.19.1': + resolution: {integrity: sha512-veG1kKsuK5+t2IsO9q0DErYVSw2azvCVvWHnfTOS73WE0STdLLB7Q1bB9WR+yHPQM76ASkFyRbogWo1GR1+WbQ==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-gnu@11.19.1': + resolution: {integrity: sha512-heV2+jmXyYnUrpUXSPugqWDRpnsQcDm2AX4wzTuvgdlZfoNYO0O3W2AVpJYaDn9AG4JdM6Kxom8+foE7/BcSig==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-arm64-musl@11.19.1': + resolution: {integrity: sha512-jvo2Pjs1c9KPxMuMPIeQsgu0mOJF9rEb3y3TdpsrqwxRM+AN6/nDDwv45n5ZrUnQMsdBy5gIabioMKnQfWo9ew==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-ppc64-gnu@11.19.1': + resolution: {integrity: sha512-vLmdNxWCdN7Uo5suays6A/+ywBby2PWBBPXctWPg5V0+eVuzsJxgAn6MMB4mPlshskYbppjpN2Zg83ArHze9gQ==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-riscv64-gnu@11.19.1': + resolution: {integrity: sha512-/b+WgR+VTSBxzgOhDO7TlMXC1ufPIMR6Vj1zN+/x+MnyXGW7prTLzU9eW85Aj7Th7CCEG9ArCbTeqxCzFWdg2w==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-riscv64-musl@11.19.1': + resolution: {integrity: sha512-YlRdeWb9j42p29ROh+h4eg/OQ3dTJlpHSa+84pUM9+p6i3djtPz1q55yLJhgW9XfDch7FN1pQ/Vd6YP+xfRIuw==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-s390x-gnu@11.19.1': + resolution: {integrity: sha512-EDpafVOQWF8/MJynsjOGFThcqhRHy417sRyLfQmeiamJ8qVhSKAn2Dn2VVKUGCjVB9C46VGjhNo7nOPUi1x6uA==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-x64-gnu@11.19.1': + resolution: {integrity: sha512-NxjZe+rqWhr+RT8/Ik+5ptA3oz7tUw361Wa5RWQXKnfqwSSHdHyrw6IdcTfYuml9dM856AlKWZIUXDmA9kkiBQ==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-x64-musl@11.19.1': + resolution: {integrity: sha512-cM/hQwsO3ReJg5kR+SpI69DMfvNCp+A/eVR4b4YClE5bVZwz8rh2Nh05InhwI5HR/9cArbEkzMjcKgTHS6UaNw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-openharmony-arm64@11.19.1': + resolution: {integrity: sha512-QF080IowFB0+9Rh6RcD19bdgh49BpQHUW5TajG1qvWHvmrQznTZZjYlgE2ltLXyKY+qs4F/v5xuX1XS7Is+3qA==} + cpu: [arm64] + os: [openharmony] + + '@oxc-resolver/binding-wasm32-wasi@11.19.1': + resolution: {integrity: sha512-w8UCKhX826cP/ZLokXDS6+milN8y4X7zidsAttEdWlVoamTNf6lhBJldaWr3ukTDiye7s4HRcuPEPOXNC432Vg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-resolver/binding-win32-arm64-msvc@11.19.1': + resolution: {integrity: sha512-nJ4AsUVZrVKwnU/QRdzPCCrO0TrabBqgJ8pJhXITdZGYOV28TIYystV1VFLbQ7DtAcaBHpocT5/ZJnF78YJPtQ==} + cpu: [arm64] + os: [win32] + + '@oxc-resolver/binding-win32-ia32-msvc@11.19.1': + resolution: {integrity: sha512-EW+ND5q2Tl+a3pH81l1QbfgbF3HmqgwLfDfVithRFheac8OTcnbXt/JxqD2GbDkb7xYEqy1zNaVFRr3oeG8npA==} + cpu: [ia32] + os: [win32] + + '@oxc-resolver/binding-win32-x64-msvc@11.19.1': + resolution: {integrity: sha512-6hIU3RQu45B+VNTY4Ru8ppFwjVS/S5qwYyGhBotmjxfEKk41I2DlGtRfGJndZ5+6lneE2pwloqunlOyZuX/XAw==} + cpu: [x64] + os: [win32] + + '@oxc-transform/binding-android-arm-eabi@0.121.0': + resolution: {integrity: sha512-NNYkyDjTID7oVW0LUZ04kDShtyY6hgsTakd2u3mz/hN765JviCuyBIi5qT9dDOmgX0t1y74nuS7FwiLgaCcZ4g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-transform/binding-android-arm64@0.121.0': + resolution: {integrity: sha512-zO5az3E5JUmF/k7xOOL9TCipqaVn/d8QHK5T8/bcw6qTWAPVFJjQRK8+5MSmp2ItO2Dmxed5DdWMSxG2NNfA5w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-transform/binding-darwin-arm64@0.121.0': + resolution: {integrity: sha512-3vcZdmL8OAdYzXfPDeXrO9KagTgUbXPSFXotoww9N0jVNbdCvSpKJHia1aqdltyevrCWF4KqJyOeeUfGcw7AJw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-transform/binding-darwin-x64@0.121.0': + resolution: {integrity: sha512-R63ZXF4Fuer3FEZYX9UmzIKAENSEYQZTglTkzWoyNPyuHDhSfyJIK+X+wgy2Wc1lTad1XquCUq5SDuRSd37fcQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-transform/binding-freebsd-x64@0.121.0': + resolution: {integrity: sha512-0krk8L6iOJ6fobs3f9XHo4RSgEas0yLq9/xGZMuwxFs+rI/rnpYPX+1LLSmreHqeZM77a7r+UF12WjwI1odVUA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-transform/binding-linux-arm-gnueabihf@0.121.0': + resolution: {integrity: sha512-cNkTaw77UaNiGOCIv2R1kHZ3OkTVlr/059agLCUaeQmZGl76Ad7DrDcDyhC0Iugw0jEdWZ9zeUS5VLmzblnTXQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-transform/binding-linux-arm-musleabihf@0.121.0': + resolution: {integrity: sha512-eDwTIN0UUCQePgFR41doxorzsxoMoUTbXo6bEbvdFH7P4ZoaUXgHYN10Qjd9K6k0x/bBnU6oC4YPSWYKvQDr9Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-transform/binding-linux-arm64-gnu@0.121.0': + resolution: {integrity: sha512-UthSp+L23xeV0lIVloiRDU1d3aOvq0KRif3s6vszeSGnWf69+EVcZcondqLuX9optUhKV0/L8xwe2wLr9WkaDA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-transform/binding-linux-arm64-musl@0.121.0': + resolution: {integrity: sha512-J5vKUF8Jml1m9Fl48fKp2/wPl8LhGdjJWZ3PrrT+S16SbW7yEKixq5upzO2arhrky5elRYMXWwfi60ex1tBi6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-transform/binding-linux-ppc64-gnu@0.121.0': + resolution: {integrity: sha512-ya+/TL/YH/VcfWeRs95pMIgEj1eQgKg3kR/9AkQgSi8i9jIDEXrgrcQ8cwRYSZ3THlT6cxe3KGJa6vwcHG6JEg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-transform/binding-linux-riscv64-gnu@0.121.0': + resolution: {integrity: sha512-XhUBS/6bxL3maLMvkyY5jM23jFCORl+noYc7KkMydpb0Ot08XSu+8c2o7QpGVHWf85eTH/1Tx0aOTrcWek7EAw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-transform/binding-linux-riscv64-musl@0.121.0': + resolution: {integrity: sha512-kAcZZrU2Wxopcpt38D1u5OeLUwV78EXyOu3VfFNkP/vrMiKB4Tbca8ZxBq+XTkpijuKE4DdCQaLZylsFj7L00w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-transform/binding-linux-s390x-gnu@0.121.0': + resolution: {integrity: sha512-jHyHS+NwPAlUEuY6BzFBDoT4LfSBEW/Ne2FeMzdK8LXOvgHFrJiBf6x8FgekatrTGrDpy1hLiACNnPA81Hs2pQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-transform/binding-linux-x64-gnu@0.121.0': + resolution: {integrity: sha512-KedV2jkFxeMvUqfh6SgXjCnO5SBZ+SorTUxSBeql7zp59ONZgAcehWAqDX+YWsK8wEpt23Q8ydC/0d6ebJIAzQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-transform/binding-linux-x64-musl@0.121.0': + resolution: {integrity: sha512-jFAZwvgjsswiHET2xxxNvxhKCI74yVmewl0F00i3vzt9C088ZVaUvvWlqDS1GRvD4ORBmpJWOYkHdscpIJijEA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-transform/binding-openharmony-arm64@0.121.0': + resolution: {integrity: sha512-xn9nxaq31f19PUyGh1xKMOSs8MVPImeaESWNOHtAIznckE+qa5/oHtYALzF3z8uvy1EC/eZODWcHrsYOVNaWug==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-transform/binding-wasm32-wasi@0.121.0': + resolution: {integrity: sha512-7lj6FBMX8zLfTqIY4YHHTE/b6oyCzZaUwqi2n9KX4FkgjtBpfmq5KSUgi/I+YiE7JJHu1g8Bd3uWJq1lbehL8Q==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-transform/binding-win32-arm64-msvc@0.121.0': + resolution: {integrity: sha512-+ve3UajNq2ldcCEEmpMVn7Ic3v/qCykPTSx3lZfe0iCW6tisIWvkYiXpf6B5dvwSY7SDyrdt9EyPMS75b41iPA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-transform/binding-win32-ia32-msvc@0.121.0': + resolution: {integrity: sha512-9ZUHa4bXWlPRLzbjYsU3VBSvqwSVHAknQlN+nUO1DVu6j958Ui9ux0I9pZHwxb07I26VMdDhd7AjJyz1ZtZlkg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-transform/binding-win32-x64-msvc@0.121.0': + resolution: {integrity: sha512-vV/rzJsmJeeXI1q/xuy93PnoL/IYMwCCyYMX9MmIgMx2a4Lu3vIjUNBLJx1R5CqP/NnvAelsuz05sKlO017FmQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@remix-run/assert@0.2.0': + resolution: {integrity: sha512-SNfcxPQstoIBr/hbRSsTYLNnmIXMgiL4cY8o5HH9PE7Ue/NQcIwqNJtvV0xVrk3pY/ywxHhAwSl2V8ao1Is9Cg==} + + '@remix-run/assets@0.3.0': + resolution: {integrity: sha512-WmnAgg+D4BA70r4VccW3LF/XPl192NY+7+SicBCeMLu6KKH7lNW5cFqL9e0GM2bmyL9lP8EVNEd/Ld/c9kCxyg==} + + '@remix-run/async-context-middleware@0.2.2': + resolution: {integrity: sha512-zDuA5HoSAEqaPkjJFg8sSYeYxZK1s6kWUSXlOzcOxgQC9DHk5X3f1pl552zbq/MSzQo1MgzTBgFxQ5Lu8UTLAQ==} + + '@remix-run/auth-middleware@0.1.2': + resolution: {integrity: sha512-hXv0tCKNcwcSWAKYTTxtaKM+xiWk/U4ZL4IKlk5pHLiEaFoYykSgVOlMB59cmZuovqt74ju7YQME9MW2zhnFEA==} + + '@remix-run/auth@0.2.1': + resolution: {integrity: sha512-KGX1y1h7eZiCVU204Z9NZhOjV+zhF4wktm5gOuiUoVN95oYTh9BFEEIsyGQdxHhxTH31hWUNNh2Aj5dCrr/u6Q==} + + '@remix-run/cli@0.2.0': + resolution: {integrity: sha512-u0xOE0GUF98OSfonAtVOFLRC4rPM9mmenXkVfwHu3VZHENRpkafmi/zkdkvwDdJMp2/ucODlFd5gmfC0/CCiMA==} + engines: {node: '>=24.3.0'} + + '@remix-run/compression-middleware@0.1.7': + resolution: {integrity: sha512-7sdpcNYHSuA2X4lkpzCclOTsQY1WQ2JHwahAF7Pcsx1lF8FKniSjgdjubMsl/mOrbK1ajeefIkBDA4wpF3E8Gw==} + + '@remix-run/cookie@0.5.1': + resolution: {integrity: sha512-gbeZfVd1AKRlFj3IJWcIcR6zqVGz2XGJhR+mcqYiWnYt6KM8oUGtc82dsc4qZnWWA1f0nM4/He9wrU4GjB0pag==} + + '@remix-run/cop-middleware@0.1.2': + resolution: {integrity: sha512-8N0yGKuEeP9AD+1uyq/kwF+F82gmG2otGt4nzzXOYDm/6D7pkFfAvQpV2Fhv6sNYtntKQnIzyTMa6tdMXP3n0A==} + + '@remix-run/cors-middleware@0.1.2': + resolution: {integrity: sha512-+tyo+npF+6szzVorrApp0Ilx+UZUdHlSTu5HJG/Nh1zw/gavWEeMtBw9ZWEWz8EhZZ03vVYnTvlEUW5GRhW3TA==} + + '@remix-run/csrf-middleware@0.1.2': + resolution: {integrity: sha512-f+l8f3sBD3xBec2kKKvEVwPLLD7No96Xf8nOYXhuPyeSy2iRaeRG+psqpZ0nH4WukU0/mmWXxuM0/DkPxr4mgg==} + + '@remix-run/data-schema@0.3.0': + resolution: {integrity: sha512-rjGaFJduzO3iMFOKwA5URpZDuGbUxgBwcX9myBglfqbax8dBlhRcxurydepq+xi+XBE+bPrT9V57Jur6p1igow==} + + '@remix-run/data-table-mysql@0.3.1': + resolution: {integrity: sha512-AG02+HbMlBsxuX9/3Y285YO1/ZPCWcQV6+eVthDZ0ub0ksZ7xNqY54LW6XF9b2QM++8yRTMKPTIElhJgyb6UgQ==} + peerDependencies: + mysql2: ^3.15.3 + peerDependenciesMeta: + mysql2: + optional: true + + '@remix-run/data-table-postgres@0.3.1': + resolution: {integrity: sha512-wveXpsPwesuWtNPWrRrWq5XL4y1Jkk6uBfIYCd9twPyDOX5urCjwZzI8muPW+X1Gs3co5NWZK8+TjI0t+uYW6w==} + peerDependencies: + pg: ^8.16.3 + peerDependenciesMeta: + pg: + optional: true + + '@remix-run/data-table-sqlite@0.4.1': + resolution: {integrity: sha512-l4ZtPaviYKF/hiDXBbb35lnbye9m+X31B1RcPNUA6DNF0u5jwAFbaUfVRB+CwfJgv+PNZx9FXJbmMW5vK1Giwg==} + + '@remix-run/data-table@0.2.1': + resolution: {integrity: sha512-p7LFOzgSmRws6U7N2karl+t85J/8jKtUjtKb3XxvCBWEwJk2XZ2nVhhhmamdN5+XEzgFK/KGnNyRtdu114v7sA==} + + '@remix-run/fetch-proxy@0.8.0': + resolution: {integrity: sha512-kUBHz1ykwpS9eiWWeakdsvyIRyNSxKqFJCX2dwceUMOFuGtHkdN96gF1fyv9f6oxhRZCApgm4sjrdL67VpOfhA==} + + '@remix-run/fetch-router@0.18.2': + resolution: {integrity: sha512-/yZkz81ZwzWcZR9od+PIOfwavsreC62TmRdSYESznThYYhVezLkvvRLvNh0v8hAaSOIzNkoLN/wc037m67mm4Q==} + + '@remix-run/file-storage-s3@0.1.1': + resolution: {integrity: sha512-ylE9w6A6mrX4OystdNbIRNqozADgnnnEly9m53VDb3yO+CDYc+izFQZ93R3uPqC7jUenuG4Jc07Yv709J8Z/SA==} + + '@remix-run/file-storage@0.13.4': + resolution: {integrity: sha512-DunIIfs5/qpxQRvlxs5OT1I8TMiZqf7zbCOzKz6LJconD5lC97P58UKOfwS69hfxhg3NyBGFqhBuQ+QhYUCAOQ==} + + '@remix-run/form-data-middleware@0.2.3': + resolution: {integrity: sha512-gaHAQay7ckLcmkpJpPJlYgN5vJpXp+WLdHUCC8MiAJ0uFWhyaKDzKZvjewq7V0InVwi/M0J0Fvyaa2ljocq+3w==} + + '@remix-run/form-data-parser@0.17.0': + resolution: {integrity: sha512-012VyeBYzqHxg/c6n882qDdHgR/hLk+bT+Eh9nb2CCfzt5OtkhAIuQOCj1Me9KZs3x23Rfe06ybZZ8k/dp3cxw==} + + '@remix-run/fs@0.4.3': + resolution: {integrity: sha512-4fT/28oF8VR99eJRK6jFw1YQ3X3KlKBt6fhfS/jFMq4OMQ2KOTUfLwLOTVGY3/utf1Am9mX359WBKYxdsIGoJA==} + + '@remix-run/headers@0.19.0': + resolution: {integrity: sha512-+62NbkXuXm9r/NdG6KfH9OCKofCWm8VjkrVPICiHKtRl8Gf2Vi6eFTN4mGgBlZRhd5mmEVRV4hTIn/JUSHDAOw==} + + '@remix-run/html-template@0.3.0': + resolution: {integrity: sha512-aAMx68udtIk0fmCpCXHYscVeCDsRVEmEgh4XvtusPr3vkHu3jn4gx5oAxgsPXPdDmmD/d75SYyI0m/F+aLz5iQ==} + + '@remix-run/lazy-file@5.0.3': + resolution: {integrity: sha512-3NIp4xRaxAwcDtRSXKm6qYeGX/DjFGNY4FVm0tdvvW2TFyuFbzBoYDQxo4PyEiLtlqkEaqqHTZTIe2SD+Dau+w==} + + '@remix-run/logger-middleware@0.2.1': + resolution: {integrity: sha512-V1suiosYzMhX6urHkmT4o4EgqCk7RpZjfovJ0vtTyHEYU8m66Wm9JrvqYjV0ws9wzyUjAVb8FGBqwq7HKRDWzQ==} + + '@remix-run/method-override-middleware@0.1.7': + resolution: {integrity: sha512-DOGYlVvh5E5ohwUOOjUBCMUwMYzMyfipiUeO+Ly9h5UPfIETWoCgaaVR+XxWXUfIm/9pPCD6DLeNPR8sXDz4ug==} + + '@remix-run/mime@0.4.1': + resolution: {integrity: sha512-n0DUUwpHiDrtHCSw6YFbjeMjajj7STqwzK9PMJkQOHbvOarfPdQdRRMkRqYPBmhu6ABzb6sAdYRSrxPx50I5VQ==} + + '@remix-run/multipart-parser@0.16.0': + resolution: {integrity: sha512-RZqdkP+jOW3sQSsv/kC9OwaA0eifMEvTwlaIw/VC3HOHgebKgvQO/+gBJsBgH7YecFSbvaZq1/iB5J+1jVhDpg==} + + '@remix-run/node-fetch-server@0.13.1': + resolution: {integrity: sha512-dOL+A/C84EA47gO/ps52KGrVSiYy96512rwtbXmJfWKYFm1FbrbjA3jao1hcIfao+jwVNEaZ1kTMwFjiino+HQ==} + + '@remix-run/node-serve@0.1.0': + resolution: {integrity: sha512-/OhPBuJkEswC7og5yHc5kG2JnOBHwWCXP4051X05K73Y7e7iAzcgjGz8eYaKNR5Lvk2uUmcECNelRdqNRxFSbg==} + + '@remix-run/response@0.3.3': + resolution: {integrity: sha512-hgqYDk557dYjLJ0W5Oa6cj5jtNc/5HpAV+jCYlW8+PvoO0gkQzwOJihaFbePCuGW7jhOAFeD4L+SlvV1TxvWpQ==} + + '@remix-run/route-pattern@0.20.1': + resolution: {integrity: sha512-SSwyX3hX/xZck5UXy0bN4ubsnRJeuEKqHjz4Cc3so32FECexdNk0Y+pg2YZNu7FLGpjBn5dBUQCOtjIXQQudUw==} + + '@remix-run/session-middleware@0.2.2': + resolution: {integrity: sha512-JZVUoE2Ow/wOP4lOPdJIgXhgMEV2AZrYTv7+cEVDp4qzf2hZApVnAp2N4AcrNekSF24IRqz1Xm2gccHuHfIK8Q==} + + '@remix-run/session-storage-memcache@0.1.0': + resolution: {integrity: sha512-k853rpHncdTJUwdk0hqd+gZ2OONZLNdOUJBKdJB+MehxrVv1TtacDnA+Xs3kh+IVwUrsTmBhED+GHSUocMATUg==} + + '@remix-run/session-storage-redis@0.1.0': + resolution: {integrity: sha512-MovUS1E98wDHP8zsESJGm3ySB7iiOhd+3usxyXXM2sbF9gIe6r1bdAXXirGIoC8AEq1v8IiFE5u5ipo7PX0UHQ==} + peerDependencies: + redis: ^5.10.0 + peerDependenciesMeta: + redis: + optional: true + + '@remix-run/session@0.4.1': + resolution: {integrity: sha512-Bm6aKYgutb/raHZ3laloz8g/Qu7f3CeK3o4gUVDMxtEiAdWCzJamwHoTpGOc5+g1Kuy7z85v4M6nGrF06MFDSg==} + + '@remix-run/static-middleware@0.4.8': + resolution: {integrity: sha512-dXU4MzxW/r+/btjittqXu7CeRU2IR0Z9G55pu241bh3i9fMOdtw2hhzVpUaNNfOPGsFCTq7KDIxo+dPKfTah0A==} + + '@remix-run/tar-parser@0.7.1': + resolution: {integrity: sha512-NZKTuA66rj0zqpljWAb6v147cNu5BtRCiv8FY5kn64ZPvLmoI62Ehm2hoUh0g0wJHeCNmgS5QZg1xhw6FX67SA==} + + '@remix-run/terminal@0.1.0': + resolution: {integrity: sha512-vxiiCm3yQTBeG4j9Lm4PVZElEdD7gBNm+Q2rqTGMlE4ImrWFoq7h2Jk1y3BMylNZYz0m3pzihQ5G2sbY1XtdLg==} + + '@remix-run/test@0.3.0': + resolution: {integrity: sha512-amfWPIenHXXZqozPY+LUqspjmaSjHAW5J6jd4Owl180AEc+14IdMPy3D0x27S9ArjRioiqsPBKpYP1EmRft61g==} + engines: {node: '>=24.3.0'} + hasBin: true + peerDependencies: + playwright: ^1.59.0 + peerDependenciesMeta: + playwright: + optional: true + + '@remix-run/ui@0.1.1': + resolution: {integrity: sha512-yn5oL/uZ8izabJxjeKhVo9lBGhb+ZhOJHWk5Tu7YJL3RSxvP7BrO/ofrdWUcOXSsNxao3Lj+PF1lVmnTBf8nfQ==} + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + + '@types/dom-navigation@1.0.7': + resolution: {integrity: sha512-Di4W+i2faYquHUnyWUg3bBQp5pTNvjDDA7mIYfD/1WlLgan6sKkeVjGbdL78K0CuNEk5Pfc/c0rfelwkz10mnQ==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/node@25.6.0': + resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} + + aws4fetch@1.0.20: + resolution: {integrity: sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g==} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + engines: {node: '>=18'} + hasBin: true + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-tsconfig@4.14.0: + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} + engines: {node: '>=8'} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + oxc-minify@0.121.0: + resolution: {integrity: sha512-XziD0au8etayM2zJnqcSiW+Pn3hEpqHsbwfL7G4Ej0SwqfvbIjiEF1/uNqONuHl0n9LkLI1ez378vSWZRJZWAQ==} + engines: {node: ^20.19.0 || >=22.12.0} + + oxc-parser@0.121.0: + resolution: {integrity: sha512-ek9o58+SCv6AV7nchiAcUJy1DNE2CC5WRdBcO0mF+W4oRjNQfPO7b3pLjTHSFECpHkKGOZSQxx3hk8viIL5YCg==} + engines: {node: ^20.19.0 || >=22.12.0} + + oxc-resolver@11.19.1: + resolution: {integrity: sha512-qE/CIg/spwrTBFt5aKmwe3ifeDdLfA2NESN30E42X/lII5ClF8V7Wt6WIJhcGZjp0/Q+nQ+9vgxGk//xZNX2hg==} + + oxc-transform@0.121.0: + resolution: {integrity: sha512-Kf243wJU/vWF/ThV+ZyfLMQIrViVFRSyYO7UPKpZMMPGGMzxxcHgsNGWy0Uy+pcXD78+jdUnxVTR9rYT73Qw3A==} + engines: {node: ^20.19.0 || >=22.12.0} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + remix@3.0.0-beta.0: + resolution: {integrity: sha512-puVDlqsID9k1N7p+qb5IOLDeMlQ6WynU9qm2/iJAL+iX+1upgyaVzWeuLxNg761t9/Uh1u1tT/PuaaRTi932Tg==} + engines: {node: '>=24.3.0'} + hasBin: true + peerDependencies: + mysql2: ^3.15.3 + pg: ^8.16.3 + playwright: ^1.59.0 + redis: ^5.10.0 + peerDependenciesMeta: + mysql2: + optional: true + pg: + optional: true + playwright: + optional: true + redis: + optional: true + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + engines: {node: '>=18.0.0'} + hasBin: true + + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + + uWebSockets.js@https://codeload.github.com/uNetworking/uWebSockets.js/tar.gz/a63031f40f76dc2422e8da736c04217053e9db2b: + resolution: {tarball: https://codeload.github.com/uNetworking/uWebSockets.js/tar.gz/a63031f40f76dc2422e8da736c04217053e9db2b} + version: 20.66.0 + + undici-types@7.19.2: + resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + +snapshots: + + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.27.7': + optional: true + + '@esbuild/android-arm64@0.27.7': + optional: true + + '@esbuild/android-arm@0.27.7': + optional: true + + '@esbuild/android-x64@0.27.7': + optional: true + + '@esbuild/darwin-arm64@0.27.7': + optional: true + + '@esbuild/darwin-x64@0.27.7': + optional: true + + '@esbuild/freebsd-arm64@0.27.7': + optional: true + + '@esbuild/freebsd-x64@0.27.7': + optional: true + + '@esbuild/linux-arm64@0.27.7': + optional: true + + '@esbuild/linux-arm@0.27.7': + optional: true + + '@esbuild/linux-ia32@0.27.7': + optional: true + + '@esbuild/linux-loong64@0.27.7': + optional: true + + '@esbuild/linux-mips64el@0.27.7': + optional: true + + '@esbuild/linux-ppc64@0.27.7': + optional: true + + '@esbuild/linux-riscv64@0.27.7': + optional: true + + '@esbuild/linux-s390x@0.27.7': + optional: true + + '@esbuild/linux-x64@0.27.7': + optional: true + + '@esbuild/netbsd-arm64@0.27.7': + optional: true + + '@esbuild/netbsd-x64@0.27.7': + optional: true + + '@esbuild/openbsd-arm64@0.27.7': + optional: true + + '@esbuild/openbsd-x64@0.27.7': + optional: true + + '@esbuild/openharmony-arm64@0.27.7': + optional: true + + '@esbuild/sunos-x64@0.27.7': + optional: true + + '@esbuild/win32-arm64@0.27.7': + optional: true + + '@esbuild/win32-ia32@0.27.7': + optional: true + + '@esbuild/win32-x64@0.27.7': + optional: true + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.1 + optional: true + + '@oxc-minify/binding-android-arm-eabi@0.121.0': + optional: true + + '@oxc-minify/binding-android-arm64@0.121.0': + optional: true + + '@oxc-minify/binding-darwin-arm64@0.121.0': + optional: true + + '@oxc-minify/binding-darwin-x64@0.121.0': + optional: true + + '@oxc-minify/binding-freebsd-x64@0.121.0': + optional: true + + '@oxc-minify/binding-linux-arm-gnueabihf@0.121.0': + optional: true + + '@oxc-minify/binding-linux-arm-musleabihf@0.121.0': + optional: true + + '@oxc-minify/binding-linux-arm64-gnu@0.121.0': + optional: true + + '@oxc-minify/binding-linux-arm64-musl@0.121.0': + optional: true + + '@oxc-minify/binding-linux-ppc64-gnu@0.121.0': + optional: true + + '@oxc-minify/binding-linux-riscv64-gnu@0.121.0': + optional: true + + '@oxc-minify/binding-linux-riscv64-musl@0.121.0': + optional: true + + '@oxc-minify/binding-linux-s390x-gnu@0.121.0': + optional: true + + '@oxc-minify/binding-linux-x64-gnu@0.121.0': + optional: true + + '@oxc-minify/binding-linux-x64-musl@0.121.0': + optional: true + + '@oxc-minify/binding-openharmony-arm64@0.121.0': + optional: true + + '@oxc-minify/binding-wasm32-wasi@0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + + '@oxc-minify/binding-win32-arm64-msvc@0.121.0': + optional: true + + '@oxc-minify/binding-win32-ia32-msvc@0.121.0': + optional: true + + '@oxc-minify/binding-win32-x64-msvc@0.121.0': + optional: true + + '@oxc-parser/binding-android-arm-eabi@0.121.0': + optional: true + + '@oxc-parser/binding-android-arm64@0.121.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.121.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.121.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.121.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.121.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.121.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.121.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.121.0': + optional: true + + '@oxc-parser/binding-linux-ppc64-gnu@0.121.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.121.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-musl@0.121.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.121.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.121.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.121.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.121.0': + optional: true + + '@oxc-parser/binding-wasm32-wasi@0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.121.0': + optional: true + + '@oxc-parser/binding-win32-ia32-msvc@0.121.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.121.0': + optional: true + + '@oxc-project/runtime@0.121.0': {} + + '@oxc-project/types@0.121.0': {} + + '@oxc-resolver/binding-android-arm-eabi@11.19.1': + optional: true + + '@oxc-resolver/binding-android-arm64@11.19.1': + optional: true + + '@oxc-resolver/binding-darwin-arm64@11.19.1': + optional: true + + '@oxc-resolver/binding-darwin-x64@11.19.1': + optional: true + + '@oxc-resolver/binding-freebsd-x64@11.19.1': + optional: true + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.19.1': + optional: true + + '@oxc-resolver/binding-linux-arm-musleabihf@11.19.1': + optional: true + + '@oxc-resolver/binding-linux-arm64-gnu@11.19.1': + optional: true + + '@oxc-resolver/binding-linux-arm64-musl@11.19.1': + optional: true + + '@oxc-resolver/binding-linux-ppc64-gnu@11.19.1': + optional: true + + '@oxc-resolver/binding-linux-riscv64-gnu@11.19.1': + optional: true + + '@oxc-resolver/binding-linux-riscv64-musl@11.19.1': + optional: true + + '@oxc-resolver/binding-linux-s390x-gnu@11.19.1': + optional: true + + '@oxc-resolver/binding-linux-x64-gnu@11.19.1': + optional: true + + '@oxc-resolver/binding-linux-x64-musl@11.19.1': + optional: true + + '@oxc-resolver/binding-openharmony-arm64@11.19.1': + optional: true + + '@oxc-resolver/binding-wasm32-wasi@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + + '@oxc-resolver/binding-win32-arm64-msvc@11.19.1': + optional: true + + '@oxc-resolver/binding-win32-ia32-msvc@11.19.1': + optional: true + + '@oxc-resolver/binding-win32-x64-msvc@11.19.1': + optional: true + + '@oxc-transform/binding-android-arm-eabi@0.121.0': + optional: true + + '@oxc-transform/binding-android-arm64@0.121.0': + optional: true + + '@oxc-transform/binding-darwin-arm64@0.121.0': + optional: true + + '@oxc-transform/binding-darwin-x64@0.121.0': + optional: true + + '@oxc-transform/binding-freebsd-x64@0.121.0': + optional: true + + '@oxc-transform/binding-linux-arm-gnueabihf@0.121.0': + optional: true + + '@oxc-transform/binding-linux-arm-musleabihf@0.121.0': + optional: true + + '@oxc-transform/binding-linux-arm64-gnu@0.121.0': + optional: true + + '@oxc-transform/binding-linux-arm64-musl@0.121.0': + optional: true + + '@oxc-transform/binding-linux-ppc64-gnu@0.121.0': + optional: true + + '@oxc-transform/binding-linux-riscv64-gnu@0.121.0': + optional: true + + '@oxc-transform/binding-linux-riscv64-musl@0.121.0': + optional: true + + '@oxc-transform/binding-linux-s390x-gnu@0.121.0': + optional: true + + '@oxc-transform/binding-linux-x64-gnu@0.121.0': + optional: true + + '@oxc-transform/binding-linux-x64-musl@0.121.0': + optional: true + + '@oxc-transform/binding-openharmony-arm64@0.121.0': + optional: true + + '@oxc-transform/binding-wasm32-wasi@0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + + '@oxc-transform/binding-win32-arm64-msvc@0.121.0': + optional: true + + '@oxc-transform/binding-win32-ia32-msvc@0.121.0': + optional: true + + '@oxc-transform/binding-win32-x64-msvc@0.121.0': + optional: true + + '@remix-run/assert@0.2.0': {} + + '@remix-run/assets@0.3.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@oxc-project/runtime': 0.121.0 + '@remix-run/headers': 0.19.0 + '@remix-run/route-pattern': 0.20.1 + chokidar: 5.0.0 + es-module-lexer: 2.1.0 + get-tsconfig: 4.14.0 + lightningcss: 1.32.0 + magic-string: 0.30.21 + oxc-minify: 0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + oxc-parser: 0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + oxc-resolver: 11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + oxc-transform: 0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + picomatch: 4.0.4 + source-map-js: 1.2.1 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + '@remix-run/async-context-middleware@0.2.2': + dependencies: + '@remix-run/fetch-router': 0.18.2 + + '@remix-run/auth-middleware@0.1.2': + dependencies: + '@remix-run/fetch-router': 0.18.2 + '@remix-run/session': 0.4.1 + + '@remix-run/auth@0.2.1': + dependencies: + '@remix-run/fetch-router': 0.18.2 + '@remix-run/session': 0.4.1 + + '@remix-run/cli@0.2.0': + dependencies: + '@remix-run/terminal': 0.1.0 + '@remix-run/test': 0.3.0 + semver: 7.7.4 + transitivePeerDependencies: + - playwright + + '@remix-run/compression-middleware@0.1.7': + dependencies: + '@remix-run/fetch-router': 0.18.2 + '@remix-run/mime': 0.4.1 + '@remix-run/response': 0.3.3 + + '@remix-run/cookie@0.5.1': + dependencies: + '@remix-run/headers': 0.19.0 + + '@remix-run/cop-middleware@0.1.2': + dependencies: + '@remix-run/fetch-router': 0.18.2 + + '@remix-run/cors-middleware@0.1.2': + dependencies: + '@remix-run/fetch-router': 0.18.2 + '@remix-run/headers': 0.19.0 + + '@remix-run/csrf-middleware@0.1.2': + dependencies: + '@remix-run/fetch-router': 0.18.2 + '@remix-run/session': 0.4.1 + + '@remix-run/data-schema@0.3.0': + dependencies: + '@standard-schema/spec': 1.1.0 + + '@remix-run/data-table-mysql@0.3.1': + dependencies: + '@remix-run/data-table': 0.2.1 + + '@remix-run/data-table-postgres@0.3.1': + dependencies: + '@remix-run/data-table': 0.2.1 + + '@remix-run/data-table-sqlite@0.4.1': + dependencies: + '@remix-run/data-table': 0.2.1 + + '@remix-run/data-table@0.2.1': {} + + '@remix-run/fetch-proxy@0.8.0': + dependencies: + '@remix-run/headers': 0.19.0 + + '@remix-run/fetch-router@0.18.2': + dependencies: + '@remix-run/route-pattern': 0.20.1 + + '@remix-run/file-storage-s3@0.1.1': + dependencies: + '@remix-run/file-storage': 0.13.4 + aws4fetch: 1.0.20 + + '@remix-run/file-storage@0.13.4': + dependencies: + '@remix-run/fs': 0.4.3 + '@remix-run/lazy-file': 5.0.3 + + '@remix-run/form-data-middleware@0.2.3': + dependencies: + '@remix-run/fetch-router': 0.18.2 + '@remix-run/form-data-parser': 0.17.0 + + '@remix-run/form-data-parser@0.17.0': + dependencies: + '@remix-run/multipart-parser': 0.16.0 + + '@remix-run/fs@0.4.3': + dependencies: + '@remix-run/lazy-file': 5.0.3 + '@remix-run/mime': 0.4.1 + + '@remix-run/headers@0.19.0': {} + + '@remix-run/html-template@0.3.0': {} + + '@remix-run/lazy-file@5.0.3': + dependencies: + '@remix-run/mime': 0.4.1 + + '@remix-run/logger-middleware@0.2.1': + dependencies: + '@remix-run/fetch-router': 0.18.2 + '@remix-run/terminal': 0.1.0 + + '@remix-run/method-override-middleware@0.1.7': + dependencies: + '@remix-run/fetch-router': 0.18.2 + + '@remix-run/mime@0.4.1': {} + + '@remix-run/multipart-parser@0.16.0': + dependencies: + '@remix-run/headers': 0.19.0 + + '@remix-run/node-fetch-server@0.13.1': {} + + '@remix-run/node-serve@0.1.0': + optionalDependencies: + uWebSockets.js: https://codeload.github.com/uNetworking/uWebSockets.js/tar.gz/a63031f40f76dc2422e8da736c04217053e9db2b + + '@remix-run/response@0.3.3': + dependencies: + '@remix-run/headers': 0.19.0 + '@remix-run/html-template': 0.3.0 + '@remix-run/mime': 0.4.1 + + '@remix-run/route-pattern@0.20.1': {} + + '@remix-run/session-middleware@0.2.2': + dependencies: + '@remix-run/cookie': 0.5.1 + '@remix-run/fetch-router': 0.18.2 + '@remix-run/session': 0.4.1 + + '@remix-run/session-storage-memcache@0.1.0': + dependencies: + '@remix-run/session': 0.4.1 + + '@remix-run/session-storage-redis@0.1.0': + dependencies: + '@remix-run/session': 0.4.1 + + '@remix-run/session@0.4.1': {} + + '@remix-run/static-middleware@0.4.8': + dependencies: + '@remix-run/fetch-router': 0.18.2 + '@remix-run/fs': 0.4.3 + '@remix-run/html-template': 0.3.0 + '@remix-run/mime': 0.4.1 + '@remix-run/response': 0.3.3 + + '@remix-run/tar-parser@0.7.1': {} + + '@remix-run/terminal@0.1.0': {} + + '@remix-run/test@0.3.0': + dependencies: + '@remix-run/terminal': 0.1.0 + es-module-lexer: 2.1.0 + esbuild: 0.27.7 + get-tsconfig: 4.14.0 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.2.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tsx: 4.21.0 + v8-to-istanbul: 9.3.0 + + '@remix-run/ui@0.1.1': + dependencies: + '@types/dom-navigation': 1.0.7 + + '@standard-schema/spec@1.1.0': {} + + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/dom-navigation@1.0.7': {} + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/node@25.6.0': + dependencies: + undici-types: 7.19.2 + + aws4fetch@1.0.20: {} + + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + + convert-source-map@2.0.0: {} + + detect-libc@2.1.2: {} + + es-module-lexer@2.1.0: {} + + esbuild@0.27.7: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 + + fsevents@2.3.3: + optional: true + + get-tsconfig@4.14.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + has-flag@4.0.0: {} + + html-escaper@2.0.2: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-reports@3.2.0: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + make-dir@4.0.0: + dependencies: + semver: 7.7.4 + + oxc-minify@0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): + optionalDependencies: + '@oxc-minify/binding-android-arm-eabi': 0.121.0 + '@oxc-minify/binding-android-arm64': 0.121.0 + '@oxc-minify/binding-darwin-arm64': 0.121.0 + '@oxc-minify/binding-darwin-x64': 0.121.0 + '@oxc-minify/binding-freebsd-x64': 0.121.0 + '@oxc-minify/binding-linux-arm-gnueabihf': 0.121.0 + '@oxc-minify/binding-linux-arm-musleabihf': 0.121.0 + '@oxc-minify/binding-linux-arm64-gnu': 0.121.0 + '@oxc-minify/binding-linux-arm64-musl': 0.121.0 + '@oxc-minify/binding-linux-ppc64-gnu': 0.121.0 + '@oxc-minify/binding-linux-riscv64-gnu': 0.121.0 + '@oxc-minify/binding-linux-riscv64-musl': 0.121.0 + '@oxc-minify/binding-linux-s390x-gnu': 0.121.0 + '@oxc-minify/binding-linux-x64-gnu': 0.121.0 + '@oxc-minify/binding-linux-x64-musl': 0.121.0 + '@oxc-minify/binding-openharmony-arm64': 0.121.0 + '@oxc-minify/binding-wasm32-wasi': 0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@oxc-minify/binding-win32-arm64-msvc': 0.121.0 + '@oxc-minify/binding-win32-ia32-msvc': 0.121.0 + '@oxc-minify/binding-win32-x64-msvc': 0.121.0 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + oxc-parser@0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): + dependencies: + '@oxc-project/types': 0.121.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.121.0 + '@oxc-parser/binding-android-arm64': 0.121.0 + '@oxc-parser/binding-darwin-arm64': 0.121.0 + '@oxc-parser/binding-darwin-x64': 0.121.0 + '@oxc-parser/binding-freebsd-x64': 0.121.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.121.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.121.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.121.0 + '@oxc-parser/binding-linux-arm64-musl': 0.121.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.121.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.121.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.121.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.121.0 + '@oxc-parser/binding-linux-x64-gnu': 0.121.0 + '@oxc-parser/binding-linux-x64-musl': 0.121.0 + '@oxc-parser/binding-openharmony-arm64': 0.121.0 + '@oxc-parser/binding-wasm32-wasi': 0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@oxc-parser/binding-win32-arm64-msvc': 0.121.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.121.0 + '@oxc-parser/binding-win32-x64-msvc': 0.121.0 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): + optionalDependencies: + '@oxc-resolver/binding-android-arm-eabi': 11.19.1 + '@oxc-resolver/binding-android-arm64': 11.19.1 + '@oxc-resolver/binding-darwin-arm64': 11.19.1 + '@oxc-resolver/binding-darwin-x64': 11.19.1 + '@oxc-resolver/binding-freebsd-x64': 11.19.1 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.19.1 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.19.1 + '@oxc-resolver/binding-linux-arm64-gnu': 11.19.1 + '@oxc-resolver/binding-linux-arm64-musl': 11.19.1 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.19.1 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.19.1 + '@oxc-resolver/binding-linux-riscv64-musl': 11.19.1 + '@oxc-resolver/binding-linux-s390x-gnu': 11.19.1 + '@oxc-resolver/binding-linux-x64-gnu': 11.19.1 + '@oxc-resolver/binding-linux-x64-musl': 11.19.1 + '@oxc-resolver/binding-openharmony-arm64': 11.19.1 + '@oxc-resolver/binding-wasm32-wasi': 11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@oxc-resolver/binding-win32-arm64-msvc': 11.19.1 + '@oxc-resolver/binding-win32-ia32-msvc': 11.19.1 + '@oxc-resolver/binding-win32-x64-msvc': 11.19.1 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + oxc-transform@0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): + optionalDependencies: + '@oxc-transform/binding-android-arm-eabi': 0.121.0 + '@oxc-transform/binding-android-arm64': 0.121.0 + '@oxc-transform/binding-darwin-arm64': 0.121.0 + '@oxc-transform/binding-darwin-x64': 0.121.0 + '@oxc-transform/binding-freebsd-x64': 0.121.0 + '@oxc-transform/binding-linux-arm-gnueabihf': 0.121.0 + '@oxc-transform/binding-linux-arm-musleabihf': 0.121.0 + '@oxc-transform/binding-linux-arm64-gnu': 0.121.0 + '@oxc-transform/binding-linux-arm64-musl': 0.121.0 + '@oxc-transform/binding-linux-ppc64-gnu': 0.121.0 + '@oxc-transform/binding-linux-riscv64-gnu': 0.121.0 + '@oxc-transform/binding-linux-riscv64-musl': 0.121.0 + '@oxc-transform/binding-linux-s390x-gnu': 0.121.0 + '@oxc-transform/binding-linux-x64-gnu': 0.121.0 + '@oxc-transform/binding-linux-x64-musl': 0.121.0 + '@oxc-transform/binding-openharmony-arm64': 0.121.0 + '@oxc-transform/binding-wasm32-wasi': 0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@oxc-transform/binding-win32-arm64-msvc': 0.121.0 + '@oxc-transform/binding-win32-ia32-msvc': 0.121.0 + '@oxc-transform/binding-win32-x64-msvc': 0.121.0 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + picomatch@4.0.4: {} + + readdirp@5.0.0: {} + + remix@3.0.0-beta.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): + dependencies: + '@remix-run/assert': 0.2.0 + '@remix-run/assets': 0.3.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@remix-run/async-context-middleware': 0.2.2 + '@remix-run/auth': 0.2.1 + '@remix-run/auth-middleware': 0.1.2 + '@remix-run/cli': 0.2.0 + '@remix-run/compression-middleware': 0.1.7 + '@remix-run/cookie': 0.5.1 + '@remix-run/cop-middleware': 0.1.2 + '@remix-run/cors-middleware': 0.1.2 + '@remix-run/csrf-middleware': 0.1.2 + '@remix-run/data-schema': 0.3.0 + '@remix-run/data-table': 0.2.1 + '@remix-run/data-table-mysql': 0.3.1 + '@remix-run/data-table-postgres': 0.3.1 + '@remix-run/data-table-sqlite': 0.4.1 + '@remix-run/fetch-proxy': 0.8.0 + '@remix-run/fetch-router': 0.18.2 + '@remix-run/file-storage': 0.13.4 + '@remix-run/file-storage-s3': 0.1.1 + '@remix-run/form-data-middleware': 0.2.3 + '@remix-run/form-data-parser': 0.17.0 + '@remix-run/fs': 0.4.3 + '@remix-run/headers': 0.19.0 + '@remix-run/html-template': 0.3.0 + '@remix-run/lazy-file': 5.0.3 + '@remix-run/logger-middleware': 0.2.1 + '@remix-run/method-override-middleware': 0.1.7 + '@remix-run/mime': 0.4.1 + '@remix-run/multipart-parser': 0.16.0 + '@remix-run/node-fetch-server': 0.13.1 + '@remix-run/node-serve': 0.1.0 + '@remix-run/response': 0.3.3 + '@remix-run/route-pattern': 0.20.1 + '@remix-run/session': 0.4.1 + '@remix-run/session-middleware': 0.2.2 + '@remix-run/session-storage-memcache': 0.1.0 + '@remix-run/session-storage-redis': 0.1.0 + '@remix-run/static-middleware': 0.4.8 + '@remix-run/tar-parser': 0.7.1 + '@remix-run/terminal': 0.1.0 + '@remix-run/test': 0.3.0 + '@remix-run/ui': 0.1.1 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + resolve-pkg-maps@1.0.0: {} + + semver@7.7.4: {} + + source-map-js@1.2.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + tslib@2.8.1: + optional: true + + tsx@4.21.0: + dependencies: + esbuild: 0.27.7 + get-tsconfig: 4.14.0 + optionalDependencies: + fsevents: 2.3.3 + + typescript@6.0.3: {} + + uWebSockets.js@https://codeload.github.com/uNetworking/uWebSockets.js/tar.gz/a63031f40f76dc2422e8da736c04217053e9db2b: + optional: true + + undici-types@7.19.2: {} + + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 diff --git a/server.ts b/server.ts new file mode 100644 index 0000000..acfb685 --- /dev/null +++ b/server.ts @@ -0,0 +1,37 @@ +import { serve } from "remix/node-serve"; + +import { router } from "./app/router.ts"; + +const port = process.env.PORT ? Number.parseInt(process.env.PORT, 10) : 44100; + +const server = serve( + async (request) => { + try { + return await router.fetch(request); + } catch (error) { + console.error(error); + return new Response("Internal Server Error", { status: 500 }); + } + }, + { + port, + }, +); + +await server.ready; +console.log(`Server listening on http://localhost:${server.port}`); + +let shuttingDown = false; + +function shutdown() { + if (shuttingDown) { + return; + } + + shuttingDown = true; + server.close(); + process.exit(0); +} + +process.on("SIGINT", shutdown); +process.on("SIGTERM", shutdown); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..457b78e --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "strict": true, + "lib": ["ES2024", "DOM", "DOM.Iterable"], + "types": ["node"], + "module": "ES2022", + "moduleResolution": "Bundler", + "target": "ESNext", + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true, + "verbatimModuleSyntax": true, + "skipLibCheck": true, + "jsx": "react-jsx", + "jsxImportSource": "remix/ui", + "noEmit": true + }, + "exclude": ["dist"] +} From 1845f706187e2034db6f8e4e285e4bebcbbe5648 Mon Sep 17 00:00:00 2001 From: Guilherme de Andrade Date: Fri, 1 May 2026 21:36:59 +0100 Subject: [PATCH 3/7] chore: setup oxlint, oxfmt, tsgo, and npm-run-all2 --- .gitignore | 1 + .oxfmtrc.json | 4 + .zed/settings.json | 17 + oxlint.config.ts | 21 + package.json | 17 +- pnpm-lock.yaml | 1728 +++++++++++++++++++++++++++++++++++++++++++- 6 files changed, 1753 insertions(+), 35 deletions(-) create mode 100644 .oxfmtrc.json create mode 100644 .zed/settings.json create mode 100644 oxlint.config.ts diff --git a/.gitignore b/.gitignore index 03619d2..94cc11f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ node_modules/ .pnpm-store/ +.pi/ build/ dist/ diff --git a/.oxfmtrc.json b/.oxfmtrc.json new file mode 100644 index 0000000..35c9264 --- /dev/null +++ b/.oxfmtrc.json @@ -0,0 +1,4 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "ignorePatterns": ["node_modules", "build", "dist", "public/build"] +} diff --git a/.zed/settings.json b/.zed/settings.json new file mode 100644 index 0000000..c246869 --- /dev/null +++ b/.zed/settings.json @@ -0,0 +1,17 @@ +{ + "languages": { + "TypeScript": { + "language_servers": ["tsgo", "vtsls"] + }, + "TSX": { + "language_servers": ["tsgo", "vtsls"] + } + }, + "lsp": { + "tsgo": { + "settings": { + "package_version": "7.0.0-dev.20260501.1" + } + } + } +} diff --git a/oxlint.config.ts b/oxlint.config.ts new file mode 100644 index 0000000..8d8bbef --- /dev/null +++ b/oxlint.config.ts @@ -0,0 +1,21 @@ +import nkzw from "@nkzw/oxlint-config"; +import { defineConfig } from "oxlint"; + +export default defineConfig({ + extends: [nkzw], + overrides: [ + { + files: ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.cts"], + rules: { + "react-in-jsx-scope": "off", + "react/display-name": "off", + }, + }, + { + files: ["server.ts", "app/**/*.tsx"], + rules: { + "no-console": "off", + }, + }, + ], +}); diff --git a/package.json b/package.json index 6c61c07..6866d15 100644 --- a/package.json +++ b/package.json @@ -5,15 +5,28 @@ "scripts": { "dev": "tsx watch server.ts", "start": "tsx server.ts", - "test": "tsx --test", - "typecheck": "tsc --noEmit" + "tsc": "tsgo", + "lint": "oxlint", + "format": "oxfmt", + "format:check": "oxfmt --check", + "check": "npm-run-all --parallel tsc lint format:check" }, "dependencies": { "remix": "^3.0.0-beta.0", "tsx": "latest" }, "devDependencies": { + "@nkzw/eslint-plugin": "^2.0.0", + "@nkzw/oxlint-config": "^1.1.1", "@types/node": "latest", + "@typescript/native-preview": "7.0.0-dev.20260501.1", + "eslint-plugin-no-only-tests": "^3.4.0", + "eslint-plugin-perfectionist": "^5.9.0", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-unused-imports": "^4.4.1", + "npm-run-all2": "^8.0.4", + "oxfmt": "^0.47.0", + "oxlint": "^1.62.0", "typescript": "latest" }, "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 99e914c..37f5b0a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,15 +15,112 @@ importers: specifier: latest version: 4.21.0 devDependencies: + '@nkzw/eslint-plugin': + specifier: ^2.0.0 + version: 2.0.0(eslint@10.3.0) + '@nkzw/oxlint-config': + specifier: ^1.1.1 + version: 1.1.1(eslint@10.3.0)(oxlint@1.62.0)(typescript@6.0.3) '@types/node': specifier: latest version: 25.6.0 + '@typescript/native-preview': + specifier: 7.0.0-dev.20260501.1 + version: 7.0.0-dev.20260501.1 + eslint-plugin-no-only-tests: + specifier: ^3.4.0 + version: 3.4.0 + eslint-plugin-perfectionist: + specifier: ^5.9.0 + version: 5.9.0(eslint@10.3.0)(typescript@6.0.3) + eslint-plugin-react-hooks: + specifier: ^7.1.1 + version: 7.1.1(eslint@10.3.0) + eslint-plugin-unused-imports: + specifier: ^4.4.1 + version: 4.4.1(eslint@10.3.0) + npm-run-all2: + specifier: ^8.0.4 + version: 8.0.4 + oxfmt: + specifier: ^0.47.0 + version: 0.47.0 + oxlint: + specifier: ^1.62.0 + version: 1.62.0 typescript: specifier: latest version: 6.0.3 packages: + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.29.3': + resolution: {integrity: sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.29.2': + resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.3': + resolution: {integrity: sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} @@ -189,6 +286,62 @@ packages: cpu: [x64] os: [win32] + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/config-helpers@0.5.5': + resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/plugin-kit@0.7.1': + resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -205,6 +358,16 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@nkzw/eslint-plugin@2.0.0': + resolution: {integrity: sha512-IoU8kOqHfnf7se2dGxMD/7RPm6WVjzjOjWSo7FulRx3lJzuZvXioSkT5Nd82l66DH3Pl2whw74lPT1di3KMwFA==} + peerDependencies: + eslint: '>= 9' + + '@nkzw/oxlint-config@1.1.1': + resolution: {integrity: sha512-pPl4AnLbd60neo8ZFCKlOJ592Iey4afl/8oDcAK1tQxpx5+lnGz8qlFKDogrYNtoBXZk9sWjx/KpKjPEZcxgYA==} + peerDependencies: + oxlint: '>=1.46.0' + '@oxc-minify/binding-android-arm-eabi@0.121.0': resolution: {integrity: sha512-RcQXLj3JLLVm41n80/6+7OUion2PSQWOH5EUvlD9kCWSF1fWLXCNX1A6t/+nFNjeyaCXZ3YbIWwCTiGXhxxHEw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -701,6 +864,250 @@ packages: cpu: [x64] os: [win32] + '@oxfmt/binding-android-arm-eabi@0.47.0': + resolution: {integrity: sha512-KrMQRdMi/upr81qT4ijK6X6BNp6jqpMY7FwILQnwIy9QLc3qpnhUx5rsCLGzn4ewsCQ0CNAspN2ogmP1GXLyLw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxfmt/binding-android-arm64@0.47.0': + resolution: {integrity: sha512-r4ixS/PeUpAFKgrpDoZ5pSkthjZzVzKd95525Aazj+aOv9H4ulK5zYHGb7wFY5n5kZxHK8TbOJUZgoEb1ohddQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxfmt/binding-darwin-arm64@0.47.0': + resolution: {integrity: sha512-CLWxiKpMl+195cm09CuaWEhJK0CirRkoMa07aR9+9AFPat2LfIKtwx1JqxZM0MTvcMe6+adlJNdVL6jdInvq3g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxfmt/binding-darwin-x64@0.47.0': + resolution: {integrity: sha512-Xq5fjTYDC50faUeLSm0rZdBqoTgleXEdD7NpJdARtQIczkCJn3xNjMUSQQkUmh4CtxkKTNL68lytcOK3e/osgg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxfmt/binding-freebsd-x64@0.47.0': + resolution: {integrity: sha512-QOU9ZIJ52p5askcEC0QJvvr8trHAWoonul8bgISo6gYUL3s50zkqafBYcNAr9LJZQbsZtPfIWHk9+5+nUp1qJQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxfmt/binding-linux-arm-gnueabihf@0.47.0': + resolution: {integrity: sha512-oJxDM1aBhPvz9gmElBv8UpxyiqhwfjcbrSxT5F0xtuUzY6dQI27/AQPIt3eu3Z5Yvn0kQl5R7MA3Z+MbnRvCBw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm-musleabihf@0.47.0': + resolution: {integrity: sha512-g8Lh50VS4ibGz2q6v7r9UZY4D0dM16SdrFYOMzhqIoCwGcai8VMIRUAcqn1/jlCsOOzUXJ741+kCeJt0cofakQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm64-gnu@0.47.0': + resolution: {integrity: sha512-YrNT1vQ0asaXoRbrvYENPqmBfOQ9Xr8enPNOULeYfg44VjCcrUowFy5QZr+WawE0zyP8cH9e9Gxxg0fDEFzhcg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-arm64-musl@0.47.0': + resolution: {integrity: sha512-IxtQC/sbBi4ubbY+MdwdanRWrG9InQJVZqyMsBa5IUaQcnSg86gQme574HxXMC1p4bo4YhV99zQ+wNnGCvEgzw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-ppc64-gnu@0.47.0': + resolution: {integrity: sha512-EWXEhOMbWO0q6eJSbu0QLkU8cKi0ljlYLngeDs2Ocu/pm1rrLwyQiYzlFbdnMRURI4w9ndr1sI9rSbhlJ5o23Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-gnu@0.47.0': + resolution: {integrity: sha512-tZrjS11TUiDuEpRaqdk8K9F9xETRyKXfuZKmdeW+Gj7coBnm7+8sBEfyt033EAFEQSlkniAXvBLh+Qja2ioGBQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-musl@0.47.0': + resolution: {integrity: sha512-KBFy+2CFKUCZzYwX2ZOPQKck1vjQbz+hextuc19G4r0WRJwadfAeuQMQRQvB+Ivc8brlbOVg7et8K7E467440g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-s390x-gnu@0.47.0': + resolution: {integrity: sha512-REUPFKVGSiK99B+9eaPhluEVglzaoj/SMykNC5SUiV2RSsBfV5lWN7Y0iCIc251Wz3GaeAGZsJ/zj3gjarxdFg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-gnu@0.47.0': + resolution: {integrity: sha512-KVftVSVEDeIfRW3TIeLe3aNI/iY4m1fu5mDwHcisKMZSCMKLkrhFsjowC7o9RoqNPxbbglm2+/6KAKBIts2t0Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-musl@0.47.0': + resolution: {integrity: sha512-DTsmGEaA2860Aq5VUyDO8/MT9NFxwVL93RnRYmpMwK6DsSkThmvEpqoUDDljziEpAedMRG19SCogrNbINSbLUQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-openharmony-arm64@0.47.0': + resolution: {integrity: sha512-8r5BDro7fLOBoq1JXHLVSs55OlrxQhEso4HVo0TcY7OXJUPYfjPoOaYL5us+yIwqyP9rQwN+rxuiNFSmaxSuOQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxfmt/binding-win32-arm64-msvc@0.47.0': + resolution: {integrity: sha512-qtz/gzm8IjSPUlseZ0ofW8zyHLoZsuP5HTfcGGkWkUblB89JT8GNYH3ICqjbDsqsGqXum0/ZndXTFplSdXFIcg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxfmt/binding-win32-ia32-msvc@0.47.0': + resolution: {integrity: sha512-5vIcdcIDE7nCx+MXN6sm8kbC4zajDB31E86rez4i45iHNH/2NjdKlJ720xcHTr3eeiMcttCGPHPhE1TjtBDGZw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxfmt/binding-win32-x64-msvc@0.47.0': + resolution: {integrity: sha512-Sr59Y5ms54ONBjxFeWhVlGyQcHXxcl9DxC23f6yXlRkcos7LXBLoO+KDfxexjHIOZh7cWqrWduzvUjJ+pHp8cQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxlint/binding-android-arm-eabi@1.62.0': + resolution: {integrity: sha512-pKsthNECyvJh8lPTICz6VcwVy2jOqdhhsp1rlxCkhgZR47aKvXPmaRWQDv+zlXpRae4qm1MaaTnutkaOk5aofg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxlint/binding-android-arm64@1.62.0': + resolution: {integrity: sha512-b1AUNViByvgmR2xJDubvLIr+dSuu3uraG7bsAoKo+xrpspPvu6RIn6Fhr2JUhobfep3jwUTy18Huco6GkwdvGQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxlint/binding-darwin-arm64@1.62.0': + resolution: {integrity: sha512-iG+Tvf70UJ6otfwFYIHk36Sjq9cpPP5YLxkoggANNRtzgi3Tj3g8q6Ybqi6AtkU3+yg9QwF7bDCkCS6bbL4PCg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxlint/binding-darwin-x64@1.62.0': + resolution: {integrity: sha512-oOWI6YPPr5AJUx+yIDlxmuUbQjS5gZX3OH3QisawYvsZgLiQVvZtR0rPBcJTxLWqt2ClrWg0DlSrlUiG5SQNHg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxlint/binding-freebsd-x64@1.62.0': + resolution: {integrity: sha512-dLP33T7VLCmLVv4cvjkVX+rmkcwNk2UfxmsZPNur/7BQHoQR60zJ7XLiRvNUawlzn0u8ngCa3itjEG73MAMa/w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxlint/binding-linux-arm-gnueabihf@1.62.0': + resolution: {integrity: sha512-fl//LWNks6qo9chNY60UDYyIwtp7a5cEx4Y/rHPjaarhuwqx6jtbzEpD5V5AqmdL4a6Y5D8zeXg5HF2Cr0QmSQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm-musleabihf@1.62.0': + resolution: {integrity: sha512-i5vkAuxvueTODV3J2dL61/TXewDHhMFKvtD156cIsk7GsdfiAu7zW7kY0NJXhKeFHeiMZIh7eFNjkPYH6J47HQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm64-gnu@1.62.0': + resolution: {integrity: sha512-QwN19LLuIGuOjEflSeJkZmOTfBdBMlTmW8xbMf8TZhjd//cxVNYQPq75q7oKZBJc6hRx3gY7sX0Egc8cEIFZYg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-arm64-musl@1.62.0': + resolution: {integrity: sha512-8eCy3FCDuWUM5hWujAv6heMvfZPbcCOU3SdQUAkixZLu5bSzOkNfirJiLGoQFO943xceOKkiQRMQNzH++jM3WA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-ppc64-gnu@1.62.0': + resolution: {integrity: sha512-NjQ7K7tpTPDe9J+yq8p/s/J0E7lRCkK2uDBDqvT4XIT6f4Z0tlnr59OBg/WcrmVHER1AbrcfyxhGTXgcG8ytWg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-gnu@1.62.0': + resolution: {integrity: sha512-oKZed9gmSwze29dEt3/Wnsv6l/Ygw/FUst+8Kfpv2SGeS/glEoTGZAMQw37SVyzFV76UTHJN2snGgxK2t2+8ow==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-musl@1.62.0': + resolution: {integrity: sha512-gBjBxQ+9lGpAYq+ELqw0w8QXsBnkZclFc7GRX2r0LnEVn3ZTEqeIKpKcGjucmp76Q53bvJD0i4qBWBhcfhSfGA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-s390x-gnu@1.62.0': + resolution: {integrity: sha512-Ew2Kxs9EQ9/mbAIJ2hvocMC0wsOu6YKzStI2eFBDt+Td5O8seVC/oxgRIHqCcl5sf5ratA1nozQBAuv7tphkHg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-gnu@1.62.0': + resolution: {integrity: sha512-5z25jcAA0gfKyVwz71A0VXgaPlocPoTAxhlv/hgoK6tlCrfoNuw7haWbDHvGMfjXhdic4EqVXGRv5XsTqFnbRQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-musl@1.62.0': + resolution: {integrity: sha512-IWpHmMB6ZDllPvqWDkG6AmXrN7JF5e/c4g/0PuURsmlK+vHoYZPB70rr4u1bn3I4LsKCSpqqfveyx6UCOC8wdg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxlint/binding-openharmony-arm64@1.62.0': + resolution: {integrity: sha512-fjlSxxrD5pA594vkyikCS9MnPRjQawW6/BLgyTYkO+73wwPlYjkcZ7LSd974l0Q2zkHQmu4DPvJFLYA7o8xrxQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxlint/binding-win32-arm64-msvc@1.62.0': + resolution: {integrity: sha512-EiFXr8loNS0Ul3Gu80+9nr1T8jRmnKocqmHHg16tj5ZqTgUXyb97l2rrspVHdDluyFn9JfR4PoJFdNzw4paHww==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxlint/binding-win32-ia32-msvc@1.62.0': + resolution: {integrity: sha512-IgOFvL73li1bFgab+hThXYA0N2Xms2kV2MvZN95cebV+fmrZ9AVui1JSxfeeqRLo3CpPxKZlzhyq4G0cnaAvIw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxlint/binding-win32-x64-msvc@1.62.0': + resolution: {integrity: sha512-6hMpyDWQ2zGA1OXFKBrdYMUveUCO8UJhkO6JdwZPd78xIdHZNhjx+pib+4fC2Cljuhjyl0QwA2F3df/bs4Bp6A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@remix-run/assert@0.2.0': resolution: {integrity: sha512-SNfcxPQstoIBr/hbRSsTYLNnmIXMgiL4cY8o5HH9PE7Ue/NQcIwqNJtvV0xVrk3pY/ywxHhAwSl2V8ao1Is9Cg==} @@ -862,61 +1269,389 @@ packages: '@types/dom-navigation@1.0.7': resolution: {integrity: sha512-Di4W+i2faYquHUnyWUg3bBQp5pTNvjDDA7mIYfD/1WlLgan6sKkeVjGbdL78K0CuNEk5Pfc/c0rfelwkz10mnQ==} + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/node@25.6.0': resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} - aws4fetch@1.0.20: - resolution: {integrity: sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g==} + '@typescript-eslint/project-service@8.59.1': + resolution: {integrity: sha512-+MuHQlHiEr00Of/IQbE/MmEoi44znZHbR/Pz7Opq4HryUOlRi+/44dro9Ycy8Fyo+/024IWtw8m4JUMCGTYxDg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' - chokidar@5.0.0: - resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} - engines: {node: '>= 20.19.0'} + '@typescript-eslint/scope-manager@8.59.1': + resolution: {integrity: sha512-LwuHQI4pDOYVKvmH2dkaJo6YZCSgouVgnS/z7yBPKBMvgtBvyLqiLy9Z6b7+m/TRcX1NFYUqZetI5Y+aT4GEfg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + '@typescript-eslint/tsconfig-utils@8.59.1': + resolution: {integrity: sha512-/0nEyPbX7gRsk0Uwfe4ALwwgxuA66d/l2mhRDNlAvaj4U3juhUtJNq0DsY8M2AYwwb9rEq2hrC3IcIcEt++iJA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} + '@typescript-eslint/types@8.59.1': + resolution: {integrity: sha512-ZDCjgccSdYPw5Bxh+my4Z0lJU96ZDN7jbBzvmEn0FZx3RtU1C7VWl6NbDx94bwY3V5YsgwRzJPOgeY2Q/nLG8A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - es-module-lexer@2.1.0: - resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + '@typescript-eslint/typescript-estree@8.59.1': + resolution: {integrity: sha512-OUd+vJS05sSkOip+BkZ/2NS8RMxrAAJemsC6vU3kmfLyeaJT0TftHkV9mcx2107MmsBVXXexhVu4F0TZXyMl4g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' - esbuild@0.27.7: - resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} - engines: {node: '>=18'} - hasBin: true + '@typescript-eslint/utils@8.59.1': + resolution: {integrity: sha512-3pIeoXhCeYH9FSCBI8P3iNwJlGuzPlYKkTlen2O9T1DSeeg8UG8jstq6BLk+Mda0qup7mgk4z4XL4OzRaxZ8LA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] + '@typescript-eslint/visitor-keys@8.59.1': + resolution: {integrity: sha512-LdDNl6C5iJExcM0Yh0PwAIBb9PrSiCsWamF/JyEZawm3kFDnRoaq3LGE4bpyRao/fWeGKKyw7icx0YxrLFC5Cg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - get-tsconfig@4.14.0: - resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260501.1': + resolution: {integrity: sha512-OIYsqKouI2U7W5Q6VgUz7+t9FpIXNFk30xSUG7gGlN1bdDniWfW7t5n6mzEtiHUVTxRgJQBjXGAlhVa6A9h+pg==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [darwin] - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260501.1': + resolution: {integrity: sha512-hQ5UsEyOz3ErQE3sKKHMCfJJGQenD0DSCi2ob+ywElXirG2NyFNA8cmx1g+MIm1lpQeEQslWZhe9EGwo9DJAbg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [darwin] - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260501.1': + resolution: {integrity: sha512-fbaFKE1UvtsQ6i1eJjBiNbglR9ywXrW/CH1sqYPEtr0WgTUpixbE6inQOXjB0jlEA9RzQq+QMzDyaCDmU82Dkw==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [linux] - istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} + '@typescript/native-preview-linux-arm@7.0.0-dev.20260501.1': + resolution: {integrity: sha512-agkTW/t85XSJKWGcXdUV9ZmSi3Akh3POK+HhWehigEJR3W/jebiO9njifETfoUF6cpoYkFn+CZvfAJ00IWGZfA==} + engines: {node: '>=16.20.0'} + cpu: [arm] + os: [linux] - istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} + '@typescript/native-preview-linux-x64@7.0.0-dev.20260501.1': + resolution: {integrity: sha512-Sd8D+S88P7K0IH1U+a8pK20ZD+GM54t48/GLw9ebSklfCdt0iKdHgprjKIcl54C3SocGCcvEBPr1thwtTO9Vtg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [linux] + + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260501.1': + resolution: {integrity: sha512-07sJNDnU7KHfo/trv/cBXpgFBELDYJAsTx5kNvBckSQUxbX+p/b9oQ3eFbtK3zDP4EEKdeiD9EelIy22atBnzA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [win32] + + '@typescript/native-preview-win32-x64@7.0.0-dev.20260501.1': + resolution: {integrity: sha512-8rzd/eQZyBuR+IRiPnIQrCwSuXIGBFiL8LsUMFqQt2WAUlQ0gGWBlLJHUVU4YNlju9QROjNHUGpJ52XGZbFv0Q==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [win32] + + '@typescript/native-preview@7.0.0-dev.20260501.1': + resolution: {integrity: sha512-skD0ig8IzPwSY1L8VmNgfaxkfT8ImBwKeIypfZyJA+zHzWvroRKbRbT2GryOSREl22ZqLOuDfcq+7BdA0rjF2Q==} + engines: {node: '>=16.20.0'} + hasBin: true + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + aws4fetch@1.0.20: + resolution: {integrity: sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g==} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + baseline-browser-mapping@2.10.25: + resolution: {integrity: sha512-QO/VHsXCQdnzADMfmkeOPvHdIAkoB7i0/rGjINPJEetLx75hNttVWGQ/jycHUDP9zZ9rupbm60WRxcwViB0MiA==} + engines: {node: '>=6.0.0'} + hasBin: true + + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} + + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + caniuse-lite@1.0.30001791: + resolution: {integrity: sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + electron-to-chromium@1.5.348: + resolution: {integrity: sha512-QC2X59nRlycQQMc4ZXjSVBX+tSgJfgRtcrYHbIZLgOV2dCvefoQGegLR7lLXKgpPpSuVmJU19LMzGrSa2C7k3Q==} + + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-plugin-no-only-tests@3.4.0: + resolution: {integrity: sha512-4S3/9Nb7A2tiMcpzEQE9bQSlpeOz6WJkgryBuou/SA8W2x2c8Zf4j0NvTKBjv6qNhF9T79tmkecm/0CHqV0UGg==} + engines: {node: '>=5.0.0'} + + eslint-plugin-perfectionist@5.9.0: + resolution: {integrity: sha512-8TWzg02zmnBdZwCkWLi8jhzqXI+fE7Z/RwV8SL6xD45tJ8Bp3wGuYL2XtQgfe/Wd0eBqOUX+s6ey73IyszvKTA==} + engines: {node: ^20.0.0 || >=22.0.0} + peerDependencies: + eslint: ^8.45.0 || ^9.0.0 || ^10.0.0 + + eslint-plugin-react-hooks@7.1.1: + resolution: {integrity: sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0 + + eslint-plugin-unused-imports@4.4.1: + resolution: {integrity: sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 + eslint: ^10.0.0 || ^9.0.0 || ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.3.0: + resolution: {integrity: sha512-XbEXaRva5cF0ZQB8w6MluHA0kZZfV2DuCMJ3ozyEOHLwDpZX2Lmm/7Pp0xdJmI0GL1W05VH5VwIFHEm1Vcw2gw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-tsconfig@4.14.0: + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isexe@3.1.5: + resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==} + engines: {node: '>=18'} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} istanbul-reports@3.2.0: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@4.0.0: + resolution: {integrity: sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==} + engines: {node: ^18.17.0 || >=20.5.0} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + lightningcss-android-arm64@1.32.0: resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} @@ -991,6 +1726,13 @@ packages: resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -998,6 +1740,40 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + natural-orderby@5.0.0: + resolution: {integrity: sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==} + engines: {node: '>=18'} + + node-releases@2.0.38: + resolution: {integrity: sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==} + + npm-normalize-package-bin@4.0.0: + resolution: {integrity: sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==} + engines: {node: ^18.17.0 || >=20.5.0} + + npm-run-all2@8.0.4: + resolution: {integrity: sha512-wdbB5My48XKp2ZfJUlhnLVihzeuA1hgBnqB2J9ahV77wLS+/YAJAlN8I+X3DIFIPZ3m5L7nplmlbhNiFDmXRDA==} + engines: {node: ^20.5.0 || >=22.0.0, npm: '>= 10'} + hasBin: true + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + oxc-minify@0.121.0: resolution: {integrity: sha512-XziD0au8etayM2zJnqcSiW+Pn3hEpqHsbwfL7G4Ej0SwqfvbIjiEF1/uNqONuHl0n9LkLI1ez378vSWZRJZWAQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1013,10 +1789,61 @@ packages: resolution: {integrity: sha512-Kf243wJU/vWF/ThV+ZyfLMQIrViVFRSyYO7UPKpZMMPGGMzxxcHgsNGWy0Uy+pcXD78+jdUnxVTR9rYT73Qw3A==} engines: {node: ^20.19.0 || >=22.12.0} + oxfmt@0.47.0: + resolution: {integrity: sha512-OFbkbzxKCpooQEnRmpTDnuwTX8KHXzZTQ4Df/hz85fpS67Pl+lxPEFvUtin56HIIS0B1k4X8oIzTXRZPufA2CA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + oxlint@1.62.0: + resolution: {integrity: sha512-1uFkg6HakjsGIpW9wNdeW4/2LOHW9MEkoWjZUTUfQtIHyLIZPYt00w3Sg+H3lH+206FgBPHBbW5dVE5l2ExECQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=0.18.0' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@4.0.4: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + read-package-json-fast@4.0.0: + resolution: {integrity: sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==} + engines: {node: ^18.17.0 || >=20.5.0} + readdirp@5.0.0: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} @@ -1043,11 +1870,27 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + semver@7.7.4: resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} hasBin: true + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.3: + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + engines: {node: '>= 0.4'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -1056,6 +1899,20 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + engines: {node: '>=12.0.0'} + + tinypool@2.1.0: + resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} + engines: {node: ^20.0.0 || >=22.0.0} + + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -1064,6 +1921,10 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + typescript@6.0.3: resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} @@ -1076,12 +1937,151 @@ packages: undici-types@7.19.2: resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + v8-to-istanbul@9.3.0: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + which@5.0.0: + resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zod-validation-error@4.0.2: + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + + zod@4.4.1: + resolution: {integrity: sha512-a6ENMBBGZBsnlSebQ/eKCguSBeGKSf4O7BPnqVPmYGtpBYI7VSqoVqw+QcB7kPRjbqPwhYTpFbVj/RqNz/CT0Q==} + snapshots: + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.3': {} + + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.3 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.29.3 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.29.2': + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + + '@babel/parser@7.29.3': + dependencies: + '@babel/types': 7.29.0 + + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 + + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.3 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@emnapi/core@1.10.0': dependencies: '@emnapi/wasi-threads': 1.2.1 @@ -1176,6 +2176,62 @@ snapshots: '@esbuild/win32-x64@0.27.7': optional: true + '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0)': + dependencies: + eslint: 10.3.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.23.5': + dependencies: + '@eslint/object-schema': 3.0.5 + debug: 4.4.3 + minimatch: 10.2.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.5.5': + dependencies: + '@eslint/core': 1.2.1 + + '@eslint/core@1.2.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/object-schema@3.0.5': {} + + '@eslint/plugin-kit@0.7.1': + dependencies: + '@eslint/core': 1.2.1 + levn: 0.4.1 + + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/sourcemap-codec@1.5.5': {} @@ -1192,6 +2248,24 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true + '@nkzw/eslint-plugin@2.0.0(eslint@10.3.0)': + dependencies: + eslint: 10.3.0 + + '@nkzw/oxlint-config@1.1.1(eslint@10.3.0)(oxlint@1.62.0)(typescript@6.0.3)': + dependencies: + '@nkzw/eslint-plugin': 2.0.0(eslint@10.3.0) + eslint-plugin-no-only-tests: 3.4.0 + eslint-plugin-perfectionist: 5.9.0(eslint@10.3.0)(typescript@6.0.3) + eslint-plugin-react-hooks: 7.1.1(eslint@10.3.0) + eslint-plugin-unused-imports: 4.4.1(eslint@10.3.0) + oxlint: 1.62.0 + transitivePeerDependencies: + - '@typescript-eslint/eslint-plugin' + - eslint + - supports-color + - typescript + '@oxc-minify/binding-android-arm-eabi@0.121.0': optional: true @@ -1456,6 +2530,120 @@ snapshots: '@oxc-transform/binding-win32-x64-msvc@0.121.0': optional: true + '@oxfmt/binding-android-arm-eabi@0.47.0': + optional: true + + '@oxfmt/binding-android-arm64@0.47.0': + optional: true + + '@oxfmt/binding-darwin-arm64@0.47.0': + optional: true + + '@oxfmt/binding-darwin-x64@0.47.0': + optional: true + + '@oxfmt/binding-freebsd-x64@0.47.0': + optional: true + + '@oxfmt/binding-linux-arm-gnueabihf@0.47.0': + optional: true + + '@oxfmt/binding-linux-arm-musleabihf@0.47.0': + optional: true + + '@oxfmt/binding-linux-arm64-gnu@0.47.0': + optional: true + + '@oxfmt/binding-linux-arm64-musl@0.47.0': + optional: true + + '@oxfmt/binding-linux-ppc64-gnu@0.47.0': + optional: true + + '@oxfmt/binding-linux-riscv64-gnu@0.47.0': + optional: true + + '@oxfmt/binding-linux-riscv64-musl@0.47.0': + optional: true + + '@oxfmt/binding-linux-s390x-gnu@0.47.0': + optional: true + + '@oxfmt/binding-linux-x64-gnu@0.47.0': + optional: true + + '@oxfmt/binding-linux-x64-musl@0.47.0': + optional: true + + '@oxfmt/binding-openharmony-arm64@0.47.0': + optional: true + + '@oxfmt/binding-win32-arm64-msvc@0.47.0': + optional: true + + '@oxfmt/binding-win32-ia32-msvc@0.47.0': + optional: true + + '@oxfmt/binding-win32-x64-msvc@0.47.0': + optional: true + + '@oxlint/binding-android-arm-eabi@1.62.0': + optional: true + + '@oxlint/binding-android-arm64@1.62.0': + optional: true + + '@oxlint/binding-darwin-arm64@1.62.0': + optional: true + + '@oxlint/binding-darwin-x64@1.62.0': + optional: true + + '@oxlint/binding-freebsd-x64@1.62.0': + optional: true + + '@oxlint/binding-linux-arm-gnueabihf@1.62.0': + optional: true + + '@oxlint/binding-linux-arm-musleabihf@1.62.0': + optional: true + + '@oxlint/binding-linux-arm64-gnu@1.62.0': + optional: true + + '@oxlint/binding-linux-arm64-musl@1.62.0': + optional: true + + '@oxlint/binding-linux-ppc64-gnu@1.62.0': + optional: true + + '@oxlint/binding-linux-riscv64-gnu@1.62.0': + optional: true + + '@oxlint/binding-linux-riscv64-musl@1.62.0': + optional: true + + '@oxlint/binding-linux-s390x-gnu@1.62.0': + optional: true + + '@oxlint/binding-linux-x64-gnu@1.62.0': + optional: true + + '@oxlint/binding-linux-x64-musl@1.62.0': + optional: true + + '@oxlint/binding-openharmony-arm64@1.62.0': + optional: true + + '@oxlint/binding-win32-arm64-msvc@1.62.0': + optional: true + + '@oxlint/binding-win32-ia32-msvc@1.62.0': + optional: true + + '@oxlint/binding-win32-x64-msvc@1.62.0': + optional: true + '@remix-run/assert@0.2.0': {} '@remix-run/assets@0.3.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': @@ -1666,22 +2854,157 @@ snapshots: '@types/dom-navigation@1.0.7': {} + '@types/esrecurse@4.3.1': {} + + '@types/estree@1.0.8': {} + '@types/istanbul-lib-coverage@2.0.6': {} + '@types/json-schema@7.0.15': {} + '@types/node@25.6.0': dependencies: undici-types: 7.19.2 + '@typescript-eslint/project-service@8.59.1(typescript@6.0.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.59.1(typescript@6.0.3) + '@typescript-eslint/types': 8.59.1 + debug: 4.4.3 + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.59.1': + dependencies: + '@typescript-eslint/types': 8.59.1 + '@typescript-eslint/visitor-keys': 8.59.1 + + '@typescript-eslint/tsconfig-utils@8.59.1(typescript@6.0.3)': + dependencies: + typescript: 6.0.3 + + '@typescript-eslint/types@8.59.1': {} + + '@typescript-eslint/typescript-estree@8.59.1(typescript@6.0.3)': + dependencies: + '@typescript-eslint/project-service': 8.59.1(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.59.1(typescript@6.0.3) + '@typescript-eslint/types': 8.59.1 + '@typescript-eslint/visitor-keys': 8.59.1 + debug: 4.4.3 + minimatch: 10.2.5 + semver: 7.7.4 + tinyglobby: 0.2.16 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.59.1(eslint@10.3.0)(typescript@6.0.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) + '@typescript-eslint/scope-manager': 8.59.1 + '@typescript-eslint/types': 8.59.1 + '@typescript-eslint/typescript-estree': 8.59.1(typescript@6.0.3) + eslint: 10.3.0 + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.59.1': + dependencies: + '@typescript-eslint/types': 8.59.1 + eslint-visitor-keys: 5.0.1 + + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260501.1': + optional: true + + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260501.1': + optional: true + + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260501.1': + optional: true + + '@typescript/native-preview-linux-arm@7.0.0-dev.20260501.1': + optional: true + + '@typescript/native-preview-linux-x64@7.0.0-dev.20260501.1': + optional: true + + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260501.1': + optional: true + + '@typescript/native-preview-win32-x64@7.0.0-dev.20260501.1': + optional: true + + '@typescript/native-preview@7.0.0-dev.20260501.1': + optionalDependencies: + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260501.1 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260501.1 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20260501.1 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260501.1 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20260501.1 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260501.1 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20260501.1 + + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + + acorn@8.16.0: {} + + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-styles@6.2.3: {} + aws4fetch@1.0.20: {} + balanced-match@4.0.4: {} + + baseline-browser-mapping@2.10.25: {} + + brace-expansion@5.0.5: + dependencies: + balanced-match: 4.0.4 + + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.25 + caniuse-lite: 1.0.30001791 + electron-to-chromium: 1.5.348 + node-releases: 2.0.38 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + + caniuse-lite@1.0.30001791: {} + chokidar@5.0.0: dependencies: readdirp: 5.0.0 convert-source-map@2.0.0: {} + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + detect-libc@2.1.2: {} + electron-to-chromium@1.5.348: {} + es-module-lexer@2.1.0: {} esbuild@0.27.7: @@ -1713,17 +3036,163 @@ snapshots: '@esbuild/win32-ia32': 0.27.7 '@esbuild/win32-x64': 0.27.7 + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-plugin-no-only-tests@3.4.0: {} + + eslint-plugin-perfectionist@5.9.0(eslint@10.3.0)(typescript@6.0.3): + dependencies: + '@typescript-eslint/utils': 8.59.1(eslint@10.3.0)(typescript@6.0.3) + eslint: 10.3.0 + natural-orderby: 5.0.0 + transitivePeerDependencies: + - supports-color + - typescript + + eslint-plugin-react-hooks@7.1.1(eslint@10.3.0): + dependencies: + '@babel/core': 7.29.0 + '@babel/parser': 7.29.3 + eslint: 10.3.0 + hermes-parser: 0.25.1 + zod: 4.4.1 + zod-validation-error: 4.0.2(zod@4.4.1) + transitivePeerDependencies: + - supports-color + + eslint-plugin-unused-imports@4.4.1(eslint@10.3.0): + dependencies: + eslint: 10.3.0 + + eslint-scope@9.1.2: + dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.8 + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@10.3.0: + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.5 + '@eslint/config-helpers': 0.5.5 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.1 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.15.0 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + espree@11.2.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 5.0.1 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.4.2 + keyv: 4.5.4 + + flatted@3.4.2: {} + fsevents@2.3.3: optional: true + gensync@1.0.0-beta.2: {} + get-tsconfig@4.14.0: dependencies: resolve-pkg-maps: 1.0.0 + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + has-flag@4.0.0: {} + hermes-estree@0.25.1: {} + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + html-escaper@2.0.2: {} + ignore@5.3.2: {} + + imurmurhash@0.1.4: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + isexe@2.0.0: {} + + isexe@3.1.5: {} + istanbul-lib-coverage@3.2.2: {} istanbul-lib-report@3.0.1: @@ -1737,6 +3206,29 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + js-tokens@4.0.0: {} + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@4.0.0: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + lightningcss-android-arm64@1.32.0: optional: true @@ -1786,6 +3278,14 @@ snapshots: lightningcss-win32-arm64-msvc: 1.32.0 lightningcss-win32-x64-msvc: 1.32.0 + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -1794,6 +3294,42 @@ snapshots: dependencies: semver: 7.7.4 + memorystream@0.3.1: {} + + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.5 + + ms@2.1.3: {} + + natural-compare@1.4.0: {} + + natural-orderby@5.0.0: {} + + node-releases@2.0.38: {} + + npm-normalize-package-bin@4.0.0: {} + + npm-run-all2@8.0.4: + dependencies: + ansi-styles: 6.2.3 + cross-spawn: 7.0.6 + memorystream: 0.3.1 + picomatch: 4.0.4 + pidtree: 0.6.0 + read-package-json-fast: 4.0.0 + shell-quote: 1.8.3 + which: 5.0.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + oxc-minify@0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): optionalDependencies: '@oxc-minify/binding-android-arm-eabi': 0.121.0 @@ -1900,8 +3436,79 @@ snapshots: - '@emnapi/core' - '@emnapi/runtime' + oxfmt@0.47.0: + dependencies: + tinypool: 2.1.0 + optionalDependencies: + '@oxfmt/binding-android-arm-eabi': 0.47.0 + '@oxfmt/binding-android-arm64': 0.47.0 + '@oxfmt/binding-darwin-arm64': 0.47.0 + '@oxfmt/binding-darwin-x64': 0.47.0 + '@oxfmt/binding-freebsd-x64': 0.47.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.47.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.47.0 + '@oxfmt/binding-linux-arm64-gnu': 0.47.0 + '@oxfmt/binding-linux-arm64-musl': 0.47.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.47.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.47.0 + '@oxfmt/binding-linux-riscv64-musl': 0.47.0 + '@oxfmt/binding-linux-s390x-gnu': 0.47.0 + '@oxfmt/binding-linux-x64-gnu': 0.47.0 + '@oxfmt/binding-linux-x64-musl': 0.47.0 + '@oxfmt/binding-openharmony-arm64': 0.47.0 + '@oxfmt/binding-win32-arm64-msvc': 0.47.0 + '@oxfmt/binding-win32-ia32-msvc': 0.47.0 + '@oxfmt/binding-win32-x64-msvc': 0.47.0 + + oxlint@1.62.0: + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.62.0 + '@oxlint/binding-android-arm64': 1.62.0 + '@oxlint/binding-darwin-arm64': 1.62.0 + '@oxlint/binding-darwin-x64': 1.62.0 + '@oxlint/binding-freebsd-x64': 1.62.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.62.0 + '@oxlint/binding-linux-arm-musleabihf': 1.62.0 + '@oxlint/binding-linux-arm64-gnu': 1.62.0 + '@oxlint/binding-linux-arm64-musl': 1.62.0 + '@oxlint/binding-linux-ppc64-gnu': 1.62.0 + '@oxlint/binding-linux-riscv64-gnu': 1.62.0 + '@oxlint/binding-linux-riscv64-musl': 1.62.0 + '@oxlint/binding-linux-s390x-gnu': 1.62.0 + '@oxlint/binding-linux-x64-gnu': 1.62.0 + '@oxlint/binding-linux-x64-musl': 1.62.0 + '@oxlint/binding-openharmony-arm64': 1.62.0 + '@oxlint/binding-win32-arm64-msvc': 1.62.0 + '@oxlint/binding-win32-ia32-msvc': 1.62.0 + '@oxlint/binding-win32-x64-msvc': 1.62.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + picocolors@1.1.1: {} + picomatch@4.0.4: {} + pidtree@0.6.0: {} + + prelude-ls@1.2.1: {} + + punycode@2.3.1: {} + + read-package-json-fast@4.0.0: + dependencies: + json-parse-even-better-errors: 4.0.0 + npm-normalize-package-bin: 4.0.0 + readdirp@5.0.0: {} remix@3.0.0-beta.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): @@ -1955,14 +3562,35 @@ snapshots: resolve-pkg-maps@1.0.0: {} + semver@6.3.1: {} + semver@7.7.4: {} + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shell-quote@1.8.3: {} + source-map-js@1.2.1: {} supports-color@7.2.0: dependencies: has-flag: 4.0.0 + tinyglobby@0.2.16: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + tinypool@2.1.0: {} + + ts-api-utils@2.5.0(typescript@6.0.3): + dependencies: + typescript: 6.0.3 + tslib@2.8.1: optional: true @@ -1973,6 +3601,10 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + typescript@6.0.3: {} uWebSockets.js@https://codeload.github.com/uNetworking/uWebSockets.js/tar.gz/a63031f40f76dc2422e8da736c04217053e9db2b: @@ -1980,8 +3612,38 @@ snapshots: undici-types@7.19.2: {} + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + v8-to-istanbul@9.3.0: dependencies: '@jridgewell/trace-mapping': 0.3.31 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + which@5.0.0: + dependencies: + isexe: 3.1.5 + + word-wrap@1.2.5: {} + + yallist@3.1.1: {} + + yocto-queue@0.1.0: {} + + zod-validation-error@4.0.2(zod@4.4.1): + dependencies: + zod: 4.4.1 + + zod@4.4.1: {} From 7697b644f9b42ec276c1f5f48b36fb037b22f3de Mon Sep 17 00:00:00 2001 From: Guilherme de Andrade Date: Fri, 1 May 2026 21:37:09 +0100 Subject: [PATCH 4/7] style: fix lint and formatting across source files --- app/assets.ts | 8 ++++---- app/assets/entry.ts | 10 ++++++---- app/controllers/writing/controller.tsx | 16 +++++----------- app/data/posts.ts | 26 +++++++++++++------------- app/router.ts | 2 +- app/ui/document.tsx | 6 +++--- app/ui/layout.tsx | 5 ++--- app/utils/render.tsx | 18 +++++++++++------- server.ts | 2 +- 9 files changed, 46 insertions(+), 47 deletions(-) diff --git a/app/assets.ts b/app/assets.ts index f032db0..7c8f30e 100644 --- a/app/assets.ts +++ b/app/assets.ts @@ -1,18 +1,18 @@ import { createAssetServer } from "remix/assets"; export const assets = createAssetServer({ + allow: ["app/assets/**", "app/ui/prompt-button.tsx", "node_modules/**"], basePath: "/assets", - rootDir: process.cwd(), + deny: ["app/**/*.server.*"], fileMap: { "app/*path": "app/*path", "node_modules/*path": "node_modules/*path", }, - allow: ["app/assets/**", "app/ui/prompt-button.tsx", "node_modules/**"], - deny: ["app/**/*.server.*"], - sourceMaps: process.env.NODE_ENV === "development" ? "external" : undefined, + rootDir: process.cwd(), scripts: { define: { "process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV ?? "development"), }, }, + sourceMaps: process.env.NODE_ENV === "development" ? "external" : undefined, }); diff --git a/app/assets/entry.ts b/app/assets/entry.ts index 8f08312..88b1d2b 100644 --- a/app/assets/entry.ts +++ b/app/assets/entry.ts @@ -2,14 +2,16 @@ import { run } from "remix/ui"; run({ async loadModule(moduleUrl, exportName) { - let mod = await import(moduleUrl); + const mod = await import(moduleUrl); return mod[exportName]; }, async resolveFrame(src, signal, target) { - let headers = new Headers({ accept: "text/html" }); - if (target) headers.set("x-remix-target", target); + const headers = new Headers({ accept: "text/html" }); + if (target) { + headers.set("x-remix-target", target); + } - let response = await fetch(src, { + const response = await fetch(src, { credentials: "same-origin", headers, signal, diff --git a/app/controllers/writing/controller.tsx b/app/controllers/writing/controller.tsx index 070577d..b857f65 100644 --- a/app/controllers/writing/controller.tsx +++ b/app/controllers/writing/controller.tsx @@ -8,7 +8,7 @@ import { render } from "../../utils/render.tsx"; export default { actions: { async index({ request }) { - let posts = getAllPosts(); + const posts = getAllPosts(); return render( @@ -17,8 +17,8 @@ export default { ); }, - async show({ request, params }) { - let post = getPostBySlug(params.slug); + async show({ params, request }) { + const post = getPostBySlug(params.slug); if (!post) { return new Response("Not Found", { status: 404 }); } @@ -39,9 +39,7 @@ function WritingIndexPage() {
      {posts.map((post) => (
    • - - {post.title} - + {post.title} {" — "}
    • @@ -52,11 +50,7 @@ function WritingIndexPage() { } function WritingShowPage() { - return ({ - post, - }: { - post: NonNullable>; - }) => ( + return ({ post }: { post: NonNullable> }) => (

      {post.title}

      diff --git a/app/data/posts.ts b/app/data/posts.ts index 116f380..bda40b2 100644 --- a/app/data/posts.ts +++ b/app/data/posts.ts @@ -1,30 +1,30 @@ export interface Post { + content: string; + date: string; slug: string; title: string; - date: string; - content: string; } -export const posts: Post[] = [ +export const posts: Array = [ { - slug: "hello-world", - title: "Hello World", - date: "2025-01-15", content: "This is my first blog post. Welcome to my personal website! I am excited to share my thoughts, projects, and ideas here.", + date: "2025-01-15", + slug: "hello-world", + title: "Hello World", }, { - slug: "why-i-built-this", - title: "Why I Built This", - date: "2025-02-01", content: "I wanted a simple, fast personal website that I fully control. No bloated CMS, no tracking, just clean HTML and my own words.", + date: "2025-02-01", + slug: "why-i-built-this", + title: "Why I Built This", }, { + content: "Your post content here...", + date: "2025-05-01", slug: "my-new-post", title: "My New Post", - date: "2025-05-01", - content: "Your post content here...", }, ]; @@ -32,6 +32,6 @@ export function getPostBySlug(slug: string): Post | undefined { return posts.find((post) => post.slug === slug); } -export function getAllPosts(): Post[] { - return [...posts].sort((a, b) => b.date.localeCompare(a.date)); +export function getAllPosts(): Array { + return [...posts].toSorted((a, b) => b.date.localeCompare(a.date)); } diff --git a/app/router.ts b/app/router.ts index 0bc2dce..a8674dc 100644 --- a/app/router.ts +++ b/app/router.ts @@ -8,7 +8,7 @@ import { routes } from "./routes.ts"; export const router = createRouter(); router.get(routes.assets, async ({ request }) => { - let response = await assets.fetch(request); + const response = await assets.fetch(request); return response ?? new Response("Not Found", { status: 404 }); }); diff --git a/app/ui/document.tsx b/app/ui/document.tsx index 871f85b..8ed6634 100644 --- a/app/ui/document.tsx +++ b/app/ui/document.tsx @@ -10,16 +10,16 @@ export interface DocumentProps { const DEFAULT_TITLE = decodeURIComponent("Ubmit.dev"); export function Document() { - return ({ title = DEFAULT_TITLE, children }: DocumentProps) => ( + return ({ children, title = DEFAULT_TITLE }: DocumentProps) => ( - + {title} {children} - + ); diff --git a/app/ui/layout.tsx b/app/ui/layout.tsx index 424ddd1..24816d3 100644 --- a/app/ui/layout.tsx +++ b/app/ui/layout.tsx @@ -9,12 +9,11 @@ export interface LayoutProps { } export function Layout() { - return ({ title, children }: LayoutProps) => ( + return ({ children, title }: LayoutProps) => (
      {children}
      diff --git a/app/utils/render.tsx b/app/utils/render.tsx index 29d8bb2..24a0927 100644 --- a/app/utils/render.tsx +++ b/app/utils/render.tsx @@ -4,20 +4,24 @@ import { renderToStream } from "remix/ui/server"; import { router } from "../router.ts"; export function render(node: RemixNode, request: Request, init?: ResponseInit) { - let stream = renderToStream(node, { + const stream = renderToStream(node, { frameSrc: request.url, async resolveFrame(src, target) { - let headers = new Headers({ accept: "text/html" }); - let cookie = request.headers.get("cookie"); - if (cookie) headers.set("cookie", cookie); - if (target) headers.set("x-remix-target", target); + const headers = new Headers({ accept: "text/html" }); + const cookie = request.headers.get("cookie"); + if (cookie) { + headers.set("cookie", cookie); + } + if (target) { + headers.set("x-remix-target", target); + } - let response = await router.fetch(new Request(new URL(src, request.url), { headers })); + const response = await router.fetch(new Request(new URL(src, request.url), { headers })); return response.body ?? response.text(); }, }); - let headers = new Headers(init?.headers); + const headers = new Headers(init?.headers); if (!headers.has("Content-Type")) { headers.set("Content-Type", "text/html; charset=utf-8"); } diff --git a/server.ts b/server.ts index acfb685..3efeeba 100644 --- a/server.ts +++ b/server.ts @@ -2,7 +2,7 @@ import { serve } from "remix/node-serve"; import { router } from "./app/router.ts"; -const port = process.env.PORT ? Number.parseInt(process.env.PORT, 10) : 44100; +const port = process.env.PORT ? Number.parseInt(process.env.PORT, 10) : 44_100; const server = serve( async (request) => { From a20b7d9810b0619cb7c11b3e02610049352b4f3c Mon Sep 17 00:00:00 2001 From: gui de andrade Date: Sat, 2 May 2026 00:25:20 +0100 Subject: [PATCH 5/7] chore: migrate tooling to vite-plus --- .oxfmtrc.json | 4 - .vite-hooks/pre-commit | 1 + app/assets.ts | 2 +- oxlint.config.ts | 21 - package.json | 16 +- pnpm-lock.yaml | 1150 ++++++++++++++++++++++++++++++++++++---- pnpm-workspace.yaml | 16 + vite.config.ts | 33 ++ 8 files changed, 1095 insertions(+), 148 deletions(-) delete mode 100644 .oxfmtrc.json create mode 100755 .vite-hooks/pre-commit delete mode 100644 oxlint.config.ts create mode 100644 pnpm-workspace.yaml create mode 100644 vite.config.ts diff --git a/.oxfmtrc.json b/.oxfmtrc.json deleted file mode 100644 index 35c9264..0000000 --- a/.oxfmtrc.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "$schema": "./node_modules/oxfmt/configuration_schema.json", - "ignorePatterns": ["node_modules", "build", "dist", "public/build"] -} diff --git a/.vite-hooks/pre-commit b/.vite-hooks/pre-commit new file mode 100755 index 0000000..85fb65b --- /dev/null +++ b/.vite-hooks/pre-commit @@ -0,0 +1 @@ +vp staged diff --git a/app/assets.ts b/app/assets.ts index 7c8f30e..e81f7f2 100644 --- a/app/assets.ts +++ b/app/assets.ts @@ -1,7 +1,7 @@ import { createAssetServer } from "remix/assets"; export const assets = createAssetServer({ - allow: ["app/assets/**", "app/ui/prompt-button.tsx", "node_modules/**"], + allow: ["app/assets/**", "node_modules/**"], basePath: "/assets", deny: ["app/**/*.server.*"], fileMap: { diff --git a/oxlint.config.ts b/oxlint.config.ts deleted file mode 100644 index 8d8bbef..0000000 --- a/oxlint.config.ts +++ /dev/null @@ -1,21 +0,0 @@ -import nkzw from "@nkzw/oxlint-config"; -import { defineConfig } from "oxlint"; - -export default defineConfig({ - extends: [nkzw], - overrides: [ - { - files: ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.cts"], - rules: { - "react-in-jsx-scope": "off", - "react/display-name": "off", - }, - }, - { - files: ["server.ts", "app/**/*.tsx"], - rules: { - "no-console": "off", - }, - }, - ], -}); diff --git a/package.json b/package.json index 6866d15..bf943d6 100644 --- a/package.json +++ b/package.json @@ -3,13 +3,14 @@ "private": true, "type": "module", "scripts": { - "dev": "tsx watch server.ts", + "dev": "NODE_ENV=DEVELOPMENT tsx watch server.ts", "start": "tsx server.ts", "tsc": "tsgo", - "lint": "oxlint", - "format": "oxfmt", - "format:check": "oxfmt --check", - "check": "npm-run-all --parallel tsc lint format:check" + "lint": "vp lint", + "format": "vp fmt", + "format:check": "vp fmt --check", + "check": "npm-run-all --parallel tsc lint format:check", + "prepare": "vp config" }, "dependencies": { "remix": "^3.0.0-beta.0", @@ -25,9 +26,8 @@ "eslint-plugin-react-hooks": "^7.1.1", "eslint-plugin-unused-imports": "^4.4.1", "npm-run-all2": "^8.0.4", - "oxfmt": "^0.47.0", - "oxlint": "^1.62.0", - "typescript": "latest" + "typescript": "latest", + "vite-plus": "catalog:" }, "engines": { "node": ">=24.3.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 37f5b0a..33548bc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,16 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +catalogs: + default: + vite-plus: + specifier: latest + version: 0.1.20 + +overrides: + vite: npm:@voidzero-dev/vite-plus-core@latest + vitest: npm:@voidzero-dev/vite-plus-test@latest + importers: .: @@ -17,10 +27,10 @@ importers: devDependencies: '@nkzw/eslint-plugin': specifier: ^2.0.0 - version: 2.0.0(eslint@10.3.0) + version: 2.0.0(eslint@10.3.0(jiti@2.6.1)) '@nkzw/oxlint-config': specifier: ^1.1.1 - version: 1.1.1(eslint@10.3.0)(oxlint@1.62.0)(typescript@6.0.3) + version: 1.1.1(eslint@10.3.0(jiti@2.6.1))(oxlint@1.62.0(oxlint-tsgolint@0.22.0))(typescript@6.0.3) '@types/node': specifier: latest version: 25.6.0 @@ -32,25 +42,22 @@ importers: version: 3.4.0 eslint-plugin-perfectionist: specifier: ^5.9.0 - version: 5.9.0(eslint@10.3.0)(typescript@6.0.3) + version: 5.9.0(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) eslint-plugin-react-hooks: specifier: ^7.1.1 - version: 7.1.1(eslint@10.3.0) + version: 7.1.1(eslint@10.3.0(jiti@2.6.1)) eslint-plugin-unused-imports: specifier: ^4.4.1 - version: 4.4.1(eslint@10.3.0) + version: 4.4.1(eslint@10.3.0(jiti@2.6.1)) npm-run-all2: specifier: ^8.0.4 version: 8.0.4 - oxfmt: - specifier: ^0.47.0 - version: 0.47.0 - oxlint: - specifier: ^1.62.0 - version: 1.62.0 typescript: specifier: latest version: 6.0.3 + vite-plus: + specifier: 'catalog:' + version: 0.1.20(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) packages: @@ -626,9 +633,16 @@ packages: resolution: {integrity: sha512-p0bQukD8OEHxzY4T9OlANBbEFGnOnjo1CYi50HES7OD36UO2yPh6T+uOJKLtlg06eclxroipRCpQGMpeH8EJ/g==} engines: {node: ^20.19.0 || >=22.12.0} + '@oxc-project/runtime@0.127.0': + resolution: {integrity: sha512-UQYLxAhDDPHm++szfa4z0RTdcPq5vaywrAoEA2n1YaAKeanXQdjHsoT6x1gP3U97RN8LZ7yHsSOrKPCcA6mCqw==} + engines: {node: ^20.19.0 || >=22.12.0} + '@oxc-project/types@0.121.0': resolution: {integrity: sha512-CGtOARQb9tyv7ECgdAlFxi0Fv7lmzvmlm2rpD/RdijOO9rfk/JvB1CjT8EnoD+tjna/IYgKKw3IV7objRb+aYw==} + '@oxc-project/types@0.127.0': + resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} + '@oxc-resolver/binding-android-arm-eabi@11.19.1': resolution: {integrity: sha512-aUs47y+xyXHUKlbhqHUjBABjvycq6YSD7bpxSW7vplUmdzAlJ93yXY6ZR0c1o1x5A/QKbENCvs3+NlY8IpIVzg==} cpu: [arm] @@ -864,170 +878,249 @@ packages: cpu: [x64] os: [win32] - '@oxfmt/binding-android-arm-eabi@0.47.0': - resolution: {integrity: sha512-KrMQRdMi/upr81qT4ijK6X6BNp6jqpMY7FwILQnwIy9QLc3qpnhUx5rsCLGzn4ewsCQ0CNAspN2ogmP1GXLyLw==} + '@oxfmt/binding-android-arm-eabi@0.46.0': + resolution: {integrity: sha512-b1doV4WRcJU+BESSlCvCjV+5CEr/T6h0frArAdV26Nir+gGNFNaylvDiiMPfF1pxeV0txZEs38ojzJaxBYg+ng==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.47.0': - resolution: {integrity: sha512-r4ixS/PeUpAFKgrpDoZ5pSkthjZzVzKd95525Aazj+aOv9H4ulK5zYHGb7wFY5n5kZxHK8TbOJUZgoEb1ohddQ==} + '@oxfmt/binding-android-arm64@0.46.0': + resolution: {integrity: sha512-v6+HhjsoV3GO0u2u9jLSAZrvWfTraDxKofUIQ7/ktS7tzS+epVsxdHmeM+XxuNcAY/nWxxU1Sg4JcGTNRXraBA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.47.0': - resolution: {integrity: sha512-CLWxiKpMl+195cm09CuaWEhJK0CirRkoMa07aR9+9AFPat2LfIKtwx1JqxZM0MTvcMe6+adlJNdVL6jdInvq3g==} + '@oxfmt/binding-darwin-arm64@0.46.0': + resolution: {integrity: sha512-3eeooJGrqGIlI5MyryDZsAcKXSmKIgAD4yYtfRrRJzXZ0UTFZtiSveIur56YPrGMYZwT4XyVhHsMqrNwr1XeFA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.47.0': - resolution: {integrity: sha512-Xq5fjTYDC50faUeLSm0rZdBqoTgleXEdD7NpJdARtQIczkCJn3xNjMUSQQkUmh4CtxkKTNL68lytcOK3e/osgg==} + '@oxfmt/binding-darwin-x64@0.46.0': + resolution: {integrity: sha512-QG8BDM0CXWbu84k2SKmCqfEddPQPFiBicwtYnLqHRWZZl57HbtOLRMac/KTq2NO4AEc4ICCBpFxJIV9zcqYfkQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.47.0': - resolution: {integrity: sha512-QOU9ZIJ52p5askcEC0QJvvr8trHAWoonul8bgISo6gYUL3s50zkqafBYcNAr9LJZQbsZtPfIWHk9+5+nUp1qJQ==} + '@oxfmt/binding-freebsd-x64@0.46.0': + resolution: {integrity: sha512-9DdCqS/n2ncu/Chazvt3cpgAjAmIGQDz7hFKSrNItMApyV/Ja9mz3hD4JakIE3nS8PW9smEbPWnb389QLBY4nw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.47.0': - resolution: {integrity: sha512-oJxDM1aBhPvz9gmElBv8UpxyiqhwfjcbrSxT5F0xtuUzY6dQI27/AQPIt3eu3Z5Yvn0kQl5R7MA3Z+MbnRvCBw==} + '@oxfmt/binding-linux-arm-gnueabihf@0.46.0': + resolution: {integrity: sha512-Dgs7VeE2jT0LHMhw6tPEt0xQYe54kBqHEovmWsv4FVQlegCOvlIJNx0S8n4vj8WUtpT+Z6BD2HhKJPLglLxvZg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.47.0': - resolution: {integrity: sha512-g8Lh50VS4ibGz2q6v7r9UZY4D0dM16SdrFYOMzhqIoCwGcai8VMIRUAcqn1/jlCsOOzUXJ741+kCeJt0cofakQ==} + '@oxfmt/binding-linux-arm-musleabihf@0.46.0': + resolution: {integrity: sha512-Zxn3adhTH13JKnU4xXJj8FeEfF680XjXh3gSShKl57HCMBRde2tUJTgogV/1MSHA80PJEVrDa7r66TLVq3Ia7Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.47.0': - resolution: {integrity: sha512-YrNT1vQ0asaXoRbrvYENPqmBfOQ9Xr8enPNOULeYfg44VjCcrUowFy5QZr+WawE0zyP8cH9e9Gxxg0fDEFzhcg==} + '@oxfmt/binding-linux-arm64-gnu@0.46.0': + resolution: {integrity: sha512-+TWipjrgVM8D7aIdDD0tlr3teLTTvQTn7QTE5BpT10H1Fj82gfdn9X6nn2sDgx/MepuSCfSnzFNJq2paLL0OiA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-musl@0.47.0': - resolution: {integrity: sha512-IxtQC/sbBi4ubbY+MdwdanRWrG9InQJVZqyMsBa5IUaQcnSg86gQme574HxXMC1p4bo4YhV99zQ+wNnGCvEgzw==} + '@oxfmt/binding-linux-arm64-musl@0.46.0': + resolution: {integrity: sha512-aAUPBWJ1lGwwnxZUEDLJ94+Iy6MuwJwPxUgO4sCA5mEEyDk7b+cDQ+JpX1VR150Zoyd+D49gsrUzpUK5h587Eg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-ppc64-gnu@0.47.0': - resolution: {integrity: sha512-EWXEhOMbWO0q6eJSbu0QLkU8cKi0ljlYLngeDs2Ocu/pm1rrLwyQiYzlFbdnMRURI4w9ndr1sI9rSbhlJ5o23Q==} + '@oxfmt/binding-linux-ppc64-gnu@0.46.0': + resolution: {integrity: sha512-ufBCJukyFX/UDrokP/r6BGDoTInnsDs7bxyzKAgMiZlt2Qu8GPJSJ6Zm6whIiJzKk0naxA8ilwmbO1LMw6Htxw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.47.0': - resolution: {integrity: sha512-tZrjS11TUiDuEpRaqdk8K9F9xETRyKXfuZKmdeW+Gj7coBnm7+8sBEfyt033EAFEQSlkniAXvBLh+Qja2ioGBQ==} + '@oxfmt/binding-linux-riscv64-gnu@0.46.0': + resolution: {integrity: sha512-eqtlC2YmPqjun76R1gVfGLuKWx7NuEnLEAudZ7n6ipSKbCZTqIKSs1b5Y8K/JHZsRpLkeSmAAjig5HOIg8fQzQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-musl@0.47.0': - resolution: {integrity: sha512-KBFy+2CFKUCZzYwX2ZOPQKck1vjQbz+hextuc19G4r0WRJwadfAeuQMQRQvB+Ivc8brlbOVg7et8K7E467440g==} + '@oxfmt/binding-linux-riscv64-musl@0.46.0': + resolution: {integrity: sha512-yccVOO2nMXkQLGgy0He3EQEwKD7NF0zEk+/OWmroznkqXyJdN6bfK0LtNnr6/14Bh3FjpYq7bP33l/VloCnxpA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-s390x-gnu@0.47.0': - resolution: {integrity: sha512-REUPFKVGSiK99B+9eaPhluEVglzaoj/SMykNC5SUiV2RSsBfV5lWN7Y0iCIc251Wz3GaeAGZsJ/zj3gjarxdFg==} + '@oxfmt/binding-linux-s390x-gnu@0.46.0': + resolution: {integrity: sha512-aAf7fG23OQCey6VRPj9IeCraoYtpgtx0ZyJ1CXkPyT1wjzBE7c3xtuxHe/AdHaJfVVb/SXpSk8Gl1LzyQupSqw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.47.0': - resolution: {integrity: sha512-KVftVSVEDeIfRW3TIeLe3aNI/iY4m1fu5mDwHcisKMZSCMKLkrhFsjowC7o9RoqNPxbbglm2+/6KAKBIts2t0Q==} + '@oxfmt/binding-linux-x64-gnu@0.46.0': + resolution: {integrity: sha512-q0JPsTMyJNjYrBvYFDz4WbVsafNZaPCZv4RnFypRotLqpKROtBZcEaXQW4eb9YmvLU3NckVemLJnzkSZSdmOxw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-musl@0.47.0': - resolution: {integrity: sha512-DTsmGEaA2860Aq5VUyDO8/MT9NFxwVL93RnRYmpMwK6DsSkThmvEpqoUDDljziEpAedMRG19SCogrNbINSbLUQ==} + '@oxfmt/binding-linux-x64-musl@0.46.0': + resolution: {integrity: sha512-7LsLY9Cw57GPkhSR+duI3mt9baRczK/DtHYSldQ4BEU92da9igBQNl4z7Vq5U9NNPsh1FmpKvv1q9WDtiUQR1A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxfmt/binding-openharmony-arm64@0.47.0': - resolution: {integrity: sha512-8r5BDro7fLOBoq1JXHLVSs55OlrxQhEso4HVo0TcY7OXJUPYfjPoOaYL5us+yIwqyP9rQwN+rxuiNFSmaxSuOQ==} + '@oxfmt/binding-openharmony-arm64@0.46.0': + resolution: {integrity: sha512-lHiBOz8Duaku7JtRNLlps3j++eOaICPZSd8FCVmTDM4DFOPT71Bjn7g6iar1z7StXlKRweUKxWUs4sA+zWGDXg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.47.0': - resolution: {integrity: sha512-qtz/gzm8IjSPUlseZ0ofW8zyHLoZsuP5HTfcGGkWkUblB89JT8GNYH3ICqjbDsqsGqXum0/ZndXTFplSdXFIcg==} + '@oxfmt/binding-win32-arm64-msvc@0.46.0': + resolution: {integrity: sha512-/5ktYUliP89RhgC37DBH1x20U5zPSZMy3cMEcO0j3793rbHP9MWsknBwQB6eozRzWmYrh0IFM/p20EbPvDlYlg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.47.0': - resolution: {integrity: sha512-5vIcdcIDE7nCx+MXN6sm8kbC4zajDB31E86rez4i45iHNH/2NjdKlJ720xcHTr3eeiMcttCGPHPhE1TjtBDGZw==} + '@oxfmt/binding-win32-ia32-msvc@0.46.0': + resolution: {integrity: sha512-3WTnoiuIr8XvV0DIY7SN+1uJSwKf4sPpcbHfobcRT9JutGcLaef/miyBB87jxd3aqH+mS0+G5lsgHuXLUwjjpQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.47.0': - resolution: {integrity: sha512-Sr59Y5ms54ONBjxFeWhVlGyQcHXxcl9DxC23f6yXlRkcos7LXBLoO+KDfxexjHIOZh7cWqrWduzvUjJ+pHp8cQ==} + '@oxfmt/binding-win32-x64-msvc@0.46.0': + resolution: {integrity: sha512-IXxiQpkYnOwNfP23vzwSfhdpxJzyiPTY7eTn6dn3DsriKddESzM8i6kfq9R7CD/PUJwCvQT22NgtygBeug3KoA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] + '@oxlint-tsgolint/darwin-arm64@0.22.0': + resolution: {integrity: sha512-/exgXceakHbQrzaHTtKOe7MuDATaWMCCWpsCDQCZKeYhLGXzComipTrCYnHzAXrdnNBb5r5K+RRf5A6ormrhMA==} + cpu: [arm64] + os: [darwin] + + '@oxlint-tsgolint/darwin-x64@0.22.0': + resolution: {integrity: sha512-xFGdIahlmUbK+/MpZ5y08D0ewMGLDbd2Vki5wxVFYg50lSrtgPAtdDl+kqKZLNaFu0zpMar8n9wv1le05sL/jw==} + cpu: [x64] + os: [darwin] + + '@oxlint-tsgolint/linux-arm64@0.22.0': + resolution: {integrity: sha512-53RvC9f77eUo+V1dfQNwGVnsIfPJFMibRR0ee128EUpYNDOZe/ojmCfuXJeU7cY91V7r7fZSm42KPJocXUX8og==} + cpu: [arm64] + os: [linux] + + '@oxlint-tsgolint/linux-x64@0.22.0': + resolution: {integrity: sha512-evZcJAZ9hjNyuN69RnXwbt+U2pAOcYt+yvqukgugiCkRm4iBZ0R0CvpY1tgfG2XcGUhEPh8dljO+nPZTEVGpCQ==} + cpu: [x64] + os: [linux] + + '@oxlint-tsgolint/win32-arm64@0.22.0': + resolution: {integrity: sha512-7jTO+k1mr5BxRAI2fxc1NRcE3MAbHNZ0Vef9SD1yAR6d1E6qEv5D/D7yuHpQpw6AO3qoecSVo2Jzr+JirN61+w==} + cpu: [arm64] + os: [win32] + + '@oxlint-tsgolint/win32-x64@0.22.0': + resolution: {integrity: sha512-7lbl9XFcqO+scsynxMzTQdl0XUe6sBUCyY/oGWvCB+JmV4U+70vzSyZJdTEzzxtkZiNnUVFFh9RJLmoiQSne+w==} + cpu: [x64] + os: [win32] + + '@oxlint/binding-android-arm-eabi@1.61.0': + resolution: {integrity: sha512-6eZBPgiigK5txqoVgRqxbaxiom4lM8AP8CyKPPvpzKnQ3iFRFOIDc+0AapF+qsUSwjOzr5SGk4SxQDpQhkSJMQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + '@oxlint/binding-android-arm-eabi@1.62.0': resolution: {integrity: sha512-pKsthNECyvJh8lPTICz6VcwVy2jOqdhhsp1rlxCkhgZR47aKvXPmaRWQDv+zlXpRae4qm1MaaTnutkaOk5aofg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] + '@oxlint/binding-android-arm64@1.61.0': + resolution: {integrity: sha512-CkwLR69MUnyv5wjzebvbbtTSUwqLxM35CXE79bHqDIK+NtKmPEUpStTcLQRZMCo4MP0qRT6TXIQVpK0ZVScnMA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + '@oxlint/binding-android-arm64@1.62.0': resolution: {integrity: sha512-b1AUNViByvgmR2xJDubvLIr+dSuu3uraG7bsAoKo+xrpspPvu6RIn6Fhr2JUhobfep3jwUTy18Huco6GkwdvGQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] + '@oxlint/binding-darwin-arm64@1.61.0': + resolution: {integrity: sha512-8JbefTkbmvqkqWjmQrHke+MdpgT2UghhD/ktM4FOQSpGeCgbMToJEKdl9zwhr/YWTl92i4QI1KiTwVExpcUN8A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + '@oxlint/binding-darwin-arm64@1.62.0': resolution: {integrity: sha512-iG+Tvf70UJ6otfwFYIHk36Sjq9cpPP5YLxkoggANNRtzgi3Tj3g8q6Ybqi6AtkU3+yg9QwF7bDCkCS6bbL4PCg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] + '@oxlint/binding-darwin-x64@1.61.0': + resolution: {integrity: sha512-uWpoxDT47hTnDLcdEh5jVbso8rlTTu5o0zuqa9J8E0JAKmIWn7kGFEIB03Pycn2hd2vKxybPGLhjURy/9We5FQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + '@oxlint/binding-darwin-x64@1.62.0': resolution: {integrity: sha512-oOWI6YPPr5AJUx+yIDlxmuUbQjS5gZX3OH3QisawYvsZgLiQVvZtR0rPBcJTxLWqt2ClrWg0DlSrlUiG5SQNHg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] + '@oxlint/binding-freebsd-x64@1.61.0': + resolution: {integrity: sha512-K/o4hEyW7flfMel0iBVznmMBt7VIMHGdjADocHKpK1DUF9erpWnJ+BSSWd2W0c8K3mPtpph+CuHzRU6CI3l9jQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + '@oxlint/binding-freebsd-x64@1.62.0': resolution: {integrity: sha512-dLP33T7VLCmLVv4cvjkVX+rmkcwNk2UfxmsZPNur/7BQHoQR60zJ7XLiRvNUawlzn0u8ngCa3itjEG73MAMa/w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] + '@oxlint/binding-linux-arm-gnueabihf@1.61.0': + resolution: {integrity: sha512-P6040ZkcyweJ0Po9yEFqJCdvZnf3VNCGs1SIHgXDf8AAQNC6ID/heXQs9iSgo2FH7gKaKq32VWc59XZwL34C5Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@oxlint/binding-linux-arm-gnueabihf@1.62.0': resolution: {integrity: sha512-fl//LWNks6qo9chNY60UDYyIwtp7a5cEx4Y/rHPjaarhuwqx6jtbzEpD5V5AqmdL4a6Y5D8zeXg5HF2Cr0QmSQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] + '@oxlint/binding-linux-arm-musleabihf@1.61.0': + resolution: {integrity: sha512-bwxrGCzTZkuB+THv2TQ1aTkVEfv5oz8sl+0XZZCpoYzErJD8OhPQOTA0ENPd1zJz8QsVdSzSrS2umKtPq4/JXg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@oxlint/binding-linux-arm-musleabihf@1.62.0': resolution: {integrity: sha512-i5vkAuxvueTODV3J2dL61/TXewDHhMFKvtD156cIsk7GsdfiAu7zW7kY0NJXhKeFHeiMZIh7eFNjkPYH6J47HQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] + '@oxlint/binding-linux-arm64-gnu@1.61.0': + resolution: {integrity: sha512-vkhb9/wKguMkLlrm3FoJW/Xmdv31GgYAE+x8lxxQ+7HeOxXUySI0q36a3NTVIuQUdLzxCI1zzMGsk1o37FOe3w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@oxlint/binding-linux-arm64-gnu@1.62.0': resolution: {integrity: sha512-QwN19LLuIGuOjEflSeJkZmOTfBdBMlTmW8xbMf8TZhjd//cxVNYQPq75q7oKZBJc6hRx3gY7sX0Egc8cEIFZYg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1035,6 +1128,13 @@ packages: os: [linux] libc: [glibc] + '@oxlint/binding-linux-arm64-musl@1.61.0': + resolution: {integrity: sha512-bl1dQh8LnVqsj6oOQAcxwbuOmNJkwc4p6o//HTBZhNTzJy21TLDwAviMqUFNUxDHkPGpmdKTSN4tWTjLryP8xg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + '@oxlint/binding-linux-arm64-musl@1.62.0': resolution: {integrity: sha512-8eCy3FCDuWUM5hWujAv6heMvfZPbcCOU3SdQUAkixZLu5bSzOkNfirJiLGoQFO943xceOKkiQRMQNzH++jM3WA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1042,6 +1142,13 @@ packages: os: [linux] libc: [musl] + '@oxlint/binding-linux-ppc64-gnu@1.61.0': + resolution: {integrity: sha512-QoOX6KB2IiEpyOj/HKqaxi+NQHPnOgNgnr22n9N4ANJCzXkUlj1UmeAbFb4PpqdlHIzvGDM5xZ0OKtcLq9RhiQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + '@oxlint/binding-linux-ppc64-gnu@1.62.0': resolution: {integrity: sha512-NjQ7K7tpTPDe9J+yq8p/s/J0E7lRCkK2uDBDqvT4XIT6f4Z0tlnr59OBg/WcrmVHER1AbrcfyxhGTXgcG8ytWg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1049,6 +1156,13 @@ packages: os: [linux] libc: [glibc] + '@oxlint/binding-linux-riscv64-gnu@1.61.0': + resolution: {integrity: sha512-1TGcTerjY6p152wCof3oKElccq3xHljS/Mucp04gV/4ATpP6nO7YNnp7opEg6SHkv2a57/b4b8Ndm9znJ1/qAw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + '@oxlint/binding-linux-riscv64-gnu@1.62.0': resolution: {integrity: sha512-oKZed9gmSwze29dEt3/Wnsv6l/Ygw/FUst+8Kfpv2SGeS/glEoTGZAMQw37SVyzFV76UTHJN2snGgxK2t2+8ow==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1056,6 +1170,13 @@ packages: os: [linux] libc: [glibc] + '@oxlint/binding-linux-riscv64-musl@1.61.0': + resolution: {integrity: sha512-65wXEmZIrX2ADwC8i/qFL4EWLSbeuBpAm3suuX1vu4IQkKd+wLT/HU/BOl84kp91u2SxPkPDyQgu4yrqp8vwVA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + '@oxlint/binding-linux-riscv64-musl@1.62.0': resolution: {integrity: sha512-gBjBxQ+9lGpAYq+ELqw0w8QXsBnkZclFc7GRX2r0LnEVn3ZTEqeIKpKcGjucmp76Q53bvJD0i4qBWBhcfhSfGA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1063,6 +1184,13 @@ packages: os: [linux] libc: [musl] + '@oxlint/binding-linux-s390x-gnu@1.61.0': + resolution: {integrity: sha512-TVvhgMvor7Qa6COeXxCJ7ENOM+lcAOGsQ0iUdPSCv2hxb9qSHLQ4XF1h50S6RE1gBOJ0WV3rNukg4JJJP1LWRA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@oxlint/binding-linux-s390x-gnu@1.62.0': resolution: {integrity: sha512-Ew2Kxs9EQ9/mbAIJ2hvocMC0wsOu6YKzStI2eFBDt+Td5O8seVC/oxgRIHqCcl5sf5ratA1nozQBAuv7tphkHg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1070,6 +1198,13 @@ packages: os: [linux] libc: [glibc] + '@oxlint/binding-linux-x64-gnu@1.61.0': + resolution: {integrity: sha512-SjpS5uYuFoDnDdZPwZE59ndF95AsY47R5MliuneTWR1pDm2CxGJaYXbKULI71t5TVfLQUWmrHEGRL9xvuq6dnA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + '@oxlint/binding-linux-x64-gnu@1.62.0': resolution: {integrity: sha512-5z25jcAA0gfKyVwz71A0VXgaPlocPoTAxhlv/hgoK6tlCrfoNuw7haWbDHvGMfjXhdic4EqVXGRv5XsTqFnbRQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1077,6 +1212,13 @@ packages: os: [linux] libc: [glibc] + '@oxlint/binding-linux-x64-musl@1.61.0': + resolution: {integrity: sha512-gGfAeGD4sNJGILZbc/yKcIimO9wQnPMoYp9swAaKeEtwsSQAbU+rsdQze5SBtIP6j0QDzeYd4XSSUCRCF+LIeQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + '@oxlint/binding-linux-x64-musl@1.62.0': resolution: {integrity: sha512-IWpHmMB6ZDllPvqWDkG6AmXrN7JF5e/c4g/0PuURsmlK+vHoYZPB70rr4u1bn3I4LsKCSpqqfveyx6UCOC8wdg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1084,30 +1226,57 @@ packages: os: [linux] libc: [musl] + '@oxlint/binding-openharmony-arm64@1.61.0': + resolution: {integrity: sha512-OlVT0LrG/ct33EVtWRyR+B/othwmDWeRxfi13wUdPeb3lAT5TgTcFDcfLfarZtzB4W1nWF/zICMgYdkggX2WmQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + '@oxlint/binding-openharmony-arm64@1.62.0': resolution: {integrity: sha512-fjlSxxrD5pA594vkyikCS9MnPRjQawW6/BLgyTYkO+73wwPlYjkcZ7LSd974l0Q2zkHQmu4DPvJFLYA7o8xrxQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] + '@oxlint/binding-win32-arm64-msvc@1.61.0': + resolution: {integrity: sha512-vI//NZPJk6DToiovPtaiwD4iQ7kO1r5ReWQD0sOOyKRtP3E2f6jxin4uvwi3OvDzHA2EFfd7DcZl5dtkQh7g1w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + '@oxlint/binding-win32-arm64-msvc@1.62.0': resolution: {integrity: sha512-EiFXr8loNS0Ul3Gu80+9nr1T8jRmnKocqmHHg16tj5ZqTgUXyb97l2rrspVHdDluyFn9JfR4PoJFdNzw4paHww==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] + '@oxlint/binding-win32-ia32-msvc@1.61.0': + resolution: {integrity: sha512-0ySj4/4zd2XjePs3XAQq7IigIstN4LPQZgCyigX5/ERMLjdWAJfnxcTsrtxZxuij8guJW8foXuHmhGxW0H4dDA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + '@oxlint/binding-win32-ia32-msvc@1.62.0': resolution: {integrity: sha512-IgOFvL73li1bFgab+hThXYA0N2Xms2kV2MvZN95cebV+fmrZ9AVui1JSxfeeqRLo3CpPxKZlzhyq4G0cnaAvIw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] + '@oxlint/binding-win32-x64-msvc@1.61.0': + resolution: {integrity: sha512-0xgSiyeqDLDZxXoe9CVJrOx3TUVsfyoOY7cNi03JbItNcC9WCZqrSNdrAbHONxhSPaVh/lzfnDcON1RqSUMhHw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@oxlint/binding-win32-x64-msvc@1.62.0': resolution: {integrity: sha512-6hMpyDWQ2zGA1OXFKBrdYMUveUCO8UJhkO6JdwZPd78xIdHZNhjx+pib+4fC2Cljuhjyl0QwA2F3df/bs4Bp6A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + '@remix-run/assert@0.2.0': resolution: {integrity: sha512-SNfcxPQstoIBr/hbRSsTYLNnmIXMgiL4cY8o5HH9PE7Ue/NQcIwqNJtvV0xVrk3pY/ywxHhAwSl2V8ao1Is9Cg==} @@ -1260,12 +1429,116 @@ packages: '@remix-run/ui@0.1.1': resolution: {integrity: sha512-yn5oL/uZ8izabJxjeKhVo9lBGhb+ZhOJHWk5Tu7YJL3RSxvP7BrO/ofrdWUcOXSsNxao3Lj+PF1lVmnTBf8nfQ==} + '@rolldown/binding-android-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-rc.17': + resolution: {integrity: sha512-SUSDOI6WwUVNcWxd02QEBjLdY1VPHvlEkw6T/8nYG322iYWCTxRb1vzk4E+mWWYehTp7ERibq54LSJGjmouOsw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-rc.17': + resolution: {integrity: sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': + resolution: {integrity: sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-e6usGaHKW5BMNZOymS1UcEYGowQMWcgZ71Z17Sl/h2+ZziNJ1a9n3Zvcz6LdRyIW5572wBCTH/Z+bKuZouGk9Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': + resolution: {integrity: sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': + resolution: {integrity: sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': + resolution: {integrity: sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': + resolution: {integrity: sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': + resolution: {integrity: sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-rc.17': + resolution: {integrity: sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==} + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/dom-navigation@1.0.7': resolution: {integrity: sha512-Di4W+i2faYquHUnyWUg3bBQp5pTNvjDDA7mIYfD/1WlLgan6sKkeVjGbdL78K0CuNEk5Pfc/c0rfelwkz10mnQ==} @@ -1368,6 +1641,149 @@ packages: engines: {node: '>=16.20.0'} hasBin: true + '@voidzero-dev/vite-plus-core@0.1.20': + resolution: {integrity: sha512-4KmzRfzwTeG3JuvDijrdqWusSgRvLMKDPrVsDdtbDVVjEMq0VnM8lSH+Nvepd6Pg+SuSVUP212OIfH/3Yn1bfA==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@arethetypeswrong/core': ^0.18.1 + '@tsdown/css': 0.21.10 + '@tsdown/exe': 0.21.10 + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + publint: ^0.3.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 + typescript: ^5.0.0 || ^6.0.0 + unplugin-unused: ^0.5.0 + yaml: ^2.4.2 + peerDependenciesMeta: + '@arethetypeswrong/core': + optional: true + '@tsdown/css': + optional: true + '@tsdown/exe': + optional: true + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + publint: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + typescript: + optional: true + unplugin-unused: + optional: true + yaml: + optional: true + + '@voidzero-dev/vite-plus-darwin-arm64@0.1.20': + resolution: {integrity: sha512-ykCOJk91h0IEMvljYGTauI4Svxr/CatZAitofvtEFqaTCLE3n06QCHD8qWphMM784VnPz1G/J2xuewxbQduNlg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@voidzero-dev/vite-plus-darwin-x64@0.1.20': + resolution: {integrity: sha512-5XxNW9cYEh85Z4BErALyWh/tLP/NZmxNXzUQ0FanhHreI2Zq7FfgbSqQNvC7/sYsPYTWf74RlxmIjzV7R/Lb5Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.20': + resolution: {integrity: sha512-Mc7npPBd9t/h0haURVCZGae+TfB0Yx2Ex8HbPKOVA4hnN9ynlMhMpLRFfTQAicDKYbEGDhfBcbCIX0vVv4vacA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@voidzero-dev/vite-plus-linux-arm64-musl@0.1.20': + resolution: {integrity: sha512-Oh/pxMdTLR/wsDl/OONjItjLOeTewFBLuKkH5RQmcI9g3AVqKzLj1/uawujgysBI5E25tonRRK7I2q/zu8Uqvg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.20': + resolution: {integrity: sha512-msO1ZoUX5aSK8L6kN1C3XQO4CcH9aFsNPRSNcO1cjk1kTnaLyVYzkVxgvbh3vk7nzZAAMkmyZ4SlMpqJrdahrg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@voidzero-dev/vite-plus-linux-x64-musl@0.1.20': + resolution: {integrity: sha512-U93urREvg23ZFDkxKkkfWWIOI4GI9erhbWAZpXG+GeYqygWKrVC6PUTXiuexVg3/CFg2sSMTdm1W6V7TFG5hYA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@voidzero-dev/vite-plus-test@0.1.20': + resolution: {integrity: sha512-vy2dJYw1bhgQ/+BrQrfwPlSKzQ2mm3YLJ9kGF7Yo0UJ2P3XKpshtgFIWLjSg/IASnC93OAx0c/7j3NM0I1RMuA==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/coverage-istanbul': 4.1.5 + '@vitest/coverage-v8': 4.1.5 + '@vitest/ui': 4.1.5 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.20': + resolution: {integrity: sha512-deXfe3h2OpzKV88s1PMUgVOJfN9LlnDDpIEVH6y2+YAXwlTSO7YeKBj2QmyS6ALZCI4Rfp4HOsB0OKMVBfEqww==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.20': + resolution: {integrity: sha512-ygdgQgo0N9oUI1Q2IdYBcvr+KLY6riaqLY/bkWNYtvHS4uk8a4GuEd0F08znWt2E8sFm29i35bYIzI6fFY2EBg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1385,6 +1801,10 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + aws4fetch@1.0.20: resolution: {integrity: sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g==} @@ -1439,6 +1859,9 @@ packages: electron-to-chromium@1.5.348: resolution: {integrity: sha512-QC2X59nRlycQQMc4ZXjSVBX+tSgJfgRtcrYHbIZLgOV2dCvefoQGegLR7lLXKgpPpSuVmJU19LMzGrSa2C7k3Q==} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.1.0: resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} @@ -1619,6 +2042,10 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1748,9 +2175,18 @@ packages: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -1770,6 +2206,9 @@ packages: engines: {node: ^20.5.0 || >=22.0.0, npm: '>= 10'} hasBin: true + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -1789,11 +2228,25 @@ packages: resolution: {integrity: sha512-Kf243wJU/vWF/ThV+ZyfLMQIrViVFRSyYO7UPKpZMMPGGMzxxcHgsNGWy0Uy+pcXD78+jdUnxVTR9rYT73Qw3A==} engines: {node: ^20.19.0 || >=22.12.0} - oxfmt@0.47.0: - resolution: {integrity: sha512-OFbkbzxKCpooQEnRmpTDnuwTX8KHXzZTQ4Df/hz85fpS67Pl+lxPEFvUtin56HIIS0B1k4X8oIzTXRZPufA2CA==} + oxfmt@0.46.0: + resolution: {integrity: sha512-CopwJOwPAjZ9p76fCvz+mSOJTw9/NY3cSksZK3VO/bUQ8UoEcketNgUuYS0UB3p+R9XnXe7wGGXUmyFxc7QxJA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + oxlint-tsgolint@0.22.0: + resolution: {integrity: sha512-ku4MecLmCQIj1ScCtzNAqTuyl0BJQ02B36fJT+c5XQihHpYSFak+FC3GYO5fPyYk4oDwi0w0S7hTvrpNzuZhig==} + hasBin: true + + oxlint@1.61.0: + resolution: {integrity: sha512-ZC0ALuhDZ6ivOFG+sy0D0pEDN49EvsId98zVlmYdkcXHsEM14m/qTNUEsUpiFiCVbpIxYtVBmmLE87nsbUHohQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=0.18.0' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + oxlint@1.62.0: resolution: {integrity: sha512-1uFkg6HakjsGIpW9wNdeW4/2LOHW9MEkoWjZUTUfQtIHyLIZPYt00w3Sg+H3lH+206FgBPHBbW5dVE5l2ExECQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1832,6 +2285,18 @@ packages: engines: {node: '>=0.10'} hasBin: true + pixelmatch@7.2.0: + resolution: {integrity: sha512-xhcb4yHu9sM/G7foGzoLtXYcC0zHEaOXXjRKhGup0fw78Nf2Tkiapv4EQyMzrbcmQPsllAI7DbFY2UT7PlI9Pg==} + hasBin: true + + pngjs@7.0.0: + resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} + engines: {node: '>=14.19.0'} + + postcss@8.5.13: + resolution: {integrity: sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -1870,6 +2335,11 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + rolldown@1.0.0-rc.17: + resolution: {integrity: sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -1891,14 +2361,28 @@ packages: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@1.1.2: + resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==} + engines: {node: '>=18'} + tinyglobby@0.2.16: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} @@ -1907,6 +2391,10 @@ packages: resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} engines: {node: ^20.0.0 || >=22.0.0} + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + ts-api-utils@2.5.0: resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} @@ -1950,6 +2438,54 @@ packages: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} + vite-plus@0.1.20: + resolution: {integrity: sha512-hxJqXTxiiFhszwAeD0MvKlztVuXE4TztTdJ64BPxGqgY67F0PDa5eZkUsrN91Ae8aYUMfweW6V/J57OUO9/0zw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + vite@8.0.10: + resolution: {integrity: sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -1964,6 +2500,18 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + 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 + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -2176,9 +2724,9 @@ snapshots: '@esbuild/win32-x64@0.27.7': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0)': + '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0(jiti@2.6.1))': dependencies: - eslint: 10.3.0 + eslint: 10.3.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -2248,18 +2796,18 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@nkzw/eslint-plugin@2.0.0(eslint@10.3.0)': + '@nkzw/eslint-plugin@2.0.0(eslint@10.3.0(jiti@2.6.1))': dependencies: - eslint: 10.3.0 + eslint: 10.3.0(jiti@2.6.1) - '@nkzw/oxlint-config@1.1.1(eslint@10.3.0)(oxlint@1.62.0)(typescript@6.0.3)': + '@nkzw/oxlint-config@1.1.1(eslint@10.3.0(jiti@2.6.1))(oxlint@1.62.0(oxlint-tsgolint@0.22.0))(typescript@6.0.3)': dependencies: - '@nkzw/eslint-plugin': 2.0.0(eslint@10.3.0) + '@nkzw/eslint-plugin': 2.0.0(eslint@10.3.0(jiti@2.6.1)) eslint-plugin-no-only-tests: 3.4.0 - eslint-plugin-perfectionist: 5.9.0(eslint@10.3.0)(typescript@6.0.3) - eslint-plugin-react-hooks: 7.1.1(eslint@10.3.0) - eslint-plugin-unused-imports: 4.4.1(eslint@10.3.0) - oxlint: 1.62.0 + eslint-plugin-perfectionist: 5.9.0(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) + eslint-plugin-react-hooks: 7.1.1(eslint@10.3.0(jiti@2.6.1)) + eslint-plugin-unused-imports: 4.4.1(eslint@10.3.0(jiti@2.6.1)) + oxlint: 1.62.0(oxlint-tsgolint@0.22.0) transitivePeerDependencies: - '@typescript-eslint/eslint-plugin' - eslint @@ -2398,8 +2946,12 @@ snapshots: '@oxc-project/runtime@0.121.0': {} + '@oxc-project/runtime@0.127.0': {} + '@oxc-project/types@0.121.0': {} + '@oxc-project/types@0.127.0': {} + '@oxc-resolver/binding-android-arm-eabi@11.19.1': optional: true @@ -2530,120 +3082,197 @@ snapshots: '@oxc-transform/binding-win32-x64-msvc@0.121.0': optional: true - '@oxfmt/binding-android-arm-eabi@0.47.0': + '@oxfmt/binding-android-arm-eabi@0.46.0': optional: true - '@oxfmt/binding-android-arm64@0.47.0': + '@oxfmt/binding-android-arm64@0.46.0': optional: true - '@oxfmt/binding-darwin-arm64@0.47.0': + '@oxfmt/binding-darwin-arm64@0.46.0': optional: true - '@oxfmt/binding-darwin-x64@0.47.0': + '@oxfmt/binding-darwin-x64@0.46.0': optional: true - '@oxfmt/binding-freebsd-x64@0.47.0': + '@oxfmt/binding-freebsd-x64@0.46.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.47.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.46.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.47.0': + '@oxfmt/binding-linux-arm-musleabihf@0.46.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.47.0': + '@oxfmt/binding-linux-arm64-gnu@0.46.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.47.0': + '@oxfmt/binding-linux-arm64-musl@0.46.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.47.0': + '@oxfmt/binding-linux-ppc64-gnu@0.46.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.47.0': + '@oxfmt/binding-linux-riscv64-gnu@0.46.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.47.0': + '@oxfmt/binding-linux-riscv64-musl@0.46.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.47.0': + '@oxfmt/binding-linux-s390x-gnu@0.46.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.47.0': + '@oxfmt/binding-linux-x64-gnu@0.46.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.47.0': + '@oxfmt/binding-linux-x64-musl@0.46.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.47.0': + '@oxfmt/binding-openharmony-arm64@0.46.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.47.0': + '@oxfmt/binding-win32-arm64-msvc@0.46.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.47.0': + '@oxfmt/binding-win32-ia32-msvc@0.46.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.47.0': + '@oxfmt/binding-win32-x64-msvc@0.46.0': + optional: true + + '@oxlint-tsgolint/darwin-arm64@0.22.0': + optional: true + + '@oxlint-tsgolint/darwin-x64@0.22.0': + optional: true + + '@oxlint-tsgolint/linux-arm64@0.22.0': + optional: true + + '@oxlint-tsgolint/linux-x64@0.22.0': + optional: true + + '@oxlint-tsgolint/win32-arm64@0.22.0': + optional: true + + '@oxlint-tsgolint/win32-x64@0.22.0': + optional: true + + '@oxlint/binding-android-arm-eabi@1.61.0': optional: true '@oxlint/binding-android-arm-eabi@1.62.0': optional: true + '@oxlint/binding-android-arm64@1.61.0': + optional: true + '@oxlint/binding-android-arm64@1.62.0': optional: true + '@oxlint/binding-darwin-arm64@1.61.0': + optional: true + '@oxlint/binding-darwin-arm64@1.62.0': optional: true + '@oxlint/binding-darwin-x64@1.61.0': + optional: true + '@oxlint/binding-darwin-x64@1.62.0': optional: true + '@oxlint/binding-freebsd-x64@1.61.0': + optional: true + '@oxlint/binding-freebsd-x64@1.62.0': optional: true + '@oxlint/binding-linux-arm-gnueabihf@1.61.0': + optional: true + '@oxlint/binding-linux-arm-gnueabihf@1.62.0': optional: true + '@oxlint/binding-linux-arm-musleabihf@1.61.0': + optional: true + '@oxlint/binding-linux-arm-musleabihf@1.62.0': optional: true + '@oxlint/binding-linux-arm64-gnu@1.61.0': + optional: true + '@oxlint/binding-linux-arm64-gnu@1.62.0': optional: true + '@oxlint/binding-linux-arm64-musl@1.61.0': + optional: true + '@oxlint/binding-linux-arm64-musl@1.62.0': optional: true + '@oxlint/binding-linux-ppc64-gnu@1.61.0': + optional: true + '@oxlint/binding-linux-ppc64-gnu@1.62.0': optional: true + '@oxlint/binding-linux-riscv64-gnu@1.61.0': + optional: true + '@oxlint/binding-linux-riscv64-gnu@1.62.0': optional: true + '@oxlint/binding-linux-riscv64-musl@1.61.0': + optional: true + '@oxlint/binding-linux-riscv64-musl@1.62.0': optional: true + '@oxlint/binding-linux-s390x-gnu@1.61.0': + optional: true + '@oxlint/binding-linux-s390x-gnu@1.62.0': optional: true + '@oxlint/binding-linux-x64-gnu@1.61.0': + optional: true + '@oxlint/binding-linux-x64-gnu@1.62.0': optional: true + '@oxlint/binding-linux-x64-musl@1.61.0': + optional: true + '@oxlint/binding-linux-x64-musl@1.62.0': optional: true + '@oxlint/binding-openharmony-arm64@1.61.0': + optional: true + '@oxlint/binding-openharmony-arm64@1.62.0': optional: true + '@oxlint/binding-win32-arm64-msvc@1.61.0': + optional: true + '@oxlint/binding-win32-arm64-msvc@1.62.0': optional: true + '@oxlint/binding-win32-ia32-msvc@1.61.0': + optional: true + '@oxlint/binding-win32-ia32-msvc@1.62.0': optional: true + '@oxlint/binding-win32-x64-msvc@1.61.0': + optional: true + '@oxlint/binding-win32-x64-msvc@1.62.0': optional: true + '@polka/url@1.0.0-next.29': {} + '@remix-run/assert@0.2.0': {} '@remix-run/assets@0.3.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': @@ -2845,6 +3474,57 @@ snapshots: dependencies: '@types/dom-navigation': 1.0.7 + '@rolldown/binding-android-arm64@1.0.0-rc.17': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-rc.17': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-rc.17': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-rc.17': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': + optional: true + + '@rolldown/pluginutils@1.0.0-rc.17': {} + '@standard-schema/spec@1.1.0': {} '@tybys/wasm-util@0.10.1': @@ -2852,6 +3532,13 @@ snapshots: tslib: 2.8.1 optional: true + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + '@types/dom-navigation@1.0.7': {} '@types/esrecurse@4.3.1': {} @@ -2901,13 +3588,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.1(eslint@10.3.0)(typescript@6.0.3)': + '@typescript-eslint/utils@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.59.1 '@typescript-eslint/types': 8.59.1 '@typescript-eslint/typescript-estree': 8.59.1(typescript@6.0.3) - eslint: 10.3.0 + eslint: 10.3.0(jiti@2.6.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -2948,6 +3635,83 @@ snapshots: '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260501.1 '@typescript/native-preview-win32-x64': 7.0.0-dev.20260501.1 + '@voidzero-dev/vite-plus-core@0.1.20(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@6.0.3)': + dependencies: + '@oxc-project/runtime': 0.127.0 + '@oxc-project/types': 0.127.0 + lightningcss: 1.32.0 + postcss: 8.5.13 + optionalDependencies: + '@types/node': 25.6.0 + esbuild: 0.27.7 + fsevents: 2.3.3 + jiti: 2.6.1 + tsx: 4.21.0 + typescript: 6.0.3 + + '@voidzero-dev/vite-plus-darwin-arm64@0.1.20': + optional: true + + '@voidzero-dev/vite-plus-darwin-x64@0.1.20': + optional: true + + '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.20': + optional: true + + '@voidzero-dev/vite-plus-linux-arm64-musl@0.1.20': + optional: true + + '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.20': + optional: true + + '@voidzero-dev/vite-plus-linux-x64-musl@0.1.20': + optional: true + + '@voidzero-dev/vite-plus-test@0.1.20(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0))': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@voidzero-dev/vite-plus-core': 0.1.20(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@6.0.3) + es-module-lexer: 1.7.0 + obug: 2.1.1 + pixelmatch: 7.2.0 + pngjs: 7.0.0 + sirv: 3.0.2 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.1.2 + tinyglobby: 0.2.16 + vite: 8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) + ws: 8.20.0 + optionalDependencies: + '@types/node': 25.6.0 + transitivePeerDependencies: + - '@arethetypeswrong/core' + - '@tsdown/css' + - '@tsdown/exe' + - '@vitejs/devtools' + - bufferutil + - esbuild + - jiti + - less + - publint + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - typescript + - unplugin-unused + - utf-8-validate + - yaml + + '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.20': + optional: true + + '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.20': + optional: true + acorn-jsx@5.3.2(acorn@8.16.0): dependencies: acorn: 8.16.0 @@ -2963,6 +3727,8 @@ snapshots: ansi-styles@6.2.3: {} + assertion-error@2.0.1: {} + aws4fetch@1.0.20: {} balanced-match@4.0.4: {} @@ -3005,6 +3771,8 @@ snapshots: electron-to-chromium@1.5.348: {} + es-module-lexer@1.7.0: {} + es-module-lexer@2.1.0: {} esbuild@0.27.7: @@ -3042,29 +3810,29 @@ snapshots: eslint-plugin-no-only-tests@3.4.0: {} - eslint-plugin-perfectionist@5.9.0(eslint@10.3.0)(typescript@6.0.3): + eslint-plugin-perfectionist@5.9.0(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3): dependencies: - '@typescript-eslint/utils': 8.59.1(eslint@10.3.0)(typescript@6.0.3) - eslint: 10.3.0 + '@typescript-eslint/utils': 8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.3.0(jiti@2.6.1) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-react-hooks@7.1.1(eslint@10.3.0): + eslint-plugin-react-hooks@7.1.1(eslint@10.3.0(jiti@2.6.1)): dependencies: '@babel/core': 7.29.0 '@babel/parser': 7.29.3 - eslint: 10.3.0 + eslint: 10.3.0(jiti@2.6.1) hermes-parser: 0.25.1 zod: 4.4.1 zod-validation-error: 4.0.2(zod@4.4.1) transitivePeerDependencies: - supports-color - eslint-plugin-unused-imports@4.4.1(eslint@10.3.0): + eslint-plugin-unused-imports@4.4.1(eslint@10.3.0(jiti@2.6.1)): dependencies: - eslint: 10.3.0 + eslint: 10.3.0(jiti@2.6.1) eslint-scope@9.1.2: dependencies: @@ -3077,9 +3845,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.3.0: + eslint@10.3.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.5.5 @@ -3109,6 +3877,8 @@ snapshots: minimatch: 10.2.5 natural-compare: 1.4.0 optionator: 0.9.4 + optionalDependencies: + jiti: 2.6.1 transitivePeerDependencies: - supports-color @@ -3206,6 +3976,9 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + jiti@2.6.1: + optional: true + js-tokens@4.0.0: {} jsesc@3.1.0: {} @@ -3300,8 +4073,12 @@ snapshots: dependencies: brace-expansion: 5.0.5 + mrmime@2.0.1: {} + ms@2.1.3: {} + nanoid@3.3.12: {} + natural-compare@1.4.0: {} natural-orderby@5.0.0: {} @@ -3321,6 +4098,8 @@ snapshots: shell-quote: 1.8.3 which: 5.0.0 + obug@2.1.1: {} + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -3436,31 +4215,63 @@ snapshots: - '@emnapi/core' - '@emnapi/runtime' - oxfmt@0.47.0: + oxfmt@0.46.0: dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.47.0 - '@oxfmt/binding-android-arm64': 0.47.0 - '@oxfmt/binding-darwin-arm64': 0.47.0 - '@oxfmt/binding-darwin-x64': 0.47.0 - '@oxfmt/binding-freebsd-x64': 0.47.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.47.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.47.0 - '@oxfmt/binding-linux-arm64-gnu': 0.47.0 - '@oxfmt/binding-linux-arm64-musl': 0.47.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.47.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.47.0 - '@oxfmt/binding-linux-riscv64-musl': 0.47.0 - '@oxfmt/binding-linux-s390x-gnu': 0.47.0 - '@oxfmt/binding-linux-x64-gnu': 0.47.0 - '@oxfmt/binding-linux-x64-musl': 0.47.0 - '@oxfmt/binding-openharmony-arm64': 0.47.0 - '@oxfmt/binding-win32-arm64-msvc': 0.47.0 - '@oxfmt/binding-win32-ia32-msvc': 0.47.0 - '@oxfmt/binding-win32-x64-msvc': 0.47.0 - - oxlint@1.62.0: + '@oxfmt/binding-android-arm-eabi': 0.46.0 + '@oxfmt/binding-android-arm64': 0.46.0 + '@oxfmt/binding-darwin-arm64': 0.46.0 + '@oxfmt/binding-darwin-x64': 0.46.0 + '@oxfmt/binding-freebsd-x64': 0.46.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.46.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.46.0 + '@oxfmt/binding-linux-arm64-gnu': 0.46.0 + '@oxfmt/binding-linux-arm64-musl': 0.46.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.46.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.46.0 + '@oxfmt/binding-linux-riscv64-musl': 0.46.0 + '@oxfmt/binding-linux-s390x-gnu': 0.46.0 + '@oxfmt/binding-linux-x64-gnu': 0.46.0 + '@oxfmt/binding-linux-x64-musl': 0.46.0 + '@oxfmt/binding-openharmony-arm64': 0.46.0 + '@oxfmt/binding-win32-arm64-msvc': 0.46.0 + '@oxfmt/binding-win32-ia32-msvc': 0.46.0 + '@oxfmt/binding-win32-x64-msvc': 0.46.0 + + oxlint-tsgolint@0.22.0: + optionalDependencies: + '@oxlint-tsgolint/darwin-arm64': 0.22.0 + '@oxlint-tsgolint/darwin-x64': 0.22.0 + '@oxlint-tsgolint/linux-arm64': 0.22.0 + '@oxlint-tsgolint/linux-x64': 0.22.0 + '@oxlint-tsgolint/win32-arm64': 0.22.0 + '@oxlint-tsgolint/win32-x64': 0.22.0 + + oxlint@1.61.0(oxlint-tsgolint@0.22.0): + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.61.0 + '@oxlint/binding-android-arm64': 1.61.0 + '@oxlint/binding-darwin-arm64': 1.61.0 + '@oxlint/binding-darwin-x64': 1.61.0 + '@oxlint/binding-freebsd-x64': 1.61.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.61.0 + '@oxlint/binding-linux-arm-musleabihf': 1.61.0 + '@oxlint/binding-linux-arm64-gnu': 1.61.0 + '@oxlint/binding-linux-arm64-musl': 1.61.0 + '@oxlint/binding-linux-ppc64-gnu': 1.61.0 + '@oxlint/binding-linux-riscv64-gnu': 1.61.0 + '@oxlint/binding-linux-riscv64-musl': 1.61.0 + '@oxlint/binding-linux-s390x-gnu': 1.61.0 + '@oxlint/binding-linux-x64-gnu': 1.61.0 + '@oxlint/binding-linux-x64-musl': 1.61.0 + '@oxlint/binding-openharmony-arm64': 1.61.0 + '@oxlint/binding-win32-arm64-msvc': 1.61.0 + '@oxlint/binding-win32-ia32-msvc': 1.61.0 + '@oxlint/binding-win32-x64-msvc': 1.61.0 + oxlint-tsgolint: 0.22.0 + + oxlint@1.62.0(oxlint-tsgolint@0.22.0): optionalDependencies: '@oxlint/binding-android-arm-eabi': 1.62.0 '@oxlint/binding-android-arm64': 1.62.0 @@ -3481,6 +4292,7 @@ snapshots: '@oxlint/binding-win32-arm64-msvc': 1.62.0 '@oxlint/binding-win32-ia32-msvc': 1.62.0 '@oxlint/binding-win32-x64-msvc': 1.62.0 + oxlint-tsgolint: 0.22.0 p-limit@3.1.0: dependencies: @@ -3500,6 +4312,18 @@ snapshots: pidtree@0.6.0: {} + pixelmatch@7.2.0: + dependencies: + pngjs: 7.0.0 + + pngjs@7.0.0: {} + + postcss@8.5.13: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prelude-ls@1.2.1: {} punycode@2.3.1: {} @@ -3562,6 +4386,27 @@ snapshots: resolve-pkg-maps@1.0.0: {} + rolldown@1.0.0-rc.17: + dependencies: + '@oxc-project/types': 0.127.0 + '@rolldown/pluginutils': 1.0.0-rc.17 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.17 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.17 + '@rolldown/binding-darwin-x64': 1.0.0-rc.17 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.17 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.17 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.17 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.17 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.17 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.17 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.17 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.17 + semver@6.3.1: {} semver@7.7.4: {} @@ -3574,12 +4419,24 @@ snapshots: shell-quote@1.8.3: {} + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + source-map-js@1.2.1: {} + std-env@4.1.0: {} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 + tinybench@2.9.0: {} + + tinyexec@1.1.2: {} + tinyglobby@0.2.16: dependencies: fdir: 6.5.0(picomatch@4.0.4) @@ -3587,6 +4444,8 @@ snapshots: tinypool@2.1.0: {} + totalist@3.0.1: {} + ts-api-utils@2.5.0(typescript@6.0.3): dependencies: typescript: 6.0.3 @@ -3628,6 +4487,67 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 + vite-plus@0.1.20(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)): + dependencies: + '@oxc-project/types': 0.127.0 + '@voidzero-dev/vite-plus-core': 0.1.20(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@6.0.3) + '@voidzero-dev/vite-plus-test': 0.1.20(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) + oxfmt: 0.46.0 + oxlint: 1.61.0(oxlint-tsgolint@0.22.0) + oxlint-tsgolint: 0.22.0 + optionalDependencies: + '@voidzero-dev/vite-plus-darwin-arm64': 0.1.20 + '@voidzero-dev/vite-plus-darwin-x64': 0.1.20 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.20 + '@voidzero-dev/vite-plus-linux-arm64-musl': 0.1.20 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.20 + '@voidzero-dev/vite-plus-linux-x64-musl': 0.1.20 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.20 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.20 + transitivePeerDependencies: + - '@arethetypeswrong/core' + - '@edge-runtime/vm' + - '@opentelemetry/api' + - '@tsdown/css' + - '@tsdown/exe' + - '@types/node' + - '@vitejs/devtools' + - '@vitest/coverage-istanbul' + - '@vitest/coverage-v8' + - '@vitest/ui' + - bufferutil + - esbuild + - happy-dom + - jiti + - jsdom + - less + - publint + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - typescript + - unplugin-unused + - utf-8-validate + - vite + - yaml + + vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.13 + rolldown: 1.0.0-rc.17 + tinyglobby: 0.2.16 + optionalDependencies: + '@types/node': 25.6.0 + esbuild: 0.27.7 + fsevents: 2.3.3 + jiti: 2.6.1 + tsx: 4.21.0 + which@2.0.2: dependencies: isexe: 2.0.0 @@ -3638,6 +4558,8 @@ snapshots: word-wrap@1.2.5: {} + ws@8.20.0: {} + yallist@3.1.1: {} yocto-queue@0.1.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..77e0f77 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,16 @@ +allowBuilds: + esbuild: true +catalog: + vite: npm:@voidzero-dev/vite-plus-core@latest + vite-plus: latest + vitest: npm:@voidzero-dev/vite-plus-test@latest +overrides: + vite: "catalog:" + vitest: "catalog:" +peerDependencyRules: + allowAny: + - vite + - vitest + allowedVersions: + vite: "*" + vitest: "*" diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..6b177f5 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,33 @@ +import nkzw from "@nkzw/oxlint-config"; +import { defineConfig } from "vite-plus"; + +export default defineConfig({ + fmt: { + ignorePatterns: ["node_modules", "build", "dist", "public/build"], + }, + lint: { + extends: [nkzw], + options: { + typeAware: true, + typeCheck: true, + }, + overrides: [ + { + files: ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.cts"], + rules: { + "react-in-jsx-scope": "off", + "react/display-name": "off", + }, + }, + { + files: ["server.ts", "app/**/*.tsx"], + rules: { + "no-console": "off", + }, + }, + ], + }, + staged: { + "*": "vp check --fix", + }, +}); From e9f99f56069cca3f6852ee4ef3aadcb1c94c9c95 Mon Sep 17 00:00:00 2001 From: Guilherme de Andrade Date: Sat, 2 May 2026 00:59:50 +0100 Subject: [PATCH 6/7] chore/add-vp-instructions-to-agents-md --- AGENTS.md | 53 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index cfbeef0..7b05dbe 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,14 +1,57 @@ -# Ubmit.dev Agent Guide +# ubmit.dev Agent Guide This app was scaffolded with `remix new`. Use these conventions when continuing to build it out. ## Commands +Use `vp` (Vite+) for all project interactions instead of calling `npm`, `pnpm`, `yarn`, or `npx` directly. + +### Development + +```sh +vp install # install dependencies +vp dev # start the dev server +vp check # run format, lint, and type checks together +vp lint # run linting +vp fmt # run formatting +vp test # run tests +``` + +### Running scripts + +```sh +vp run