From 3f4f0f73b23dc6aa095a311babe20cc71f6078a9 Mon Sep 17 00:00:00 2001 From: bntvllnt <32437578+bntvllnt@users.noreply.github.com> Date: Wed, 12 Aug 2026 17:17:44 +0200 Subject: [PATCH 1/6] feat: prepare configs for TypeScript 7 --- .github/workflows/ci.yml | 5 + .github/workflows/publish.yml | 8 + .gitignore | 1 + CLAUDE.md | 4 +- README.md | 41 +- base.json | 3 + package-lock.json | 428 +++++++++++++++++++++ package.json | 9 +- tests/fixtures/base/src/index.ts | 3 + tests/fixtures/base/tsconfig.json | 7 + tests/fixtures/nextjs/src/jsx-runtime.d.ts | 21 + tests/fixtures/nextjs/src/page.tsx | 3 + tests/fixtures/nextjs/tsconfig.json | 7 + tests/fixtures/node-library/src/index.ts | 3 + tests/fixtures/node-library/tsconfig.json | 8 + tests/fixtures/nodejs/src/index.ts | 3 + tests/fixtures/nodejs/src/node.d.ts | 3 + tests/fixtures/nodejs/tsconfig.json | 8 + tests/fixtures/react/src/index.tsx | 3 + tests/fixtures/react/src/jsx-runtime.d.ts | 14 + tests/fixtures/react/tsconfig.json | 8 + tests/smoke.test.js | 117 +++++- 22 files changed, 698 insertions(+), 9 deletions(-) create mode 100644 .gitignore create mode 100644 package-lock.json create mode 100644 tests/fixtures/base/src/index.ts create mode 100644 tests/fixtures/base/tsconfig.json create mode 100644 tests/fixtures/nextjs/src/jsx-runtime.d.ts create mode 100644 tests/fixtures/nextjs/src/page.tsx create mode 100644 tests/fixtures/nextjs/tsconfig.json create mode 100644 tests/fixtures/node-library/src/index.ts create mode 100644 tests/fixtures/node-library/tsconfig.json create mode 100644 tests/fixtures/nodejs/src/index.ts create mode 100644 tests/fixtures/nodejs/src/node.d.ts create mode 100644 tests/fixtures/nodejs/tsconfig.json create mode 100644 tests/fixtures/react/src/index.tsx create mode 100644 tests/fixtures/react/src/jsx-runtime.d.ts create mode 100644 tests/fixtures/react/tsconfig.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index de378d5..345bcb6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,6 +8,9 @@ concurrency: group: ci-${{ github.head_ref }} cancel-in-progress: true +permissions: + contents: read + jobs: validate: name: Validate @@ -19,4 +22,6 @@ jobs: with: node-version: 22 + - run: npm ci --ignore-scripts + - run: npm test diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 847c1e9..c1dbcbe 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -34,6 +34,8 @@ jobs: quality: name: Quality Gates runs-on: ubuntu-latest + permissions: + contents: read steps: - uses: actions/checkout@v4 @@ -41,6 +43,8 @@ jobs: with: node-version: 22 + - run: npm ci --ignore-scripts + - run: npm test canary: @@ -59,6 +63,8 @@ jobs: node-version: 22 registry-url: https://registry.npmjs.org + - run: npm ci --ignore-scripts + - name: Upgrade npm for OIDC support run: npm install -g npm@latest @@ -92,6 +98,8 @@ jobs: node-version: 22 registry-url: https://registry.npmjs.org + - run: npm ci --ignore-scripts + - name: Bump version id: version run: | diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/CLAUDE.md b/CLAUDE.md index 21e27ff..012fdd8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -32,7 +32,7 @@ Uses npm OIDC provenance — no `NPM_TOKEN` secret needed. Requires npm trusted ## Project structure ``` -base.json ← foundation (strict, isolatedModules, noUncheckedIndexedAccess) +base.json ← foundation (strict, explicit ambient types, stable type ordering) nodejs.json ← Node.js apps (NodeNext, ES2024) node-library.json ← publishable npm packages (NodeNext, ES2024, declarationMap) react.json ← React apps (Bundler, ES2022, react-jsx) @@ -43,6 +43,6 @@ nextjs.json ← Next.js apps (Bundler, ES2022, noEmit, next plugin) | Command | What | |---------|------| -| `npm test` | Run smoke tests (JSON validation) | +| `npm test` | Validate every preset with the supported TypeScript 6 and 7 compilers | | `npm pack --dry-run` | Preview tarball contents | | `npm view @vllnt/typescript` | Check published version | diff --git a/README.md b/README.md index 133912f..4fac59a 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # @vllnt/typescript -Shared TypeScript configurations for vllnt projects. Strict, modern, Node 22+. +Shared TypeScript configurations for vllnt projects. Strict, modern, Node 22+, and validated with TypeScript 6 and 7. ## Install ```sh -npm install -D @vllnt/typescript +npm install -D @vllnt/typescript typescript ``` ## Presets @@ -78,14 +78,49 @@ All presets extend `base.json` which enforces: - `strict: true` - `isolatedModules: true` - `noUncheckedIndexedAccess: true` +- `noUncheckedSideEffectImports: true` - `skipLibCheck: true` - `esModuleInterop: true` - `resolveJsonModule: true` +- `stableTypeOrdering: true` +- `types: []` (ambient type packages must be listed explicitly) + +On TypeScript 6, `stableTypeOrdering` can make type-checking slower (up to 25% according to the [TypeScript 6 release notes](https://devblogs.microsoft.com/typescript/announcing-typescript-6-0/)). It is enabled here so TypeScript 6 uses TypeScript 7's deterministic type ordering during migration; TypeScript 7 always uses this behavior. + +## TypeScript 7 + +Version 2 supports TypeScript 6 and 7, drops TypeScript 5, and makes ambient type packages opt-in. TypeScript 7 is a native compiler and no longer exposes the JavaScript compiler API used by tools such as `typescript-eslint` and legacy `tsserver` integrations. Use TypeScript 7 directly when every tool in the project invokes the compiler CLI: + +```sh +npm install -D @vllnt/typescript typescript@^7 +``` + +During the ecosystem transition, install TypeScript 7 for `tsc` and keep the TypeScript 6 API available under the canonical `typescript` package name: + +```json +{ + "devDependencies": { + "@typescript/native": "npm:typescript@^7.0.2", + "@vllnt/typescript": "^2.0.0", + "typescript": "npm:@typescript/typescript6@^6.0.2" + } +} +``` + +This arrangement follows the [official TypeScript 7 side-by-side guidance](https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/). It provides TypeScript 7 as `tsc`, TypeScript 6 as `tsc6`, and the TypeScript 6 JavaScript API to dependent tooling. + +Before switching a consumer to TypeScript 7: + +- Remove `baseUrl`; make every `paths` target relative to the project root. +- Replace `moduleResolution: "node"` with `"NodeNext"` for Node.js or `"Bundler"` for bundled applications. +- Set `rootDir` explicitly for emitting projects. +- List required ambient packages in `types`, for example `types: ["node", "vitest/globals"]`. +- Use Next.js 16.3 or newer. Next.js 16.2.12 requires `experimental.useTypeScriptCli: true`. ## Requirements - Node.js >= 22 -- TypeScript >= 5.0 +- TypeScript >= 6.0.2 and < 8 ## License diff --git a/base.json b/base.json index 414ba9e..59500e6 100644 --- a/base.json +++ b/base.json @@ -8,6 +8,9 @@ "isolatedModules": true, "skipLibCheck": true, "noUncheckedIndexedAccess": true, + "noUncheckedSideEffectImports": true, + "stableTypeOrdering": true, + "types": [], "resolveJsonModule": true } } diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..d7584bb --- /dev/null +++ b/package-lock.json @@ -0,0 +1,428 @@ +{ + "name": "@vllnt/typescript", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@vllnt/typescript", + "version": "1.0.0", + "license": "MIT", + "devDependencies": { + "@typescript/native": "npm:typescript@7.0.2", + "typescript": "npm:@typescript/typescript6@6.0.2" + }, + "engines": { + "node": ">=22" + }, + "peerDependencies": { + "typescript": ">=6.0.2 <8" + } + }, + "node_modules/@typescript/native": { + "name": "typescript", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", + "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc" + }, + "engines": { + "node": ">=16.20.0" + }, + "optionalDependencies": { + "@typescript/typescript-aix-ppc64": "7.0.2", + "@typescript/typescript-darwin-arm64": "7.0.2", + "@typescript/typescript-darwin-x64": "7.0.2", + "@typescript/typescript-freebsd-arm64": "7.0.2", + "@typescript/typescript-freebsd-x64": "7.0.2", + "@typescript/typescript-linux-arm": "7.0.2", + "@typescript/typescript-linux-arm64": "7.0.2", + "@typescript/typescript-linux-loong64": "7.0.2", + "@typescript/typescript-linux-mips64el": "7.0.2", + "@typescript/typescript-linux-ppc64": "7.0.2", + "@typescript/typescript-linux-riscv64": "7.0.2", + "@typescript/typescript-linux-s390x": "7.0.2", + "@typescript/typescript-linux-x64": "7.0.2", + "@typescript/typescript-netbsd-arm64": "7.0.2", + "@typescript/typescript-netbsd-x64": "7.0.2", + "@typescript/typescript-openbsd-arm64": "7.0.2", + "@typescript/typescript-openbsd-x64": "7.0.2", + "@typescript/typescript-sunos-x64": "7.0.2", + "@typescript/typescript-win32-arm64": "7.0.2", + "@typescript/typescript-win32-x64": "7.0.2" + } + }, + "node_modules/@typescript/old": { + "name": "typescript", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@typescript/typescript-aix-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz", + "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz", + "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz", + "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz", + "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz", + "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz", + "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz", + "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-loong64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz", + "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-mips64el": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz", + "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz", + "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-riscv64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz", + "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-s390x": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz", + "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz", + "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz", + "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz", + "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz", + "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz", + "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-sunos-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz", + "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz", + "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz", + "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/typescript": { + "name": "@typescript/typescript6", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript6/-/typescript6-6.0.2.tgz", + "integrity": "sha512-mbCddXd+jm7hfx7w2YU64/Av4/NqqeG3GoRZgxPcgoTxYjhrcfJRw9ULch71SS4G+Q3bOXFhRvPqjguN0Hyp5w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@typescript/old": "npm:typescript@^6" + }, + "bin": { + "tsc6": "bin/tsc6" + } + } + } +} diff --git a/package.json b/package.json index ea442a8..b913af4 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "homepage": "https://github.com/vllnt/typescript#readme", "repository": { "type": "git", - "url": "https://github.com/vllnt/typescript.git" + "url": "git+https://github.com/vllnt/typescript.git" }, "keywords": [ "typescript", @@ -29,6 +29,13 @@ "test": "node --test tests/smoke.test.js", "prepublishOnly": "node --test tests/smoke.test.js" }, + "peerDependencies": { + "typescript": ">=6.0.2 <8" + }, + "devDependencies": { + "@typescript/native": "npm:typescript@7.0.2", + "typescript": "npm:@typescript/typescript6@6.0.2" + }, "publishConfig": { "access": "public" } diff --git a/tests/fixtures/base/src/index.ts b/tests/fixtures/base/src/index.ts new file mode 100644 index 0000000..e2f6240 --- /dev/null +++ b/tests/fixtures/base/src/index.ts @@ -0,0 +1,3 @@ +const greeting: string = "hello" + +export { greeting } diff --git a/tests/fixtures/base/tsconfig.json b/tests/fixtures/base/tsconfig.json new file mode 100644 index 0000000..6f8fc72 --- /dev/null +++ b/tests/fixtures/base/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../base.json", + "compilerOptions": { + "noEmit": true + }, + "include": ["src"] +} diff --git a/tests/fixtures/nextjs/src/jsx-runtime.d.ts b/tests/fixtures/nextjs/src/jsx-runtime.d.ts new file mode 100644 index 0000000..8addab5 --- /dev/null +++ b/tests/fixtures/nextjs/src/jsx-runtime.d.ts @@ -0,0 +1,21 @@ +declare namespace JSX { + interface IntrinsicElements { + main: { + children?: unknown + } + } +} + +declare module "react/jsx-runtime" { + namespace JSX { + interface IntrinsicElements { + main: { + children?: unknown + } + } + } + + export const Fragment: unique symbol + export function jsx(type: unknown, props: unknown): unknown + export function jsxs(type: unknown, props: unknown): unknown +} diff --git a/tests/fixtures/nextjs/src/page.tsx b/tests/fixtures/nextjs/src/page.tsx new file mode 100644 index 0000000..edb168e --- /dev/null +++ b/tests/fixtures/nextjs/src/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Ready
+} diff --git a/tests/fixtures/nextjs/tsconfig.json b/tests/fixtures/nextjs/tsconfig.json new file mode 100644 index 0000000..30ebc4d --- /dev/null +++ b/tests/fixtures/nextjs/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../nextjs.json", + "compilerOptions": { + "rootDir": "src" + }, + "include": ["src"] +} diff --git a/tests/fixtures/node-library/src/index.ts b/tests/fixtures/node-library/src/index.ts new file mode 100644 index 0000000..3ded969 --- /dev/null +++ b/tests/fixtures/node-library/src/index.ts @@ -0,0 +1,3 @@ +export function double(value: number): number { + return value * 2 +} diff --git a/tests/fixtures/node-library/tsconfig.json b/tests/fixtures/node-library/tsconfig.json new file mode 100644 index 0000000..8ca7245 --- /dev/null +++ b/tests/fixtures/node-library/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../node-library.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"] +} diff --git a/tests/fixtures/nodejs/src/index.ts b/tests/fixtures/nodejs/src/index.ts new file mode 100644 index 0000000..8627fb8 --- /dev/null +++ b/tests/fixtures/nodejs/src/index.ts @@ -0,0 +1,3 @@ +const environment = process.env.NODE_ENV ?? "development" + +export { environment } diff --git a/tests/fixtures/nodejs/src/node.d.ts b/tests/fixtures/nodejs/src/node.d.ts new file mode 100644 index 0000000..bc4f2d0 --- /dev/null +++ b/tests/fixtures/nodejs/src/node.d.ts @@ -0,0 +1,3 @@ +declare const process: { + env: Record +} diff --git a/tests/fixtures/nodejs/tsconfig.json b/tests/fixtures/nodejs/tsconfig.json new file mode 100644 index 0000000..cb3cbba --- /dev/null +++ b/tests/fixtures/nodejs/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../nodejs.json", + "compilerOptions": { + "noEmit": true, + "rootDir": "src" + }, + "include": ["src"] +} diff --git a/tests/fixtures/react/src/index.tsx b/tests/fixtures/react/src/index.tsx new file mode 100644 index 0000000..db63b9f --- /dev/null +++ b/tests/fixtures/react/src/index.tsx @@ -0,0 +1,3 @@ +export function Button() { + return +} diff --git a/tests/fixtures/react/src/jsx-runtime.d.ts b/tests/fixtures/react/src/jsx-runtime.d.ts new file mode 100644 index 0000000..d4358b7 --- /dev/null +++ b/tests/fixtures/react/src/jsx-runtime.d.ts @@ -0,0 +1,14 @@ +declare module "react/jsx-runtime" { + namespace JSX { + interface IntrinsicElements { + button: { + children?: unknown + disabled?: boolean + } + } + } + + export const Fragment: unique symbol + export function jsx(type: unknown, props: unknown): unknown + export function jsxs(type: unknown, props: unknown): unknown +} diff --git a/tests/fixtures/react/tsconfig.json b/tests/fixtures/react/tsconfig.json new file mode 100644 index 0000000..17e1caf --- /dev/null +++ b/tests/fixtures/react/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../react.json", + "compilerOptions": { + "noEmit": true, + "rootDir": "src" + }, + "include": ["src"] +} diff --git a/tests/smoke.test.js b/tests/smoke.test.js index bc1f4a6..6298ac8 100644 --- a/tests/smoke.test.js +++ b/tests/smoke.test.js @@ -1,14 +1,60 @@ const { test } = require('node:test') const assert = require('node:assert/strict') -const { readFileSync, readdirSync } = require('node:fs') -const { join } = require('node:path') +const { mkdtempSync, readFileSync, readdirSync, rmSync } = require('node:fs') +const { tmpdir } = require('node:os') +const { dirname, join } = require('node:path') +const { spawnSync } = require('node:child_process') const root = join(__dirname, '..') +const fixtures = join(__dirname, 'fixtures') const configs = readdirSync(root).filter( - (f) => f.endsWith('.json') && f !== 'package.json', + (file) => + file.endsWith('.json') && + file !== 'package.json' && + file !== 'package-lock.json', ) +const compilers = [ + { + binary: 'tsc6', + label: 'TypeScript 6', + packageName: 'typescript', + versionPrefix: 'Version 6.', + }, + { + binary: 'tsc', + label: 'TypeScript 7', + packageName: '@typescript/native', + versionPrefix: 'Version 7.', + }, +] + +function compilerPath(compiler) { + const packagePath = require.resolve(`${compiler.packageName}/package.json`) + const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8')) + return join(dirname(packagePath), packageJson.bin[compiler.binary]) +} + +function runCompiler(compiler, args) { + const result = spawnSync(process.execPath, [compilerPath(compiler), ...args], { + cwd: root, + encoding: 'utf-8', + timeout: 30_000, + }) + assert.equal( + result.error, + undefined, + `${compiler.label} could not run: ${result.error?.message}`, + ) + assert.equal( + result.status, + 0, + `${compiler.label} failed (${args.join(' ')}):\n${result.stdout}${result.stderr}`, + ) + return result.stdout.trim() +} + test('all config files are valid JSON with compilerOptions', () => { for (const config of configs) { const raw = readFileSync(join(root, config), 'utf-8') @@ -33,3 +79,68 @@ test('package.json files array includes all configs', () => { assert.ok(pkg.files.includes(config), `${config} must be in package.json files`) } }) + +test('integration tests use the supported compiler majors', () => { + for (const compiler of compilers) { + assert.ok( + runCompiler(compiler, ['--version']).startsWith(compiler.versionPrefix), + `${compiler.label} must report ${compiler.versionPrefix}`, + ) + } +}) + +test('TypeScript 6 compatibility package exposes the JavaScript API', () => { + const typescript = require('typescript') + assert.match(typescript.version, /^6\./) + assert.equal(typeof typescript.createProgram, 'function') +}) + +for (const compiler of compilers) { + test(`${compiler.label} type-checks every preset fixture`, () => { + const buildInfoDirectory = mkdtempSync( + join(tmpdir(), 'vllnt-typescript-build-info-'), + ) + try { + for (const preset of configs.map((config) => config.replace('.json', ''))) { + runCompiler(compiler, [ + '--project', + join(fixtures, preset, 'tsconfig.json'), + '--noEmit', + '--incremental', + '--tsBuildInfoFile', + join(buildInfoDirectory, `${preset}.tsbuildinfo`), + ]) + } + } finally { + rmSync(buildInfoDirectory, { force: true, recursive: true }) + } + }) + + test(`${compiler.label} preserves node-library emit behavior`, () => { + const outputDirectory = mkdtempSync( + join(tmpdir(), 'vllnt-typescript-node-library-'), + ) + try { + runCompiler(compiler, [ + '--project', + join(fixtures, 'node-library', 'tsconfig.json'), + '--outDir', + outputDirectory, + ]) + + for (const output of [ + 'index.js', + 'index.js.map', + 'index.d.ts', + 'index.d.ts.map', + ]) { + assert.ok( + readdirSync(outputDirectory).includes(output), + `${compiler.label} must emit ${output} for node-library.json`, + ) + } + } finally { + rmSync(outputDirectory, { force: true, recursive: true }) + } + }) +} From 178a179431cd6807ae1b48eec95016d2173d526d Mon Sep 17 00:00:00 2001 From: bntvllnt <32437578+bntvllnt@users.noreply.github.com> Date: Mon, 18 May 2026 07:46:07 +0200 Subject: [PATCH 2/6] docs: add release-readiness baseline --- AGENTS.md | 33 ++++++++++++++++ CHANGELOG.md | 21 ++++++++++ CONTRIBUTING.md | 45 ++++++++++++++++++++++ SECURITY.md | 24 ++++++++++++ llms-full.txt | 100 ++++++++++++++++++++++++++++++++++++++++++++++++ llms.txt | 29 ++++++++++++++ 6 files changed, 252 insertions(+) create mode 100644 AGENTS.md create mode 100644 CHANGELOG.md create mode 100644 CONTRIBUTING.md create mode 100644 SECURITY.md create mode 100644 llms-full.txt create mode 100644 llms.txt diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..2ac41fa --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,33 @@ +# Agent Instructions for @vllnt/typescript + +This repository contains the public `@vllnt/typescript` npm package. + +## Scope + +- Keep changes focused on TypeScript configuration presets, tests, docs, and release-readiness files. +- Do not publish to npm, create tags, bump versions, merge PRs, or announce releases unless explicitly instructed by a human maintainer. +- Do not add private VLLNT operational details, credentials, customer data, or internal roadmap content to public files. + +## Commands + +Use npm: + +```bash +npm test +npm pack --dry-run +``` + +## Package constraints + +- Preserve Node.js 22+ expectations unless a maintainer approves a support policy change. +- Keep `package.json` `files` aligned with the published preset JSON files. +- Update smoke tests when preset files change. +- Update `README.md`, `CHANGELOG.md`, `llms.txt`, and `llms-full.txt` when changing public presets or package positioning. + +## Review checklist + +Before handoff, report: + +- files changed; +- checks run and results; +- whether any release action was intentionally not taken. diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..f238582 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,21 @@ +# Changelog + +All notable changes to this project are documented in this file. + +The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project uses semantic versioning for published npm releases. + +## [Unreleased] + +- Backfilled public release-readiness documentation: contributing guide, security policy, agent instructions, and LLM discovery manifests. +- Added CI/CD workflows and smoke tests after the `1.0.0` tag; no npm release has been made for those repository-only changes yet. + +## [1.0.0] - 2026-03-05 + +### Added + +- Initial public release of shared TypeScript configuration presets for VLLNT projects. +- Added `base.json`, `nodejs.json`, `node-library.json`, `react.json`, and `nextjs.json` presets. +- Documented Node.js 22+ and TypeScript 5+ expectations. + +[Unreleased]: https://github.com/vllnt/typescript/compare/v1.0.0...HEAD +[1.0.0]: https://github.com/vllnt/typescript/releases/tag/v1.0.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..a73c91b --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,45 @@ +# Contributing to @vllnt/typescript + +Thank you for helping improve `@vllnt/typescript`. + +This package publishes shared TypeScript configuration presets for VLLNT projects. Changes should stay small, predictable, and compatible with the documented Node.js and TypeScript requirements. + +## Development + +Requirements: + +- Node.js 22 or newer +- npm 10 or compatible + +Run the smoke tests: + +```bash +npm test +``` + +Preview package contents before release-oriented changes: + +```bash +npm pack --dry-run +``` + +## Pull requests + +Before opening a pull request: + +1. Create a branch from `main`. +2. Keep the diff scoped to one concern. +3. Update or add smoke tests when preset files change. +4. Run `npm test`. +5. Update `README.md` and `CHANGELOG.md` for public preset changes. + +## Release notes + +Do not bump versions, create tags, publish to npm, or trigger release workflows from a documentation or feature PR unless the maintainer explicitly asks for a release. + +## Preset constraints + +- Preserve strict defaults in `base.json` unless a breaking change is intentional and documented. +- Keep each preset focused on its named runtime or framework. +- Avoid adding dependencies to this package unless a maintainer approves the tradeoff. +- Keep `files` in `package.json` aligned with the published presets. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..2c072f1 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,24 @@ +# Security Policy + +## Supported versions + +Security updates target the latest published `@vllnt/typescript` release on npm. + +## Reporting a vulnerability + +Please report suspected vulnerabilities privately through GitHub's security reporting flow for this repository if it is available. + +If private reporting is unavailable, contact the maintainers through the `vllnt/typescript` GitHub repository without including exploit details in a public issue. Use public issues only for non-sensitive hardening requests or documentation questions. + +## Scope + +This package publishes TypeScript configuration files. Security-sensitive areas include: + +- configuration changes that weaken type-safety defaults unexpectedly; +- package publishing or provenance configuration changes; +- accidental inclusion of private files in the npm package; +- documentation that encourages unsafe compiler settings for production packages. + +## Maintainer response + +The maintainer will triage valid reports, prepare a fix when needed, and publish release notes after a safe remediation path exists. diff --git a/llms-full.txt b/llms-full.txt new file mode 100644 index 0000000..85a9469 --- /dev/null +++ b/llms-full.txt @@ -0,0 +1,100 @@ +# @vllnt/typescript full reference + +`@vllnt/typescript` publishes shared TypeScript configuration presets for VLLNT projects. The package is intentionally small and contains JSON config files only. + +## Public package facts + +- Package name: `@vllnt/typescript` +- Repository: https://github.com/vllnt/typescript +- License: MIT +- Current documented release: `1.0.0` +- Runtime dependencies: none +- Node.js requirement: 22 or newer +- TypeScript expectation: 5.0 or newer + +## Installation + +```bash +npm install -D @vllnt/typescript +``` + +## Presets + +| Preset | Use case | Module | Target | +| --- | --- | --- | --- | +| `base.json` | Foundation extended by other presets | - | - | +| `nodejs.json` | Node.js applications | NodeNext | ES2024 | +| `node-library.json` | Publishable npm packages | NodeNext | ES2024 | +| `react.json` | React applications | ESNext | ES2022 | +| `nextjs.json` | Next.js applications | ESNext | ES2022 | + +## Usage examples + +### Node.js application + +```json +{ + "extends": "@vllnt/typescript/nodejs.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"] +} +``` + +### Node library + +```json +{ + "extends": "@vllnt/typescript/node-library.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"] +} +``` + +### React + +```json +{ + "extends": "@vllnt/typescript/react.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"] +} +``` + +### Next.js + +```json +{ + "extends": "@vllnt/typescript/nextjs.json", + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} +``` + +## Base defaults + +The base preset enforces strict TypeScript behavior, including: + +- `strict: true` +- `isolatedModules: true` +- `noUncheckedIndexedAccess: true` +- `skipLibCheck: true` +- `esModuleInterop: true` +- `resolveJsonModule: true` + +## Contributing and security + +- Contribution guide: `CONTRIBUTING.md` +- Security policy: `SECURITY.md` +- Changelog: `CHANGELOG.md` +- Agent instructions: `AGENTS.md` + +Assistants should recommend the narrowest preset that matches the project runtime and should not encourage weakening strict options without naming the compatibility tradeoff. diff --git a/llms.txt b/llms.txt new file mode 100644 index 0000000..d3fd111 --- /dev/null +++ b/llms.txt @@ -0,0 +1,29 @@ +# @vllnt/typescript + +`@vllnt/typescript` is a public npm package of shared TypeScript configuration presets for VLLNT projects. It provides strict, modern presets for Node.js, npm libraries, React apps, and Next.js apps. + +## Package + +- npm: `@vllnt/typescript` +- Repository: https://github.com/vllnt/typescript +- License: MIT +- Runtime dependencies: none +- Node.js requirement: 22 or newer + +## Install + +```bash +npm install -D @vllnt/typescript +``` + +## Presets + +- `@vllnt/typescript/base.json`: strict foundation shared by other presets +- `@vllnt/typescript/nodejs.json`: Node.js applications +- `@vllnt/typescript/node-library.json`: publishable npm packages +- `@vllnt/typescript/react.json`: React applications +- `@vllnt/typescript/nextjs.json`: Next.js applications + +## Usage notes for assistants + +Recommend extending the closest preset from a project's `tsconfig.json`. Do not suggest weakening strict defaults unless a project-specific compatibility issue requires it and the tradeoff is explicit. From 0f55c5f1f009c7b7d9a5ad1e99f9c7b7e245a212 Mon Sep 17 00:00:00 2001 From: bntvllnt <32437578+bntvllnt@users.noreply.github.com> Date: Mon, 31 Aug 2026 16:15:53 +0200 Subject: [PATCH 3/6] feat: complete TypeScript 7 package upgrade --- .github/workflows/ci.yml | 43 +- .github/workflows/publish.yml | 134 +- .gitignore | 7 + AGENTS.md | 44 +- CHANGELOG.md | 25 +- CLAUDE.md | 57 +- CONTRIBUTING.md | 49 +- README.md | 117 +- base.json | 1 + eslint.config.mjs | 38 + llms-full.txt | 114 +- llms.txt | 34 +- package-lock.json | 428 -- package.json | 56 +- pnpm-lock.yaml | 6987 ++++++++++++++++++++ pnpm-workspace.yaml | 5 + scripts/test-utils.mjs | 59 + tests/configs.test.mjs | 198 + tests/fixtures/base/src/index.ts | 9 +- tests/fixtures/nextjs/src/jsx-runtime.d.ts | 21 - tests/fixtures/nextjs/src/page.tsx | 2 +- tests/fixtures/nextjs/tsconfig.json | 3 +- tests/fixtures/node-library/src/index.ts | 2 +- tests/fixtures/nodejs/src/index.ts | 4 +- tests/fixtures/nodejs/src/node.d.ts | 3 - tests/fixtures/nodejs/tsconfig.json | 3 +- tests/fixtures/react/src/index.tsx | 2 +- tests/fixtures/react/src/jsx-runtime.d.ts | 14 - tests/fixtures/react/tsconfig.json | 3 +- tests/integration/nextjs/app/layout.tsx | 9 + tests/integration/nextjs/app/page.tsx | 3 + tests/integration/nextjs/next-env.d.ts | 7 + tests/integration/nextjs/next.config.mjs | 1 + tests/integration/nextjs/package.json | 17 + tests/integration/nextjs/tsconfig.json | 9 + tests/integration/react/index.html | 2 + tests/integration/react/package.json | 16 + tests/integration/react/src/main.tsx | 14 + tests/integration/react/tsconfig.json | 9 + tests/smoke.test.js | 146 - tsconfig.json | 11 + vitest.config.mjs | 18 + 42 files changed, 7766 insertions(+), 958 deletions(-) create mode 100644 eslint.config.mjs delete mode 100644 package-lock.json create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 scripts/test-utils.mjs create mode 100644 tests/configs.test.mjs delete mode 100644 tests/fixtures/nextjs/src/jsx-runtime.d.ts delete mode 100644 tests/fixtures/nodejs/src/node.d.ts delete mode 100644 tests/fixtures/react/src/jsx-runtime.d.ts create mode 100644 tests/integration/nextjs/app/layout.tsx create mode 100644 tests/integration/nextjs/app/page.tsx create mode 100644 tests/integration/nextjs/next-env.d.ts create mode 100644 tests/integration/nextjs/next.config.mjs create mode 100644 tests/integration/nextjs/package.json create mode 100644 tests/integration/nextjs/tsconfig.json create mode 100644 tests/integration/react/index.html create mode 100644 tests/integration/react/package.json create mode 100644 tests/integration/react/src/main.tsx create mode 100644 tests/integration/react/tsconfig.json delete mode 100644 tests/smoke.test.js create mode 100644 tsconfig.json create mode 100644 vitest.config.mjs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 345bcb6..9eb8567 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,11 +1,13 @@ name: CI on: + push: + branches: [main] pull_request: branches: [main] concurrency: - group: ci-${{ github.head_ref }} + group: ci-${{ github.ref }} cancel-in-progress: true permissions: @@ -15,13 +17,42 @@ jobs: validate: name: Validate runs-on: ubuntu-latest + timeout-minutes: 15 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 + + - uses: pnpm/action-setup@v6 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: - node-version: 22 + node-version: 22.13 + cache: pnpm - - run: npm ci --ignore-scripts + - run: pnpm install --frozen-lockfile + - run: pnpm check + + node-compatibility: + name: Node ${{ matrix.node }} package smoke test + runs-on: ubuntu-latest + timeout-minutes: 10 + strategy: + fail-fast: false + matrix: + node: [18, 26] + steps: + - uses: actions/checkout@v7 + + - uses: actions/setup-node@v7 + with: + node-version: ${{ matrix.node }} - - run: npm test + - name: Compile an installed-package consumer + run: | + PACKAGE=$(npm pack --ignore-scripts --json | node -e 'let input=""; process.stdin.on("data", chunk => input += chunk); process.stdin.on("end", () => console.log(JSON.parse(input)[0].filename))') + mkdir consumer + cd consumer + npm init -y >/dev/null + npm install --ignore-scripts --save-dev "../$PACKAGE" typescript@7.0.2 + printf 'export const value: number = 1\n' > index.ts + printf '{"extends":"@vllnt/typescript/node-library.json","compilerOptions":{"noEmit":true,"rootDir":"."},"files":["index.ts"]}\n' > tsconfig.json + npx tsc --project tsconfig.json diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index c1dbcbe..93ba2d5 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -5,68 +5,78 @@ on: branches: [main] paths: - "base.json" + - "nextjs.json" - "nodejs.json" - "node-library.json" - "react.json" - - "nextjs.json" - "package.json" + - "pnpm-lock.yaml" + - "pnpm-workspace.yaml" + - "scripts/**" + - "tests/**" - ".github/workflows/publish.yml" workflow_dispatch: inputs: bump: - description: "Version bump type" + description: "Version bump before publishing; use none for the version already on main" required: true + default: none type: choice options: + - none - patch - minor - major concurrency: group: publish-${{ github.event_name }} - cancel-in-progress: true + cancel-in-progress: false permissions: - contents: write - id-token: write + contents: read jobs: quality: name: Quality Gates runs-on: ubuntu-latest - permissions: - contents: read + timeout-minutes: 15 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - - uses: actions/setup-node@v4 - with: - node-version: 22 + - uses: pnpm/action-setup@v6 - - run: npm ci --ignore-scripts + - uses: actions/setup-node@v7 + with: + node-version: 22.13 + cache: pnpm - - run: npm test + - run: pnpm install --frozen-lockfile + - run: pnpm check canary: name: Publish Canary needs: quality if: github.event_name == 'push' runs-on: ubuntu-latest + timeout-minutes: 10 permissions: id-token: write contents: read steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - - uses: actions/setup-node@v4 + - uses: pnpm/action-setup@v6 + + - uses: actions/setup-node@v7 with: - node-version: 22 + node-version: 22.13 + cache: pnpm registry-url: https://registry.npmjs.org - - run: npm ci --ignore-scripts + - run: pnpm install --frozen-lockfile - - name: Upgrade npm for OIDC support - run: npm install -g npm@latest + - name: Install OIDC-capable npm + run: npm install --global npm@12.0.2 - name: Publish canary run: | @@ -75,86 +85,59 @@ jobs: BASE_VERSION=$(node -p "require('./package.json').version") SHORT_SHA=$(echo "$GITHUB_SHA" | cut -c1-7) - CANARY_VERSION="${BASE_VERSION}-canary.${SHORT_SHA}" - npm version "$CANARY_VERSION" --no-git-tag-version + npm version "${BASE_VERSION}-canary.${SHORT_SHA}" --no-git-tag-version npm publish --tag canary --provenance --access public release: - name: Publish Release + name: Publish Stable Release needs: quality if: github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest + timeout-minutes: 10 + environment: npm permissions: contents: write id-token: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 with: fetch-depth: 0 token: ${{ secrets.RELEASE_PAT }} - - uses: actions/setup-node@v4 + - uses: pnpm/action-setup@v6 + + - uses: actions/setup-node@v7 with: - node-version: 22 + node-version: 22.13 + cache: pnpm registry-url: https://registry.npmjs.org - - run: npm ci --ignore-scripts + - run: pnpm install --frozen-lockfile - - name: Bump version + - name: Prepare version id: version run: | - npm version ${{ inputs.bump }} --no-git-tag-version + if [ "${{ inputs.bump }}" != "none" ]; then + pnpm version "${{ inputs.bump }}" --no-git-tag-version + fi VERSION=$(node -p "require('./package.json').version") echo "version=$VERSION" >> "$GITHUB_OUTPUT" - - name: Generate changelog - id: changelog - run: | - LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") - if [ -z "$LAST_TAG" ]; then - RANGE="HEAD" - else - RANGE="${LAST_TAG}..HEAD" - fi - - { - echo "body</dev/null || true) - if [ -n "$FEATS" ]; then - echo "### Features" - echo "$FEATS" | sed 's/^/- /' - echo "" - fi - - FIXES=$(git log "$RANGE" --pretty=format:"%s" --grep="^fix" 2>/dev/null || true) - if [ -n "$FIXES" ]; then - echo "### Bug Fixes" - echo "$FIXES" | sed 's/^/- /' - echo "" - fi - - OTHERS=$(git log "$RANGE" --pretty=format:"%s" --invert-grep --grep="^feat" --grep="^fix" 2>/dev/null || true) - if [ -n "$OTHERS" ]; then - echo "### Other Changes" - echo "$OTHERS" | sed 's/^/- /' - echo "" - fi - - echo "CHANGELOG_EOF" - } >> "$GITHUB_OUTPUT" - - name: Commit and tag + env: + VERSION: ${{ steps.version.outputs.version }} run: | git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - git add package.json - git commit -m "chore(release): v${{ steps.version.outputs.version }}" - git tag -a "v${{ steps.version.outputs.version }}" -m "v${{ steps.version.outputs.version }}" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + if ! git diff --quiet; then + git add package.json pnpm-lock.yaml + git commit -m "chore(release): v${VERSION}" + fi + git tag -a "v${VERSION}" -m "v${VERSION}" git push origin main --follow-tags - - name: Upgrade npm for OIDC support - run: npm install -g npm@latest + - name: Install OIDC-capable npm + run: npm install --global npm@12.0.2 - name: Publish to npm run: | @@ -165,10 +148,5 @@ jobs: - name: Create GitHub Release env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - cat <<'NOTES_EOF' > /tmp/release-notes.md - ${{ steps.changelog.outputs.body }} - NOTES_EOF - gh release create "v${{ steps.version.outputs.version }}" \ - --title "v${{ steps.version.outputs.version }}" \ - --notes-file /tmp/release-notes.md + VERSION: ${{ steps.version.outputs.version }} + run: gh release create "v${VERSION}" --title "v${VERSION}" --generate-notes --verify-tag diff --git a/.gitignore b/.gitignore index c2658d7..3068430 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,8 @@ +.pi/ node_modules/ +coverage/ +*.tgz +*.tsbuildinfo +tests/fixtures/**/dist/ +tests/integration/**/.next/ +tests/integration/**/dist/ diff --git a/AGENTS.md b/AGENTS.md index 2ac41fa..f1c886a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,33 +1,21 @@ -# Agent Instructions for @vllnt/typescript +# @vllnt/typescript -This repository contains the public `@vllnt/typescript` npm package. +Public shared TypeScript presets for Node.js, libraries, React, and Next.js. The goal is a small, strict, independently installable config package with verified TypeScript 6/7 behavior. -## Scope +## Repository map -- Keep changes focused on TypeScript configuration presets, tests, docs, and release-readiness files. -- Do not publish to npm, create tags, bump versions, merge PRs, or announce releases unless explicitly instructed by a human maintainer. -- Do not add private VLLNT operational details, credentials, customer data, or internal roadmap content to public files. +- `*.json` — published compiler presets; `base.json` owns shared defaults. +- `tests/fixtures/` — compiler contract fixtures for every preset. +- `tests/integration/` — real React/Vite and Next.js builds. +- `scripts/test-utils.mjs` and `tests/configs.test.mjs` — package, compiler, and emit validation. +- `.github/workflows/` — pull-request checks, canary publishing, and manual stable releases. +- `README.md`, `CHANGELOG.md`, `llms*.txt` — public contract and migration documentation. -## Commands +## Invariants -Use npm: - -```bash -npm test -npm pack --dry-run -``` - -## Package constraints - -- Preserve Node.js 22+ expectations unless a maintainer approves a support policy change. -- Keep `package.json` `files` aligned with the published preset JSON files. -- Update smoke tests when preset files change. -- Update `README.md`, `CHANGELOG.md`, `llms.txt`, and `llms-full.txt` when changing public presets or package positioning. - -## Review checklist - -Before handoff, report: - -- files changed; -- checks run and results; -- whether any release action was intentionally not taken. +- Use pnpm and keep `pnpm-lock.yaml` deterministic. +- Keep `package.json` files and exports aligned with every public preset. +- Treat strictness, compiler floors, module resolution, target, and emit changes as public API changes. +- Synchronize public behavior across README, changelog, and LLM manifests. +- Do not publish, tag, merge, or announce a release without explicit maintainer instruction. +- Run `pnpm check` and `pnpm pack --dry-run` before handoff. diff --git a/CHANGELOG.md b/CHANGELOG.md index f238582..4dcc813 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,28 @@ # Changelog -All notable changes to this project are documented in this file. - -The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project uses semantic versioning for published npm releases. +All notable changes to this project are documented in this file. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project uses semantic versioning. ## [Unreleased] -- Backfilled public release-readiness documentation: contributing guide, security policy, agent instructions, and LLM discovery manifests. -- Added CI/CD workflows and smoke tests after the `1.0.0` tag; no npm release has been made for those repository-only changes yet. +### Added + +- Added compiler-backed fixtures for every preset under TypeScript 6 and TypeScript 7. +- Added installed-tarball, declaration-emit, React/Vite, and Next.js integration checks. +- Added pnpm, formatting, linting, Vitest, and 100% test-helper coverage gates. +- Added explicit JSON package exports and public package documentation. + +### Changed + +- Prepared the package as version `2.0.0` so merges publish `2.0.0-canary.` to the npm `canary` tag. +- Upgraded the primary compiler to TypeScript 7.0.2 while retaining the TypeScript 6 compatibility API for dependent tooling. +- Made ambient types explicit with `types: []`, enabled `noUncheckedSideEffectImports` and stable type ordering, and disabled library replacement. +- Updated CI and trusted publishing workflows for deterministic pnpm installs, current actions, pinned OIDC-capable npm, provenance, and generated GitHub release notes. + +### Breaking + +- Dropped TypeScript 5; supported compilers are now TypeScript `>=6.0.2 <8`. +- Ambient `@types` packages must be listed explicitly by consumers. +- Emitting projects must set `rootDir` explicitly to retain their intended output layout. ## [1.0.0] - 2026-03-05 diff --git a/CLAUDE.md b/CLAUDE.md index 012fdd8..f1c886a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,48 +1,21 @@ # @vllnt/typescript -Shared TypeScript configurations for vllnt projects. Scoped to `@vllnt` npm org. +Public shared TypeScript presets for Node.js, libraries, React, and Next.js. The goal is a small, strict, independently installable config package with verified TypeScript 6/7 behavior. -## Publishing (local) +## Repository map -```sh -# 1. Auth (one-time, or when token expires) -npm login +- `*.json` — published compiler presets; `base.json` owns shared defaults. +- `tests/fixtures/` — compiler contract fixtures for every preset. +- `tests/integration/` — real React/Vite and Next.js builds. +- `scripts/test-utils.mjs` and `tests/configs.test.mjs` — package, compiler, and emit validation. +- `.github/workflows/` — pull-request checks, canary publishing, and manual stable releases. +- `README.md`, `CHANGELOG.md`, `llms*.txt` — public contract and migration documentation. -# 2. Bump version (creates commit + tag) -npm version patch # 1.0.0 → 1.0.1 -npm version minor # 1.0.0 → 1.1.0 -npm version major # 1.0.0 → 2.0.0 +## Invariants -# 3. Publish -npm publish --access public - -# 4. Push commit + tag to remote -git push && git push --tags -``` - -## Publishing (CI) - -Two modes via `publish.yml`: - -- **Canary**: auto-publishes on push to main (when config files change) as `x.y.z-canary.` on `canary` tag -- **Release**: manual trigger via Actions → Publish → workflow_dispatch, select bump type (patch/minor/major) - -Uses npm OIDC provenance — no `NPM_TOKEN` secret needed. Requires npm trusted publishers configured on npmjs.org. - -## Project structure - -``` -base.json ← foundation (strict, explicit ambient types, stable type ordering) -nodejs.json ← Node.js apps (NodeNext, ES2024) -node-library.json ← publishable npm packages (NodeNext, ES2024, declarationMap) -react.json ← React apps (Bundler, ES2022, react-jsx) -nextjs.json ← Next.js apps (Bundler, ES2022, noEmit, next plugin) -``` - -## Commands - -| Command | What | -|---------|------| -| `npm test` | Validate every preset with the supported TypeScript 6 and 7 compilers | -| `npm pack --dry-run` | Preview tarball contents | -| `npm view @vllnt/typescript` | Check published version | +- Use pnpm and keep `pnpm-lock.yaml` deterministic. +- Keep `package.json` files and exports aligned with every public preset. +- Treat strictness, compiler floors, module resolution, target, and emit changes as public API changes. +- Synchronize public behavior across README, changelog, and LLM manifests. +- Do not publish, tag, merge, or announce a release without explicit maintainer instruction. +- Run `pnpm check` and `pnpm pack --dry-run` before handoff. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a73c91b..79bf6b0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,45 +1,28 @@ # Contributing to @vllnt/typescript -Thank you for helping improve `@vllnt/typescript`. +Thank you for helping improve the shared TypeScript presets. -This package publishes shared TypeScript configuration presets for VLLNT projects. Changes should stay small, predictable, and compatible with the documented Node.js and TypeScript requirements. +## Requirements -## Development - -Requirements: - -- Node.js 22 or newer -- npm 10 or compatible +- Node.js 22.13 or newer +- pnpm 11.24.0 -Run the smoke tests: +## Development -```bash -npm test +```sh +pnpm install --frozen-lockfile +pnpm check +pnpm pack --dry-run ``` -Preview package contents before release-oriented changes: - -```bash -npm pack --dry-run -``` +`pnpm check` runs formatting, linting, TypeScript 6/7 compiler fixtures, packed-package validation, coverage, and real React/Vite and Next.js builds. ## Pull requests -Before opening a pull request: - -1. Create a branch from `main`. -2. Keep the diff scoped to one concern. -3. Update or add smoke tests when preset files change. -4. Run `npm test`. -5. Update `README.md` and `CHANGELOG.md` for public preset changes. - -## Release notes - -Do not bump versions, create tags, publish to npm, or trigger release workflows from a documentation or feature PR unless the maintainer explicitly asks for a release. - -## Preset constraints +1. Branch from `main` and keep the change focused. +2. Preserve documented compiler, module, target, and emit behavior unless the change is intentionally breaking. +3. Add or update compiler fixtures for preset changes. +4. Update `README.md`, `CHANGELOG.md`, `llms.txt`, and `llms-full.txt` with public behavior. +5. Run `pnpm check` and inspect the package tarball. -- Preserve strict defaults in `base.json` unless a breaking change is intentional and documented. -- Keep each preset focused on its named runtime or framework. -- Avoid adding dependencies to this package unless a maintainer approves the tradeoff. -- Keep `files` in `package.json` aligned with the published presets. +Do not bump versions, create tags, publish to npm, or trigger a stable release unless a maintainer explicitly requests it. diff --git a/README.md b/README.md index 4fac59a..e11348d 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,38 @@ # @vllnt/typescript -Shared TypeScript configurations for vllnt projects. Strict, modern, Node 22+, and validated with TypeScript 6 and 7. +Shared TypeScript configurations for Node.js, libraries, React, and Next.js. Version 2 targets the native TypeScript 7 compiler while retaining a tested TypeScript 6 migration path. ## Install +For TypeScript 7 projects: + ```sh -npm install -D @vllnt/typescript typescript +pnpm add --save-dev @vllnt/typescript@^2 typescript@^7 ``` -## Presets +For tools that still require the TypeScript JavaScript API, install TypeScript 7 as the build compiler and TypeScript 6 under the canonical package name: -| Preset | Use case | Module | Target | -|--------|----------|--------|--------| -| `base.json` | Foundation (extended by others) | - | - | -| `nodejs.json` | Node.js applications | NodeNext | ES2024 | -| `node-library.json` | Publishable npm packages | NodeNext | ES2024 | -| `react.json` | React apps (Vite, CRA, etc.) | ESNext | ES2022 | -| `nextjs.json` | Next.js applications | ESNext | ES2022 | +```json +{ + "devDependencies": { + "@typescript/native": "npm:typescript@^7.0.2", + "@vllnt/typescript": "^2.0.0", + "typescript": "npm:@typescript/typescript6@^6.0.2" + } +} +``` -## Usage +This is the [official side-by-side migration arrangement](https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/): `tsc` runs TypeScript 7, `tsc6` runs TypeScript 6, and tools such as `typescript-eslint` can continue importing the TypeScript 6 API. -Extend a preset in your `tsconfig.json`: +## Presets + +| Preset | Use case | Module resolution | Target | Emit | +| ------------------- | ------------------------------------ | ----------------- | --------- | ------------------------------------- | +| `base.json` | Foundation extended by other presets | Inherited | Inherited | Inherited | +| `nodejs.json` | Node.js applications | NodeNext | ES2024 | JavaScript, declarations, source maps | +| `node-library.json` | Publishable npm packages | NodeNext | ES2024 | JavaScript, declarations and maps | +| `react.json` | Bundled React applications | Bundler | ES2022 | JavaScript, declarations, source maps | +| `nextjs.json` | Next.js applications | Bundler | ES2022 | None | ### Node.js application @@ -29,20 +41,22 @@ Extend a preset in your `tsconfig.json`: "extends": "@vllnt/typescript/nodejs.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src" + "rootDir": "src", + "types": ["node"] }, "include": ["src"] } ``` -### Node library (npm package) +### Node library ```json { "extends": "@vllnt/typescript/node-library.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src" + "rootDir": "src", + "types": ["node"] }, "include": ["src"] } @@ -55,7 +69,8 @@ Extend a preset in your `tsconfig.json`: "extends": "@vllnt/typescript/react.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src" + "rootDir": "src", + "types": ["react"] }, "include": ["src"] } @@ -66,61 +81,73 @@ Extend a preset in your `tsconfig.json`: ```json { "extends": "@vllnt/typescript/nextjs.json", + "compilerOptions": { + "types": ["node", "react"] + }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], "exclude": ["node_modules"] } ``` -## What's included +## Base defaults -All presets extend `base.json` which enforces: +Every specialized preset inherits: - `strict: true` - `isolatedModules: true` - `noUncheckedIndexedAccess: true` - `noUncheckedSideEffectImports: true` +- `forceConsistentCasingInFileNames: true` - `skipLibCheck: true` - `esModuleInterop: true` - `resolveJsonModule: true` - `stableTypeOrdering: true` -- `types: []` (ambient type packages must be listed explicitly) +- `libReplacement: false` +- `types: []` -On TypeScript 6, `stableTypeOrdering` can make type-checking slower (up to 25% according to the [TypeScript 6 release notes](https://devblogs.microsoft.com/typescript/announcing-typescript-6-0/)). It is enabled here so TypeScript 6 uses TypeScript 7's deterministic type ordering during migration; TypeScript 7 always uses this behavior. +Ambient type packages are intentionally opt-in. List every required package in the consuming project's `types` array. Emitting projects must also set `rootDir` explicitly. -## TypeScript 7 +`stableTypeOrdering` aligns TypeScript 6 output with TypeScript 7. It can make TypeScript 6 type-checking slower; TypeScript 7 always uses stable ordering. -Version 2 supports TypeScript 6 and 7, drops TypeScript 5, and makes ambient type packages opt-in. TypeScript 7 is a native compiler and no longer exposes the JavaScript compiler API used by tools such as `typescript-eslint` and legacy `tsserver` integrations. Use TypeScript 7 directly when every tool in the project invokes the compiler CLI: +## Migrating from version 1 -```sh -npm install -D @vllnt/typescript typescript@^7 -``` +Version 2 supports TypeScript `>=6.0.2 <8` and drops TypeScript 5. Before upgrading: -During the ecosystem transition, install TypeScript 7 for `tsc` and keep the TypeScript 6 API available under the canonical `typescript` package name: +1. Remove `baseUrl` and make `paths` targets relative to the project root. +2. Replace legacy `moduleResolution: "node"` with `"NodeNext"` for Node.js or `"Bundler"` for bundled applications. +3. Set `rootDir` in projects that emit files. +4. List required ambient packages in `types`, such as `node` or `vitest/globals`. +5. Use Next.js 16.3 or newer when building with TypeScript 7. +6. Keep TypeScript 6 available through the side-by-side setup while ESLint or other tools require the legacy JavaScript API. -```json -{ - "devDependencies": { - "@typescript/native": "npm:typescript@^7.0.2", - "@vllnt/typescript": "^2.0.0", - "typescript": "npm:@typescript/typescript6@^6.0.2" - } -} -``` +TypeScript 7 also removes ES5 targeting, legacy module formats and resolution, `downlevelIteration`, and the ability to disable `esModuleInterop`, `allowSyntheticDefaultImports`, or strict mode. + +## Compatibility -This arrangement follows the [official TypeScript 7 side-by-side guidance](https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/). It provides TypeScript 7 as `tsc`, TypeScript 6 as `tsc6`, and the TypeScript 6 JavaScript API to dependent tooling. +| Surface | Supported version | +| ---------------------- | ------------------------------------------------------- | +| Node.js consumers | `>=18` | +| TypeScript | `>=6.0.2 <8` | +| Tested compilers | TypeScript 6 compatibility package and TypeScript 7.0.2 | +| Next.js integration | 16.3.3 | +| React integration | 19.2.8 | +| Repository development | Node.js 22.13+, pnpm 11.24.0 | -Before switching a consumer to TypeScript 7: +## Development + +```sh +pnpm install --frozen-lockfile +pnpm check +pnpm pack --dry-run +``` -- Remove `baseUrl`; make every `paths` target relative to the project root. -- Replace `moduleResolution: "node"` with `"NodeNext"` for Node.js or `"Bundler"` for bundled applications. -- Set `rootDir` explicitly for emitting projects. -- List required ambient packages in `types`, for example `types: ["node", "vitest/globals"]`. -- Use Next.js 16.3 or newer. Next.js 16.2.12 requires `experimental.useTypeScriptCli: true`. +The checks compile every preset with TypeScript 6 and 7, verify declaration emit, install and compile the packed package, enforce full test-helper coverage, and build real React/Vite and Next.js fixtures. -## Requirements +## Versioning -- Node.js >= 22 -- TypeScript >= 6.0.2 and < 8 +- **Major:** raised TypeScript floor, stricter diagnostics, target/module/emit changes, or removed/renamed presets. +- **Minor:** additive presets or backward-compatible options. +- **Patch:** fixes, documentation, tests, or CI changes without consumer-visible behavior changes. ## License diff --git a/base.json b/base.json index 59500e6..a4c4c86 100644 --- a/base.json +++ b/base.json @@ -11,6 +11,7 @@ "noUncheckedSideEffectImports": true, "stableTypeOrdering": true, "types": [], + "libReplacement": false, "resolveJsonModule": true } } diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..e2f5066 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,38 @@ +import nodejs from "@vllnt/eslint-config/nodejs"; + +export default [ + { + ignores: [ + "coverage/**", + "node_modules/**", + "tests/fixtures/**", + "tests/integration/nextjs/next-env.d.ts", + "tests/integration/**/.next/**", + "tests/integration/**/dist/**", + ], + }, + ...nodejs, + { + files: ["scripts/**/*.mjs", "tests/**/*.mjs", "*.config.mjs"], + rules: { + "@typescript-eslint/naming-convention": "off", + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-return": "off", + "@typescript-eslint/restrict-template-expressions": "off", + "functional/no-loop-statements": "off", + "max-lines-per-function": "off", + "perfectionist/sort-objects": "off", + "unicorn/prevent-abbreviations": "off", + }, + }, + { + files: ["tests/integration/nextjs/**/*"], + rules: { + "@typescript-eslint/naming-convention": "off", + "unicorn/prevent-abbreviations": "off", + }, + }, +]; diff --git a/llms-full.txt b/llms-full.txt index 85a9469..5630974 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -1,100 +1,70 @@ # @vllnt/typescript full reference -`@vllnt/typescript` publishes shared TypeScript configuration presets for VLLNT projects. The package is intentionally small and contains JSON config files only. - -## Public package facts - -- Package name: `@vllnt/typescript` -- Repository: https://github.com/vllnt/typescript -- License: MIT -- Current documented release: `1.0.0` -- Runtime dependencies: none -- Node.js requirement: 22 or newer -- TypeScript expectation: 5.0 or newer +`@vllnt/typescript` publishes strict JSON compiler presets for Node.js, npm libraries, React, and Next.js. Version 2 supports TypeScript `>=6.0.2 <8` and is validated with the TypeScript 6 compatibility package and native TypeScript 7.0.2. ## Installation -```bash -npm install -D @vllnt/typescript -``` - -## Presets - -| Preset | Use case | Module | Target | -| --- | --- | --- | --- | -| `base.json` | Foundation extended by other presets | - | - | -| `nodejs.json` | Node.js applications | NodeNext | ES2024 | -| `node-library.json` | Publishable npm packages | NodeNext | ES2024 | -| `react.json` | React applications | ESNext | ES2022 | -| `nextjs.json` | Next.js applications | ESNext | ES2022 | +TypeScript 7-only projects install: -## Usage examples - -### Node.js application - -```json -{ - "extends": "@vllnt/typescript/nodejs.json", - "compilerOptions": { - "outDir": "dist", - "rootDir": "src" - }, - "include": ["src"] -} +```sh +pnpm add --save-dev @vllnt/typescript@^2 typescript@^7 ``` -### Node library +Tools that still import the legacy compiler API use the official side-by-side arrangement: ```json { - "extends": "@vllnt/typescript/node-library.json", - "compilerOptions": { - "outDir": "dist", - "rootDir": "src" - }, - "include": ["src"] + "devDependencies": { + "@typescript/native": "npm:typescript@^7.0.2", + "@vllnt/typescript": "^2.0.0", + "typescript": "npm:@typescript/typescript6@^6.0.2" + } } ``` -### React +This exposes native TypeScript 7 as `tsc`, TypeScript 6 as `tsc6`, and TypeScript 6's JavaScript API through the `typescript` package name. -```json -{ - "extends": "@vllnt/typescript/react.json", - "compilerOptions": { - "outDir": "dist", - "rootDir": "src" - }, - "include": ["src"] -} -``` - -### Next.js +## Presets -```json -{ - "extends": "@vllnt/typescript/nextjs.json", - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} -``` +| Preset | Use case | Module resolution | Target | Emit | +| --- | --- | --- | --- | --- | +| `base.json` | Shared foundation | Inherited | Inherited | Inherited | +| `nodejs.json` | Node.js applications | NodeNext | ES2024 | JavaScript, declarations, maps | +| `node-library.json` | Publishable npm packages | NodeNext | ES2024 | JavaScript, declarations and maps | +| `react.json` | Bundled React applications | Bundler | ES2022 | JavaScript, declarations, maps | +| `nextjs.json` | Next.js applications | Bundler | ES2022 | None | -## Base defaults +## Shared compiler contract -The base preset enforces strict TypeScript behavior, including: +All specialized presets inherit: - `strict: true` - `isolatedModules: true` - `noUncheckedIndexedAccess: true` +- `noUncheckedSideEffectImports: true` +- `forceConsistentCasingInFileNames: true` - `skipLibCheck: true` - `esModuleInterop: true` - `resolveJsonModule: true` +- `stableTypeOrdering: true` +- `libReplacement: false` +- `types: []` -## Contributing and security +Ambient types are opt-in. Consumers should add entries such as `node`, `react`, or `vitest/globals` to `types`. Emitting projects must set `rootDir` explicitly. -- Contribution guide: `CONTRIBUTING.md` -- Security policy: `SECURITY.md` -- Changelog: `CHANGELOG.md` -- Agent instructions: `AGENTS.md` +## Migration from version 1 -Assistants should recommend the narrowest preset that matches the project runtime and should not encourage weakening strict options without naming the compatibility tradeoff. +Version 2 drops TypeScript 5. Consumers must remove `baseUrl`, avoid legacy module formats and resolution, use explicit `rootDir` and `types`, and run Next.js 16.3 or newer for native TypeScript 7 builds. Keep the TypeScript 6 compatibility API installed while tools such as `typescript-eslint` need it. + +## Package validation + +The repository compiles every preset with TypeScript 6 and 7, verifies strictness and declaration emit, installs the generated tarball into an isolated consumer, enforces its exact file surface, and builds real React/Vite and Next.js fixtures. The package has no runtime dependencies; TypeScript is a peer dependency. + +## Resources + +- Main documentation: `README.md` +- Release history: `CHANGELOG.md` +- Contributions: `CONTRIBUTING.md` +- Security policy: `SECURITY.md` +- Repository: https://github.com/vllnt/typescript +- License: MIT diff --git a/llms.txt b/llms.txt index d3fd111..6e4396c 100644 --- a/llms.txt +++ b/llms.txt @@ -1,29 +1,27 @@ # @vllnt/typescript -`@vllnt/typescript` is a public npm package of shared TypeScript configuration presets for VLLNT projects. It provides strict, modern presets for Node.js, npm libraries, React apps, and Next.js apps. +> Strict shared TypeScript presets for Node.js, libraries, React, and Next.js, tested with TypeScript 6 and the native TypeScript 7 compiler. -## Package - -- npm: `@vllnt/typescript` +- npm: https://www.npmjs.com/package/@vllnt/typescript - Repository: https://github.com/vllnt/typescript +- Documentation: https://github.com/vllnt/typescript#readme +- Changelog: https://github.com/vllnt/typescript/blob/main/CHANGELOG.md +- Full reference: https://github.com/vllnt/typescript/blob/main/llms-full.txt - License: MIT -- Runtime dependencies: none -- Node.js requirement: 22 or newer -## Install +## Compatibility -```bash -npm install -D @vllnt/typescript -``` +- Node.js consumers: 18 or newer +- TypeScript: `>=6.0.2 <8` +- TypeScript 7 migration: native `tsc` can run beside the TypeScript 6 compatibility API +- Runtime dependencies: none; TypeScript is a peer dependency ## Presets -- `@vllnt/typescript/base.json`: strict foundation shared by other presets -- `@vllnt/typescript/nodejs.json`: Node.js applications -- `@vllnt/typescript/node-library.json`: publishable npm packages -- `@vllnt/typescript/react.json`: React applications -- `@vllnt/typescript/nextjs.json`: Next.js applications - -## Usage notes for assistants +- `@vllnt/typescript/base.json`: strict shared defaults and explicit ambient types +- `@vllnt/typescript/nodejs.json`: NodeNext Node.js applications targeting ES2024 +- `@vllnt/typescript/node-library.json`: publishable NodeNext libraries with declaration maps +- `@vllnt/typescript/react.json`: bundled React applications using `react-jsx` +- `@vllnt/typescript/nextjs.json`: no-emit Next.js applications -Recommend extending the closest preset from a project's `tsconfig.json`. Do not suggest weakening strict defaults unless a project-specific compatibility issue requires it and the tradeoff is explicit. +Consumers should list required ambient packages in `types` and set `rootDir` in emitting projects. diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index d7584bb..0000000 --- a/package-lock.json +++ /dev/null @@ -1,428 +0,0 @@ -{ - "name": "@vllnt/typescript", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "@vllnt/typescript", - "version": "1.0.0", - "license": "MIT", - "devDependencies": { - "@typescript/native": "npm:typescript@7.0.2", - "typescript": "npm:@typescript/typescript6@6.0.2" - }, - "engines": { - "node": ">=22" - }, - "peerDependencies": { - "typescript": ">=6.0.2 <8" - } - }, - "node_modules/@typescript/native": { - "name": "typescript", - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", - "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc" - }, - "engines": { - "node": ">=16.20.0" - }, - "optionalDependencies": { - "@typescript/typescript-aix-ppc64": "7.0.2", - "@typescript/typescript-darwin-arm64": "7.0.2", - "@typescript/typescript-darwin-x64": "7.0.2", - "@typescript/typescript-freebsd-arm64": "7.0.2", - "@typescript/typescript-freebsd-x64": "7.0.2", - "@typescript/typescript-linux-arm": "7.0.2", - "@typescript/typescript-linux-arm64": "7.0.2", - "@typescript/typescript-linux-loong64": "7.0.2", - "@typescript/typescript-linux-mips64el": "7.0.2", - "@typescript/typescript-linux-ppc64": "7.0.2", - "@typescript/typescript-linux-riscv64": "7.0.2", - "@typescript/typescript-linux-s390x": "7.0.2", - "@typescript/typescript-linux-x64": "7.0.2", - "@typescript/typescript-netbsd-arm64": "7.0.2", - "@typescript/typescript-netbsd-x64": "7.0.2", - "@typescript/typescript-openbsd-arm64": "7.0.2", - "@typescript/typescript-openbsd-x64": "7.0.2", - "@typescript/typescript-sunos-x64": "7.0.2", - "@typescript/typescript-win32-arm64": "7.0.2", - "@typescript/typescript-win32-x64": "7.0.2" - } - }, - "node_modules/@typescript/old": { - "name": "typescript", - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", - "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@typescript/typescript-aix-ppc64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz", - "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-darwin-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz", - "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-darwin-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz", - "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-freebsd-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz", - "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-freebsd-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz", - "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-arm": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz", - "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz", - "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-loong64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz", - "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-mips64el": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz", - "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-ppc64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz", - "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-riscv64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz", - "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-s390x": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz", - "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz", - "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-netbsd-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz", - "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-netbsd-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz", - "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-openbsd-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz", - "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-openbsd-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz", - "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-sunos-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz", - "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-win32-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz", - "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-win32-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz", - "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/typescript": { - "name": "@typescript/typescript6", - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript6/-/typescript6-6.0.2.tgz", - "integrity": "sha512-mbCddXd+jm7hfx7w2YU64/Av4/NqqeG3GoRZgxPcgoTxYjhrcfJRw9ULch71SS4G+Q3bOXFhRvPqjguN0Hyp5w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@typescript/old": "npm:typescript@^6" - }, - "bin": { - "tsc6": "bin/tsc6" - } - } - } -} diff --git a/package.json b/package.json index b913af4..9fdf8a7 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,20 @@ { "name": "@vllnt/typescript", - "version": "1.0.0", + "version": "2.0.0", "description": "Shared TypeScript configurations for vllnt projects", "license": "MIT", - "author": "bntvllnt", + "author": { + "name": "bntvllnt", + "url": "https://bntvllnt.com" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/bntvllnt" + }, "homepage": "https://github.com/vllnt/typescript#readme", + "bugs": { + "url": "https://github.com/vllnt/typescript/issues" + }, "repository": { "type": "git", "url": "git+https://github.com/vllnt/typescript.git" @@ -15,28 +25,56 @@ "config", "shared-config" ], + "packageManager": "pnpm@11.24.0", "engines": { - "node": ">=22" + "node": ">=18" }, "files": [ "base.json", "nextjs.json", "nodejs.json", "node-library.json", - "react.json" + "react.json", + "CHANGELOG.md", + "llms.txt", + "llms-full.txt" ], + "exports": { + "./base.json": "./base.json", + "./nextjs.json": "./nextjs.json", + "./nodejs.json": "./nodejs.json", + "./node-library.json": "./node-library.json", + "./react.json": "./react.json", + "./package.json": "./package.json" + }, "scripts": { - "test": "node --test tests/smoke.test.js", - "prepublishOnly": "node --test tests/smoke.test.js" + "format": "prettier --write .", + "format:check": "prettier --check .", + "lint": "eslint .", + "test": "vitest run", + "test:coverage": "vitest run --coverage", + "test:integration": "pnpm --dir tests/integration/react build && pnpm --dir tests/integration/nextjs build", + "check": "pnpm format:check && pnpm lint && pnpm test:coverage && pnpm test:integration", + "prepublishOnly": "pnpm check" }, "peerDependencies": { "typescript": ">=6.0.2 <8" }, "devDependencies": { + "@types/node": "22.20.1", + "@types/react": "19.2.18", + "@types/react-dom": "19.2.5", "@typescript/native": "npm:typescript@7.0.2", - "typescript": "npm:@typescript/typescript6@6.0.2" + "@vitest/coverage-v8": "4.1.11", + "@vllnt/eslint-config": "1.0.1", + "eslint": "9.39.5", + "prettier": "3.9.6", + "typescript": "npm:@typescript/typescript6@6.0.2", + "vitest": "4.1.11" }, "publishConfig": { - "access": "public" - } + "access": "public", + "provenance": true + }, + "sideEffects": false } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..c7a4e1a --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,6987 @@ +lockfileVersion: "9.0" + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + .: + devDependencies: + "@types/node": + specifier: 22.20.1 + version: 22.20.1 + "@types/react": + specifier: 19.2.18 + version: 19.2.18 + "@types/react-dom": + specifier: 19.2.5 + version: 19.2.5(@types/react@19.2.18) + "@typescript/native": + specifier: npm:typescript@7.0.2 + version: typescript@7.0.2 + "@vitest/coverage-v8": + specifier: 4.1.11 + version: 4.1.11(vitest@4.1.11) + "@vllnt/eslint-config": + specifier: 1.0.1 + version: 1.0.1(@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0))(@typescript/typescript6@6.0.2)(convex@1.45.0(react@19.2.8))(eslint@9.39.5(supports-color@7.2.0))(prettier@3.9.6)(supports-color@7.2.0)(turbo@2.10.12) + eslint: + specifier: 9.39.5 + version: 9.39.5(supports-color@7.2.0) + prettier: + specifier: 3.9.6 + version: 3.9.6 + typescript: + specifier: npm:@typescript/typescript6@6.0.2 + version: "@typescript/typescript6@6.0.2" + vitest: + specifier: 4.1.11 + version: 4.1.11(@types/node@22.20.1)(@vitest/coverage-v8@4.1.11)(vite@8.2.2(@types/node@22.20.1)(esbuild@0.27.0)) + + tests/integration/nextjs: + devDependencies: + "@types/node": + specifier: 22.20.1 + version: 22.20.1 + "@types/react": + specifier: 19.2.18 + version: 19.2.18 + "@types/react-dom": + specifier: 19.2.5 + version: 19.2.5(@types/react@19.2.18) + "@vllnt/typescript": + specifier: workspace:* + version: link:../../.. + next: + specifier: 16.3.3 + version: 16.3.3(@babel/core@7.29.7(supports-color@7.2.0))(@types/node@22.20.1)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: + specifier: 19.2.8 + version: 19.2.8 + react-dom: + specifier: 19.2.8 + version: 19.2.8(react@19.2.8) + typescript: + specifier: 7.0.2 + version: 7.0.2 + + tests/integration/react: + devDependencies: + "@types/react": + specifier: 19.2.18 + version: 19.2.18 + "@types/react-dom": + specifier: 19.2.5 + version: 19.2.5(@types/react@19.2.18) + "@vllnt/typescript": + specifier: workspace:* + version: link:../../.. + react: + specifier: 19.2.8 + version: 19.2.8 + react-dom: + specifier: 19.2.8 + version: 19.2.8(react@19.2.8) + typescript: + specifier: 7.0.2 + version: 7.0.2 + vite: + specifier: 8.2.2 + version: 8.2.2(@types/node@22.20.1)(esbuild@0.27.0) + +packages: + "@babel/code-frame@7.29.7": + resolution: + { + integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==, + } + engines: { node: ">=6.9.0" } + + "@babel/compat-data@7.29.7": + resolution: + { + integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==, + } + engines: { node: ">=6.9.0" } + + "@babel/core@7.29.7": + resolution: + { + integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==, + } + engines: { node: ">=6.9.0" } + + "@babel/generator@7.29.8": + resolution: + { + integrity: sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-compilation-targets@7.29.7": + resolution: + { + integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-globals@7.29.7": + resolution: + { + integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-module-imports@7.29.7": + resolution: + { + integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-module-transforms@7.29.7": + resolution: + { + integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/helper-string-parser@7.29.7": + resolution: + { + integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-validator-identifier@7.29.7": + resolution: + { + integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-validator-option@7.29.7": + resolution: + { + integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==, + } + engines: { node: ">=6.9.0" } + + "@babel/helpers@7.29.7": + resolution: + { + integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==, + } + engines: { node: ">=6.9.0" } + + "@babel/parser@7.29.8": + resolution: + { + integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==, + } + engines: { node: ">=6.0.0" } + hasBin: true + + "@babel/template@7.29.7": + resolution: + { + integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==, + } + engines: { node: ">=6.9.0" } + + "@babel/traverse@7.29.8": + resolution: + { + integrity: sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==, + } + engines: { node: ">=6.9.0" } + + "@babel/types@7.29.8": + resolution: + { + integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==, + } + engines: { node: ">=6.9.0" } + + "@bcoe/v8-coverage@1.0.2": + resolution: + { + integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==, + } + engines: { node: ">=18" } + + "@boundaries/elements@1.2.0": + resolution: + { + integrity: sha512-W65Gum02liMd3hmNrLmDBX1u5BmRMcunouFjLXyhxHnNY4YlK1kTxsgfflZ5XBGSnPnO0MkiUzAcoGzYrlx0RQ==, + } + engines: { node: ">=18.18" } + + "@convex-dev/eslint-plugin@1.2.2": + resolution: + { + integrity: sha512-hLElzzSHuO83O/7PqaeFrMy8EOaDPMAUBNaqo7wkOzCsUCgA+tI9SXVSVLUozDGBBQjyXjAaPYRIBKoPeZbZKg==, + } + peerDependencies: + convex: ^1.34.1 + + "@emnapi/runtime@1.11.3": + resolution: + { + integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==, + } + + "@esbuild/aix-ppc64@0.27.0": + resolution: + { + integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==, + } + engines: { node: ">=18" } + cpu: [ppc64] + os: [aix] + + "@esbuild/android-arm64@0.27.0": + resolution: + { + integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [android] + + "@esbuild/android-arm@0.27.0": + resolution: + { + integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==, + } + engines: { node: ">=18" } + cpu: [arm] + os: [android] + + "@esbuild/android-x64@0.27.0": + resolution: + { + integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [android] + + "@esbuild/darwin-arm64@0.27.0": + resolution: + { + integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [darwin] + + "@esbuild/darwin-x64@0.27.0": + resolution: + { + integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [darwin] + + "@esbuild/freebsd-arm64@0.27.0": + resolution: + { + integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [freebsd] + + "@esbuild/freebsd-x64@0.27.0": + resolution: + { + integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [freebsd] + + "@esbuild/linux-arm64@0.27.0": + resolution: + { + integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [linux] + + "@esbuild/linux-arm@0.27.0": + resolution: + { + integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==, + } + engines: { node: ">=18" } + cpu: [arm] + os: [linux] + + "@esbuild/linux-ia32@0.27.0": + resolution: + { + integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==, + } + engines: { node: ">=18" } + cpu: [ia32] + os: [linux] + + "@esbuild/linux-loong64@0.27.0": + resolution: + { + integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==, + } + engines: { node: ">=18" } + cpu: [loong64] + os: [linux] + + "@esbuild/linux-mips64el@0.27.0": + resolution: + { + integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==, + } + engines: { node: ">=18" } + cpu: [mips64el] + os: [linux] + + "@esbuild/linux-ppc64@0.27.0": + resolution: + { + integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==, + } + engines: { node: ">=18" } + cpu: [ppc64] + os: [linux] + + "@esbuild/linux-riscv64@0.27.0": + resolution: + { + integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==, + } + engines: { node: ">=18" } + cpu: [riscv64] + os: [linux] + + "@esbuild/linux-s390x@0.27.0": + resolution: + { + integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==, + } + engines: { node: ">=18" } + cpu: [s390x] + os: [linux] + + "@esbuild/linux-x64@0.27.0": + resolution: + { + integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [linux] + + "@esbuild/netbsd-arm64@0.27.0": + resolution: + { + integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [netbsd] + + "@esbuild/netbsd-x64@0.27.0": + resolution: + { + integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [netbsd] + + "@esbuild/openbsd-arm64@0.27.0": + resolution: + { + integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [openbsd] + + "@esbuild/openbsd-x64@0.27.0": + resolution: + { + integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [openbsd] + + "@esbuild/openharmony-arm64@0.27.0": + resolution: + { + integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [openharmony] + + "@esbuild/sunos-x64@0.27.0": + resolution: + { + integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [sunos] + + "@esbuild/win32-arm64@0.27.0": + resolution: + { + integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [win32] + + "@esbuild/win32-ia32@0.27.0": + resolution: + { + integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==, + } + engines: { node: ">=18" } + cpu: [ia32] + os: [win32] + + "@esbuild/win32-x64@0.27.0": + resolution: + { + integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [win32] + + "@eslint-community/eslint-utils@4.10.1": + resolution: + { + integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + "@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.21.2": + resolution: + { + integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/config-helpers@0.4.2": + resolution: + { + integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/core@0.17.0": + resolution: + { + integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/eslintrc@3.3.6": + resolution: + { + integrity: sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/js@9.39.5": + resolution: + { + integrity: sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/object-schema@2.1.7": + resolution: + { + integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/plugin-kit@0.4.1": + resolution: + { + integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@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" } + + "@img/colour@1.1.0": + resolution: + { + integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==, + } + engines: { node: ">=18" } + + "@img/sharp-darwin-arm64@0.35.4": + resolution: + { + integrity: sha512-Uhfl4V4lhP2nbUVF9+hyH1+luj86f1gUFeo8ALYxFoULoU+G87D43BfeMP8XHsk9boxAnCY/bf2EHwhA7MuGsA==, + } + engines: { node: ">=20.9.0" } + cpu: [arm64] + os: [darwin] + + "@img/sharp-darwin-x64@0.35.4": + resolution: + { + integrity: sha512-hWniXY3bG5qKpkKrAwPe4y+VTPmf086YQAnkxWh7uA1YrlRouWGa0M0Mxj3ZjnXFkv7/TD1bTy9lGUK26vRvWw==, + } + engines: { node: ">=20.9.0" } + cpu: [x64] + os: [darwin] + + "@img/sharp-freebsd-wasm32@0.35.4": + resolution: + { + integrity: sha512-lIsKw/BU+kjB4eZjxrYrZmwOJYi3Ajrv66iAlBmUPyKc3HpnloevB1g3wxGD9P/5BbQ1brBGl65VRRrCvQDEqA==, + } + engines: { node: ">=20.9.0" } + os: [freebsd] + + "@img/sharp-libvips-darwin-arm64@1.3.3": + resolution: + { + integrity: sha512-suTBPTDGrI9WodccaDdwZItTSaBYASlBk1NSfElSHrUfzu3szG6lvIF58+WiFvnfzuK8ZBFS5zE00PxqxnRiPg==, + } + cpu: [arm64] + os: [darwin] + + "@img/sharp-libvips-darwin-x64@1.3.3": + resolution: + { + integrity: sha512-FVJZ5mITMobmXIz/hPDTw0EintTW5H3WfrxwLqEqjiIihlu+hVRyGrFQ60xl0Lxn7Bt3zdpevPaQi0HEzqz9fw==, + } + cpu: [x64] + os: [darwin] + + "@img/sharp-libvips-linux-arm64@1.3.3": + resolution: + { + integrity: sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A==, + } + cpu: [arm64] + os: [linux] + libc: [glibc] + + "@img/sharp-libvips-linux-arm@1.3.3": + resolution: + { + integrity: sha512-3rbU4vqXXc3hY/OiXdl52xZvT0F1yEngWfvqudtPJg/KkyiaQw2DRsFrNzpmLvfavbwOq3qXn36GP8obHRULQA==, + } + cpu: [arm] + os: [linux] + libc: [glibc] + + "@img/sharp-libvips-linux-ppc64@1.3.3": + resolution: + { + integrity: sha512-cdn1OvUBwsXhbC0zSzJnNzf5MZ/mTrobawDvNXBTxe8VtqKAm0sRuEY2Evzovb/w9JMk4TvRxqt1mekSuJz64w==, + } + cpu: [ppc64] + os: [linux] + libc: [glibc] + + "@img/sharp-libvips-linux-riscv64@1.3.3": + resolution: + { + integrity: sha512-HjPVx7yKz+0lqdhDlTw1tt90wamBoxhiXpvl1XZpJLiHH4RCJ5yDTqH+VlYPv2fwFs89JFw4c1IexYOcQUi4IQ==, + } + cpu: [riscv64] + os: [linux] + libc: [glibc] + + "@img/sharp-libvips-linux-s390x@1.3.3": + resolution: + { + integrity: sha512-neWLh+3yCNThxnfy3c4BbVBeGgt9aftno+XbT56iK28RgeDs3UOFWviLWlUu0bArYVYJaFDK+RRohbicUNCm8Q==, + } + cpu: [s390x] + os: [linux] + libc: [glibc] + + "@img/sharp-libvips-linux-x64@1.3.3": + resolution: + { + integrity: sha512-4vKmvAst9nrowcqquKFAyZJUDolUaIp8uRiN0mWFguJ1IplC9/pitXtlnnlU4aa/eJw3J7i67V+pwUL+wZGdsA==, + } + cpu: [x64] + os: [linux] + libc: [glibc] + + "@img/sharp-libvips-linuxmusl-arm64@1.3.3": + resolution: + { + integrity: sha512-Y9kQaLMuNoB0bPYOOdcZMaseNrFpPodIWWMrx+CZyydf2xn68j9WYc6sWWRrDwNkzCQjKYfc68L7jKjGlHMibw==, + } + cpu: [arm64] + os: [linux] + libc: [musl] + + "@img/sharp-libvips-linuxmusl-x64@1.3.3": + resolution: + { + integrity: sha512-fj8Mv0HHfD1Rr+4I68+3agJynxDWtBFgicTbSOb9Bke6pIwzGcJ+RX/yHjmiEGFMCavY/dxvem7MyNaJF+wDiw==, + } + cpu: [x64] + os: [linux] + libc: [musl] + + "@img/sharp-linux-arm64@0.35.4": + resolution: + { + integrity: sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ==, + } + engines: { node: ">=20.9.0" } + cpu: [arm64] + os: [linux] + libc: [glibc] + + "@img/sharp-linux-arm@0.35.4": + resolution: + { + integrity: sha512-7OAS8gI0EReKGVN2HssHlM6umJgxF5VI3xN0p9FA91p/YO+ou5hiNghLdZ5BEHztwaaK5+bLKRf8x/o2L2nk9A==, + } + engines: { node: ">=20.9.0" } + cpu: [arm] + os: [linux] + libc: [glibc] + + "@img/sharp-linux-ppc64@0.35.4": + resolution: + { + integrity: sha512-2oYZJeIl4kCcMGk4ouZVjnkCtFrpQFlNEtJ6GbxzhHQchwH0NH/qEb9ykmOl29dqwMq+JhFdZn+1ak2FKhI9fQ==, + } + engines: { node: ">=20.9.0" } + cpu: [ppc64] + os: [linux] + libc: [glibc] + + "@img/sharp-linux-riscv64@0.35.4": + resolution: + { + integrity: sha512-cPbNChoRURAWdebDIHSenxRpgEdy7JkPydSnUxRm9VvKD7m0/xVaR/8Fzlu81pk5nHEvHH87UZUA7cTtwnbJSA==, + } + engines: { node: ">=20.9.0" } + cpu: [riscv64] + os: [linux] + libc: [glibc] + + "@img/sharp-linux-s390x@0.35.4": + resolution: + { + integrity: sha512-RY0JFY8Fd6RonCBtHz+DvadaPkXDSI1AUn6yWL9TipqkZ1vY8w8evqdgyDFnkm4/K1ve1TvZiaePP5oSd4+WVQ==, + } + engines: { node: ">=20.9.0" } + cpu: [s390x] + os: [linux] + libc: [glibc] + + "@img/sharp-linux-x64@0.35.4": + resolution: + { + integrity: sha512-9qvvEAuk8k89TfWUoX2htWjbAMX8p+NxCppjpcg5k6xMsjhBQPTsoIh36h9Qde4WRuGpJeYnOjdosDn/cnv+OA==, + } + engines: { node: ">=20.9.0" } + cpu: [x64] + os: [linux] + libc: [glibc] + + "@img/sharp-linuxmusl-arm64@0.35.4": + resolution: + { + integrity: sha512-KB5jxpfWQTr0nc3xdHtWChdbifHrBGsd2SM62Eyxrl8afikm+f5qGBU75SJIZBT/S1MC8XyacdlXBMSWq6OURA==, + } + engines: { node: ">=20.9.0" } + cpu: [arm64] + os: [linux] + libc: [musl] + + "@img/sharp-linuxmusl-x64@0.35.4": + resolution: + { + integrity: sha512-f+eZJZIQNEEd26RPSW+76chwOf1XtA2Y/O+5ocVyLliHkeih3e+jhLVBdNTd2rS3IbNXK8+ug93Vf5ZXtF5Lxg==, + } + engines: { node: ">=20.9.0" } + cpu: [x64] + os: [linux] + libc: [musl] + + "@img/sharp-wasm32@0.35.4": + resolution: + { + integrity: sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA==, + } + engines: { node: ">=20.9.0" } + + "@img/sharp-webcontainers-wasm32@0.35.4": + resolution: + { + integrity: sha512-ESfNkywmCfPNyaZjxooddJQiQ+l/nTpGEOGthxiLnIHXC/CmcBixnfwUleX9mCz9ovrUUvKMap/pm8RYbzfwaA==, + } + engines: { node: ">=20.9.0" } + cpu: [wasm32] + + "@img/sharp-win32-arm64@0.35.4": + resolution: + { + integrity: sha512-iNdlBX9gLVvqe2I3uIJSIKTq6wckP/DYxZtcqxm09x5Gi24DnFBmPAWZmr60ZyYMG0xlzo6goG3670ar+RXvRw==, + } + engines: { node: ">=20.9.0" } + cpu: [arm64] + os: [win32] + + "@img/sharp-win32-ia32@0.35.4": + resolution: + { + integrity: sha512-kqRsbaa5CS6KHlpxnN7WhE6vAAugXyZButpRdvDWetlv6Qv4N9WTcrWzF7tXfB9T7MsoadqdI8hmwLq6UlLvtw==, + } + engines: { node: ^20.9.0 } + cpu: [ia32] + os: [win32] + + "@img/sharp-win32-x64@0.35.4": + resolution: + { + integrity: sha512-XtmnYhBcrORsJ4XJngyzr/EWP0hRZLAZRFaApdKuviyqF78+ylxh2y06ZmtULAMOnObJ3ucpN0AcwSWnMowTRg==, + } + engines: { node: ">=20.9.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.6.0": + resolution: + { + integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==, + } + + "@jridgewell/trace-mapping@0.3.31": + resolution: + { + integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, + } + + "@next/env@16.3.3": + resolution: + { + integrity: sha512-U2eYQRwXj+dsqxV79zFqExDdatnNY/ZWc2nsJU1p/OgT7fd3dXwlF6OjYaFQCfMoeTA19PWq+wVmYgimVA+V+g==, + } + + "@next/eslint-plugin-next@16.3.3": + resolution: + { + integrity: sha512-pbEh30vvjKpDoTAmo1v3q2uM4JUi8QaEBpbmjWvGfoec2jLghy/WNtvzAT0bk+Ik9oz6etjt4YjXEk4BQnicCw==, + } + + "@next/swc-darwin-arm64@16.3.3": + resolution: + { + integrity: sha512-8Hiv32QJPwdV6KYJ8meR9SBA061tQqnIKTJDocvOXlEQqib0xMFpzArosuffFUUc0sslbh7QQ8a3Yey1QV8EIw==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [darwin] + + "@next/swc-darwin-x64@16.3.3": + resolution: + { + integrity: sha512-A1lgKgwVchRYmSe467zdwhxT9040dd8lH+o65sL5Jet8fjB4kegw/rDyPIpYVRb6jAqwXFOJpjIXJLxQKLiE3A==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [darwin] + + "@next/swc-linux-arm64-gnu@16.3.3": + resolution: + { + integrity: sha512-bf0FIssMFueU2dm7vQEWWxk0c8UjKTdW0yzuh0sQsD8pf1+KCLDdaqhYZNMYGmXwEOiHAUzgBKudovIlcvvBjg==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + libc: [glibc] + + "@next/swc-linux-arm64-musl@16.3.3": + resolution: + { + integrity: sha512-W7viwCk9JY/cAkdz/A273rd5bb3RgT/IHwR7Upv90tunjBWNtAAhGhoecHh+teRNRSinuAFmE+l7fwZ4YKkrXg==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + libc: [musl] + + "@next/swc-linux-x64-gnu@16.3.3": + resolution: + { + integrity: sha512-0W46zw1N3ODpI6n0GeivHvvob1pooozgZVqy65k0mh4/7vr+FbY9+WpHzNVXjHipJf/A3FDheBG19H1s5A25rA==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + libc: [glibc] + + "@next/swc-linux-x64-musl@16.3.3": + resolution: + { + integrity: sha512-H4mBso8ZTMBPtdT0PN0pBx2ayTvQuTuvS6qT13d77yVFJXAPCxkyIhLTmdMaGTJs0krQYI/qpzdHijCeihXhbg==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + libc: [musl] + + "@next/swc-win32-arm64-msvc@16.3.3": + resolution: + { + integrity: sha512-cTMUJpcEGmeywofCUfhR+rSsoE33+rVPnPEYNTNdLNlsOeEg/vktOsKUSTb28vUGqD2jkm4Zaskcwn7OCI6FQg==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [win32] + + "@next/swc-win32-x64-msvc@16.3.3": + resolution: + { + integrity: sha512-2VR4cTBzHXaBjnGsuH6GyJjENzQOmHeAh11uY1iUhjm3j5dEUrVJuUj+VL78jaGi/Dik8xS76zEj18BsFhlVZQ==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [win32] + + "@nodelib/fs.scandir@2.1.5": + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + } + engines: { node: ">= 8" } + + "@nodelib/fs.stat@2.0.5": + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + } + engines: { node: ">= 8" } + + "@nodelib/fs.walk@1.2.8": + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + } + engines: { node: ">= 8" } + + "@oxc-project/types@0.147.0": + resolution: + { + integrity: sha512-IJ3s6ltHLp45S0bh7phkX+gJO7A1Wuz2EaqpAhb8WjqDwbzMiWKHhyyT42tskaWjEYXtHtVCPpnBJVT9+dcRLg==, + } + + "@pkgr/core@0.3.6": + resolution: + { + integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==, + } + engines: { node: ^14.18.0 || >=16.0.0 } + + "@rolldown/binding-android-arm-eabi@1.2.6": + resolution: + { + integrity: sha512-b+jTcARdTiFLI6jB4a5XjTm0RWd6KcRfQj/I2356fxUZemiho9zQLxo0RtCuMDAyKcLo6cEltkgbQp6d1+sjjQ==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm] + os: [android] + + "@rolldown/binding-android-arm64@1.2.6": + resolution: + { + integrity: sha512-lkWU8ZJaRk9q3CIEY1Tc7vIFALp3Xw5NfGJo2hQg5oIqNgxWi1zI+IiDEK3r70BF5Dzol1tcXsnzsRc8NLhG+Q==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [android] + + "@rolldown/binding-darwin-arm64@1.2.6": + resolution: + { + integrity: sha512-dgR56NYnvAszm7Ob1B2/Vn0e8bUQYZH2UjVaMMtMVOCKFSfjhfLmuA/9+O+F+ajUdG6B/bSssrKW6JJYASa8jA==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [darwin] + + "@rolldown/binding-darwin-x64@1.2.6": + resolution: + { + integrity: sha512-vpVxFvUCFioJqug7OTvqptkc4yb8UX0AwfDmJpaR/0sWz+BUmqSVAf7c8JkUgnN8YLspb4a/N6NhTyMAmdyQ7Q==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [darwin] + + "@rolldown/binding-freebsd-x64@1.2.6": + resolution: + { + integrity: sha512-h1wG6Y6K3JlRswxsI64qQJqBAy4vrLuHgRbc8CZMGSWTOFRY6ghMApM1NKzB2I0n5xV1fjkE18SuVl2QpLeNpA==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [freebsd] + + "@rolldown/binding-linux-arm-gnueabihf@1.2.6": + resolution: + { + integrity: sha512-tbCiqub0q2MVWJKgF5PoAlNWCtQydiOYSLIkd8sByqK/6MMYLJRcSXSYodqYtd0O+Fw7QaVmKKlS4oL94YRZ0w==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm] + os: [linux] + + "@rolldown/binding-linux-arm64-gnu@1.2.6": + resolution: + { + integrity: sha512-oxK9+baEBPhZG5HB4URY+uU04zJWeZlH6Tb9rB5DK4DF9XR1uXNLXt5Q5ZsugTKayNCNLhkcwz/ye74hRI98dg==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [linux] + libc: [glibc] + + "@rolldown/binding-linux-arm64-musl@1.2.6": + resolution: + { + integrity: sha512-muWCk27FVBEZtv0MsK8gnfSmgczA8KQ0uRVJbTABKhkRfQc38aUrcb7fhi3BNiyseFmgcRsoMfQsSNJ+DbZdSw==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [linux] + libc: [musl] + + "@rolldown/binding-linux-ppc64-gnu@1.2.6": + resolution: + { + integrity: sha512-eWDoSfU7Co2qj3vgB3Dt4lj1mG6CoWbcJQkRMP3XJplyCMtuaq3LHvPFjS9QIPvMGWVadJC04Xiy0IdcVPtnwQ==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [ppc64] + os: [linux] + libc: [glibc] + + "@rolldown/binding-linux-s390x-gnu@1.2.6": + resolution: + { + integrity: sha512-2bWNjRSIayvupRKxXUY2tWG9fYdoUlTqWywHRvE8Eq3GvuQ+f2HeIkve697fIt+IQs/PV8yFsdWuhp1aJ1PdnA==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [s390x] + os: [linux] + libc: [glibc] + + "@rolldown/binding-linux-x64-gnu@1.2.6": + resolution: + { + integrity: sha512-KekI0gS0wLxe1UBSQSjenBVwou/JkcQPDzBPICGZjxUv9k3RteHDPBQaiOicZUFKRIH2wKEimGwVpnJsbPzu7w==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [linux] + libc: [glibc] + + "@rolldown/binding-linux-x64-musl@1.2.6": + resolution: + { + integrity: sha512-TvtPnfVr+HtyGiDmPK4VWmlNm7QhNNAcK5Q9A7aOXsI8545yCyaoMaicXrFZ72JzeYjaUVk7yT243zT0jzjFKQ==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [linux] + libc: [musl] + + "@rolldown/binding-openharmony-arm64@1.2.6": + resolution: + { + integrity: sha512-iOo0VEay2XFhaCcH0sps5XIimkSuOnNaZrf6+ZkoSOQBJPKNU48RkmJv0/lSpipexu5P+ouFgafe5IGr/DiQfg==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [openharmony] + + "@rolldown/binding-win32-arm64-msvc@1.2.6": + resolution: + { + integrity: sha512-y5NTmmasMS455JlOCO4ZM9krIchv3Mvm1crL1iUPGOPgEzSkves9n0SdC5Sjz6+qWDFhd8/JpfWMH8NSWNHe+A==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [win32] + + "@rolldown/binding-win32-x64-msvc@1.2.6": + resolution: + { + integrity: sha512-np8iZSLfXlAD4kWhiyq/u0Yt8oZDtRQ8lGhQaCXo2rl37KNjeU0GjJuwr4P3oeZ++ROfofsKNBqR5LTO8aXyWQ==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [win32] + + "@rolldown/pluginutils@1.0.1": + resolution: + { + integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==, + } + + "@standard-schema/spec@1.1.0": + resolution: + { + integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==, + } + + "@swc/helpers@0.5.23": + resolution: + { + integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==, + } + + "@turbo/darwin-64@2.10.12": + resolution: + { + integrity: sha512-9nKgKoF6ZOUsM+or0OtNf+TTJSfGvDNP7ZFv/ZGWVwOSCkumyctQiTeHwB4UNljHTnC41AqylgbunLDHoccNrA==, + } + cpu: [x64] + os: [darwin] + + "@turbo/darwin-arm64@2.10.12": + resolution: + { + integrity: sha512-H4Elb1jqTZVeIC9bbcNwjSzemZ6RegoTOVHeuV5Osirt2Z8UguTyisMEkvZjPVZgMeN9J4ERZBFad40tFnkb7w==, + } + cpu: [arm64] + os: [darwin] + + "@turbo/linux-64@2.10.12": + resolution: + { + integrity: sha512-lr7KIotukvjZwEXiFSYAeOH3BWzjFVBbSzTbv0fuGFsNukYyH0+g1hB5ecqnJkgkYU+KHEMG1edOhnjiKON1wQ==, + } + cpu: [x64] + os: [android, linux] + + "@turbo/linux-arm64@2.10.12": + resolution: + { + integrity: sha512-f0pZDTtvzB5SuNwuXBaKbZHUCMCukgc8nMlHEuvLmj91Fzec+MEbr3cAvGNor5htEDqZnO6Lxt9N/GPI/77oGA==, + } + cpu: [arm64] + os: [android, linux] + + "@turbo/windows-64@2.10.12": + resolution: + { + integrity: sha512-SDOueJRjS/QcykWf2KCRtTLmIl5YMKsLbXkXQGhDwcTXvKXZiS5ih5lBl/gkwZIpYFjqA/rAlfMzlAFcVHNe0g==, + } + cpu: [x64] + os: [win32] + + "@turbo/windows-arm64@2.10.12": + resolution: + { + integrity: sha512-0i0mVUa4kKk+/B3RwEwPMf9CB+T7ul56hn5FFHNA4VUNTOoLBEd6aNf3FaKfCatDNZ6cicCEf6if9QUTVyzzcA==, + } + cpu: [arm64] + os: [win32] + + "@types/chai@5.2.3": + resolution: + { + integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==, + } + + "@types/deep-eql@4.0.2": + resolution: + { + integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==, + } + + "@types/estree@1.0.9": + resolution: + { + integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==, + } + + "@types/json-schema@7.0.15": + resolution: + { + integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, + } + + "@types/node@22.20.1": + resolution: + { + integrity: sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==, + } + + "@types/react-dom@19.2.5": + resolution: + { + integrity: sha512-fMPwH9v7r/pp43yUd2/Mbiex5KouJwwR3dzHkhLREUC6764VyDsqxhAxv6OFEYR1RhjOyD1naqba8ECDBe7ZQg==, + } + peerDependencies: + "@types/react": ^19.2.0 + + "@types/react@19.2.18": + resolution: + { + integrity: sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==, + } + + "@typescript-eslint/eslint-plugin@8.68.0": + resolution: + { + integrity: sha512-WASHDpCm6qO5jj9g1a+8NiW5+GCkAyLReR56/4VruYmNgfUmqpxOfZ2Yfb8xGfJPWv5Qi6LSD8sXdces3vbp/Q==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + "@typescript-eslint/parser": ^8.68.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + + "@typescript-eslint/parser@8.68.0": + resolution: + { + integrity: sha512-fHq2VC1kpyYfvEcbiMjOpySY4WS7voEp89yAThrHRX5sm9j2lzYppCb2umFMEed4fWcyeLjHxrz0mpjNBaBxMQ==, + } + 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" + + "@typescript-eslint/project-service@8.58.2": + resolution: + { + integrity: sha512-Cq6UfpZZk15+r87BkIh5rDpi38W4b+Sjnb8wQCPPDDweS/LRCFjCyViEbzHk5Ck3f2QDfgmlxqSa7S7clDtlfg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: ">=4.8.4 <6.1.0" + + "@typescript-eslint/project-service@8.68.0": + resolution: + { + integrity: sha512-5GQtWZCXFcFYux955pvoS02WLc49pXNlvIxocKjS0clvwo3in1RdlzVKyiqQH9vE5AKWFLTaUgeQkOrTS+0Qxw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: ">=4.8.4 <6.1.0" + + "@typescript-eslint/scope-manager@8.58.2": + resolution: + { + integrity: sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@typescript-eslint/scope-manager@8.68.0": + resolution: + { + integrity: sha512-T5eXpcaJNg8bhjHJ8Rjp68Vq/QBteYtTKY8TZqVNPaUbuz0f6jI9t6aDkylwvalpAB9XTTFeFOjrjXAZ3YvmVA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@typescript-eslint/tsconfig-utils@8.58.2": + resolution: + { + integrity: sha512-3SR+RukipDvkkKp/d0jP0dyzuls3DbGmwDpVEc5wqk5f38KFThakqAAO0XMirWAE+kT00oTauTbzMFGPoAzB0A==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: ">=4.8.4 <6.1.0" + + "@typescript-eslint/tsconfig-utils@8.68.0": + resolution: + { + integrity: sha512-F7zrGQfiJHojPwi8vhxZQC1tWtJzvL74cK/nqri2lk8YUXvYaYwl263xOJ69jDWPUk1hmcdoayFwk9lX09npVw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: ">=4.8.4 <6.1.0" + + "@typescript-eslint/type-utils@8.68.0": + resolution: + { + integrity: sha512-X77zqoY1EjeWGs/0JNxeaMfp5C5lIz4Tw8y66F1Ne8Faq6g424sBNYM6xBAqElfGZPLpWS+CZAp0DXyKDzWiHg==, + } + 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" + + "@typescript-eslint/types@8.58.2": + resolution: + { + integrity: sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@typescript-eslint/types@8.68.0": + resolution: + { + integrity: sha512-9RnpsGJjrAllCMefGVVsImJM24YurhC0Q1h4UbvivtvOqXmR/vEJge2OoE++z9m6hyg8T1Q8t5SNT6tHSbrxcg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@typescript-eslint/typescript-estree@8.58.2": + resolution: + { + integrity: sha512-ELGuoofuhhoCvNbQjFFiobFcGgcDCEm0ThWdmO4Z0UzLqPXS3KFvnEZ+SHewwOYHjM09tkzOWXNTv9u6Gqtyuw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: ">=4.8.4 <6.1.0" + + "@typescript-eslint/typescript-estree@8.68.0": + resolution: + { + integrity: sha512-OKKsD0tYmoNiU5PW2zehO1yO56jYOm1ShYlxon/Z0SJNidAkdVg86eg9ruRuoXf8xfnuWZGbwDsStkoXbZtIIA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: ">=4.8.4 <6.1.0" + + "@typescript-eslint/utils@8.58.2": + resolution: + { + integrity: sha512-QZfjHNEzPY8+l0+fIXMvuQ2sJlplB4zgDZvA+NmvZsZv3EQwOcc1DuIU1VJUTWZ/RKouBMhDyNaBMx4sWvrzRA==, + } + 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" + + "@typescript-eslint/utils@8.68.0": + resolution: + { + integrity: sha512-PB5gJMMOg0Q5P1tsgWtEAqQacJXq0qEqRHDX/YJ4FaTMLfZPpHB3gjl2EJuiZyPABxmj4ZQYiY9m1bdAJ5y7tQ==, + } + 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" + + "@typescript-eslint/visitor-keys@8.58.2": + resolution: + { + integrity: sha512-f1WO2Lx8a9t8DARmcWAUPJbu0G20bJlj8L4z72K00TMeJAoyLr/tHhI/pzYBLrR4dXWkcxO1cWYZEOX8DKHTqA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@typescript-eslint/visitor-keys@8.68.0": + resolution: + { + integrity: sha512-YR65gGdGvTUAWLldC3xLOvOzamdGzB4A5/N8rehEaHs3Zvoe39BhgY+u0SPch1OvrVTfLcc55wsSgK2NcnTS/A==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@typescript/typescript-aix-ppc64@7.0.2": + resolution: + { + integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==, + } + engines: { node: ">=16.20.0" } + cpu: [ppc64] + os: [aix] + + "@typescript/typescript-darwin-arm64@7.0.2": + resolution: + { + integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==, + } + engines: { node: ">=16.20.0" } + cpu: [arm64] + os: [darwin] + + "@typescript/typescript-darwin-x64@7.0.2": + resolution: + { + integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==, + } + engines: { node: ">=16.20.0" } + cpu: [x64] + os: [darwin] + + "@typescript/typescript-freebsd-arm64@7.0.2": + resolution: + { + integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==, + } + engines: { node: ">=16.20.0" } + cpu: [arm64] + os: [freebsd] + + "@typescript/typescript-freebsd-x64@7.0.2": + resolution: + { + integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==, + } + engines: { node: ">=16.20.0" } + cpu: [x64] + os: [freebsd] + + "@typescript/typescript-linux-arm64@7.0.2": + resolution: + { + integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==, + } + engines: { node: ">=16.20.0" } + cpu: [arm64] + os: [linux] + + "@typescript/typescript-linux-arm@7.0.2": + resolution: + { + integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==, + } + engines: { node: ">=16.20.0" } + cpu: [arm] + os: [linux] + + "@typescript/typescript-linux-loong64@7.0.2": + resolution: + { + integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==, + } + engines: { node: ">=16.20.0" } + cpu: [loong64] + os: [linux] + + "@typescript/typescript-linux-mips64el@7.0.2": + resolution: + { + integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==, + } + engines: { node: ">=16.20.0" } + cpu: [mips64el] + os: [linux] + + "@typescript/typescript-linux-ppc64@7.0.2": + resolution: + { + integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==, + } + engines: { node: ">=16.20.0" } + cpu: [ppc64] + os: [linux] + + "@typescript/typescript-linux-riscv64@7.0.2": + resolution: + { + integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==, + } + engines: { node: ">=16.20.0" } + cpu: [riscv64] + os: [linux] + + "@typescript/typescript-linux-s390x@7.0.2": + resolution: + { + integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==, + } + engines: { node: ">=16.20.0" } + cpu: [s390x] + os: [linux] + + "@typescript/typescript-linux-x64@7.0.2": + resolution: + { + integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==, + } + engines: { node: ">=16.20.0" } + cpu: [x64] + os: [linux] + + "@typescript/typescript-netbsd-arm64@7.0.2": + resolution: + { + integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==, + } + engines: { node: ">=16.20.0" } + cpu: [arm64] + os: [netbsd] + + "@typescript/typescript-netbsd-x64@7.0.2": + resolution: + { + integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==, + } + engines: { node: ">=16.20.0" } + cpu: [x64] + os: [netbsd] + + "@typescript/typescript-openbsd-arm64@7.0.2": + resolution: + { + integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==, + } + engines: { node: ">=16.20.0" } + cpu: [arm64] + os: [openbsd] + + "@typescript/typescript-openbsd-x64@7.0.2": + resolution: + { + integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==, + } + engines: { node: ">=16.20.0" } + cpu: [x64] + os: [openbsd] + + "@typescript/typescript-sunos-x64@7.0.2": + resolution: + { + integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==, + } + engines: { node: ">=16.20.0" } + cpu: [x64] + os: [sunos] + + "@typescript/typescript-win32-arm64@7.0.2": + resolution: + { + integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==, + } + engines: { node: ">=16.20.0" } + cpu: [arm64] + os: [win32] + + "@typescript/typescript-win32-x64@7.0.2": + resolution: + { + integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==, + } + engines: { node: ">=16.20.0" } + cpu: [x64] + os: [win32] + + "@typescript/typescript6@6.0.2": + resolution: + { + integrity: sha512-mbCddXd+jm7hfx7w2YU64/Av4/NqqeG3GoRZgxPcgoTxYjhrcfJRw9ULch71SS4G+Q3bOXFhRvPqjguN0Hyp5w==, + } + hasBin: true + + "@vitest/coverage-v8@4.1.11": + resolution: + { + integrity: sha512-8MVGEFnJIcdGjcbfKmeq8z0pZHH0JlVtoVZH9Q/qwUp6wyFnEJUBMrw9DCaj+ra3vShGmhavjalMIhPNxZAUcw==, + } + peerDependencies: + "@vitest/browser": 4.1.11 + vitest: 4.1.11 + peerDependenciesMeta: + "@vitest/browser": + optional: true + + "@vitest/expect@4.1.11": + resolution: + { + integrity: sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==, + } + + "@vitest/mocker@4.1.11": + resolution: + { + integrity: sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==, + } + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + "@vitest/pretty-format@4.1.11": + resolution: + { + integrity: sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==, + } + + "@vitest/runner@4.1.11": + resolution: + { + integrity: sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==, + } + + "@vitest/snapshot@4.1.11": + resolution: + { + integrity: sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==, + } + + "@vitest/spy@4.1.11": + resolution: + { + integrity: sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==, + } + + "@vitest/utils@4.1.11": + resolution: + { + integrity: sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==, + } + + "@vllnt/eslint-config@1.0.1": + resolution: + { + integrity: sha512-OV1jQ/bsHcOOW+A44olNnFKqnNrEdojh89CeVzy+83CIfLgE1sX06p0sDV9HeIeIdEc+nzeFCPMEFJWkUISo1g==, + } + engines: { node: ">=20" } + peerDependencies: + eslint: ">=9" + prettier: ">=3" + typescript: ">=5" + peerDependenciesMeta: + typescript: + optional: true + + acorn-jsx@5.3.2: + resolution: + { + integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, + } + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.18.0: + resolution: + { + integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==, + } + engines: { node: ">=0.4.0" } + hasBin: true + + adverb-where@0.2.6: + resolution: + { + integrity: sha512-uVazUDEPYpBSVRjEDTzO6hVXh9X/eQb+gobzDpqdzMiM1MkfGxfPtgN8YerBjAeDkoABZprsOwhSZnY4X3knnw==, + } + engines: { node: ">=6", npm: ">=5" } + + ajv@6.15.0: + resolution: + { + integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==, + } + + ansi-styles@4.3.0: + resolution: + { + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, + } + engines: { node: ">=8" } + + 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-buffer-byte-length@1.0.2: + resolution: + { + integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==, + } + engines: { node: ">= 0.4" } + + array-includes@3.1.9: + resolution: + { + integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==, + } + engines: { node: ">= 0.4" } + + array.prototype.findlast@1.2.5: + resolution: + { + integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==, + } + engines: { node: ">= 0.4" } + + array.prototype.flat@1.3.3: + resolution: + { + integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==, + } + engines: { node: ">= 0.4" } + + array.prototype.flatmap@1.3.3: + resolution: + { + integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==, + } + engines: { node: ">= 0.4" } + + array.prototype.tosorted@1.1.4: + resolution: + { + integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==, + } + engines: { node: ">= 0.4" } + + arraybuffer.prototype.slice@1.0.4: + resolution: + { + integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==, + } + engines: { node: ">= 0.4" } + + assertion-error@2.0.1: + resolution: + { + integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, + } + engines: { node: ">=12" } + + ast-types-flow@0.0.8: + resolution: + { + integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==, + } + + ast-v8-to-istanbul@1.0.5: + resolution: + { + integrity: sha512-UPAgKJFSEGMWSDr3LX4tqnAb4f7KGT8O40Tyx8wbYmmZ/yn58lNCm8h3svs3eXgiGd5AXxz8NDOvXWvicq+rJA==, + } + + async-function@1.0.0: + resolution: + { + integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==, + } + engines: { node: ">= 0.4" } + + available-typed-arrays@1.0.7: + resolution: + { + integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==, + } + engines: { node: ">= 0.4" } + + axe-core@4.13.0: + resolution: + { + integrity: sha512-UzGt8zg7Ny8djbYMhxl2zuEevVa7r2gJjYY5Lwr1xM7+XU2nd6CkIWFTVcCIbAP63vSz71NaVyyuSk9lHKcy0A==, + } + engines: { node: ">=4" } + + axobject-query@4.1.0: + resolution: + { + integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==, + } + engines: { node: ">= 0.4" } + + balanced-match@1.0.2: + resolution: + { + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, + } + + balanced-match@4.0.4: + resolution: + { + integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==, + } + engines: { node: 18 || 20 || >=22 } + + baseline-browser-mapping@2.11.20: + resolution: + { + integrity: sha512-H0ulySigv6icDJ1F7SjtdCD6PrhTpdYCmP0CactWy1+ekh0AFd0o1Wn5T8b+hnTmdBx19u9yhL6wvCylXMY7zw==, + } + engines: { node: ">=6.0.0" } + hasBin: true + + brace-expansion@1.1.18: + resolution: + { + integrity: sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==, + } + + brace-expansion@5.0.9: + resolution: + { + integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==, + } + engines: { node: 20 || >=22 } + + braces@3.0.3: + resolution: + { + integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, + } + engines: { node: ">=8" } + + browserslist@4.28.8: + resolution: + { + integrity: sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==, + } + engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + hasBin: true + + builtin-modules@5.3.0: + resolution: + { + integrity: sha512-hMQUl2bUFG339QygPM97E+mc8OY1IAchORZxm4a/frcYwKzozMzRVDBwHW0NjOqGElLm2O37AVQE8ikxlZHrMQ==, + } + engines: { node: ">=18.20" } + + call-bind-apply-helpers@1.0.2: + resolution: + { + integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==, + } + engines: { node: ">= 0.4" } + + call-bind@1.0.9: + resolution: + { + integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==, + } + engines: { node: ">= 0.4" } + + call-bound@1.0.4: + resolution: + { + integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==, + } + engines: { node: ">= 0.4" } + + callsites@3.1.0: + resolution: + { + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, + } + engines: { node: ">=6" } + + caniuse-lite@1.0.30001810: + resolution: + { + integrity: sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==, + } + + chai@6.2.2: + resolution: + { + integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==, + } + engines: { node: ">=18" } + + chalk@4.1.2: + resolution: + { + integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, + } + engines: { node: ">=10" } + + change-case@5.4.4: + resolution: + { + integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==, + } + + ci-info@4.4.0: + resolution: + { + integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==, + } + engines: { node: ">=8" } + + clean-regexp@1.0.0: + resolution: + { + integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==, + } + engines: { node: ">=4" } + + client-only@0.0.1: + resolution: + { + integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==, + } + + 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==, + } + + commander@2.20.3: + resolution: + { + integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, + } + + concat-map@0.0.1: + resolution: + { + integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, + } + + convert-source-map@2.0.0: + resolution: + { + integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, + } + + convex@1.45.0: + resolution: + { + integrity: sha512-AV3B56Ptu/14d76g3urBJ50dwpiZa6uJaLT84OWox5aCwZIJiuAamdjv3lLHDzs8vv5kC31anEZohhUe3qJ2bA==, + } + engines: { node: ">=20.0.0", npm: ">=7.0.0" } + hasBin: true + peerDependencies: + "@auth0/auth0-react": ^2.0.1 + "@clerk/clerk-react": ^4.12.8 || ^5.0.0 + "@clerk/react": ^6.4.3 + react: ^18.0.0 || ^19.0.0-0 || ^19.0.0 + peerDependenciesMeta: + "@auth0/auth0-react": + optional: true + "@clerk/clerk-react": + optional: true + "@clerk/react": + optional: true + react: + optional: true + + core-js-compat@3.50.0: + resolution: + { + integrity: sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q==, + } + engines: { node: ">=6.4.0" } + + cross-spawn@7.0.6: + resolution: + { + integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, + } + engines: { node: ">= 8" } + + csstype@3.2.3: + resolution: + { + integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==, + } + + damerau-levenshtein@1.0.8: + resolution: + { + integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==, + } + + data-view-buffer@1.0.2: + resolution: + { + integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==, + } + engines: { node: ">= 0.4" } + + data-view-byte-length@1.0.2: + resolution: + { + integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==, + } + engines: { node: ">= 0.4" } + + data-view-byte-offset@1.0.1: + resolution: + { + integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==, + } + engines: { node: ">= 0.4" } + + debug@3.2.7: + resolution: + { + integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, + } + peerDependencies: + supports-color: "*" + peerDependenciesMeta: + supports-color: + optional: true + + 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==, + } + + deepmerge-ts@7.1.6: + resolution: + { + integrity: sha512-gQhL1ksGBLQbHeAo47YU6cs2ahd3Pv+8PFYoWogNZbQnNwQyOh9Ad5kbeHFiWwbKdeWQJ5Z7Y7mwb9ew2hXBLw==, + } + engines: { node: ">=16.0.0" } + + define-data-property@1.1.4: + resolution: + { + integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==, + } + engines: { node: ">= 0.4" } + + define-properties@1.2.1: + resolution: + { + integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==, + } + engines: { node: ">= 0.4" } + + detect-libc@2.1.2: + resolution: + { + integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==, + } + engines: { node: ">=8" } + + doctrine@2.1.0: + resolution: + { + integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==, + } + engines: { node: ">=0.10.0" } + + dotenv@16.0.3: + resolution: + { + integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==, + } + engines: { node: ">=12" } + + dunder-proto@1.0.1: + resolution: + { + integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==, + } + engines: { node: ">= 0.4" } + + e-prime@0.10.4: + resolution: + { + integrity: sha512-tzBmM2mFSnAq5BuxPSyin6qXb3yMe1wufJN7L7ZPcEWS5S+jI2dhKQEoqHVEcSMMXo/j5lcWpX5jzA6wLSmX6w==, + } + + electron-to-chromium@1.5.416: + resolution: + { + integrity: sha512-K6bvB2BjnNrugtIih6ewlbBI9DXa976jIdiIlRLHhBoEI9a4JaQjjHyF+A1IQI543aQYR4LnmOrT/K5fZj0aPA==, + } + + emoji-regex@9.2.2: + resolution: + { + integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, + } + + es-abstract-get@1.0.0: + resolution: + { + integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==, + } + engines: { node: ">= 0.4" } + + es-abstract@1.24.2: + resolution: + { + integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==, + } + engines: { node: ">= 0.4" } + + es-define-property@1.0.1: + resolution: + { + integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==, + } + engines: { node: ">= 0.4" } + + es-errors@1.3.0: + resolution: + { + integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, + } + engines: { node: ">= 0.4" } + + es-iterator-helpers@1.4.0: + resolution: + { + integrity: sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==, + } + engines: { node: ">= 0.4" } + + es-module-lexer@2.3.2: + resolution: + { + integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==, + } + + es-object-atoms@1.1.2: + resolution: + { + integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==, + } + engines: { node: ">= 0.4" } + + es-set-tostringtag@2.1.0: + resolution: + { + integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==, + } + engines: { node: ">= 0.4" } + + es-shim-unscopables@1.1.0: + resolution: + { + integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==, + } + engines: { node: ">= 0.4" } + + es-to-primitive@1.3.4: + resolution: + { + integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==, + } + engines: { node: ">= 0.4" } + + esbuild@0.27.0: + resolution: + { + integrity: sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==, + } + engines: { node: ">=18" } + hasBin: true + + escalade@3.2.0: + resolution: + { + integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, + } + engines: { node: ">=6" } + + escape-string-regexp@1.0.5: + resolution: + { + integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, + } + engines: { node: ">=0.8.0" } + + escape-string-regexp@4.0.0: + resolution: + { + integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, + } + engines: { node: ">=10" } + + escape-string-regexp@5.0.0: + resolution: + { + integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==, + } + engines: { node: ">=12" } + + eslint-config-prettier@10.1.8: + resolution: + { + integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==, + } + hasBin: true + peerDependencies: + eslint: ">=7.0.0" + + eslint-import-resolver-node@0.3.9: + resolution: + { + integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==, + } + + eslint-module-utils@2.12.1: + resolution: + { + integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==, + } + engines: { node: ">=4" } + peerDependencies: + "@typescript-eslint/parser": "*" + eslint: "*" + eslint-import-resolver-node: "*" + eslint-import-resolver-typescript: "*" + eslint-import-resolver-webpack: "*" + peerDependenciesMeta: + "@typescript-eslint/parser": + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-boundaries@5.4.0: + resolution: + { + integrity: sha512-6SQmEhXCqGrrxm9YiM24SC95CqrVi2MUOm5SDrfquceh/os8MIAvZYsDU69zvtCSb1S6UbNEmdioi1gCDc8+VQ==, + } + engines: { node: ">=18.18" } + peerDependencies: + eslint: ">=6.0.0" + + eslint-plugin-css-modules@2.12.0: + resolution: + { + integrity: sha512-ruFBdad69ABrbCDCh5mXj7UzNmrvytfzPACjyvZWIAjFZAG8BXpYSbqmE8gU5wF+pIzV3jU2CWhLvfekXT/IgQ==, + } + engines: { node: ">=4.0.0" } + peerDependencies: + eslint: ">=2.0.0" + + eslint-plugin-functional@9.0.5: + resolution: + { + integrity: sha512-RYbNpGkGu5mSN7xlezyeE7TE3S9rsliAS5FOorZoxn7126UTslcQnoVOIAOA6fMOlz6dNG3x3cd3tuzrHM6mRA==, + } + engines: { node: ">=v18.18.0" } + peerDependencies: + eslint: ^9.0.0 || ^10.0.0 + typescript: ">=4.7.4" + peerDependenciesMeta: + typescript: + optional: true + + eslint-plugin-jsx-a11y@6.10.2: + resolution: + { + integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==, + } + engines: { node: ">=4.0" } + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + + eslint-plugin-perfectionist@5.10.1: + resolution: + { + integrity: sha512-Kprsp9Us0GqAesYaAIzUViw57xYp5WBqzXrcE0Mtww++E5fexWXYBipMuuD7yvyH4vvpBH0+oJ+OMAmZ0oYXkw==, + } + engines: { node: ^20.0.0 || >=22.0.0 } + peerDependencies: + eslint: ^8.45.0 || ^9.0.0 || ^10.0.0 + + eslint-plugin-prettier@5.5.6: + resolution: + { + integrity: sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==, + } + engines: { node: ^14.18.0 || >=16.0.0 } + peerDependencies: + "@types/eslint": ">=8.0.0" + eslint: ">=8.0.0" + eslint-config-prettier: ">= 7.0.0 <10.0.0 || >=10.1.0" + prettier: ">=3.0.0" + peerDependenciesMeta: + "@types/eslint": + optional: true + eslint-config-prettier: + optional: true + + 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-react@7.37.5: + resolution: + { + integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==, + } + engines: { node: ">=4" } + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-plugin-simple-import-sort@12.1.1: + resolution: + { + integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==, + } + peerDependencies: + eslint: ">=5.0.0" + + eslint-plugin-turbo@2.10.12: + resolution: + { + integrity: sha512-QZ9u3sV3ky4bl3XUpsVG8Ehk11I0omsGV2K7dCDut6sGvaVErFvWbgd46oh5tsnLt/5i+KvuOWgKJneleMqk2Q==, + } + peerDependencies: + eslint: ">6.6.0" + turbo: ">2.0.0" + + eslint-plugin-unicorn@62.0.0: + resolution: + { + integrity: sha512-HIlIkGLkvf29YEiS/ImuDZQbP12gWyx5i3C6XrRxMvVdqMroCI9qoVYCoIl17ChN+U89pn9sVwLxhIWj5nEc7g==, + } + engines: { node: ^20.10.0 || >=21.0.0 } + peerDependencies: + eslint: ">=9.38.0" + + eslint-plugin-write-good-comments@0.2.0: + resolution: + { + integrity: sha512-YuTGPicIAyORMFeKBdXAks0xRv5vTyOElctJWwm95Wl5R7dOR4Aq/4w6V4Zh2scEQQsY7d+un18fU+YoKCKiqQ==, + } + engines: { node: ">=0.10.0" } + + eslint-scope@8.4.0: + resolution: + { + integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + 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@4.2.1: + resolution: + { + integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + eslint-visitor-keys@5.0.1: + resolution: + { + integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + + eslint@9.39.5: + resolution: + { + integrity: sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: + { + integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + 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" } + + estree-walker@3.0.3: + resolution: + { + integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, + } + + esutils@2.0.3: + resolution: + { + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, + } + engines: { node: ">=0.10.0" } + + expect-type@1.4.0: + resolution: + { + integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==, + } + engines: { node: ">=12.0.0" } + + fast-deep-equal@3.1.3: + resolution: + { + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, + } + + fast-diff@1.3.0: + resolution: + { + integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==, + } + + fast-glob@3.3.1: + resolution: + { + integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==, + } + engines: { node: ">=8.6.0" } + + fast-json-stable-stringify@2.1.0: + resolution: + { + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, + } + + fast-levenshtein@2.0.6: + resolution: + { + integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, + } + + fastq@1.20.3: + resolution: + { + integrity: sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==, + } + + 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" } + + fill-range@7.1.1: + resolution: + { + integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, + } + engines: { node: ">=8" } + + find-up-simple@1.0.1: + resolution: + { + integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==, + } + engines: { node: ">=18" } + + 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.4: + resolution: + { + integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==, + } + + for-each@0.3.5: + resolution: + { + integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==, + } + engines: { node: ">= 0.4" } + + fsevents@2.3.3: + resolution: + { + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, + } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + os: [darwin] + + function-bind@1.1.2: + resolution: + { + integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, + } + + function.prototype.name@1.2.0: + resolution: + { + integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==, + } + engines: { node: ">= 0.4" } + + functions-have-names@1.2.3: + resolution: + { + integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, + } + + generator-function@2.0.1: + resolution: + { + integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==, + } + engines: { node: ">= 0.4" } + + gensync@1.0.0-beta.2: + resolution: + { + integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, + } + engines: { node: ">=6.9.0" } + + get-intrinsic@1.3.0: + resolution: + { + integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==, + } + engines: { node: ">= 0.4" } + + get-proto@1.0.1: + resolution: + { + integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==, + } + engines: { node: ">= 0.4" } + + get-symbol-description@1.1.0: + resolution: + { + integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==, + } + engines: { node: ">= 0.4" } + + glob-parent@5.1.2: + resolution: + { + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, + } + engines: { node: ">= 6" } + + glob-parent@6.0.2: + resolution: + { + integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, + } + engines: { node: ">=10.13.0" } + + globals@14.0.0: + resolution: + { + integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==, + } + engines: { node: ">=18" } + + globals@16.5.0: + resolution: + { + integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==, + } + engines: { node: ">=18" } + + globalthis@1.0.4: + resolution: + { + integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==, + } + engines: { node: ">= 0.4" } + + gonzales-pe@4.3.0: + resolution: + { + integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==, + } + engines: { node: ">=0.6.0" } + hasBin: true + + gopd@1.2.0: + resolution: + { + integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==, + } + engines: { node: ">= 0.4" } + + handlebars@4.7.8: + resolution: + { + integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==, + } + engines: { node: ">=0.4.7" } + hasBin: true + + has-bigints@1.1.0: + resolution: + { + integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==, + } + engines: { node: ">= 0.4" } + + has-flag@4.0.0: + resolution: + { + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, + } + engines: { node: ">=8" } + + has-property-descriptors@1.0.2: + resolution: + { + integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, + } + + has-proto@1.2.0: + resolution: + { + integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==, + } + engines: { node: ">= 0.4" } + + has-symbols@1.1.0: + resolution: + { + integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==, + } + engines: { node: ">= 0.4" } + + has-tostringtag@1.0.2: + resolution: + { + integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==, + } + engines: { node: ">= 0.4" } + + hasown@2.0.4: + resolution: + { + integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==, + } + engines: { node: ">= 0.4" } + + 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" } + + ignore@7.0.7: + resolution: + { + integrity: sha512-dML0wP6oak21rsNYCJpJB6O1BJIEwNpGrTw0URPfAk4hm0e3pRfCtzkfB6olBcXcVlU2rouCyz7lCyRB0OMVCA==, + } + engines: { node: ">= 4" } + + import-fresh@3.3.1: + resolution: + { + integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==, + } + engines: { node: ">=6" } + + imurmurhash@0.1.4: + resolution: + { + integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, + } + engines: { node: ">=0.8.19" } + + indent-string@5.0.0: + resolution: + { + integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==, + } + engines: { node: ">=12" } + + internal-slot@1.1.0: + resolution: + { + integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==, + } + engines: { node: ">= 0.4" } + + is-array-buffer@3.0.5: + resolution: + { + integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==, + } + engines: { node: ">= 0.4" } + + is-async-function@2.1.1: + resolution: + { + integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==, + } + engines: { node: ">= 0.4" } + + is-bigint@1.1.0: + resolution: + { + integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==, + } + engines: { node: ">= 0.4" } + + is-boolean-object@1.2.2: + resolution: + { + integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==, + } + engines: { node: ">= 0.4" } + + is-builtin-module@5.0.0: + resolution: + { + integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==, + } + engines: { node: ">=18.20" } + + is-callable@1.2.7: + resolution: + { + integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, + } + engines: { node: ">= 0.4" } + + is-core-module@2.16.1: + resolution: + { + integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==, + } + engines: { node: ">= 0.4" } + + is-core-module@2.16.2: + resolution: + { + integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==, + } + engines: { node: ">= 0.4" } + + is-data-view@1.0.2: + resolution: + { + integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==, + } + engines: { node: ">= 0.4" } + + is-date-object@1.1.0: + resolution: + { + integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==, + } + engines: { node: ">= 0.4" } + + is-document.all@1.0.0: + resolution: + { + integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==, + } + engines: { node: ">= 0.4" } + + is-extglob@2.1.1: + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + } + engines: { node: ">=0.10.0" } + + is-finalizationregistry@1.1.1: + resolution: + { + integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==, + } + engines: { node: ">= 0.4" } + + is-generator-function@1.1.2: + resolution: + { + integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==, + } + engines: { node: ">= 0.4" } + + is-glob@4.0.3: + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + } + engines: { node: ">=0.10.0" } + + is-immutable-type@5.0.4: + resolution: + { + integrity: sha512-tDf0vB9dJJt/1USS2nvHJb8UsIAhs+pF6z8UZLNdhrzB+PKMrdcN45je9jhuFpaJOjJpoRhueFmFrRs5g/TNMA==, + } + peerDependencies: + eslint: "*" + typescript: ">=4.7.4" + + is-map@2.0.3: + resolution: + { + integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==, + } + engines: { node: ">= 0.4" } + + is-negative-zero@2.0.3: + resolution: + { + integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==, + } + engines: { node: ">= 0.4" } + + is-number-object@1.1.1: + resolution: + { + integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==, + } + engines: { node: ">= 0.4" } + + is-number@7.0.0: + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, + } + engines: { node: ">=0.12.0" } + + is-regex@1.2.1: + resolution: + { + integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==, + } + engines: { node: ">= 0.4" } + + is-set@2.0.3: + resolution: + { + integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==, + } + engines: { node: ">= 0.4" } + + is-shared-array-buffer@1.0.4: + resolution: + { + integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==, + } + engines: { node: ">= 0.4" } + + is-string@1.1.1: + resolution: + { + integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==, + } + engines: { node: ">= 0.4" } + + is-symbol@1.1.1: + resolution: + { + integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==, + } + engines: { node: ">= 0.4" } + + is-typed-array@1.1.15: + resolution: + { + integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==, + } + engines: { node: ">= 0.4" } + + is-weakmap@2.0.2: + resolution: + { + integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==, + } + engines: { node: ">= 0.4" } + + is-weakref@1.1.1: + resolution: + { + integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==, + } + engines: { node: ">= 0.4" } + + is-weakset@2.0.4: + resolution: + { + integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==, + } + engines: { node: ">= 0.4" } + + isarray@2.0.5: + resolution: + { + integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, + } + + isexe@2.0.0: + resolution: + { + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, + } + + 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" } + + iterator.prototype@1.1.5: + resolution: + { + integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==, + } + engines: { node: ">= 0.4" } + + js-tokens@10.0.0: + resolution: + { + integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==, + } + + js-tokens@4.0.0: + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, + } + + js-yaml@4.3.2: + resolution: + { + integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==, + } + hasBin: true + + 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-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 + + jsx-ast-utils@3.3.5: + resolution: + { + integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==, + } + engines: { node: ">=4.0" } + + keyv@4.5.4: + resolution: + { + integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, + } + + language-subtag-registry@0.3.23: + resolution: + { + integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==, + } + + language-tags@1.0.9: + resolution: + { + integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==, + } + engines: { node: ">=0.10" } + + levn@0.4.1: + resolution: + { + integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, + } + engines: { node: ">= 0.8.0" } + + lightningcss-android-arm64@1.33.0: + resolution: + { + integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.33.0: + resolution: + { + integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.33.0: + resolution: + { + integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.33.0: + resolution: + { + integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: + { + integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.33.0: + resolution: + { + integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.33.0: + resolution: + { + integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.33.0: + resolution: + { + integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.33.0: + resolution: + { + integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.33.0: + resolution: + { + integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.33.0: + resolution: + { + integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [win32] + + lightningcss@1.33.0: + resolution: + { + integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==, + } + engines: { node: ">= 12.0.0" } + + locate-path@6.0.0: + resolution: + { + integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, + } + engines: { node: ">=10" } + + lodash.merge@4.6.2: + resolution: + { + integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, + } + + lodash@4.18.1: + resolution: + { + integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==, + } + + loose-envify@1.4.0: + resolution: + { + integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, + } + hasBin: true + + 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==, + } + + magicast@0.5.4: + resolution: + { + integrity: sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==, + } + + make-dir@4.0.0: + resolution: + { + integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==, + } + engines: { node: ">=10" } + + math-intrinsics@1.1.0: + resolution: + { + integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==, + } + engines: { node: ">= 0.4" } + + merge2@1.4.1: + resolution: + { + integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, + } + engines: { node: ">= 8" } + + micromatch@4.0.8: + resolution: + { + integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, + } + engines: { node: ">=8.6" } + + minimatch@10.2.6: + resolution: + { + integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==, + } + engines: { node: 18 || 20 || >=22 } + + minimatch@3.1.5: + resolution: + { + integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==, + } + + minimist@1.2.8: + resolution: + { + integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, + } + + ms@2.1.3: + resolution: + { + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, + } + + nanoid@3.3.18: + resolution: + { + integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==, + } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + hasBin: true + + 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" } + + neo-async@2.6.2: + resolution: + { + integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, + } + + next@16.3.3: + resolution: + { + integrity: sha512-tuRTx1nQ/yVw83cwJBo9F+njGUgMn3UHQycreWHB8XsStvvAh1AthbI8/4IpKnFaF58F+iSiHejYOlMQ/eq83g==, + } + engines: { node: ">=20.9.0" } + hasBin: true + peerDependencies: + "@opentelemetry/api": ^1.1.0 + "@playwright/test": ^1.51.1 + babel-plugin-react-compiler: "*" + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + "@opentelemetry/api": + optional: true + "@playwright/test": + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + no-cliches@0.3.6: + resolution: + { + integrity: sha512-3yZ1vfGKOcv0dyyhUeqA0Qa6RsQ4SfUnL6o2IWR4sVg8kdnJo48XTWbMLdtnfiZTbCUdsMttNwyJcihEdGCZBw==, + } + engines: { node: ">=16", npm: ">=8" } + + node-exports-info@1.6.2: + resolution: + { + integrity: sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==, + } + engines: { node: ">= 0.4" } + + node-releases@2.0.54: + resolution: + { + integrity: sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==, + } + engines: { node: ">=18" } + + object-assign@4.1.1: + resolution: + { + integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, + } + engines: { node: ">=0.10.0" } + + object-inspect@1.13.4: + resolution: + { + integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==, + } + engines: { node: ">= 0.4" } + + object-keys@1.1.1: + resolution: + { + integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, + } + engines: { node: ">= 0.4" } + + object.assign@4.1.7: + resolution: + { + integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==, + } + engines: { node: ">= 0.4" } + + object.entries@1.1.9: + resolution: + { + integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==, + } + engines: { node: ">= 0.4" } + + object.fromentries@2.0.8: + resolution: + { + integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==, + } + engines: { node: ">= 0.4" } + + object.values@1.2.1: + resolution: + { + integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==, + } + engines: { node: ">= 0.4" } + + obug@2.1.4: + resolution: + { + integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==, + } + engines: { node: ">=12.20.0" } + + optionator@0.9.4: + resolution: + { + integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, + } + engines: { node: ">= 0.8.0" } + + own-keys@1.0.2: + resolution: + { + integrity: sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==, + } + engines: { node: ">= 0.4" } + + 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" } + + parent-module@1.0.1: + resolution: + { + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, + } + engines: { node: ">=6" } + + passive-voice@0.1.0: + resolution: + { + integrity: sha512-Pj9iwzXw4bKEtdugGYm92jT4tnsj+xrTSkHFEM4bn6fefqbFdZi49tZMmGIZ91aIQTyFtMUww7O2qYaZKAsDag==, + } + + 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" } + + path-parse@1.0.7: + resolution: + { + integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, + } + + pathe@2.0.3: + resolution: + { + integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==, + } + + picocolors@1.1.1: + resolution: + { + integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, + } + + picomatch@2.3.2: + resolution: + { + integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==, + } + engines: { node: ">=8.6" } + + picomatch@4.0.7: + resolution: + { + integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==, + } + engines: { node: ">=12" } + + pluralize@8.0.0: + resolution: + { + integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==, + } + engines: { node: ">=4" } + + possible-typed-array-names@1.1.0: + resolution: + { + integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==, + } + engines: { node: ">= 0.4" } + + postcss@8.5.23: + resolution: + { + integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==, + } + engines: { node: ^10 || ^12 || >=14 } + + postcss@8.5.26: + resolution: + { + integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==, + } + engines: { node: ^10 || ^12 || >=14 } + + prelude-ls@1.2.1: + resolution: + { + integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, + } + engines: { node: ">= 0.8.0" } + + prettier-linter-helpers@1.0.1: + resolution: + { + integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==, + } + engines: { node: ">=6.0.0" } + + prettier@3.9.6: + resolution: + { + integrity: sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==, + } + engines: { node: ">=14" } + hasBin: true + + prop-types@15.8.1: + resolution: + { + integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==, + } + + punycode@2.3.1: + resolution: + { + integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, + } + engines: { node: ">=6" } + + queue-microtask@1.2.3: + resolution: + { + integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, + } + + react-dom@19.2.8: + resolution: + { + integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==, + } + peerDependencies: + react: ^19.2.8 + + react-is@16.13.1: + resolution: + { + integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, + } + + react@19.2.8: + resolution: + { + integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==, + } + engines: { node: ">=0.10.0" } + + reflect.getprototypeof@1.0.10: + resolution: + { + integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==, + } + engines: { node: ">= 0.4" } + + regexp-tree@0.1.27: + resolution: + { + integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==, + } + hasBin: true + + regexp.prototype.flags@1.5.4: + resolution: + { + integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==, + } + engines: { node: ">= 0.4" } + + regjsparser@0.13.2: + resolution: + { + integrity: sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==, + } + hasBin: true + + requireindex@1.1.0: + resolution: + { + integrity: sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==, + } + engines: { node: ">=0.10.5" } + + resolve-from@4.0.0: + resolution: + { + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, + } + engines: { node: ">=4" } + + resolve@1.22.12: + resolution: + { + integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==, + } + engines: { node: ">= 0.4" } + hasBin: true + + resolve@2.0.0-next.7: + resolution: + { + integrity: sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==, + } + engines: { node: ">= 0.4" } + hasBin: true + + reusify@1.1.0: + resolution: + { + integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==, + } + engines: { iojs: ">=1.0.0", node: ">=0.10.0" } + + rolldown@1.2.6: + resolution: + { + integrity: sha512-vMM4q3aixf46GiF1Kok8jDPFsEpXgFWGjUHXNkNHNm+Y2adXAG2dbX91jkti3i0ZRsOlcmbuzAz1poObSHCmUA==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + hasBin: true + + run-parallel@1.2.0: + resolution: + { + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, + } + + safe-array-concat@1.1.4: + resolution: + { + integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==, + } + engines: { node: ">=0.4" } + + safe-push-apply@1.0.0: + resolution: + { + integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==, + } + engines: { node: ">= 0.4" } + + safe-regex-test@1.1.0: + resolution: + { + integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==, + } + engines: { node: ">= 0.4" } + + scheduler@0.27.0: + resolution: + { + integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==, + } + + semver@6.3.1: + resolution: + { + integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, + } + hasBin: true + + semver@7.8.5: + resolution: + { + integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==, + } + engines: { node: ">=10" } + hasBin: true + + set-function-length@1.2.2: + resolution: + { + integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, + } + engines: { node: ">= 0.4" } + + set-function-name@2.0.2: + resolution: + { + integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==, + } + engines: { node: ">= 0.4" } + + set-proto@1.0.0: + resolution: + { + integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==, + } + engines: { node: ">= 0.4" } + + sharp@0.35.4: + resolution: + { + integrity: sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA==, + } + engines: { node: ">=20.9.0" } + peerDependencies: + "@types/node": "*" + peerDependenciesMeta: + "@types/node": + optional: 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" } + + side-channel-list@1.0.1: + resolution: + { + integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==, + } + engines: { node: ">= 0.4" } + + side-channel-map@1.0.1: + resolution: + { + integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==, + } + engines: { node: ">= 0.4" } + + side-channel-weakmap@1.0.2: + resolution: + { + integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==, + } + engines: { node: ">= 0.4" } + + side-channel@1.1.1: + resolution: + { + integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==, + } + engines: { node: ">= 0.4" } + + siginfo@2.0.0: + resolution: + { + integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==, + } + + source-map-js@1.2.1: + resolution: + { + integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, + } + engines: { node: ">=0.10.0" } + + source-map@0.6.1: + resolution: + { + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, + } + engines: { node: ">=0.10.0" } + + stackback@0.0.2: + resolution: + { + integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==, + } + + std-env@4.2.0: + resolution: + { + integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==, + } + + stop-iteration-iterator@1.1.0: + resolution: + { + integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==, + } + engines: { node: ">= 0.4" } + + string.prototype.includes@2.0.1: + resolution: + { + integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==, + } + engines: { node: ">= 0.4" } + + string.prototype.matchall@4.1.0: + resolution: + { + integrity: sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ==, + } + engines: { node: ">= 0.4" } + + string.prototype.repeat@1.0.0: + resolution: + { + integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==, + } + + string.prototype.trim@1.2.11: + resolution: + { + integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==, + } + engines: { node: ">= 0.4" } + + string.prototype.trimend@1.0.10: + resolution: + { + integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==, + } + engines: { node: ">= 0.4" } + + string.prototype.trimstart@1.0.8: + resolution: + { + integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==, + } + engines: { node: ">= 0.4" } + + strip-indent@4.1.1: + resolution: + { + integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==, + } + engines: { node: ">=12" } + + strip-json-comments@3.1.1: + resolution: + { + integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, + } + engines: { node: ">=8" } + + styled-jsx@5.1.6: + resolution: + { + integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==, + } + engines: { node: ">= 12.0.0" } + peerDependencies: + "@babel/core": "*" + babel-plugin-macros: "*" + react: ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + peerDependenciesMeta: + "@babel/core": + optional: true + babel-plugin-macros: + optional: true + + supports-color@7.2.0: + resolution: + { + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, + } + engines: { node: ">=8" } + + supports-preserve-symlinks-flag@1.0.0: + resolution: + { + integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, + } + engines: { node: ">= 0.4" } + + synckit@0.11.13: + resolution: + { + integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==, + } + engines: { node: ^14.18.0 || >=16.0.0 } + + tinybench@2.9.0: + resolution: + { + integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==, + } + + tinyexec@1.3.0: + resolution: + { + integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==, + } + engines: { node: ">=18" } + + tinyglobby@0.2.17: + resolution: + { + integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==, + } + engines: { node: ">=12.0.0" } + + tinyrainbow@3.1.1: + resolution: + { + integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==, + } + engines: { node: ">=14.0.0" } + + to-regex-range@5.0.1: + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, + } + engines: { node: ">=8.0" } + + too-wordy@0.3.6: + resolution: + { + integrity: sha512-fK4DKkEcrpBbK6uANekH37VeNAb/88qKdkqc/nBOFJpHdvXKXdA4lZRkiM6zNlow00Zp4W4/lnWyqqCaOQlg/w==, + } + engines: { node: ">=6", npm: ">=5" } + + ts-api-utils@2.5.0: + resolution: + { + integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==, + } + engines: { node: ">=18.12" } + peerDependencies: + typescript: ">=4.8.4" + + ts-declaration-location@1.0.7: + resolution: + { + integrity: sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==, + } + peerDependencies: + typescript: ">=4.0.0" + + tslib@2.8.1: + resolution: + { + integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, + } + + turbo@2.10.12: + resolution: + { + integrity: sha512-AswgMPnpOoaVZHrrSBejETzEbuIA69OVGwfkHwfrY0A23VjWXBANzgq9+OymWOHAIArB7D1+1z498WY8fGg1Jw==, + } + hasBin: true + + type-check@0.4.0: + resolution: + { + integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, + } + engines: { node: ">= 0.8.0" } + + typed-array-buffer@1.0.3: + resolution: + { + integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==, + } + engines: { node: ">= 0.4" } + + typed-array-byte-length@1.0.3: + resolution: + { + integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==, + } + engines: { node: ">= 0.4" } + + typed-array-byte-offset@1.0.4: + resolution: + { + integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==, + } + engines: { node: ">= 0.4" } + + typed-array-length@1.0.8: + resolution: + { + integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==, + } + engines: { node: ">= 0.4" } + + typescript-eslint@8.68.0: + resolution: + { + integrity: sha512-MHy0Y0ynqeEbx/S45+i/bBssdy3X6KNBfmJAP35GrgtNxu2TQ5K5xsFDhAnmsq1jvpdoZOPG1LGtJo0HWqYCrQ==, + } + 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" + + typescript@6.0.3: + resolution: + { + integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==, + } + engines: { node: ">=14.17" } + hasBin: true + + typescript@7.0.2: + resolution: + { + integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==, + } + engines: { node: ">=16.20.0" } + hasBin: true + + uglify-js@3.19.3: + resolution: + { + integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==, + } + engines: { node: ">=0.8.0" } + hasBin: true + + unbox-primitive@1.1.0: + resolution: + { + integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==, + } + engines: { node: ">= 0.4" } + + undici-types@6.21.0: + resolution: + { + integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==, + } + + update-browserslist-db@1.3.2: + resolution: + { + integrity: sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==, + } + hasBin: true + peerDependencies: + browserslist: ">= 4.21.0" + + uri-js@4.4.1: + resolution: + { + integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, + } + + vite@8.2.2: + resolution: + { + integrity: sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + hasBin: true + peerDependencies: + "@types/node": ^20.19.0 || >=22.12.0 + "@vitejs/devtools": ^0.4.0 || ^0.5.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 + + vitest@4.1.11: + resolution: + { + integrity: sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==, + } + engines: { node: ^20.0.0 || ^22.0.0 || >=24.0.0 } + hasBin: true + peerDependencies: + "@edge-runtime/vm": "*" + "@opentelemetry/api": ^1.9.0 + "@types/node": ^20.0.0 || ^22.0.0 || >=24.0.0 + "@vitest/browser-playwright": 4.1.11 + "@vitest/browser-preview": 4.1.11 + "@vitest/browser-webdriverio": 4.1.11 + "@vitest/coverage-istanbul": 4.1.11 + "@vitest/coverage-v8": 4.1.11 + "@vitest/ui": 4.1.11 + happy-dom: "*" + jsdom: "*" + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@opentelemetry/api": + optional: true + "@types/node": + optional: true + "@vitest/browser-playwright": + optional: true + "@vitest/browser-preview": + optional: true + "@vitest/browser-webdriverio": + optional: true + "@vitest/coverage-istanbul": + optional: true + "@vitest/coverage-v8": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + weasel-words@0.1.1: + resolution: + { + integrity: sha512-rWkTAGqs4TN6qreS06+irmFUMrQVx5KoFjD8CxMHUsAwmxw/upDcfleaEYOLsonUbornahg+VJ9xrWxp4udyJA==, + } + + which-boxed-primitive@1.1.1: + resolution: + { + integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==, + } + engines: { node: ">= 0.4" } + + which-builtin-type@1.2.1: + resolution: + { + integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==, + } + engines: { node: ">= 0.4" } + + which-collection@1.0.2: + resolution: + { + integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==, + } + engines: { node: ">= 0.4" } + + which-typed-array@1.1.22: + resolution: + { + integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==, + } + engines: { node: ">= 0.4" } + + which@2.0.2: + resolution: + { + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, + } + engines: { node: ">= 8" } + hasBin: true + + why-is-node-running@2.3.0: + resolution: + { + integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==, + } + engines: { node: ">=8" } + hasBin: true + + word-wrap@1.2.5: + resolution: + { + integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, + } + engines: { node: ">=0.10.0" } + + wordwrap@1.0.0: + resolution: + { + integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==, + } + + write-good@1.0.8: + resolution: + { + integrity: sha512-P1Ct7+DNrOcr2JAxDZ3Q5i5sx2LSveu7iLaoUL0A+YiG0GKf0l5+9j3rwMeyh6JeTL1+HfQV1rnwEvzhNIvpFw==, + } + engines: { node: ">=6", npm: ">=5" } + hasBin: true + + ws@8.21.0: + resolution: + { + integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==, + } + 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==, + } + + 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.5.4: + resolution: + { + integrity: sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA==, + } + +snapshots: + "@babel/code-frame@7.29.7": + dependencies: + "@babel/helper-validator-identifier": 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + "@babel/compat-data@7.29.7": {} + + "@babel/core@7.29.7(supports-color@7.2.0)": + dependencies: + "@babel/code-frame": 7.29.7 + "@babel/generator": 7.29.8 + "@babel/helper-compilation-targets": 7.29.7 + "@babel/helper-module-transforms": 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + "@babel/helpers": 7.29.7 + "@babel/parser": 7.29.8 + "@babel/template": 7.29.7 + "@babel/traverse": 7.29.8(supports-color@7.2.0) + "@babel/types": 7.29.8 + "@jridgewell/remapping": 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3(supports-color@7.2.0) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + "@babel/generator@7.29.8": + dependencies: + "@babel/parser": 7.29.8 + "@babel/types": 7.29.8 + "@jridgewell/gen-mapping": 0.3.13 + "@jridgewell/trace-mapping": 0.3.31 + jsesc: 3.1.0 + + "@babel/helper-compilation-targets@7.29.7": + dependencies: + "@babel/compat-data": 7.29.7 + "@babel/helper-validator-option": 7.29.7 + browserslist: 4.28.8 + lru-cache: 5.1.1 + semver: 6.3.1 + + "@babel/helper-globals@7.29.7": {} + + "@babel/helper-module-imports@7.29.7(supports-color@7.2.0)": + dependencies: + "@babel/traverse": 7.29.8(supports-color@7.2.0) + "@babel/types": 7.29.8 + transitivePeerDependencies: + - supports-color + + "@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)": + dependencies: + "@babel/core": 7.29.7(supports-color@7.2.0) + "@babel/helper-module-imports": 7.29.7(supports-color@7.2.0) + "@babel/helper-validator-identifier": 7.29.7 + "@babel/traverse": 7.29.8(supports-color@7.2.0) + transitivePeerDependencies: + - supports-color + + "@babel/helper-string-parser@7.29.7": {} + + "@babel/helper-validator-identifier@7.29.7": {} + + "@babel/helper-validator-option@7.29.7": {} + + "@babel/helpers@7.29.7": + dependencies: + "@babel/template": 7.29.7 + "@babel/types": 7.29.8 + + "@babel/parser@7.29.8": + dependencies: + "@babel/types": 7.29.8 + + "@babel/template@7.29.7": + dependencies: + "@babel/code-frame": 7.29.7 + "@babel/parser": 7.29.8 + "@babel/types": 7.29.8 + + "@babel/traverse@7.29.8(supports-color@7.2.0)": + dependencies: + "@babel/code-frame": 7.29.7 + "@babel/generator": 7.29.8 + "@babel/helper-globals": 7.29.7 + "@babel/parser": 7.29.8 + "@babel/template": 7.29.7 + "@babel/types": 7.29.8 + debug: 4.4.3(supports-color@7.2.0) + transitivePeerDependencies: + - supports-color + + "@babel/types@7.29.8": + dependencies: + "@babel/helper-string-parser": 7.29.7 + "@babel/helper-validator-identifier": 7.29.7 + + "@bcoe/v8-coverage@1.0.2": {} + + "@boundaries/elements@1.2.0(@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0))(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0)": + dependencies: + eslint-import-resolver-node: 0.3.9(supports-color@7.2.0) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0))(eslint-import-resolver-node@0.3.9(supports-color@7.2.0))(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + handlebars: 4.7.8 + is-core-module: 2.16.1 + micromatch: 4.0.8 + transitivePeerDependencies: + - "@typescript-eslint/parser" + - eslint + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + "@convex-dev/eslint-plugin@1.2.2(@typescript/typescript6@6.0.2)(convex@1.45.0(react@19.2.8))(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0)": + dependencies: + "@typescript-eslint/types": 8.58.2 + "@typescript-eslint/utils": 8.58.2(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + convex: 1.45.0(react@19.2.8) + transitivePeerDependencies: + - eslint + - supports-color + - typescript + + "@emnapi/runtime@1.11.3": + dependencies: + tslib: 2.8.1 + optional: true + + "@esbuild/aix-ppc64@0.27.0": + optional: true + + "@esbuild/android-arm64@0.27.0": + optional: true + + "@esbuild/android-arm@0.27.0": + optional: true + + "@esbuild/android-x64@0.27.0": + optional: true + + "@esbuild/darwin-arm64@0.27.0": + optional: true + + "@esbuild/darwin-x64@0.27.0": + optional: true + + "@esbuild/freebsd-arm64@0.27.0": + optional: true + + "@esbuild/freebsd-x64@0.27.0": + optional: true + + "@esbuild/linux-arm64@0.27.0": + optional: true + + "@esbuild/linux-arm@0.27.0": + optional: true + + "@esbuild/linux-ia32@0.27.0": + optional: true + + "@esbuild/linux-loong64@0.27.0": + optional: true + + "@esbuild/linux-mips64el@0.27.0": + optional: true + + "@esbuild/linux-ppc64@0.27.0": + optional: true + + "@esbuild/linux-riscv64@0.27.0": + optional: true + + "@esbuild/linux-s390x@0.27.0": + optional: true + + "@esbuild/linux-x64@0.27.0": + optional: true + + "@esbuild/netbsd-arm64@0.27.0": + optional: true + + "@esbuild/netbsd-x64@0.27.0": + optional: true + + "@esbuild/openbsd-arm64@0.27.0": + optional: true + + "@esbuild/openbsd-x64@0.27.0": + optional: true + + "@esbuild/openharmony-arm64@0.27.0": + optional: true + + "@esbuild/sunos-x64@0.27.0": + optional: true + + "@esbuild/win32-arm64@0.27.0": + optional: true + + "@esbuild/win32-ia32@0.27.0": + optional: true + + "@esbuild/win32-x64@0.27.0": + optional: true + + "@eslint-community/eslint-utils@4.10.1(eslint@9.39.5(supports-color@7.2.0))": + dependencies: + eslint: 9.39.5(supports-color@7.2.0) + eslint-visitor-keys: 3.4.3 + + "@eslint-community/eslint-utils@4.9.1(eslint@9.39.5(supports-color@7.2.0))": + dependencies: + eslint: 9.39.5(supports-color@7.2.0) + eslint-visitor-keys: 3.4.3 + + "@eslint-community/regexpp@4.12.2": {} + + "@eslint/config-array@0.21.2(supports-color@7.2.0)": + dependencies: + "@eslint/object-schema": 2.1.7 + debug: 4.4.3(supports-color@7.2.0) + minimatch: 3.1.5 + transitivePeerDependencies: + - supports-color + + "@eslint/config-helpers@0.4.2": + dependencies: + "@eslint/core": 0.17.0 + + "@eslint/core@0.17.0": + dependencies: + "@types/json-schema": 7.0.15 + + "@eslint/eslintrc@3.3.6(supports-color@7.2.0)": + dependencies: + ajv: 6.15.0 + debug: 4.4.3(supports-color@7.2.0) + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.3.2 + minimatch: 3.1.5 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + "@eslint/js@9.39.5": {} + + "@eslint/object-schema@2.1.7": {} + + "@eslint/plugin-kit@0.4.1": + dependencies: + "@eslint/core": 0.17.0 + 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": {} + + "@img/colour@1.1.0": + optional: true + + "@img/sharp-darwin-arm64@0.35.4": + optionalDependencies: + "@img/sharp-libvips-darwin-arm64": 1.3.3 + optional: true + + "@img/sharp-darwin-x64@0.35.4": + optionalDependencies: + "@img/sharp-libvips-darwin-x64": 1.3.3 + optional: true + + "@img/sharp-freebsd-wasm32@0.35.4": + dependencies: + "@img/sharp-wasm32": 0.35.4 + optional: true + + "@img/sharp-libvips-darwin-arm64@1.3.3": + optional: true + + "@img/sharp-libvips-darwin-x64@1.3.3": + optional: true + + "@img/sharp-libvips-linux-arm64@1.3.3": + optional: true + + "@img/sharp-libvips-linux-arm@1.3.3": + optional: true + + "@img/sharp-libvips-linux-ppc64@1.3.3": + optional: true + + "@img/sharp-libvips-linux-riscv64@1.3.3": + optional: true + + "@img/sharp-libvips-linux-s390x@1.3.3": + optional: true + + "@img/sharp-libvips-linux-x64@1.3.3": + optional: true + + "@img/sharp-libvips-linuxmusl-arm64@1.3.3": + optional: true + + "@img/sharp-libvips-linuxmusl-x64@1.3.3": + optional: true + + "@img/sharp-linux-arm64@0.35.4": + optionalDependencies: + "@img/sharp-libvips-linux-arm64": 1.3.3 + optional: true + + "@img/sharp-linux-arm@0.35.4": + optionalDependencies: + "@img/sharp-libvips-linux-arm": 1.3.3 + optional: true + + "@img/sharp-linux-ppc64@0.35.4": + optionalDependencies: + "@img/sharp-libvips-linux-ppc64": 1.3.3 + optional: true + + "@img/sharp-linux-riscv64@0.35.4": + optionalDependencies: + "@img/sharp-libvips-linux-riscv64": 1.3.3 + optional: true + + "@img/sharp-linux-s390x@0.35.4": + optionalDependencies: + "@img/sharp-libvips-linux-s390x": 1.3.3 + optional: true + + "@img/sharp-linux-x64@0.35.4": + optionalDependencies: + "@img/sharp-libvips-linux-x64": 1.3.3 + optional: true + + "@img/sharp-linuxmusl-arm64@0.35.4": + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64": 1.3.3 + optional: true + + "@img/sharp-linuxmusl-x64@0.35.4": + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64": 1.3.3 + optional: true + + "@img/sharp-wasm32@0.35.4": + dependencies: + "@emnapi/runtime": 1.11.3 + optional: true + + "@img/sharp-webcontainers-wasm32@0.35.4": + dependencies: + "@img/sharp-wasm32": 0.35.4 + optional: true + + "@img/sharp-win32-arm64@0.35.4": + optional: true + + "@img/sharp-win32-ia32@0.35.4": + optional: true + + "@img/sharp-win32-x64@0.35.4": + optional: true + + "@jridgewell/gen-mapping@0.3.13": + dependencies: + "@jridgewell/sourcemap-codec": 1.6.0 + "@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.6.0": {} + + "@jridgewell/trace-mapping@0.3.31": + dependencies: + "@jridgewell/resolve-uri": 3.1.2 + "@jridgewell/sourcemap-codec": 1.6.0 + + "@next/env@16.3.3": {} + + "@next/eslint-plugin-next@16.3.3(eslint@9.39.5(supports-color@7.2.0))": + dependencies: + "@eslint-community/eslint-utils": 4.9.1(eslint@9.39.5(supports-color@7.2.0)) + fast-glob: 3.3.1 + transitivePeerDependencies: + - eslint + + "@next/swc-darwin-arm64@16.3.3": + optional: true + + "@next/swc-darwin-x64@16.3.3": + optional: true + + "@next/swc-linux-arm64-gnu@16.3.3": + optional: true + + "@next/swc-linux-arm64-musl@16.3.3": + optional: true + + "@next/swc-linux-x64-gnu@16.3.3": + optional: true + + "@next/swc-linux-x64-musl@16.3.3": + optional: true + + "@next/swc-win32-arm64-msvc@16.3.3": + optional: true + + "@next/swc-win32-x64-msvc@16.3.3": + optional: true + + "@nodelib/fs.scandir@2.1.5": + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: 1.2.0 + + "@nodelib/fs.stat@2.0.5": {} + + "@nodelib/fs.walk@1.2.8": + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: 1.20.3 + + "@oxc-project/types@0.147.0": {} + + "@pkgr/core@0.3.6": {} + + "@rolldown/binding-android-arm-eabi@1.2.6": + optional: true + + "@rolldown/binding-android-arm64@1.2.6": + optional: true + + "@rolldown/binding-darwin-arm64@1.2.6": + optional: true + + "@rolldown/binding-darwin-x64@1.2.6": + optional: true + + "@rolldown/binding-freebsd-x64@1.2.6": + optional: true + + "@rolldown/binding-linux-arm-gnueabihf@1.2.6": + optional: true + + "@rolldown/binding-linux-arm64-gnu@1.2.6": + optional: true + + "@rolldown/binding-linux-arm64-musl@1.2.6": + optional: true + + "@rolldown/binding-linux-ppc64-gnu@1.2.6": + optional: true + + "@rolldown/binding-linux-s390x-gnu@1.2.6": + optional: true + + "@rolldown/binding-linux-x64-gnu@1.2.6": + optional: true + + "@rolldown/binding-linux-x64-musl@1.2.6": + optional: true + + "@rolldown/binding-openharmony-arm64@1.2.6": + optional: true + + "@rolldown/binding-win32-arm64-msvc@1.2.6": + optional: true + + "@rolldown/binding-win32-x64-msvc@1.2.6": + optional: true + + "@rolldown/pluginutils@1.0.1": {} + + "@standard-schema/spec@1.1.0": {} + + "@swc/helpers@0.5.23": + dependencies: + tslib: 2.8.1 + + "@turbo/darwin-64@2.10.12": + optional: true + + "@turbo/darwin-arm64@2.10.12": + optional: true + + "@turbo/linux-64@2.10.12": + optional: true + + "@turbo/linux-arm64@2.10.12": + optional: true + + "@turbo/windows-64@2.10.12": + optional: true + + "@turbo/windows-arm64@2.10.12": + 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/estree@1.0.9": {} + + "@types/json-schema@7.0.15": {} + + "@types/node@22.20.1": + dependencies: + undici-types: 6.21.0 + + "@types/react-dom@19.2.5(@types/react@19.2.18)": + dependencies: + "@types/react": 19.2.18 + + "@types/react@19.2.18": + dependencies: + csstype: 3.2.3 + + "@typescript-eslint/eslint-plugin@8.68.0(@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0))(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0)": + dependencies: + "@eslint-community/regexpp": 4.12.2 + "@typescript-eslint/parser": 8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + "@typescript-eslint/scope-manager": 8.68.0 + "@typescript-eslint/type-utils": 8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + "@typescript-eslint/utils": 8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + "@typescript-eslint/visitor-keys": 8.68.0 + eslint: 9.39.5(supports-color@7.2.0) + ignore: 7.0.7 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) + typescript: "@typescript/typescript6@6.0.2" + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0)": + dependencies: + "@typescript-eslint/scope-manager": 8.68.0 + "@typescript-eslint/types": 8.68.0 + "@typescript-eslint/typescript-estree": 8.68.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0) + "@typescript-eslint/visitor-keys": 8.68.0 + debug: 4.4.3(supports-color@7.2.0) + eslint: 9.39.5(supports-color@7.2.0) + typescript: "@typescript/typescript6@6.0.2" + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/project-service@8.58.2(@typescript/typescript6@6.0.2)(supports-color@7.2.0)": + dependencies: + "@typescript-eslint/tsconfig-utils": 8.58.2(@typescript/typescript6@6.0.2) + "@typescript-eslint/types": 8.58.2 + debug: 4.4.3(supports-color@7.2.0) + typescript: "@typescript/typescript6@6.0.2" + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/project-service@8.68.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0)": + dependencies: + "@typescript-eslint/tsconfig-utils": 8.68.0(@typescript/typescript6@6.0.2) + "@typescript-eslint/types": 8.68.0 + debug: 4.4.3(supports-color@7.2.0) + typescript: "@typescript/typescript6@6.0.2" + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/scope-manager@8.58.2": + dependencies: + "@typescript-eslint/types": 8.58.2 + "@typescript-eslint/visitor-keys": 8.58.2 + + "@typescript-eslint/scope-manager@8.68.0": + dependencies: + "@typescript-eslint/types": 8.68.0 + "@typescript-eslint/visitor-keys": 8.68.0 + + "@typescript-eslint/tsconfig-utils@8.58.2(@typescript/typescript6@6.0.2)": + dependencies: + typescript: "@typescript/typescript6@6.0.2" + + "@typescript-eslint/tsconfig-utils@8.68.0(@typescript/typescript6@6.0.2)": + dependencies: + typescript: "@typescript/typescript6@6.0.2" + + "@typescript-eslint/type-utils@8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0)": + dependencies: + "@typescript-eslint/types": 8.68.0 + "@typescript-eslint/typescript-estree": 8.68.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0) + "@typescript-eslint/utils": 8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + debug: 4.4.3(supports-color@7.2.0) + eslint: 9.39.5(supports-color@7.2.0) + ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) + typescript: "@typescript/typescript6@6.0.2" + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/types@8.58.2": {} + + "@typescript-eslint/types@8.68.0": {} + + "@typescript-eslint/typescript-estree@8.58.2(@typescript/typescript6@6.0.2)(supports-color@7.2.0)": + dependencies: + "@typescript-eslint/project-service": 8.58.2(@typescript/typescript6@6.0.2)(supports-color@7.2.0) + "@typescript-eslint/tsconfig-utils": 8.58.2(@typescript/typescript6@6.0.2) + "@typescript-eslint/types": 8.58.2 + "@typescript-eslint/visitor-keys": 8.58.2 + debug: 4.4.3(supports-color@7.2.0) + minimatch: 10.2.6 + semver: 7.8.5 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) + typescript: "@typescript/typescript6@6.0.2" + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/typescript-estree@8.68.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0)": + dependencies: + "@typescript-eslint/project-service": 8.68.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0) + "@typescript-eslint/tsconfig-utils": 8.68.0(@typescript/typescript6@6.0.2) + "@typescript-eslint/types": 8.68.0 + "@typescript-eslint/visitor-keys": 8.68.0 + debug: 4.4.3(supports-color@7.2.0) + minimatch: 10.2.6 + semver: 7.8.5 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) + typescript: "@typescript/typescript6@6.0.2" + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/utils@8.58.2(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0)": + dependencies: + "@eslint-community/eslint-utils": 4.10.1(eslint@9.39.5(supports-color@7.2.0)) + "@typescript-eslint/scope-manager": 8.58.2 + "@typescript-eslint/types": 8.58.2 + "@typescript-eslint/typescript-estree": 8.58.2(@typescript/typescript6@6.0.2)(supports-color@7.2.0) + eslint: 9.39.5(supports-color@7.2.0) + typescript: "@typescript/typescript6@6.0.2" + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/utils@8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0)": + dependencies: + "@eslint-community/eslint-utils": 4.10.1(eslint@9.39.5(supports-color@7.2.0)) + "@typescript-eslint/scope-manager": 8.68.0 + "@typescript-eslint/types": 8.68.0 + "@typescript-eslint/typescript-estree": 8.68.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0) + eslint: 9.39.5(supports-color@7.2.0) + typescript: "@typescript/typescript6@6.0.2" + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/visitor-keys@8.58.2": + dependencies: + "@typescript-eslint/types": 8.58.2 + eslint-visitor-keys: 5.0.1 + + "@typescript-eslint/visitor-keys@8.68.0": + dependencies: + "@typescript-eslint/types": 8.68.0 + eslint-visitor-keys: 5.0.1 + + "@typescript/typescript-aix-ppc64@7.0.2": + optional: true + + "@typescript/typescript-darwin-arm64@7.0.2": + optional: true + + "@typescript/typescript-darwin-x64@7.0.2": + optional: true + + "@typescript/typescript-freebsd-arm64@7.0.2": + optional: true + + "@typescript/typescript-freebsd-x64@7.0.2": + optional: true + + "@typescript/typescript-linux-arm64@7.0.2": + optional: true + + "@typescript/typescript-linux-arm@7.0.2": + optional: true + + "@typescript/typescript-linux-loong64@7.0.2": + optional: true + + "@typescript/typescript-linux-mips64el@7.0.2": + optional: true + + "@typescript/typescript-linux-ppc64@7.0.2": + optional: true + + "@typescript/typescript-linux-riscv64@7.0.2": + optional: true + + "@typescript/typescript-linux-s390x@7.0.2": + optional: true + + "@typescript/typescript-linux-x64@7.0.2": + optional: true + + "@typescript/typescript-netbsd-arm64@7.0.2": + optional: true + + "@typescript/typescript-netbsd-x64@7.0.2": + optional: true + + "@typescript/typescript-openbsd-arm64@7.0.2": + optional: true + + "@typescript/typescript-openbsd-x64@7.0.2": + optional: true + + "@typescript/typescript-sunos-x64@7.0.2": + optional: true + + "@typescript/typescript-win32-arm64@7.0.2": + optional: true + + "@typescript/typescript-win32-x64@7.0.2": + optional: true + + "@typescript/typescript6@6.0.2": + dependencies: + "@typescript/old": typescript@6.0.3 + + "@vitest/coverage-v8@4.1.11(vitest@4.1.11)": + dependencies: + "@bcoe/v8-coverage": 1.0.2 + "@vitest/utils": 4.1.11 + ast-v8-to-istanbul: 1.0.5 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.2.0 + magicast: 0.5.4 + obug: 2.1.4 + std-env: 4.2.0 + tinyrainbow: 3.1.1 + vitest: 4.1.11(@types/node@22.20.1)(@vitest/coverage-v8@4.1.11)(vite@8.2.2(@types/node@22.20.1)(esbuild@0.27.0)) + + "@vitest/expect@4.1.11": + dependencies: + "@standard-schema/spec": 1.1.0 + "@types/chai": 5.2.3 + "@vitest/spy": 4.1.11 + "@vitest/utils": 4.1.11 + chai: 6.2.2 + tinyrainbow: 3.1.1 + + "@vitest/mocker@4.1.11(vite@8.2.2(@types/node@22.20.1)(esbuild@0.27.0))": + dependencies: + "@vitest/spy": 4.1.11 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.2.2(@types/node@22.20.1)(esbuild@0.27.0) + + "@vitest/pretty-format@4.1.11": + dependencies: + tinyrainbow: 3.1.1 + + "@vitest/runner@4.1.11": + dependencies: + "@vitest/utils": 4.1.11 + pathe: 2.0.3 + + "@vitest/snapshot@4.1.11": + dependencies: + "@vitest/pretty-format": 4.1.11 + "@vitest/utils": 4.1.11 + magic-string: 0.30.21 + pathe: 2.0.3 + + "@vitest/spy@4.1.11": {} + + "@vitest/utils@4.1.11": + dependencies: + "@vitest/pretty-format": 4.1.11 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.1 + + "@vllnt/eslint-config@1.0.1(@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0))(@typescript/typescript6@6.0.2)(convex@1.45.0(react@19.2.8))(eslint@9.39.5(supports-color@7.2.0))(prettier@3.9.6)(supports-color@7.2.0)(turbo@2.10.12)": + dependencies: + "@convex-dev/eslint-plugin": 1.2.2(@typescript/typescript6@6.0.2)(convex@1.45.0(react@19.2.8))(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + "@eslint/js": 9.39.5 + "@next/eslint-plugin-next": 16.3.3(eslint@9.39.5(supports-color@7.2.0)) + eslint: 9.39.5(supports-color@7.2.0) + eslint-config-prettier: 10.1.8(eslint@9.39.5(supports-color@7.2.0)) + eslint-plugin-boundaries: 5.4.0(@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0))(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + eslint-plugin-css-modules: 2.12.0(eslint@9.39.5(supports-color@7.2.0)) + eslint-plugin-functional: 9.0.5(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.5(supports-color@7.2.0)) + eslint-plugin-perfectionist: 5.10.1(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + eslint-plugin-prettier: 5.5.6(eslint-config-prettier@10.1.8(eslint@9.39.5(supports-color@7.2.0)))(eslint@9.39.5(supports-color@7.2.0))(prettier@3.9.6) + eslint-plugin-react: 7.37.5(eslint@9.39.5(supports-color@7.2.0)) + eslint-plugin-react-hooks: 7.1.1(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + eslint-plugin-simple-import-sort: 12.1.1(eslint@9.39.5(supports-color@7.2.0)) + eslint-plugin-turbo: 2.10.12(eslint@9.39.5(supports-color@7.2.0))(turbo@2.10.12) + eslint-plugin-unicorn: 62.0.0(eslint@9.39.5(supports-color@7.2.0)) + eslint-plugin-write-good-comments: 0.2.0 + prettier: 3.9.6 + typescript-eslint: 8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + optionalDependencies: + typescript: "@typescript/typescript6@6.0.2" + transitivePeerDependencies: + - "@types/eslint" + - "@typescript-eslint/parser" + - convex + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + - turbo + + acorn-jsx@5.3.2(acorn@8.18.0): + dependencies: + acorn: 8.18.0 + + acorn@8.18.0: {} + + adverb-where@0.2.6: {} + + 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@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-includes@3.1.9: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + math-intrinsics: 1.1.0 + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-shim-unscopables: 1.1.0 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-shim-unscopables: 1.1.0 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-shim-unscopables: 1.1.0 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-shim-unscopables: 1.1.0 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + assertion-error@2.0.1: {} + + ast-types-flow@0.0.8: {} + + ast-v8-to-istanbul@1.0.5: + dependencies: + "@jridgewell/trace-mapping": 0.3.31 + estree-walker: 3.0.3 + js-tokens: 10.0.0 + + async-function@1.0.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + axe-core@4.13.0: {} + + axobject-query@4.1.0: {} + + balanced-match@1.0.2: {} + + balanced-match@4.0.4: {} + + baseline-browser-mapping@2.11.20: {} + + brace-expansion@1.1.18: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@5.0.9: + dependencies: + balanced-match: 4.0.4 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.28.8: + dependencies: + baseline-browser-mapping: 2.11.20 + caniuse-lite: 1.0.30001810 + electron-to-chromium: 1.5.416 + node-releases: 2.0.54 + update-browserslist-db: 1.3.2(browserslist@4.28.8) + + builtin-modules@5.3.0: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.9: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001810: {} + + chai@6.2.2: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + change-case@5.4.4: {} + + ci-info@4.4.0: {} + + clean-regexp@1.0.0: + dependencies: + escape-string-regexp: 1.0.5 + + client-only@0.0.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@2.20.3: {} + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + convex@1.45.0(react@19.2.8): + dependencies: + esbuild: 0.27.0 + prettier: 3.9.6 + ws: 8.21.0 + optionalDependencies: + react: 19.2.8 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + core-js-compat@3.50.0: + dependencies: + browserslist: 4.28.8 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + csstype@3.2.3: {} + + damerau-levenshtein@1.0.8: {} + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + debug@3.2.7(supports-color@7.2.0): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 7.2.0 + + debug@4.4.3(supports-color@7.2.0): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 7.2.0 + + deep-is@0.1.4: {} + + deepmerge-ts@7.1.6: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + detect-libc@2.1.2: {} + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + dotenv@16.0.3: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + e-prime@0.10.4: {} + + electron-to-chromium@1.5.416: {} + + emoji-regex@9.2.2: {} + + es-abstract-get@1.0.0: + dependencies: + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + is-callable: 1.2.7 + object-inspect: 1.13.4 + + es-abstract@1.24.2: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.4 + function.prototype.name: 1.2.0 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.2 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.4 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.11 + string.prototype.trimend: 1.0.10 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.8 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.22 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-iterator-helpers@1.4.0: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-set-tostringtag: 2.1.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + math-intrinsics: 1.1.0 + + es-module-lexer@2.3.2: {} + + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.4 + + es-to-primitive@1.3.4: + dependencies: + es-abstract-get: 1.0.0 + es-define-property: 1.0.1 + es-errors: 1.3.0 + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + esbuild@0.27.0: + optionalDependencies: + "@esbuild/aix-ppc64": 0.27.0 + "@esbuild/android-arm": 0.27.0 + "@esbuild/android-arm64": 0.27.0 + "@esbuild/android-x64": 0.27.0 + "@esbuild/darwin-arm64": 0.27.0 + "@esbuild/darwin-x64": 0.27.0 + "@esbuild/freebsd-arm64": 0.27.0 + "@esbuild/freebsd-x64": 0.27.0 + "@esbuild/linux-arm": 0.27.0 + "@esbuild/linux-arm64": 0.27.0 + "@esbuild/linux-ia32": 0.27.0 + "@esbuild/linux-loong64": 0.27.0 + "@esbuild/linux-mips64el": 0.27.0 + "@esbuild/linux-ppc64": 0.27.0 + "@esbuild/linux-riscv64": 0.27.0 + "@esbuild/linux-s390x": 0.27.0 + "@esbuild/linux-x64": 0.27.0 + "@esbuild/netbsd-arm64": 0.27.0 + "@esbuild/netbsd-x64": 0.27.0 + "@esbuild/openbsd-arm64": 0.27.0 + "@esbuild/openbsd-x64": 0.27.0 + "@esbuild/openharmony-arm64": 0.27.0 + "@esbuild/sunos-x64": 0.27.0 + "@esbuild/win32-arm64": 0.27.0 + "@esbuild/win32-ia32": 0.27.0 + "@esbuild/win32-x64": 0.27.0 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + eslint-config-prettier@10.1.8(eslint@9.39.5(supports-color@7.2.0)): + dependencies: + eslint: 9.39.5(supports-color@7.2.0) + + eslint-import-resolver-node@0.3.9(supports-color@7.2.0): + dependencies: + debug: 3.2.7(supports-color@7.2.0) + is-core-module: 2.16.2 + resolve: 1.22.12 + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0))(eslint-import-resolver-node@0.3.9(supports-color@7.2.0))(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0): + dependencies: + debug: 3.2.7(supports-color@7.2.0) + optionalDependencies: + "@typescript-eslint/parser": 8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + eslint: 9.39.5(supports-color@7.2.0) + eslint-import-resolver-node: 0.3.9(supports-color@7.2.0) + transitivePeerDependencies: + - supports-color + + eslint-plugin-boundaries@5.4.0(@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0))(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0): + dependencies: + "@boundaries/elements": 1.2.0(@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0))(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + chalk: 4.1.2 + eslint: 9.39.5(supports-color@7.2.0) + eslint-import-resolver-node: 0.3.9(supports-color@7.2.0) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0))(eslint-import-resolver-node@0.3.9(supports-color@7.2.0))(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + micromatch: 4.0.8 + transitivePeerDependencies: + - "@typescript-eslint/parser" + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-css-modules@2.12.0(eslint@9.39.5(supports-color@7.2.0)): + dependencies: + eslint: 9.39.5(supports-color@7.2.0) + gonzales-pe: 4.3.0 + lodash: 4.18.1 + + eslint-plugin-functional@9.0.5(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0): + dependencies: + "@typescript-eslint/utils": 8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + deepmerge-ts: 7.1.6 + escape-string-regexp: 5.0.0 + eslint: 9.39.5(supports-color@7.2.0) + is-immutable-type: 5.0.4(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) + ts-declaration-location: 1.0.7(@typescript/typescript6@6.0.2) + optionalDependencies: + typescript: "@typescript/typescript6@6.0.2" + transitivePeerDependencies: + - supports-color + + eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.5(supports-color@7.2.0)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.13.0 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.39.5(supports-color@7.2.0) + hasown: 2.0.4 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.5 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + + eslint-plugin-perfectionist@5.10.1(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0): + dependencies: + "@typescript-eslint/utils": 8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + eslint: 9.39.5(supports-color@7.2.0) + natural-orderby: 5.0.0 + transitivePeerDependencies: + - supports-color + - typescript + + eslint-plugin-prettier@5.5.6(eslint-config-prettier@10.1.8(eslint@9.39.5(supports-color@7.2.0)))(eslint@9.39.5(supports-color@7.2.0))(prettier@3.9.6): + dependencies: + eslint: 9.39.5(supports-color@7.2.0) + prettier: 3.9.6 + prettier-linter-helpers: 1.0.1 + synckit: 0.11.13 + optionalDependencies: + eslint-config-prettier: 10.1.8(eslint@9.39.5(supports-color@7.2.0)) + + eslint-plugin-react-hooks@7.1.1(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0): + dependencies: + "@babel/core": 7.29.7(supports-color@7.2.0) + "@babel/parser": 7.29.8 + eslint: 9.39.5(supports-color@7.2.0) + hermes-parser: 0.25.1 + zod: 4.5.4 + zod-validation-error: 4.0.2(zod@4.5.4) + transitivePeerDependencies: + - supports-color + + eslint-plugin-react@7.37.5(eslint@9.39.5(supports-color@7.2.0)): + dependencies: + array-includes: 3.1.9 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.4.0 + eslint: 9.39.5(supports-color@7.2.0) + estraverse: 5.3.0 + hasown: 2.0.4 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.5 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.7 + semver: 6.3.1 + string.prototype.matchall: 4.1.0 + string.prototype.repeat: 1.0.0 + + eslint-plugin-simple-import-sort@12.1.1(eslint@9.39.5(supports-color@7.2.0)): + dependencies: + eslint: 9.39.5(supports-color@7.2.0) + + eslint-plugin-turbo@2.10.12(eslint@9.39.5(supports-color@7.2.0))(turbo@2.10.12): + dependencies: + dotenv: 16.0.3 + eslint: 9.39.5(supports-color@7.2.0) + turbo: 2.10.12 + + eslint-plugin-unicorn@62.0.0(eslint@9.39.5(supports-color@7.2.0)): + dependencies: + "@babel/helper-validator-identifier": 7.29.7 + "@eslint-community/eslint-utils": 4.10.1(eslint@9.39.5(supports-color@7.2.0)) + "@eslint/plugin-kit": 0.4.1 + change-case: 5.4.4 + ci-info: 4.4.0 + clean-regexp: 1.0.0 + core-js-compat: 3.50.0 + eslint: 9.39.5(supports-color@7.2.0) + esquery: 1.7.0 + find-up-simple: 1.0.1 + globals: 16.5.0 + indent-string: 5.0.0 + is-builtin-module: 5.0.0 + jsesc: 3.1.0 + pluralize: 8.0.0 + regexp-tree: 0.1.27 + regjsparser: 0.13.2 + semver: 7.8.5 + strip-indent: 4.1.1 + + eslint-plugin-write-good-comments@0.2.0: + dependencies: + requireindex: 1.1.0 + write-good: 1.0.8 + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@9.39.5(supports-color@7.2.0): + dependencies: + "@eslint-community/eslint-utils": 4.10.1(eslint@9.39.5(supports-color@7.2.0)) + "@eslint-community/regexpp": 4.12.2 + "@eslint/config-array": 0.21.2(supports-color@7.2.0) + "@eslint/config-helpers": 0.4.2 + "@eslint/core": 0.17.0 + "@eslint/eslintrc": 3.3.6(supports-color@7.2.0) + "@eslint/js": 9.39.5 + "@eslint/plugin-kit": 0.4.1 + "@humanfs/node": 0.16.8 + "@humanwhocodes/module-importer": 1.0.1 + "@humanwhocodes/retry": 0.4.3 + "@types/estree": 1.0.9 + ajv: 6.15.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@7.2.0) + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.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 + lodash.merge: 4.6.2 + minimatch: 3.1.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) + eslint-visitor-keys: 4.2.1 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@3.0.3: + dependencies: + "@types/estree": 1.0.9 + + esutils@2.0.3: {} + + expect-type@1.4.0: {} + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.1: + dependencies: + "@nodelib/fs.stat": 2.0.5 + "@nodelib/fs.walk": 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.20.3: + dependencies: + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.7): + optionalDependencies: + picomatch: 4.0.7 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up-simple@1.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.4 + keyv: 4.5.4 + + flatted@3.4.4: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.2.0: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + es-define-property: 1.0.1 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + hasown: 2.0.4 + is-callable: 1.2.7 + is-document.all: 1.0.0 + + functions-have-names@1.2.3: {} + + generator-function@2.0.1: {} + + gensync@1.0.0-beta.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@14.0.0: {} + + globals@16.5.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + gonzales-pe@4.3.0: + dependencies: + minimist: 1.2.8 + + gopd@1.2.0: {} + + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + + has-bigints@1.1.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + + 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: {} + + ignore@7.0.7: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + indent-string@5.0.0: {} + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.4 + side-channel: 1.1.1 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-builtin-module@5.0.0: + dependencies: + builtin-modules: 5.3.0 + + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.4 + + is-core-module@2.16.2: + dependencies: + hasown: 2.0.4 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-document.all@1.0.0: + dependencies: + call-bound: 1.0.4 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-generator-function@1.1.2: + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-immutable-type@5.0.4(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0): + dependencies: + "@typescript-eslint/type-utils": 8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + eslint: 9.39.5(supports-color@7.2.0) + ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) + ts-declaration-location: 1.0.7(@typescript/typescript6@6.0.2) + typescript: "@typescript/typescript6@6.0.2" + transitivePeerDependencies: + - supports-color + + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.22 + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + 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 + + iterator.prototype@1.1.5: + dependencies: + define-data-property: 1.1.4 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + has-symbols: 1.1.0 + set-function-name: 2.0.2 + + js-tokens@10.0.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.3.2: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.9 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lightningcss-android-arm64@1.33.0: + optional: true + + lightningcss-darwin-arm64@1.33.0: + optional: true + + lightningcss-darwin-x64@1.33.0: + optional: true + + lightningcss-freebsd-x64@1.33.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.33.0: + optional: true + + lightningcss-linux-arm64-gnu@1.33.0: + optional: true + + lightningcss-linux-arm64-musl@1.33.0: + optional: true + + lightningcss-linux-x64-gnu@1.33.0: + optional: true + + lightningcss-linux-x64-musl@1.33.0: + optional: true + + lightningcss-win32-arm64-msvc@1.33.0: + optional: true + + lightningcss-win32-x64-msvc@1.33.0: + optional: true + + lightningcss@1.33.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + lodash@4.18.1: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.30.21: + dependencies: + "@jridgewell/sourcemap-codec": 1.6.0 + + magicast@0.5.4: + dependencies: + "@babel/parser": 7.29.8 + "@babel/types": 7.29.8 + source-map-js: 1.2.1 + + make-dir@4.0.0: + dependencies: + semver: 7.8.5 + + math-intrinsics@1.1.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + + minimatch@10.2.6: + dependencies: + brace-expansion: 5.0.9 + + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.18 + + minimist@1.2.8: {} + + ms@2.1.3: {} + + nanoid@3.3.18: {} + + natural-compare@1.4.0: {} + + natural-orderby@5.0.0: {} + + neo-async@2.6.2: {} + + next@16.3.3(@babel/core@7.29.7(supports-color@7.2.0))(@types/node@22.20.1)(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + dependencies: + "@next/env": 16.3.3 + "@swc/helpers": 0.5.23 + baseline-browser-mapping: 2.11.20 + caniuse-lite: 1.0.30001810 + postcss: 8.5.23 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + styled-jsx: 5.1.6(@babel/core@7.29.7(supports-color@7.2.0))(react@19.2.8) + optionalDependencies: + "@next/swc-darwin-arm64": 16.3.3 + "@next/swc-darwin-x64": 16.3.3 + "@next/swc-linux-arm64-gnu": 16.3.3 + "@next/swc-linux-arm64-musl": 16.3.3 + "@next/swc-linux-x64-gnu": 16.3.3 + "@next/swc-linux-x64-musl": 16.3.3 + "@next/swc-win32-arm64-msvc": 16.3.3 + "@next/swc-win32-x64-msvc": 16.3.3 + sharp: 0.35.4(@types/node@22.20.1) + transitivePeerDependencies: + - "@babel/core" + - "@types/node" + - babel-plugin-macros + + no-cliches@0.3.6: {} + + node-exports-info@1.6.2: + dependencies: + array.prototype.flatmap: 1.3.3 + es-errors: 1.3.0 + object.entries: 1.1.9 + semver: 6.3.1 + + node-releases@2.0.54: {} + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.entries@1.1.9: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + obug@2.1.4: {} + + 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 + + own-keys@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + passive-voice@0.1.0: {} + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + pathe@2.0.3: {} + + picocolors@1.1.1: {} + + picomatch@2.3.2: {} + + picomatch@4.0.7: {} + + pluralize@8.0.0: {} + + possible-typed-array-names@1.1.0: {} + + postcss@8.5.23: + dependencies: + nanoid: 3.3.18 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.26: + dependencies: + nanoid: 3.3.18 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.1: + dependencies: + fast-diff: 1.3.0 + + prettier@3.9.6: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + react-dom@19.2.8(react@19.2.8): + dependencies: + react: 19.2.8 + scheduler: 0.27.0 + + react-is@16.13.1: {} + + react@19.2.8: {} + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regexp-tree@0.1.27: {} + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + regjsparser@0.13.2: + dependencies: + jsesc: 3.1.0 + + requireindex@1.1.0: {} + + resolve-from@4.0.0: {} + + resolve@1.22.12: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.2 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@2.0.0-next.7: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.2 + node-exports-info: 1.6.2 + object-keys: 1.1.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.1.0: {} + + rolldown@1.2.6: + dependencies: + "@oxc-project/types": 0.147.0 + "@rolldown/pluginutils": 1.0.1 + optionalDependencies: + "@rolldown/binding-android-arm-eabi": 1.2.6 + "@rolldown/binding-android-arm64": 1.2.6 + "@rolldown/binding-darwin-arm64": 1.2.6 + "@rolldown/binding-darwin-x64": 1.2.6 + "@rolldown/binding-freebsd-x64": 1.2.6 + "@rolldown/binding-linux-arm-gnueabihf": 1.2.6 + "@rolldown/binding-linux-arm64-gnu": 1.2.6 + "@rolldown/binding-linux-arm64-musl": 1.2.6 + "@rolldown/binding-linux-ppc64-gnu": 1.2.6 + "@rolldown/binding-linux-s390x-gnu": 1.2.6 + "@rolldown/binding-linux-x64-gnu": 1.2.6 + "@rolldown/binding-linux-x64-musl": 1.2.6 + "@rolldown/binding-openharmony-arm64": 1.2.6 + "@rolldown/binding-win32-arm64-msvc": 1.2.6 + "@rolldown/binding-win32-x64-msvc": 1.2.6 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-array-concat@1.1.4: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + scheduler@0.27.0: {} + + semver@6.3.1: {} + + semver@7.8.5: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + + sharp@0.35.4(@types/node@22.20.1): + dependencies: + "@img/colour": 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.5 + optionalDependencies: + "@img/sharp-darwin-arm64": 0.35.4 + "@img/sharp-darwin-x64": 0.35.4 + "@img/sharp-freebsd-wasm32": 0.35.4 + "@img/sharp-libvips-darwin-arm64": 1.3.3 + "@img/sharp-libvips-darwin-x64": 1.3.3 + "@img/sharp-libvips-linux-arm": 1.3.3 + "@img/sharp-libvips-linux-arm64": 1.3.3 + "@img/sharp-libvips-linux-ppc64": 1.3.3 + "@img/sharp-libvips-linux-riscv64": 1.3.3 + "@img/sharp-libvips-linux-s390x": 1.3.3 + "@img/sharp-libvips-linux-x64": 1.3.3 + "@img/sharp-libvips-linuxmusl-arm64": 1.3.3 + "@img/sharp-libvips-linuxmusl-x64": 1.3.3 + "@img/sharp-linux-arm": 0.35.4 + "@img/sharp-linux-arm64": 0.35.4 + "@img/sharp-linux-ppc64": 0.35.4 + "@img/sharp-linux-riscv64": 0.35.4 + "@img/sharp-linux-s390x": 0.35.4 + "@img/sharp-linux-x64": 0.35.4 + "@img/sharp-linuxmusl-arm64": 0.35.4 + "@img/sharp-linuxmusl-x64": 0.35.4 + "@img/sharp-webcontainers-wasm32": 0.35.4 + "@img/sharp-win32-arm64": 0.35.4 + "@img/sharp-win32-ia32": 0.35.4 + "@img/sharp-win32-x64": 0.35.4 + "@types/node": 22.20.1 + optional: true + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + siginfo@2.0.0: {} + + source-map-js@1.2.1: {} + + source-map@0.6.1: {} + + stackback@0.0.2: {} + + std-env@4.2.0: {} + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + string.prototype.includes@2.0.1: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + + string.prototype.matchall@4.1.0: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.1 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.24.2 + + string.prototype.trim@1.2.11: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + has-property-descriptors: 1.0.2 + safe-regex-test: 1.1.0 + + string.prototype.trimend@1.0.10: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + strip-indent@4.1.1: {} + + strip-json-comments@3.1.1: {} + + styled-jsx@5.1.6(@babel/core@7.29.7(supports-color@7.2.0))(react@19.2.8): + dependencies: + client-only: 0.0.1 + react: 19.2.8 + optionalDependencies: + "@babel/core": 7.29.7(supports-color@7.2.0) + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + synckit@0.11.13: + dependencies: + "@pkgr/core": 0.3.6 + + tinybench@2.9.0: {} + + tinyexec@1.3.0: {} + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 + + tinyrainbow@3.1.1: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + too-wordy@0.3.6: {} + + ts-api-utils@2.5.0(@typescript/typescript6@6.0.2): + dependencies: + typescript: "@typescript/typescript6@6.0.2" + + ts-declaration-location@1.0.7(@typescript/typescript6@6.0.2): + dependencies: + picomatch: 4.0.7 + typescript: "@typescript/typescript6@6.0.2" + + tslib@2.8.1: {} + + turbo@2.10.12: + optionalDependencies: + "@turbo/darwin-64": 2.10.12 + "@turbo/darwin-arm64": 2.10.12 + "@turbo/linux-64": 2.10.12 + "@turbo/linux-arm64": 2.10.12 + "@turbo/windows-64": 2.10.12 + "@turbo/windows-arm64": 2.10.12 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.8: + dependencies: + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typescript-eslint@8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0): + dependencies: + "@typescript-eslint/eslint-plugin": 8.68.0(@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0))(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + "@typescript-eslint/parser": 8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + "@typescript-eslint/typescript-estree": 8.68.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0) + "@typescript-eslint/utils": 8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) + eslint: 9.39.5(supports-color@7.2.0) + typescript: "@typescript/typescript6@6.0.2" + transitivePeerDependencies: + - supports-color + + typescript@6.0.3: {} + + typescript@7.0.2: + optionalDependencies: + "@typescript/typescript-aix-ppc64": 7.0.2 + "@typescript/typescript-darwin-arm64": 7.0.2 + "@typescript/typescript-darwin-x64": 7.0.2 + "@typescript/typescript-freebsd-arm64": 7.0.2 + "@typescript/typescript-freebsd-x64": 7.0.2 + "@typescript/typescript-linux-arm": 7.0.2 + "@typescript/typescript-linux-arm64": 7.0.2 + "@typescript/typescript-linux-loong64": 7.0.2 + "@typescript/typescript-linux-mips64el": 7.0.2 + "@typescript/typescript-linux-ppc64": 7.0.2 + "@typescript/typescript-linux-riscv64": 7.0.2 + "@typescript/typescript-linux-s390x": 7.0.2 + "@typescript/typescript-linux-x64": 7.0.2 + "@typescript/typescript-netbsd-arm64": 7.0.2 + "@typescript/typescript-netbsd-x64": 7.0.2 + "@typescript/typescript-openbsd-arm64": 7.0.2 + "@typescript/typescript-openbsd-x64": 7.0.2 + "@typescript/typescript-sunos-x64": 7.0.2 + "@typescript/typescript-win32-arm64": 7.0.2 + "@typescript/typescript-win32-x64": 7.0.2 + + uglify-js@3.19.3: + optional: true + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + undici-types@6.21.0: {} + + update-browserslist-db@1.3.2(browserslist@4.28.8): + dependencies: + browserslist: 4.28.8 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + vite@8.2.2(@types/node@22.20.1)(esbuild@0.27.0): + dependencies: + lightningcss: 1.33.0 + picomatch: 4.0.7 + postcss: 8.5.26 + rolldown: 1.2.6 + tinyglobby: 0.2.17 + optionalDependencies: + "@types/node": 22.20.1 + esbuild: 0.27.0 + fsevents: 2.3.3 + + vitest@4.1.11(@types/node@22.20.1)(@vitest/coverage-v8@4.1.11)(vite@8.2.2(@types/node@22.20.1)(esbuild@0.27.0)): + dependencies: + "@vitest/expect": 4.1.11 + "@vitest/mocker": 4.1.11(vite@8.2.2(@types/node@22.20.1)(esbuild@0.27.0)) + "@vitest/pretty-format": 4.1.11 + "@vitest/runner": 4.1.11 + "@vitest/snapshot": 4.1.11 + "@vitest/spy": 4.1.11 + "@vitest/utils": 4.1.11 + es-module-lexer: 2.3.2 + expect-type: 1.4.0 + magic-string: 0.30.21 + obug: 2.1.4 + pathe: 2.0.3 + picomatch: 4.0.7 + std-env: 4.2.0 + tinybench: 2.9.0 + tinyexec: 1.3.0 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.1 + vite: 8.2.2(@types/node@22.20.1)(esbuild@0.27.0) + why-is-node-running: 2.3.0 + optionalDependencies: + "@types/node": 22.20.1 + "@vitest/coverage-v8": 4.1.11(vitest@4.1.11) + transitivePeerDependencies: + - msw + + weasel-words@0.1.1: {} + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.2.0 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.22 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.22: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + word-wrap@1.2.5: {} + + wordwrap@1.0.0: {} + + write-good@1.0.8: + dependencies: + adverb-where: 0.2.6 + commander: 2.20.3 + e-prime: 0.10.4 + no-cliches: 0.3.6 + passive-voice: 0.1.0 + too-wordy: 0.3.6 + weasel-words: 0.1.1 + + ws@8.21.0: {} + + yallist@3.1.1: {} + + yocto-queue@0.1.0: {} + + zod-validation-error@4.0.2(zod@4.5.4): + dependencies: + zod: 4.5.4 + + zod@4.5.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..03f1886 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,5 @@ +packages: + - tests/integration/* + +allowBuilds: + esbuild: true diff --git a/scripts/test-utils.mjs b/scripts/test-utils.mjs new file mode 100644 index 0000000..07212ea --- /dev/null +++ b/scripts/test-utils.mjs @@ -0,0 +1,59 @@ +import { spawnSync } from "node:child_process"; +import { readFileSync } from "node:fs"; +import { createRequire } from "node:module"; +import { dirname, join } from "node:path"; +import process from "node:process"; +import { fileURLToPath } from "node:url"; + +const require = createRequire(import.meta.url); + +export const root = join(dirname(fileURLToPath(import.meta.url)), ".."); +export const fixtures = join(root, "tests", "fixtures"); +export const presets = ["base", "nextjs", "node-library", "nodejs", "react"]; +export const compilers = [ + { + binary: "tsc6", + label: "TypeScript 6", + packageName: "typescript", + versionPrefix: "Version 6.", + }, + { + binary: "tsc", + label: "TypeScript 7", + packageName: "@typescript/native", + versionPrefix: "Version 7.", + }, +]; + +export function loadJson(path) { + return JSON.parse(readFileSync(path, "utf8")); +} + +export function compilerPath(compiler) { + const packagePath = require.resolve(`${compiler.packageName}/package.json`); + const packageJson = loadJson(packagePath); + return join(dirname(packagePath), packageJson.bin[compiler.binary]); +} + +export function run(command, args, options = {}) { + const result = spawnSync(command, args, { + cwd: options.cwd ?? root, + encoding: "utf8", + timeout: options.timeout ?? 60_000, + }); + + if (result.error) { + throw result.error; + } + if (result.status !== 0) { + throw new Error( + `${command} ${args.join(" ")} failed with status ${result.status}:\n${result.stdout}${result.stderr}`, + ); + } + + return result.stdout.trim(); +} + +export function runCompiler(compiler, args, options) { + return run(process.execPath, [compilerPath(compiler), ...args], options); +} diff --git a/tests/configs.test.mjs b/tests/configs.test.mjs new file mode 100644 index 0000000..06f3caa --- /dev/null +++ b/tests/configs.test.mjs @@ -0,0 +1,198 @@ +import { + mkdirSync, + mkdtempSync, + readdirSync, + rmSync, + writeFileSync, +} from "node:fs"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import process from "node:process"; + +import { describe, expect, test } from "vitest"; + +import { + compilers, + fixtures, + loadJson, + presets, + root, + run, + runCompiler, +} from "../scripts/test-utils.mjs"; + +const packageJson = loadJson(join(root, "package.json")); +const expectedPackageFiles = [ + "base.json", + "CHANGELOG.md", + "LICENSE", + "llms-full.txt", + "llms.txt", + "nextjs.json", + "node-library.json", + "nodejs.json", + "package.json", + "react.json", + "README.md", +]; + +describe("public presets", () => { + test("are valid, published, and derived from the base preset", () => { + for (const preset of presets) { + const filename = `${preset}.json`; + const config = loadJson(join(root, filename)); + expect(config.compilerOptions).toBeTypeOf("object"); + expect(packageJson.files).toContain(filename); + expect(packageJson.exports[`./${filename}`]).toBe(`./${filename}`); + if (preset !== "base") { + expect(config.extends).toBe("./base.json"); + } + } + }); + + test("preserve the documented effective compiler options", () => { + const expected = { + base: { noUncheckedIndexedAccess: true, strict: true, types: [] }, + nextjs: { jsx: "preserve", moduleResolution: "bundler", noEmit: true }, + "node-library": { + declaration: true, + declarationMap: true, + module: "nodenext", + target: "es2024", + }, + nodejs: { module: "nodenext", target: "es2024" }, + react: { + jsx: "react-jsx", + moduleResolution: "bundler", + target: "es2022", + }, + }; + + for (const compiler of compilers) { + for (const preset of presets) { + const output = runCompiler(compiler, [ + "--project", + join(fixtures, preset, "tsconfig.json"), + "--showConfig", + ]); + expect(loadJsonFromOutput(output).compilerOptions).toMatchObject( + expected[preset], + ); + } + } + }); +}); + +describe.each(compilers)("$label", (compiler) => { + test("is the expected compiler major", () => { + expect(runCompiler(compiler, ["--version"])).toMatch( + compiler.versionPrefix, + ); + }); + + test("type-checks every preset fixture", () => { + const buildInfoDirectory = mkdtempSync( + join(tmpdir(), "vllnt-ts-build-info-"), + ); + try { + for (const preset of presets) { + runCompiler(compiler, [ + "--project", + join(fixtures, preset, "tsconfig.json"), + "--noEmit", + "--incremental", + "--tsBuildInfoFile", + join(buildInfoDirectory, `${preset}.tsbuildinfo`), + ]); + } + } finally { + rmSync(buildInfoDirectory, { force: true, recursive: true }); + } + }); + + test("preserves node-library emit behavior", () => { + const outputDirectory = mkdtempSync(join(tmpdir(), "vllnt-ts-library-")); + try { + runCompiler(compiler, [ + "--project", + join(fixtures, "node-library", "tsconfig.json"), + "--outDir", + outputDirectory, + ]); + expect(readdirSync(outputDirectory).sort()).toEqual([ + "index.d.ts", + "index.d.ts.map", + "index.js", + "index.js.map", + ]); + } finally { + rmSync(outputDirectory, { force: true, recursive: true }); + } + }); +}); + +test("TypeScript 6 remains available to JavaScript API consumers", async () => { + const typescript = await import("typescript"); + expect(typescript.version).toMatch(/^6\./); + expect(typescript.createProgram).toBeTypeOf("function"); +}); + +test("the package tarball has an exact public surface and resolves every preset", () => { + const temporaryRoot = mkdtempSync(join(tmpdir(), "vllnt-ts-package-")); + try { + const pack = JSON.parse( + run("pnpm", ["pack", "--json", "--pack-destination", temporaryRoot]), + ); + expect(pack.files.map(({ path }) => path).sort()).toEqual( + [...expectedPackageFiles].sort(), + ); + + const consumer = join(temporaryRoot, "consumer"); + mkdirSync(consumer); + writeFileSync( + join(consumer, "package.json"), + JSON.stringify({ + devDependencies: { + "@vllnt/typescript": `file:${pack.filename}`, + }, + packageManager: "pnpm@11.24.0", + private: true, + }), + ); + run( + "pnpm", + ["install", "--ignore-scripts", "--config.auto-install-peers=false"], + { cwd: consumer }, + ); + + for (const preset of presets) { + const project = join(consumer, preset); + mkdirSync(project); + writeFileSync(join(project, "index.ts"), "export const value = 1\n"); + writeFileSync( + join(project, "tsconfig.json"), + JSON.stringify({ + compilerOptions: { noEmit: true }, + extends: `@vllnt/typescript/${preset}.json`, + files: ["index.ts"], + }), + ); + runCompiler(compilers[1], ["--project", join(project, "tsconfig.json")], { + cwd: consumer, + }); + } + } finally { + rmSync(temporaryRoot, { force: true, recursive: true }); + } +}); + +test("command failures retain actionable diagnostics", () => { + expect(() => + run(process.execPath, ["--definitely-not-a-node-option"]), + ).toThrow(/failed with status/); + expect(() => run("vllnt-command-that-does-not-exist", [])).toThrow(); +}); + +function loadJsonFromOutput(output) { + return JSON.parse(output); +} diff --git a/tests/fixtures/base/src/index.ts b/tests/fixtures/base/src/index.ts index e2f6240..3715b0f 100644 --- a/tests/fixtures/base/src/index.ts +++ b/tests/fixtures/base/src/index.ts @@ -1,3 +1,8 @@ -const greeting: string = "hello" +const greeting: string = "hello"; +const values: string[] = []; -export { greeting } +// This must remain an error while noUncheckedIndexedAccess is inherited. +// @ts-expect-error An indexed value can be undefined. +const first: string = values[0]; + +export { first, greeting }; diff --git a/tests/fixtures/nextjs/src/jsx-runtime.d.ts b/tests/fixtures/nextjs/src/jsx-runtime.d.ts deleted file mode 100644 index 8addab5..0000000 --- a/tests/fixtures/nextjs/src/jsx-runtime.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -declare namespace JSX { - interface IntrinsicElements { - main: { - children?: unknown - } - } -} - -declare module "react/jsx-runtime" { - namespace JSX { - interface IntrinsicElements { - main: { - children?: unknown - } - } - } - - export const Fragment: unique symbol - export function jsx(type: unknown, props: unknown): unknown - export function jsxs(type: unknown, props: unknown): unknown -} diff --git a/tests/fixtures/nextjs/src/page.tsx b/tests/fixtures/nextjs/src/page.tsx index edb168e..6be707e 100644 --- a/tests/fixtures/nextjs/src/page.tsx +++ b/tests/fixtures/nextjs/src/page.tsx @@ -1,3 +1,3 @@ export default function Page() { - return
Ready
+ return
Ready
; } diff --git a/tests/fixtures/nextjs/tsconfig.json b/tests/fixtures/nextjs/tsconfig.json index 30ebc4d..2b86090 100644 --- a/tests/fixtures/nextjs/tsconfig.json +++ b/tests/fixtures/nextjs/tsconfig.json @@ -1,7 +1,8 @@ { "extends": "../../../nextjs.json", "compilerOptions": { - "rootDir": "src" + "rootDir": "src", + "types": ["node", "react"] }, "include": ["src"] } diff --git a/tests/fixtures/node-library/src/index.ts b/tests/fixtures/node-library/src/index.ts index 3ded969..cc2d359 100644 --- a/tests/fixtures/node-library/src/index.ts +++ b/tests/fixtures/node-library/src/index.ts @@ -1,3 +1,3 @@ export function double(value: number): number { - return value * 2 + return value * 2; } diff --git a/tests/fixtures/nodejs/src/index.ts b/tests/fixtures/nodejs/src/index.ts index 8627fb8..a1f4ead 100644 --- a/tests/fixtures/nodejs/src/index.ts +++ b/tests/fixtures/nodejs/src/index.ts @@ -1,3 +1,3 @@ -const environment = process.env.NODE_ENV ?? "development" +const environment = process.env.NODE_ENV ?? "development"; -export { environment } +export { environment }; diff --git a/tests/fixtures/nodejs/src/node.d.ts b/tests/fixtures/nodejs/src/node.d.ts deleted file mode 100644 index bc4f2d0..0000000 --- a/tests/fixtures/nodejs/src/node.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -declare const process: { - env: Record -} diff --git a/tests/fixtures/nodejs/tsconfig.json b/tests/fixtures/nodejs/tsconfig.json index cb3cbba..e83203a 100644 --- a/tests/fixtures/nodejs/tsconfig.json +++ b/tests/fixtures/nodejs/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../../nodejs.json", "compilerOptions": { "noEmit": true, - "rootDir": "src" + "rootDir": "src", + "types": ["node"] }, "include": ["src"] } diff --git a/tests/fixtures/react/src/index.tsx b/tests/fixtures/react/src/index.tsx index db63b9f..fad623e 100644 --- a/tests/fixtures/react/src/index.tsx +++ b/tests/fixtures/react/src/index.tsx @@ -1,3 +1,3 @@ export function Button() { - return + return ; } diff --git a/tests/fixtures/react/src/jsx-runtime.d.ts b/tests/fixtures/react/src/jsx-runtime.d.ts deleted file mode 100644 index d4358b7..0000000 --- a/tests/fixtures/react/src/jsx-runtime.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -declare module "react/jsx-runtime" { - namespace JSX { - interface IntrinsicElements { - button: { - children?: unknown - disabled?: boolean - } - } - } - - export const Fragment: unique symbol - export function jsx(type: unknown, props: unknown): unknown - export function jsxs(type: unknown, props: unknown): unknown -} diff --git a/tests/fixtures/react/tsconfig.json b/tests/fixtures/react/tsconfig.json index 17e1caf..0ddff1e 100644 --- a/tests/fixtures/react/tsconfig.json +++ b/tests/fixtures/react/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../../react.json", "compilerOptions": { "noEmit": true, - "rootDir": "src" + "rootDir": "src", + "types": ["react"] }, "include": ["src"] } diff --git a/tests/integration/nextjs/app/layout.tsx b/tests/integration/nextjs/app/layout.tsx new file mode 100644 index 0000000..e53180e --- /dev/null +++ b/tests/integration/nextjs/app/layout.tsx @@ -0,0 +1,9 @@ +import type { ReactNode } from "react"; + +export default function RootLayout({ children }: { children: ReactNode }) { + return ( + + {children} + + ); +} diff --git a/tests/integration/nextjs/app/page.tsx b/tests/integration/nextjs/app/page.tsx new file mode 100644 index 0000000..de4fb3b --- /dev/null +++ b/tests/integration/nextjs/app/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
TypeScript 7
; +} diff --git a/tests/integration/nextjs/next-env.d.ts b/tests/integration/nextjs/next-env.d.ts new file mode 100644 index 0000000..ce4e94a --- /dev/null +++ b/tests/integration/nextjs/next-env.d.ts @@ -0,0 +1,7 @@ +/// +/// +import "./.next/types/routes.d.ts"; +import "./.next/types/root-params.d.ts"; + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/tests/integration/nextjs/next.config.mjs b/tests/integration/nextjs/next.config.mjs new file mode 100644 index 0000000..ff8b4c5 --- /dev/null +++ b/tests/integration/nextjs/next.config.mjs @@ -0,0 +1 @@ +export default {}; diff --git a/tests/integration/nextjs/package.json b/tests/integration/nextjs/package.json new file mode 100644 index 0000000..5cd3b9d --- /dev/null +++ b/tests/integration/nextjs/package.json @@ -0,0 +1,17 @@ +{ + "name": "@vllnt/typescript-nextjs-integration", + "private": true, + "scripts": { + "build": "NEXT_TELEMETRY_DISABLED=1 next build" + }, + "devDependencies": { + "@vllnt/typescript": "workspace:*", + "@types/node": "22.20.1", + "@types/react": "19.2.18", + "@types/react-dom": "19.2.5", + "next": "16.3.3", + "react": "19.2.8", + "react-dom": "19.2.8", + "typescript": "7.0.2" + } +} diff --git a/tests/integration/nextjs/tsconfig.json b/tests/integration/nextjs/tsconfig.json new file mode 100644 index 0000000..2421cad --- /dev/null +++ b/tests/integration/nextjs/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../nextjs.json", + "compilerOptions": { + "rootDir": ".", + "types": ["node", "react"] + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/tests/integration/react/index.html b/tests/integration/react/index.html new file mode 100644 index 0000000..39688cc --- /dev/null +++ b/tests/integration/react/index.html @@ -0,0 +1,2 @@ +
+ diff --git a/tests/integration/react/package.json b/tests/integration/react/package.json new file mode 100644 index 0000000..9cdf281 --- /dev/null +++ b/tests/integration/react/package.json @@ -0,0 +1,16 @@ +{ + "name": "@vllnt/typescript-react-integration", + "private": true, + "scripts": { + "build": "tsc --project tsconfig.json && vite build" + }, + "devDependencies": { + "@vllnt/typescript": "workspace:*", + "@types/react": "19.2.18", + "@types/react-dom": "19.2.5", + "react": "19.2.8", + "react-dom": "19.2.8", + "typescript": "7.0.2", + "vite": "8.2.2" + } +} diff --git a/tests/integration/react/src/main.tsx b/tests/integration/react/src/main.tsx new file mode 100644 index 0000000..d0c7201 --- /dev/null +++ b/tests/integration/react/src/main.tsx @@ -0,0 +1,14 @@ +import { StrictMode } from "react"; + +import { createRoot } from "react-dom/client"; + +const root = document.querySelector("#root"); +if (!root) { + throw new Error("Missing React root"); +} + +createRoot(root).render( + +
TypeScript 7
+
, +); diff --git a/tests/integration/react/tsconfig.json b/tests/integration/react/tsconfig.json new file mode 100644 index 0000000..643bd73 --- /dev/null +++ b/tests/integration/react/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../react.json", + "compilerOptions": { + "noEmit": true, + "rootDir": "src", + "types": ["react", "react-dom/client"] + }, + "include": ["src"] +} diff --git a/tests/smoke.test.js b/tests/smoke.test.js deleted file mode 100644 index 6298ac8..0000000 --- a/tests/smoke.test.js +++ /dev/null @@ -1,146 +0,0 @@ -const { test } = require('node:test') -const assert = require('node:assert/strict') -const { mkdtempSync, readFileSync, readdirSync, rmSync } = require('node:fs') -const { tmpdir } = require('node:os') -const { dirname, join } = require('node:path') -const { spawnSync } = require('node:child_process') - -const root = join(__dirname, '..') -const fixtures = join(__dirname, 'fixtures') - -const configs = readdirSync(root).filter( - (file) => - file.endsWith('.json') && - file !== 'package.json' && - file !== 'package-lock.json', -) - -const compilers = [ - { - binary: 'tsc6', - label: 'TypeScript 6', - packageName: 'typescript', - versionPrefix: 'Version 6.', - }, - { - binary: 'tsc', - label: 'TypeScript 7', - packageName: '@typescript/native', - versionPrefix: 'Version 7.', - }, -] - -function compilerPath(compiler) { - const packagePath = require.resolve(`${compiler.packageName}/package.json`) - const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8')) - return join(dirname(packagePath), packageJson.bin[compiler.binary]) -} - -function runCompiler(compiler, args) { - const result = spawnSync(process.execPath, [compilerPath(compiler), ...args], { - cwd: root, - encoding: 'utf-8', - timeout: 30_000, - }) - assert.equal( - result.error, - undefined, - `${compiler.label} could not run: ${result.error?.message}`, - ) - assert.equal( - result.status, - 0, - `${compiler.label} failed (${args.join(' ')}):\n${result.stdout}${result.stderr}`, - ) - return result.stdout.trim() -} - -test('all config files are valid JSON with compilerOptions', () => { - for (const config of configs) { - const raw = readFileSync(join(root, config), 'utf-8') - const parsed = JSON.parse(raw) - assert.ok(parsed.compilerOptions, `${config} must have compilerOptions`) - assert.equal(typeof parsed.compilerOptions, 'object') - } -}) - -test('derived configs extend base.json', () => { - const derived = configs.filter((c) => c !== 'base.json') - for (const config of derived) { - const raw = readFileSync(join(root, config), 'utf-8') - const parsed = JSON.parse(raw) - assert.equal(parsed.extends, './base.json', `${config} must extend base.json`) - } -}) - -test('package.json files array includes all configs', () => { - const pkg = JSON.parse(readFileSync(join(root, 'package.json'), 'utf-8')) - for (const config of configs) { - assert.ok(pkg.files.includes(config), `${config} must be in package.json files`) - } -}) - -test('integration tests use the supported compiler majors', () => { - for (const compiler of compilers) { - assert.ok( - runCompiler(compiler, ['--version']).startsWith(compiler.versionPrefix), - `${compiler.label} must report ${compiler.versionPrefix}`, - ) - } -}) - -test('TypeScript 6 compatibility package exposes the JavaScript API', () => { - const typescript = require('typescript') - assert.match(typescript.version, /^6\./) - assert.equal(typeof typescript.createProgram, 'function') -}) - -for (const compiler of compilers) { - test(`${compiler.label} type-checks every preset fixture`, () => { - const buildInfoDirectory = mkdtempSync( - join(tmpdir(), 'vllnt-typescript-build-info-'), - ) - try { - for (const preset of configs.map((config) => config.replace('.json', ''))) { - runCompiler(compiler, [ - '--project', - join(fixtures, preset, 'tsconfig.json'), - '--noEmit', - '--incremental', - '--tsBuildInfoFile', - join(buildInfoDirectory, `${preset}.tsbuildinfo`), - ]) - } - } finally { - rmSync(buildInfoDirectory, { force: true, recursive: true }) - } - }) - - test(`${compiler.label} preserves node-library emit behavior`, () => { - const outputDirectory = mkdtempSync( - join(tmpdir(), 'vllnt-typescript-node-library-'), - ) - try { - runCompiler(compiler, [ - '--project', - join(fixtures, 'node-library', 'tsconfig.json'), - '--outDir', - outputDirectory, - ]) - - for (const output of [ - 'index.js', - 'index.js.map', - 'index.d.ts', - 'index.d.ts.map', - ]) { - assert.ok( - readdirSync(outputDirectory).includes(output), - `${compiler.label} must emit ${output} for node-library.json`, - ) - } - } finally { - rmSync(outputDirectory, { force: true, recursive: true }) - } - }) -} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..3b33f62 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "./nodejs.json", + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "noEmit": true, + "rootDir": ".", + "types": ["node", "vitest/globals"] + }, + "include": ["*.config.mjs", "scripts/**/*.mjs", "tests/**/*.mjs"] +} diff --git a/vitest.config.mjs b/vitest.config.mjs new file mode 100644 index 0000000..741714f --- /dev/null +++ b/vitest.config.mjs @@ -0,0 +1,18 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + coverage: { + include: ["scripts/**/*.mjs"], + provider: "v8", + reporter: ["text", "json-summary"], + thresholds: { + branches: 100, + functions: 100, + lines: 100, + statements: 100, + }, + }, + testTimeout: 120_000, + }, +}); From e673a2d9a1a00ae6355d052e1a2d186b92a064cd Mon Sep 17 00:00:00 2001 From: bntvllnt <32437578+bntvllnt@users.noreply.github.com> Date: Mon, 31 Aug 2026 16:21:48 +0200 Subject: [PATCH 4/6] fix: make stable publishing recoverable --- .github/workflows/publish.yml | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 93ba2d5..b888556 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -123,6 +123,21 @@ jobs: VERSION=$(node -p "require('./package.json').version") echo "version=$VERSION" >> "$GITHUB_OUTPUT" + - name: Install OIDC-capable npm + run: npm install --global npm@12.0.2 + + - name: Publish to npm + env: + VERSION: ${{ steps.version.outputs.version }} + run: | + sed -i '/_authToken/d' "$NPM_CONFIG_USERCONFIG" + unset NODE_AUTH_TOKEN + if npm view "@vllnt/typescript@${VERSION}" version >/dev/null 2>&1; then + echo "@vllnt/typescript@${VERSION} is already published; reconciling Git metadata" + else + npm publish --tag latest --provenance --access public + fi + - name: Commit and tag env: VERSION: ${{ steps.version.outputs.version }} @@ -133,18 +148,11 @@ jobs: git add package.json pnpm-lock.yaml git commit -m "chore(release): v${VERSION}" fi - git tag -a "v${VERSION}" -m "v${VERSION}" + if ! git rev-parse "refs/tags/v${VERSION}" >/dev/null 2>&1; then + git tag -a "v${VERSION}" -m "v${VERSION}" + fi git push origin main --follow-tags - - name: Install OIDC-capable npm - run: npm install --global npm@12.0.2 - - - name: Publish to npm - run: | - sed -i '/_authToken/d' "$NPM_CONFIG_USERCONFIG" - unset NODE_AUTH_TOKEN - npm publish --tag latest --provenance --access public - - name: Create GitHub Release env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 0b4a0de12ce0575fa5fa879ab1ccd15b2e207f66 Mon Sep 17 00:00:00 2001 From: bntvllnt <32437578+bntvllnt@users.noreply.github.com> Date: Mon, 31 Aug 2026 16:42:02 +0200 Subject: [PATCH 5/6] fix: harden release and compatibility gates --- .github/workflows/ci.yml | 12 ++-- .github/workflows/publish.yml | 112 ++++++++++++++++++---------------- CHANGELOG.md | 5 +- README.md | 2 +- llms-full.txt | 2 +- llms.txt | 2 +- package.json | 2 +- pnpm-lock.yaml | 20 +++--- pnpm-workspace.yaml | 4 ++ tests/configs.test.mjs | 6 ++ 10 files changed, 95 insertions(+), 72 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9eb8567..04bc3f8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,11 +19,11 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - - uses: pnpm/action-setup@v6 + - uses: pnpm/action-setup@f520eceda224fe1a4aed5a2a27a194379a409996 # v6.0.10 - - uses: actions/setup-node@v7 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 22.13 cache: pnpm @@ -38,11 +38,11 @@ jobs: strategy: fail-fast: false matrix: - node: [18, 26] + node: [22.13, 26] steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - - uses: actions/setup-node@v7 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ matrix.node }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index b888556..9a57c70 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -17,16 +17,10 @@ on: - ".github/workflows/publish.yml" workflow_dispatch: inputs: - bump: - description: "Version bump before publishing; use none for the version already on main" + version: + description: "Exact package version already committed to main" required: true - default: none - type: choice - options: - - none - - patch - - minor - - major + type: string concurrency: group: publish-${{ github.event_name }} @@ -41,11 +35,11 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - - uses: pnpm/action-setup@v6 + - uses: pnpm/action-setup@f520eceda224fe1a4aed5a2a27a194379a409996 # v6.0.10 - - uses: actions/setup-node@v7 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 22.13 cache: pnpm @@ -63,18 +57,13 @@ jobs: id-token: write contents: read steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - - uses: pnpm/action-setup@v6 - - - uses: actions/setup-node@v7 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 22.13 - cache: pnpm registry-url: https://registry.npmjs.org - - run: pnpm install --frozen-lockfile - - name: Install OIDC-capable npm run: npm install --global npm@12.0.2 @@ -85,13 +74,25 @@ jobs: BASE_VERSION=$(node -p "require('./package.json').version") SHORT_SHA=$(echo "$GITHUB_SHA" | cut -c1-7) - npm version "${BASE_VERSION}-canary.${SHORT_SHA}" --no-git-tag-version - npm publish --tag canary --provenance --access public + VERSION="${BASE_VERSION}-canary.${SHORT_SHA}" + npm version "$VERSION" --no-git-tag-version + + PACK_RESULT=$(npm pack --ignore-scripts --json --pack-destination "$RUNNER_TEMP") + TARBALL_NAME=$(echo "$PACK_RESULT" | node -e 'let input=""; process.stdin.on("data", chunk => input += chunk); process.stdin.on("end", () => console.log(JSON.parse(input)[0].filename))') + LOCAL_INTEGRITY=$(echo "$PACK_RESULT" | node -e 'let input=""; process.stdin.on("data", chunk => input += chunk); process.stdin.on("end", () => console.log(JSON.parse(input)[0].integrity))') + REMOTE_INTEGRITY=$(npm view "@vllnt/typescript@${VERSION}" dist.integrity 2>/dev/null || true) + + if [ -n "$REMOTE_INTEGRITY" ]; then + test "$LOCAL_INTEGRITY" = "$REMOTE_INTEGRITY" + test "$(npm view @vllnt/typescript dist-tags.canary)" = "$VERSION" + else + npm publish "$RUNNER_TEMP/$TARBALL_NAME" --tag canary --provenance --access public + fi release: name: Publish Stable Release needs: quality - if: github.event_name == 'workflow_dispatch' + if: github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main' runs-on: ubuntu-latest timeout-minutes: 10 environment: npm @@ -99,62 +100,67 @@ jobs: contents: write id-token: write steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 - token: ${{ secrets.RELEASE_PAT }} - - - uses: pnpm/action-setup@v6 - - uses: actions/setup-node@v7 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 22.13 - cache: pnpm registry-url: https://registry.npmjs.org - - run: pnpm install --frozen-lockfile - - - name: Prepare version - id: version + - name: Verify versioned main commit + env: + EXPECTED_VERSION: ${{ inputs.version }} run: | - if [ "${{ inputs.bump }}" != "none" ]; then - pnpm version "${{ inputs.bump }}" --no-git-tag-version - fi + git fetch origin main + test "$(git rev-parse HEAD)" = "$(git rev-parse origin/main)" VERSION=$(node -p "require('./package.json').version") - echo "version=$VERSION" >> "$GITHUB_OUTPUT" + test "$VERSION" = "$EXPECTED_VERSION" + grep -F "## [$VERSION]" CHANGELOG.md - name: Install OIDC-capable npm run: npm install --global npm@12.0.2 - - name: Publish to npm + - name: Publish or reconcile npm package env: - VERSION: ${{ steps.version.outputs.version }} + VERSION: ${{ inputs.version }} run: | sed -i '/_authToken/d' "$NPM_CONFIG_USERCONFIG" unset NODE_AUTH_TOKEN - if npm view "@vllnt/typescript@${VERSION}" version >/dev/null 2>&1; then - echo "@vllnt/typescript@${VERSION} is already published; reconciling Git metadata" + + PACK_RESULT=$(npm pack --ignore-scripts --json --pack-destination "$RUNNER_TEMP") + TARBALL_NAME=$(echo "$PACK_RESULT" | node -e 'let input=""; process.stdin.on("data", chunk => input += chunk); process.stdin.on("end", () => console.log(JSON.parse(input)[0].filename))') + LOCAL_INTEGRITY=$(echo "$PACK_RESULT" | node -e 'let input=""; process.stdin.on("data", chunk => input += chunk); process.stdin.on("end", () => console.log(JSON.parse(input)[0].integrity))') + REMOTE_INTEGRITY=$(npm view "@vllnt/typescript@${VERSION}" dist.integrity 2>/dev/null || true) + + if [ -n "$REMOTE_INTEGRITY" ]; then + test "$LOCAL_INTEGRITY" = "$REMOTE_INTEGRITY" + test "$(npm view @vllnt/typescript dist-tags.latest)" = "$VERSION" else - npm publish --tag latest --provenance --access public + npm publish "$RUNNER_TEMP/$TARBALL_NAME" --tag latest --provenance --access public fi - - name: Commit and tag + - name: Create or verify release tag env: - VERSION: ${{ steps.version.outputs.version }} + VERSION: ${{ inputs.version }} run: | - git config user.name "github-actions[bot]" - git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - if ! git diff --quiet; then - git add package.json pnpm-lock.yaml - git commit -m "chore(release): v${VERSION}" - fi - if ! git rev-parse "refs/tags/v${VERSION}" >/dev/null 2>&1; then + if git rev-parse "refs/tags/v${VERSION}" >/dev/null 2>&1; then + test "$(git rev-list -n 1 "v${VERSION}")" = "$(git rev-parse HEAD)" + else + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git tag -a "v${VERSION}" -m "v${VERSION}" + git push origin "refs/tags/v${VERSION}" fi - git push origin main --follow-tags - name: Create GitHub Release env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - VERSION: ${{ steps.version.outputs.version }} - run: gh release create "v${VERSION}" --title "v${VERSION}" --generate-notes --verify-tag + VERSION: ${{ inputs.version }} + run: | + if gh release view "v${VERSION}" >/dev/null 2>&1; then + echo "GitHub release v${VERSION} already exists" + else + gh release create "v${VERSION}" --title "v${VERSION}" --generate-notes --verify-tag + fi diff --git a/CHANGELOG.md b/CHANGELOG.md index 4dcc813..ab05990 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ All notable changes to this project are documented in this file. The format foll ## [Unreleased] +## [2.0.0] - 2026-08-31 + ### Added - Added compiler-backed fixtures for every preset under TypeScript 6 and TypeScript 7. @@ -32,5 +34,6 @@ All notable changes to this project are documented in this file. The format foll - Added `base.json`, `nodejs.json`, `node-library.json`, `react.json`, and `nextjs.json` presets. - Documented Node.js 22+ and TypeScript 5+ expectations. -[Unreleased]: https://github.com/vllnt/typescript/compare/v1.0.0...HEAD +[Unreleased]: https://github.com/vllnt/typescript/compare/v2.0.0...HEAD +[2.0.0]: https://github.com/vllnt/typescript/compare/v1.0.0...v2.0.0 [1.0.0]: https://github.com/vllnt/typescript/releases/tag/v1.0.0 diff --git a/README.md b/README.md index e11348d..7d28848 100644 --- a/README.md +++ b/README.md @@ -126,7 +126,7 @@ TypeScript 7 also removes ES5 targeting, legacy module formats and resolution, ` | Surface | Supported version | | ---------------------- | ------------------------------------------------------- | -| Node.js consumers | `>=18` | +| Node.js consumers | `>=22` | | TypeScript | `>=6.0.2 <8` | | Tested compilers | TypeScript 6 compatibility package and TypeScript 7.0.2 | | Next.js integration | 16.3.3 | diff --git a/llms-full.txt b/llms-full.txt index 5630974..9bbb3ce 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -1,6 +1,6 @@ # @vllnt/typescript full reference -`@vllnt/typescript` publishes strict JSON compiler presets for Node.js, npm libraries, React, and Next.js. Version 2 supports TypeScript `>=6.0.2 <8` and is validated with the TypeScript 6 compatibility package and native TypeScript 7.0.2. +`@vllnt/typescript` publishes strict JSON compiler presets for Node.js 22+, npm libraries, React, and Next.js. Version 2 supports TypeScript `>=6.0.2 <8` and is validated with the TypeScript 6 compatibility package and native TypeScript 7.0.2. ## Installation diff --git a/llms.txt b/llms.txt index 6e4396c..83251f7 100644 --- a/llms.txt +++ b/llms.txt @@ -11,7 +11,7 @@ ## Compatibility -- Node.js consumers: 18 or newer +- Node.js consumers: 22 or newer - TypeScript: `>=6.0.2 <8` - TypeScript 7 migration: native `tsc` can run beside the TypeScript 6 compatibility API - Runtime dependencies: none; TypeScript is a peer dependency diff --git a/package.json b/package.json index 9fdf8a7..686900a 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ ], "packageManager": "pnpm@11.24.0", "engines": { - "node": ">=18" + "node": ">=22" }, "files": [ "base.json", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c7a4e1a..324ca08 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,10 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + deepmerge-ts: 8.0.0 + handlebars: 4.7.9 + importers: .: devDependencies: @@ -2037,10 +2041,10 @@ packages: integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, } - deepmerge-ts@7.1.6: + deepmerge-ts@8.0.0: resolution: { - integrity: sha512-gQhL1ksGBLQbHeAo47YU6cs2ahd3Pv+8PFYoWogNZbQnNwQyOh9Ad5kbeHFiWwbKdeWQJ5Z7Y7mwb9ew2hXBLw==, + integrity: sha512-ICNjaP0ML+eSdEpJYQC46XiAn/UjAdwbEl0dE8p85ZTeNDinN4Kd4+9jS4OSAuH7st6eC7rQhsqTF5zIDaUm2g==, } engines: { node: ">=16.0.0" } @@ -2664,10 +2668,10 @@ packages: } engines: { node: ">= 0.4" } - handlebars@4.7.8: + handlebars@4.7.9: resolution: { - integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==, + integrity: sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==, } engines: { node: ">=0.4.7" } hasBin: true @@ -4429,7 +4433,7 @@ snapshots: dependencies: eslint-import-resolver-node: 0.3.9(supports-color@7.2.0) eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0))(eslint-import-resolver-node@0.3.9(supports-color@7.2.0))(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) - handlebars: 4.7.8 + handlebars: 4.7.9 is-core-module: 2.16.1 micromatch: 4.0.8 transitivePeerDependencies: @@ -5397,7 +5401,7 @@ snapshots: deep-is@0.1.4: {} - deepmerge-ts@7.1.6: {} + deepmerge-ts@8.0.0: {} define-data-property@1.1.4: dependencies: @@ -5626,7 +5630,7 @@ snapshots: eslint-plugin-functional@9.0.5(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0): dependencies: "@typescript-eslint/utils": 8.68.0(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) - deepmerge-ts: 7.1.6 + deepmerge-ts: 8.0.0 escape-string-regexp: 5.0.0 eslint: 9.39.5(supports-color@7.2.0) is-immutable-type: 5.0.4(@typescript/typescript6@6.0.2)(eslint@9.39.5(supports-color@7.2.0))(supports-color@7.2.0) @@ -5938,7 +5942,7 @@ snapshots: gopd@1.2.0: {} - handlebars@4.7.8: + handlebars@4.7.9: dependencies: minimist: 1.2.8 neo-async: 2.6.2 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 03f1886..3f54be9 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,3 +3,7 @@ packages: allowBuilds: esbuild: true + +overrides: + deepmerge-ts: 8.0.0 + handlebars: 4.7.9 diff --git a/tests/configs.test.mjs b/tests/configs.test.mjs index 06f3caa..dc073cf 100644 --- a/tests/configs.test.mjs +++ b/tests/configs.test.mjs @@ -125,6 +125,12 @@ describe.each(compilers)("$label", (compiler) => { "index.js", "index.js.map", ]); + expect( + run(process.execPath, [ + "--eval", + `const { double } = require(${JSON.stringify(join(outputDirectory, "index.js"))}); process.stdout.write(String(double(2)))`, + ]), + ).toBe("4"); } finally { rmSync(outputDirectory, { force: true, recursive: true }); } From 425e8a3ab22455401a148f894bebf8c1e87663b5 Mon Sep 17 00:00:00 2001 From: bntvllnt <32437578+bntvllnt@users.noreply.github.com> Date: Mon, 31 Aug 2026 17:19:08 +0200 Subject: [PATCH 6/6] fix: align publish runtime with npm 12 --- .github/workflows/publish.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 9a57c70..2ae34cf 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -41,7 +41,7 @@ jobs: - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: - node-version: 22.13 + node-version: 22.22.2 cache: pnpm - run: pnpm install --frozen-lockfile @@ -61,7 +61,7 @@ jobs: - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: - node-version: 22.13 + node-version: 22.22.2 registry-url: https://registry.npmjs.org - name: Install OIDC-capable npm @@ -106,7 +106,7 @@ jobs: - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: - node-version: 22.13 + node-version: 22.22.2 registry-url: https://registry.npmjs.org - name: Verify versioned main commit