diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 26d4459..ceaa9d9 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -22,11 +22,11 @@ jobs:
- uses: actions/setup-node@v6
with:
node-version: 24
- cache: "yarn"
+ cache: "pnpm"
- - run: yarn install --immutable
+ - run: pnpm install --frozen-lockfile
- - run: yarn build
+ - run: pnpm build
- run: npm pack
diff --git a/.gitignore b/.gitignore
index 18eb6eb..31ef6e0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,7 @@
!.yarn/releases
!.yarn/sdks
+/test/generated/
/output
/dist
@@ -19,3 +20,9 @@ node_modules
test/*
!test/petstore.yaml
!test/config.ts
+!test/generated/
+!test/generated/.gitkeep
+!test/generated/base/
+!test/generated/base/.gitkeep
+!test/generated/next/
+!test/generated/next/.gitkeep
diff --git a/.oxfmtrc.json b/.oxfmtrc.json
index 647b4c8..c99d415 100644
--- a/.oxfmtrc.json
+++ b/.oxfmtrc.json
@@ -1,4 +1,4 @@
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
- "ignorePatterns": ["**/*.hbs", "node_modules", ".yarn"]
+ "ignorePatterns": ["**/*.hbs", "node_modules", ".yarn", "test/generated/**"]
}
diff --git a/.oxlintrc.json b/.oxlintrc.json
index 49679d0..3ace296 100644
--- a/.oxlintrc.json
+++ b/.oxlintrc.json
@@ -1,5 +1,6 @@
{
"$schema": "node_modules/oxlint/configuration_schema.json",
+ "ignorePatterns": ["test/generated/**"],
"plugins": ["eslint", "typescript", "unicorn", "import", "oxc", "promise", "vitest"],
"categories": {
"correctness": "off",
diff --git a/README.md b/README.md
index 2c2cc05..d7e90cd 100644
--- a/README.md
+++ b/README.md
@@ -69,6 +69,7 @@ yarn openapi-codegen generate --config my-config.ts
--config Path to TS config file (default: 'openapi-codegen.config.ts')
--input Path/URL to OpenAPI JSON/YAML document
--output Output directory path (default: 'output')
+ --incremental Skip generation when OpenAPI and config are unchanged (default: true)
--format Format the generated code using Oxfmt (default: true)
--verbose Display detailed log messages during execution (default: false)
@@ -84,11 +85,16 @@ yarn openapi-codegen generate --config my-config.ts
--tsPath (Requires `--importPath` to be 'ts') Typescript import path (default: '@/data')
--removeOperationPrefixEndingWith Remove operation name prefixes that end with the specified string (default: 'Controller_')
--extractEnums Extract enums into separate Zod schemas (default: true)
+ --modelsInCommon Keep all schema declarations in defaultTag models and emit per-module proxy exports (default: false)
--replaceOptionalWithNullish Replace `.optional()` chains with `.nullish()` in generated Zod schemas (default: false)
--axiosRequestConfig Include Axios request config parameters in query hooks (default: false)
--infiniteQueries Generate infinite queries for paginated API endpoints (default: false)
--mutationEffects Add mutation effects options to mutation hooks (default: true)
+ --workspaceContext Allow generated hooks to resolve path/ACL params from OpenApiWorkspaceContext (default: false)
+ --inlineEndpoints Inline endpoint implementations into generated query files (default: false)
+ --inlineEndpointsExcludeModules Comma-separated modules/tags to keep as separate API files while inlineEndpoints=true
+ --modelsOnly Generate only model files (default: false)
--parseRequestParams Add Zod parsing to API endpoints (default: true)
--acl Generate ACL related files (default: true)
@@ -186,6 +192,63 @@ const config: OpenAPICodegenConfig = {
export default config;
```
+### OpenApiWorkspaceContext (Path + ACL defaults)
+
+Enable `workspaceContext: true` in codegen config (or pass `--workspaceContext`) and wrap your app subtree with `OpenApiWorkspaceContext.Provider` if generated hooks frequently repeat workspace-scoped params (for example `officeId`).
+
+```tsx
+import { OpenApiWorkspaceContext } from "@povio/openapi-codegen-cli";
+// openapi-codegen.config.ts -> { workspaceContext: true }
+
+
+
+;
+```
+
+Generated query/mutation hooks can then omit matching path/ACL params and resolve them from `OpenApiWorkspaceContext`.
+
+### Generation Modes
+
+You can control whether API endpoint files are emitted, inlined into query files, or skipped entirely.
+
+```ts
+import type { OpenAPICodegenConfig } from "@povio/openapi-codegen-cli";
+
+const config: OpenAPICodegenConfig = {
+ // 1) Default mode: separate *.api.ts files are generated
+ // 2) Inline mode: endpoint logic is generated inside *.queries.ts
+ // and can be used without separate api files:
+ // inlineEndpoints: true,
+ // inlineEndpointsExcludeModules: ["Users", "Billing"],
+ // 3) Models-only mode: generate only *.models.ts files
+ // modelsOnly: true,
+ // 4) Keep all model declarations in common.models and generate per-module model proxies
+ // modelsInCommon: true,
+};
+```
+
+### Vite Plugin
+
+You can run codegen directly from Vite config (without CLI config file):
+
+```ts
+import { defineConfig } from "vite";
+import { openApiCodegen } from "@povio/openapi-codegen-cli/vite";
+
+export default defineConfig({
+ plugins: [
+ openApiCodegen({
+ input: "./openapi.yaml",
+ output: "./src/data",
+ inlineEndpoints: true,
+ incremental: true,
+ }),
+ ],
+});
+```
+
+The plugin runs on both `vite serve` and `vite build`, and watches local OpenAPI files in dev mode.
+
### Enums
If you're using Enums in your backend DTOs with `@Expose()` and `@IsEnum`, they may still not appear correctly in the OpenAPI schema unless you also provide both `enum` **and** `enumName` to `@ApiProperty`.
diff --git a/esbuild.mjs b/esbuild.mjs
deleted file mode 100644
index ac78c66..0000000
--- a/esbuild.mjs
+++ /dev/null
@@ -1,27 +0,0 @@
-import fs from "fs";
-
-import { build } from "esbuild";
-
-const packageJson = JSON.parse(fs.readFileSync("package.json", "utf-8"));
-
-const external = [...Object.keys(packageJson.dependencies || {}), ...Object.keys(packageJson.peerDependencies || {})];
-
-// CLI and Node.js builds - run in Node.js
-const nodeBuildOptions = {
- bundle: true,
- sourcemap: false,
- platform: "node",
- minify: true,
- metafile: false,
- keepNames: true,
- external,
- target: "node14",
- logLevel: "info",
- define: {
- "process.env.OPENAPI_CODEGEN_VERSION": `"${packageJson.version}"`,
- "process.env.NODE_ENV": `"production"`,
- },
-};
-
-await build({ ...nodeBuildOptions, entryPoints: ["./src/sh.ts"], outfile: "./dist/sh.js" });
-await build({ ...nodeBuildOptions, entryPoints: ["./src/generator.ts"], outfile: "./dist/generator.js" });
diff --git a/openapi-codegen.config.mjs b/openapi-codegen.config.mjs
new file mode 100644
index 0000000..b108e6e
--- /dev/null
+++ b/openapi-codegen.config.mjs
@@ -0,0 +1,11 @@
+/** @type {import('./src/generators/types/config').OpenAPICodegenConfig} */
+const config = {
+ input: "http://127.0.0.1:4000/docs-json",
+ output: "./test/generated/next",
+ excludeTags: ["auth"],
+ replaceOptionalWithNullish: true,
+ builderConfigs: true,
+ infiniteQueries: true,
+};
+
+export default config;
diff --git a/package.json b/package.json
index 1ee6441..1f3e90b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@povio/openapi-codegen-cli",
- "version": "2.0.8-rc.5",
+ "version": "2.0.8-rc.8",
"keywords": [
"codegen",
"openapi",
@@ -16,7 +16,7 @@
"url": "git+https://github.com/povio/openapi-codegen-cli.git"
},
"bin": {
- "openapi-codegen": "./dist/sh.js"
+ "openapi-codegen": "./dist/sh.mjs"
},
"files": [
"README.md",
@@ -24,50 +24,62 @@
"src/assets/**",
"src/generators/templates/**"
],
+ "type": "module",
"main": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "types": "./dist/index.d.mts",
"exports": {
".": {
- "types": "./dist/index.d.ts",
- "import": "./dist/index.mjs",
- "require": "./dist/index.mjs"
+ "types": "./dist/index.d.mts",
+ "import": "./dist/index.mjs"
+ },
+ "./vite": {
+ "types": "./dist/vite.d.mts",
+ "import": "./dist/vite.mjs"
},
"./generator": {
- "types": "./dist/generator.d.ts",
- "import": "./dist/generator.js",
- "require": "./dist/generator.js"
+ "types": "./dist/generator.d.mts",
+ "import": "./dist/generator.mjs"
},
"./acl": {
- "types": "./dist/acl.d.ts",
- "import": "./dist/acl.mjs",
- "require": "./dist/acl.mjs"
+ "types": "./dist/acl.d.mts",
+ "import": "./dist/acl.mjs"
}
},
"scripts": {
"start": "node --import tsx ./src/sh.ts",
"test": "vitest run",
"test:watch": "vitest",
- "build:clean": "rm -rf ./dist",
- "build:client": "vite build",
- "build:cli": "node ./esbuild.mjs && chmod +x ./dist/sh.js",
- "build": "yarn build:clean && yarn build:cli && yarn build:client",
- "start:dist": "node ./dist/sh.js",
+ "build": "tsdown",
+ "start:dist": "node ./dist/sh.mjs",
+ "gen:base": "rm -rf ./test/generated/base && mkdir -p ./test/generated/base && pnpm start generate --config ./test/config.mjs --output ./test/generated/base --no-prettier",
+ "gen:next": "rm -rf ./test/generated/next && mkdir -p ./test/generated/next && pnpm start generate --config ./test/config.mjs --output ./test/generated/next --no-prettier",
+ "test:generated-eq": "vitest run ./src/generators/generated-output-eq.test.ts",
+ "gen:verify": "pnpm gen:base && pnpm gen:next && pnpm test:generated-eq",
"typecheck": "tsc --noEmit",
"lint": "oxlint --type-aware --fix",
"lint:check": "oxlint --type-aware",
"format": "oxfmt",
"format:check": "oxfmt --check",
- "check": "yarn typecheck && yarn lint && yarn test",
- "push": "yarn exec ./scripts/publish.sh",
- "dev:generate": "rm -rf ./output && yarn start generate --config ./test/config.ts",
- "dev:check": "yarn start check --config ./test/config.ts"
+ "check": "pnpm typecheck && pnpm lint && pnpm test",
+ "push": "node ./scripts/publish.mjs",
+ "dev:generate": "rm -rf ./output && pnpm start generate --config ./test/config.mjs",
+ "dev:check": "pnpm start check --config ./test/config.mjs",
+ "snapshot:openapi-localhost": "node ./scripts/snapshot-openapi-localhost.mjs",
+ "bench:vite-codegen": "node ./scripts/benchmark-vite-codegen.mjs"
},
"dependencies": {
- "i18next": "^25.8.11",
- "import-fresh": "^3.3.1"
+ "@apidevtools/swagger-parser": "^10.1.0",
+ "handlebars": "^4.7.8",
+ "i18next": "^25.8.13",
+ "import-fresh": "^3.3.1",
+ "prompt-sync": "^4.2.0",
+ "reflect-metadata": "^0.2.2",
+ "ts-pattern": "^5.9.0",
+ "typescript": "^5.9.3",
+ "yargs": "^18.0.0",
+ "openapi-types": "^12.1.3"
},
"devDependencies": {
- "@apidevtools/swagger-parser": "^10.1.0",
"@casl/ability": "^6.8.0",
"@casl/react": "^5.0.1",
"@tanstack/react-query": "~5.90.21",
@@ -76,25 +88,16 @@
"@types/react": "^19.2.14",
"@types/yargs": "^17.0.35",
"@vitejs/plugin-react": "^5.1.4",
- "axios": "^1.13.5",
- "esbuild": "0.27.3",
- "handlebars": "^4.7.8",
- "openapi-types": "^12.1.3",
"oxfmt": "^0.34.0",
- "oxlint": "^1.49.0",
- "oxlint-tsgolint": "^0.14.1",
- "prompt-sync": "^4.2.0",
+ "oxlint": "^1.50.0",
+ "oxlint-tsgolint": "^0.15.0",
"react": "^19.2.4",
- "reflect-metadata": "^0.2.2",
- "ts-pattern": "^5.9.0",
+ "tsdown": "^0.21.0-beta.1",
"tsx": "^4.21.0",
"type-fest": "^5.4.4",
- "typescript": "^5.9.3",
- "vite": "^7.3.1",
+ "vite": "npm:rolldown-vite@^7.3.1",
"vite-plugin-dts": "^4.5.4",
- "vitest": "4.0.18",
- "yargs": "^18.0.0",
- "zod": "^4.3.6"
+ "vitest": "4.0.18"
},
"peerDependencies": {
"@casl/ability": "^6.7.3",
@@ -102,6 +105,7 @@
"@tanstack/react-query": "^5.90.21",
"axios": "^1.13.1",
"react": "^19.1.0",
+ "vite": "^6.0.0 || ^7.0.0",
"zod": "^4.1.12"
},
"peerDependenciesMeta": {
@@ -110,12 +114,14 @@
},
"@casl/react": {
"optional": true
+ },
+ "vite": {
+ "optional": true
}
},
"engines": {
"node": ">= 14",
- "npm": ">= 8",
- "yarn": ">= 3.2"
+ "pnpm": ">= 9"
},
- "packageManager": "yarn@4.2.2"
+ "packageManager": "pnpm@10.4.0"
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..3fa7cee
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,3870 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@apidevtools/swagger-parser':
+ specifier: ^10.1.0
+ version: 10.1.1(openapi-types@12.1.3)
+ axios:
+ specifier: ^1.13.1
+ version: 1.13.5
+ handlebars:
+ specifier: ^4.7.8
+ version: 4.7.8
+ i18next:
+ specifier: ^25.8.13
+ version: 25.8.13(typescript@5.9.3)
+ import-fresh:
+ specifier: ^3.3.1
+ version: 3.3.1
+ openapi-types:
+ specifier: ^12.1.3
+ version: 12.1.3
+ prompt-sync:
+ specifier: ^4.2.0
+ version: 4.2.0
+ reflect-metadata:
+ specifier: ^0.2.2
+ version: 0.2.2
+ ts-pattern:
+ specifier: ^5.9.0
+ version: 5.9.0
+ typescript:
+ specifier: ^5.9.3
+ version: 5.9.3
+ yargs:
+ specifier: ^18.0.0
+ version: 18.0.0
+ zod:
+ specifier: ^4.1.12
+ version: 4.3.6
+ devDependencies:
+ '@casl/ability':
+ specifier: ^6.8.0
+ version: 6.8.0
+ '@casl/react':
+ specifier: ^5.0.1
+ version: 5.0.1(@casl/ability@6.8.0)(react@19.2.4)
+ '@tanstack/react-query':
+ specifier: ~5.90.21
+ version: 5.90.21(react@19.2.4)
+ '@types/node':
+ specifier: ^25.3.0
+ version: 25.3.1
+ '@types/prompt-sync':
+ specifier: ^4.2.3
+ version: 4.2.3
+ '@types/react':
+ specifier: ^19.2.14
+ version: 19.2.14
+ '@types/yargs':
+ specifier: ^17.0.35
+ version: 17.0.35
+ '@vitejs/plugin-react':
+ specifier: ^5.1.4
+ version: 5.1.4(rolldown-vite@7.3.1(@types/node@25.3.1)(esbuild@0.27.3)(tsx@4.21.0))
+ oxfmt:
+ specifier: ^0.34.0
+ version: 0.34.0
+ oxlint:
+ specifier: ^1.50.0
+ version: 1.50.0(oxlint-tsgolint@0.15.0)
+ oxlint-tsgolint:
+ specifier: ^0.15.0
+ version: 0.15.0
+ react:
+ specifier: ^19.2.4
+ version: 19.2.4
+ tsdown:
+ specifier: ^0.21.0-beta.1
+ version: 0.21.0-beta.2(typescript@5.9.3)
+ tsx:
+ specifier: ^4.21.0
+ version: 4.21.0
+ type-fest:
+ specifier: ^5.4.4
+ version: 5.4.4
+ vite:
+ specifier: npm:rolldown-vite@^7.3.1
+ version: rolldown-vite@7.3.1(@types/node@25.3.1)(esbuild@0.27.3)(tsx@4.21.0)
+ vite-plugin-dts:
+ specifier: ^4.5.4
+ version: 4.5.4(@types/node@25.3.1)(rolldown-vite@7.3.1(@types/node@25.3.1)(esbuild@0.27.3)(tsx@4.21.0))(rollup@4.59.0)(typescript@5.9.3)
+ vitest:
+ specifier: 4.0.18
+ version: 4.0.18(@types/node@25.3.1)(lightningcss@1.31.1)(tsx@4.21.0)
+
+packages:
+
+ '@apidevtools/json-schema-ref-parser@11.7.2':
+ resolution: {integrity: sha512-4gY54eEGEstClvEkGnwVkTkrx0sqwemEFG5OSRRn3tD91XH0+Q8XIkYIfo7IwEWPpJZwILb9GUXeShtplRc/eA==}
+ engines: {node: '>= 16'}
+
+ '@apidevtools/openapi-schemas@2.1.0':
+ resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==}
+ engines: {node: '>=10'}
+
+ '@apidevtools/swagger-methods@3.0.2':
+ resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==}
+
+ '@apidevtools/swagger-parser@10.1.1':
+ resolution: {integrity: sha512-u/kozRnsPO/x8QtKYJOqoGtC4kH6yg1lfYkB9Au0WhYB0FNLpyFusttQtvhlwjtG3rOwiRz4D8DnnXa8iEpIKA==}
+ peerDependencies:
+ openapi-types: '>=7'
+
+ '@babel/code-frame@7.29.0':
+ resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.29.0':
+ resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.29.0':
+ resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.29.1':
+ resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@8.0.0-rc.1':
+ resolution: {integrity: sha512-3ypWOOiC4AYHKr8vYRVtWtWmyvcoItHtVqF8paFax+ydpmUdPsJpLBkBBs5ItmhdrwC3a0ZSqqFAdzls4ODP3w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@babel/helper-compilation-targets@7.28.6':
+ resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-globals@7.28.0':
+ resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.28.6':
+ resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.28.6':
+ resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-plugin-utils@7.28.6':
+ resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@8.0.0-rc.2':
+ resolution: {integrity: sha512-noLx87RwlBEMrTzncWd/FvTxoJ9+ycHNg0n8yyYydIoDsLZuxknKgWRJUqcrVkNrJ74uGyhWQzQaS3q8xfGAhQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@8.0.0-rc.1':
+ resolution: {integrity: sha512-I4YnARytXC2RzkLNVnf5qFNFMzp679qZpmtw/V3Jt2uGnWiIxyJtaukjG7R8pSx8nG2NamICpGfljQsogj+FbQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.28.6':
+ resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.29.0':
+ resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/parser@8.0.0-rc.1':
+ resolution: {integrity: sha512-6HyyU5l1yK/7h9Ki52i5h6mDAx4qJdiLQO4FdCyJNoB/gy3T3GGJdhQzzbZgvgZCugYBvwtQiWRt94QKedHnkA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ '@babel/plugin-transform-react-jsx-self@7.27.1':
+ resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-source@7.27.1':
+ resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/runtime@7.28.6':
+ resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.28.6':
+ resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.29.0':
+ resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.29.0':
+ resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@8.0.0-rc.1':
+ resolution: {integrity: sha512-ubmJ6TShyaD69VE9DQrlXcdkvJbmwWPB8qYj0H2kaJi29O7vJT9ajSdBd2W8CG34pwL9pYA74fi7RHC1qbLoVQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@casl/ability@6.8.0':
+ resolution: {integrity: sha512-Ipt4mzI4gSgnomFdaPjaLgY2MWuXqAEZLrU6qqWBB7khGiBBuuEp6ytYDnq09bRXqcjaeeHiaCvCGFbBA2SpvA==}
+
+ '@casl/react@5.0.1':
+ resolution: {integrity: sha512-8E3GkvwlxEW+bkxWTdvjn6SALNJZa9khNk591xTpU27nPK/nzgfqsVfEvrFjYIQ2LODrxXsWLmw7iHPEI0/TaQ==}
+ peerDependencies:
+ '@casl/ability': ^4.0.0 || ^5.1.0 || ^6.0.0
+ react: ^17.0.0 || ^18.0.0 || ^19.0.0
+
+ '@emnapi/core@1.8.1':
+ resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==}
+
+ '@emnapi/runtime@1.8.1':
+ resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==}
+
+ '@emnapi/wasi-threads@1.1.0':
+ resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
+
+ '@esbuild/aix-ppc64@0.27.3':
+ resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.27.3':
+ resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.27.3':
+ resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.27.3':
+ resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.27.3':
+ resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.27.3':
+ resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.27.3':
+ resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.27.3':
+ resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.27.3':
+ resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.27.3':
+ resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.27.3':
+ resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.27.3':
+ resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.27.3':
+ resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.27.3':
+ resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.27.3':
+ resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.27.3':
+ resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.27.3':
+ resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.27.3':
+ resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.27.3':
+ resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.27.3':
+ resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.27.3':
+ resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.27.3':
+ resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.27.3':
+ resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.27.3':
+ resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.27.3':
+ resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.27.3':
+ resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@jsdevtools/ono@7.1.3':
+ resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==}
+
+ '@microsoft/api-extractor-model@7.33.4':
+ resolution: {integrity: sha512-u1LTaNTikZAQ9uK6KG1Ms7nvNedsnODnspq/gH2dcyETWvH4hVNGNDvRAEutH66kAmxA4/necElqGNs1FggC8w==}
+
+ '@microsoft/api-extractor@7.57.6':
+ resolution: {integrity: sha512-0rFv/D8Grzw1Mjs2+8NGUR+o4h9LVm5zKRtMeWnpdB5IMJF4TeHCL1zR5LMCIudkOvyvjbhMG5Wjs0B5nqsrRQ==}
+ hasBin: true
+
+ '@microsoft/tsdoc-config@0.18.1':
+ resolution: {integrity: sha512-9brPoVdfN9k9g0dcWkFeA7IH9bbcttzDJlXvkf8b2OBzd5MueR1V2wkKBL0abn0otvmkHJC6aapBOTJDDeMCZg==}
+
+ '@microsoft/tsdoc@0.16.0':
+ resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==}
+
+ '@napi-rs/wasm-runtime@1.1.1':
+ resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==}
+
+ '@oxc-project/runtime@0.101.0':
+ resolution: {integrity: sha512-t3qpfVZIqSiLQ5Kqt/MC4Ge/WCOGrrcagAdzTcDaggupjiGxUx4nJF2v6wUCXWSzWHn5Ns7XLv13fCJEwCOERQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@oxc-project/types@0.101.0':
+ resolution: {integrity: sha512-nuFhqlUzJX+gVIPPfuE6xurd4lST3mdcWOhyK/rZO0B9XWMKm79SuszIQEnSMmmDhq1DC8WWVYGVd+6F93o1gQ==}
+
+ '@oxc-project/types@0.114.0':
+ resolution: {integrity: sha512-//nBfbzHQHvJs8oFIjv6coZ6uxQ4alLfiPe6D5vit6c4pmxATHHlVwgB1k+Hv4yoAMyncdxgRBF5K4BYWUCzvA==}
+
+ '@oxfmt/binding-android-arm-eabi@0.34.0':
+ resolution: {integrity: sha512-sqkqjh/Z38l+duOb1HtVqJTAj1grt2ttkobCopC/72+a4Xxz4xUgZPFyQ4HxrYMvyqO/YA0tvM1QbfOu70Gk1Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@oxfmt/binding-android-arm64@0.34.0':
+ resolution: {integrity: sha512-1KRCtasHcVcGOMwfOP9d5Bus2NFsN8yAYM5cBwi8LBg5UtXC3C49WHKrlEa8iF1BjOS6CR2qIqiFbGoA0DJQNQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxfmt/binding-darwin-arm64@0.34.0':
+ resolution: {integrity: sha512-b+Rmw9Bva6e/7PBES2wLO8sEU7Mi0+/Kv+pXSe/Y8i4fWNftZZlGwp8P01eECaUqpXATfSgNxdEKy7+ssVNz7g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxfmt/binding-darwin-x64@0.34.0':
+ resolution: {integrity: sha512-QGjpevWzf1T9COEokZEWt80kPOtthW1zhRbo7x4Qoz646eTTfi6XsHG2uHeDWJmTbgBoJZPMgj2TAEV/ppEZaA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxfmt/binding-freebsd-x64@0.34.0':
+ resolution: {integrity: sha512-VMSaC02cG75qL59M9M/szEaqq/RsLfgpzQ4nqUu8BUnX1zkiZIW2gTpUv3ZJ6qpWnHxIlAXiRZjQwmcwpvtbcg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxfmt/binding-linux-arm-gnueabihf@0.34.0':
+ resolution: {integrity: sha512-Klm367PFJhH6vYK3vdIOxFepSJZHPaBfIuqwxdkOcfSQ4qqc/M8sgK0UTFnJWWTA/IkhMIh1kW6uEqiZ/xtQqg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxfmt/binding-linux-arm-musleabihf@0.34.0':
+ resolution: {integrity: sha512-nqn0QueVXRfbN9m58/E9Zij0Ap8lzayx591eWBYn0sZrGzY1IRv9RYS7J/1YUXbb0Ugedo0a8qIWzUHU9bWQuA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxfmt/binding-linux-arm64-gnu@0.34.0':
+ resolution: {integrity: sha512-DDn+dcqW+sMTCEjvLoQvC/VWJjG7h8wcdN/J+g7ZTdf/3/Dx730pQElxPPGsCXPhprb11OsPyMp5FwXjMY3qvA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oxfmt/binding-linux-arm64-musl@0.34.0':
+ resolution: {integrity: sha512-H+F8+71gHQoGTFPPJ6z4dD0Fzfzi0UP8Zx94h5kUmIFThLvMq5K1Y/bUUubiXwwHfwb5C3MPjUpYijiy0rj51Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oxfmt/binding-linux-ppc64-gnu@0.34.0':
+ resolution: {integrity: sha512-dIGnzTNhCXqQD5pzBwduLg8pClm+t8R53qaE9i5h8iua1iaFAJyLffh4847CNZSlASb7gn1Ofuv7KoG/EpoGZg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@oxfmt/binding-linux-riscv64-gnu@0.34.0':
+ resolution: {integrity: sha512-FGQ2GTTooilDte/ogwWwkHuuL3lGtcE3uKM2EcC7kOXNWdUfMY6Jx3JCodNVVbFoybv4A+HuCj8WJji2uu1Ceg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@oxfmt/binding-linux-riscv64-musl@0.34.0':
+ resolution: {integrity: sha512-2dGbGneJ7ptOIVKMwEIHdCkdZEomh74X3ggo4hCzEXL/rl9HwfsZDR15MkqfQqAs6nVXMvtGIOMxjDYa5lwKaA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@oxfmt/binding-linux-s390x-gnu@0.34.0':
+ resolution: {integrity: sha512-cCtGgmrTrxq3OeSG0UAO+w6yLZTMeOF4XM9SAkNrRUxYhRQELSDQ/iNPCLyHhYNi38uHJQbS5RQweLUDpI4ajA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+
+ '@oxfmt/binding-linux-x64-gnu@0.34.0':
+ resolution: {integrity: sha512-7AvMzmeX+k7GdgitXp99GQoIV/QZIpAS7rwxQvC/T541yWC45nwvk4mpnU8N+V6dE5SPEObnqfhCjO80s7qIsg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@oxfmt/binding-linux-x64-musl@0.34.0':
+ resolution: {integrity: sha512-uNiglhcmivJo1oDMh3hoN/Z0WsbEXOpRXZdQ3W/IkOpyV8WF308jFjSC1ZxajdcNRXWej0zgge9QXba58Owt+g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@oxfmt/binding-openharmony-arm64@0.34.0':
+ resolution: {integrity: sha512-5eFsTjCyji25j6zznzlMc+wQAZJoL9oWy576xhqd2efv+N4g1swIzuSDcb1dz4gpcVC6veWe9pAwD7HnrGjLwg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxfmt/binding-win32-arm64-msvc@0.34.0':
+ resolution: {integrity: sha512-6id8kK0t5hKfbV6LHDzRO21wRTA6ctTlKGTZIsG/mcoir0rssvaYsedUymF4HDj7tbCUlnxCX/qOajKlEuqbIw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxfmt/binding-win32-ia32-msvc@0.34.0':
+ resolution: {integrity: sha512-QHaz+w673mlYqn9v/+fuiKZpjkmagleXQ+NygShDv8tdHpRYX2oYhTJwwt9j1ZfVhRgza1EIUW3JmzCXmtPdhQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxfmt/binding-win32-x64-msvc@0.34.0':
+ resolution: {integrity: sha512-CXKQM/VaF+yuvGru8ktleHLJoBdjBtTFmAsLGePiESiTN0NjCI/PiaiOCfHMJ1HdP1LykvARUwMvgaN3tDhcrg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxlint-tsgolint/darwin-arm64@0.15.0':
+ resolution: {integrity: sha512-d7Ch+A6hic+RYrm32+Gh1o4lOrQqnFsHi721ORdHUDBiQPea+dssKUEMwIbA6MKmCy6TVJ02sQyi24OEfCiGzw==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxlint-tsgolint/darwin-x64@0.15.0':
+ resolution: {integrity: sha512-Aoai2wAkaUJqp/uEs1gml6TbaPW4YmyO5Ai/vOSkiizgHqVctjhjKqmRiWTX2xuPY94VkwOLqp+Qr3y/0qSpWQ==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxlint-tsgolint/linux-arm64@0.15.0':
+ resolution: {integrity: sha512-4og13a7ec4Vku5t2Y7s3zx6YJP6IKadb1uA9fOoRH6lm/wHWoCnxjcfJmKHXRZJII81WmbdJMSPxaBfwN/S68Q==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oxlint-tsgolint/linux-x64@0.15.0':
+ resolution: {integrity: sha512-9b9xzh/1Harn3a+XiKTK/8LrWw3VcqLfYp/vhV5/zAVR2Mt0d63WSp4FL+wG7DKnI2T/CbMFUFHwc7kCQjDMzQ==}
+ cpu: [x64]
+ os: [linux]
+
+ '@oxlint-tsgolint/win32-arm64@0.15.0':
+ resolution: {integrity: sha512-nNac5hewHdkk5mowOwTqB1ZD76zB/FsUiyUvdCyupq5cG54XyKqSLEp9QGbx7wFJkWCkeWmuwRed4sfpAlKaeA==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxlint-tsgolint/win32-x64@0.15.0':
+ resolution: {integrity: sha512-ioAY2XLpy83E2EqOLH9p1cEgj0G2qB1lmAn0a3yFV1jHQB29LIPIKGNsu/tYCClpwmHN79pT5KZAHZOgWxxqNg==}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxlint/binding-android-arm-eabi@1.50.0':
+ resolution: {integrity: sha512-G7MRGk/6NCe+L8ntonRdZP7IkBfEpiZ/he3buLK6JkLgMHgJShXZ+BeOwADmspXez7U7F7L1Anf4xLSkLHiGTg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@oxlint/binding-android-arm64@1.50.0':
+ resolution: {integrity: sha512-GeSuMoJWCVpovJi/e3xDSNgjeR8WEZ6MCXL6EtPiCIM2NTzv7LbflARINTXTJy2oFBYyvdf/l2PwHzYo6EdXvg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxlint/binding-darwin-arm64@1.50.0':
+ resolution: {integrity: sha512-w3SY5YtxGnxCHPJ8Twl3KmS9oja1gERYk3AMoZ7Hv8P43ZtB6HVfs02TxvarxfL214Tm3uzvc2vn+DhtUNeKnw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxlint/binding-darwin-x64@1.50.0':
+ resolution: {integrity: sha512-hNfogDqy7tvmllXKBSlHo6k5x7dhTUVOHbMSE15CCAcXzmqf5883aPvBYPOq9AE7DpDUQUZ1kVE22YbiGW+tuw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxlint/binding-freebsd-x64@1.50.0':
+ resolution: {integrity: sha512-ykZevOWEyu0nsxolA911ucxpEv0ahw8jfEeGWOwwb/VPoE4xoexuTOAiPNlWZNJqANlJl7yp8OyzCtXTUAxotw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxlint/binding-linux-arm-gnueabihf@1.50.0':
+ resolution: {integrity: sha512-hif3iDk7vo5GGJ4OLCCZAf2vjnU9FztGw4L0MbQL0M2iY9LKFtDMMiQAHmkF0PQGQMVbTYtPdXCLKVgdkiqWXQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxlint/binding-linux-arm-musleabihf@1.50.0':
+ resolution: {integrity: sha512-dVp9iSssiGAnTNey2Ruf6xUaQhdnvcFOJyRWd/mu5o2jVbFK15E5fbWGeFRfmuobu5QXuROtFga44+7DOS3PLg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxlint/binding-linux-arm64-gnu@1.50.0':
+ resolution: {integrity: sha512-1cT7yz2HA910CKA9NkH1ZJo50vTtmND2fkoW1oyiSb0j6WvNtJ0Wx2zoySfXWc/c+7HFoqRK5AbEoL41LOn9oA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oxlint/binding-linux-arm64-musl@1.50.0':
+ resolution: {integrity: sha512-++B3k/HEPFVlj89cOz8kWfQccMZB/aWL9AhsW7jPIkG++63Mpwb2cE9XOEsd0PATbIan78k2Gky+09uWM1d/gQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oxlint/binding-linux-ppc64-gnu@1.50.0':
+ resolution: {integrity: sha512-Z9b/KpFMkx66w3gVBqjIC1AJBTZAGoI9+U+K5L4QM0CB/G0JSNC1es9b3Y0Vcrlvtdn8A+IQTkYjd/Q0uCSaZw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@oxlint/binding-linux-riscv64-gnu@1.50.0':
+ resolution: {integrity: sha512-jvmuIw8wRSohsQlFNIST5uUwkEtEJmOQYr33bf/K2FrFPXHhM4KqGekI3ShYJemFS/gARVacQFgBzzJKCAyJjg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@oxlint/binding-linux-riscv64-musl@1.50.0':
+ resolution: {integrity: sha512-x+UrN47oYNh90nmAAyql8eQaaRpHbDPu5guasDg10+OpszUQ3/1+1J6zFMmV4xfIEgTcUXG/oI5fxJhF4eWCNA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@oxlint/binding-linux-s390x-gnu@1.50.0':
+ resolution: {integrity: sha512-i/JLi2ljLUIVfekMj4ISmdt+Hn11wzYUdRRrkVUYsCWw7zAy5xV7X9iA+KMyM156LTFympa7s3oKBjuCLoTAUQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+
+ '@oxlint/binding-linux-x64-gnu@1.50.0':
+ resolution: {integrity: sha512-/C7brhn6c6UUPccgSPCcpLQXcp+xKIW/3sji/5VZ8/OItL3tQ2U7KalHz887UxxSQeEOmd1kY6lrpuwFnmNqOA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@oxlint/binding-linux-x64-musl@1.50.0':
+ resolution: {integrity: sha512-oDR1f+bGOYU8LfgtEW8XtotWGB63ghtcxk5Jm6IDTCk++rTA/IRMsjOid2iMd+1bW+nP9Mdsmcdc7VbPD3+iyQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@oxlint/binding-openharmony-arm64@1.50.0':
+ resolution: {integrity: sha512-4CmRGPp5UpvXyu4jjP9Tey/SrXDQLRvZXm4pb4vdZBxAzbFZkCyh0KyRy4txld/kZKTJlW4TO8N1JKrNEk+mWw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxlint/binding-win32-arm64-msvc@1.50.0':
+ resolution: {integrity: sha512-Fq0M6vsGcFsSfeuWAACDhd5KJrO85ckbEfe1EGuBj+KPyJz7KeWte2fSFrFGmNKNXyhEMyx4tbgxiWRujBM2KQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxlint/binding-win32-ia32-msvc@1.50.0':
+ resolution: {integrity: sha512-qTdWR9KwY/vxJGhHVIZG2eBOhidOQvOwzDxnX+jhW/zIVacal1nAhR8GLkiywW8BIFDkQKXo/zOfT+/DY+ns/w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxlint/binding-win32-x64-msvc@1.50.0':
+ resolution: {integrity: sha512-682t7npLC4G2Ca+iNlI9fhAKTcFPYYXJjwoa88H4q+u5HHHlsnL/gHULapX3iqp+A8FIJbgdylL5KMYo2LaluQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@quansync/fs@1.0.0':
+ resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==}
+
+ '@rolldown/binding-android-arm64@1.0.0-beta.53':
+ resolution: {integrity: sha512-Ok9V8o7o6YfSdTTYA/uHH30r3YtOxLD6G3wih/U9DO0ucBBFq8WPt/DslU53OgfteLRHITZny9N/qCUxMf9kjQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@rolldown/binding-android-arm64@1.0.0-rc.5':
+ resolution: {integrity: sha512-zCEmUrt1bggwgBgeKLxNj217J1OrChrp3jJt24VK9jAharSTeVaHODNL+LpcQVhRz+FktYWfT9cjo5oZ99ZLpg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@rolldown/binding-darwin-arm64@1.0.0-beta.53':
+ resolution: {integrity: sha512-yIsKqMz0CtRnVa6x3Pa+mzTihr4Ty+Z6HfPbZ7RVbk1Uxnco4+CUn7Qbm/5SBol1JD/7nvY8rphAgyAi7Lj6Vg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.5':
+ resolution: {integrity: sha512-ZP9xb9lPAex36pvkNWCjSEJW/Gfdm9I3ssiqOFLmpZ/vosPXgpoGxCmh+dX1Qs+/bWQE6toNFXWWL8vYoKoK9Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-x64@1.0.0-beta.53':
+ resolution: {integrity: sha512-GTXe+mxsCGUnJOFMhfGWmefP7Q9TpYUseHvhAhr21nCTgdS8jPsvirb0tJwM3lN0/u/cg7bpFNa16fQrjKrCjQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-x64@1.0.0-rc.5':
+ resolution: {integrity: sha512-7IdrPunf6dp9mywMgTOKMMGDnMHQ6+h5gRl6LW8rhD8WK2kXX0IwzcM5Zc0B5J7xQs8QWOlKjv8BJsU/1CD3pg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rolldown/binding-freebsd-x64@1.0.0-beta.53':
+ resolution: {integrity: sha512-9Tmp7bBvKqyDkMcL4e089pH3RsjD3SUungjmqWtyhNOxoQMh0fSmINTyYV8KXtE+JkxYMPWvnEt+/mfpVCkk8w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.5':
+ resolution: {integrity: sha512-o/JCk+dL0IN68EBhZ4DqfsfvxPfMeoM6cJtxORC1YYoxGHZyth2Kb2maXDb4oddw2wu8iIbnYXYPEzBtAF5CAg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.53':
+ resolution: {integrity: sha512-a1y5fiB0iovuzdbjUxa7+Zcvgv+mTmlGGC4XydVIsyl48eoxgaYkA3l9079hyTyhECsPq+mbr0gVQsFU11OJAQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.5':
+ resolution: {integrity: sha512-IIBwTtA6VwxQLcEgq2mfrUgam7VvPZjhd/jxmeS1npM+edWsrrpRLHUdze+sk4rhb8/xpP3flemgcZXXUW6ukw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.53':
+ resolution: {integrity: sha512-bpIGX+ov9PhJYV+wHNXl9rzq4F0QvILiURn0y0oepbQx+7stmQsKA0DhPGwmhfvF856wq+gbM8L92SAa/CBcLg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.5':
+ resolution: {integrity: sha512-KSol1De1spMZL+Xg7K5IBWXIvRWv7+pveaxFWXpezezAG7CS6ojzRjtCGCiLxQricutTAi/LkNWKMsd2wNhMKQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-beta.53':
+ resolution: {integrity: sha512-bGe5EBB8FVjHBR1mOLOPEFg1Lp3//7geqWkU5NIhxe+yH0W8FVrQ6WRYOap4SUTKdklD/dC4qPLREkMMQ855FA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.5':
+ resolution: {integrity: sha512-WFljyDkxtXRlWxMjxeegf7xMYXxUr8u7JdXlOEWKYgDqEgxUnSEsVDxBiNWQ1D5kQKwf8Wo4sVKEYPRhCdsjwA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-beta.53':
+ resolution: {integrity: sha512-qL+63WKVQs1CMvFedlPt0U9PiEKJOAL/bsHMKUDS6Vp2Q+YAv/QLPu8rcvkfIMvQ0FPU2WL0aX4eWwF6e/GAnA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.5':
+ resolution: {integrity: sha512-CUlplTujmbDWp2gamvrqVKi2Or8lmngXT1WxsizJfts7JrvfGhZObciaY/+CbdbS9qNnskvwMZNEhTPrn7b+WA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-beta.53':
+ resolution: {integrity: sha512-VGl9JIGjoJh3H8Mb+7xnVqODajBmrdOOb9lxWXdcmxyI+zjB2sux69br0hZJDTyLJfvBoYm439zPACYbCjGRmw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.5':
+ resolution: {integrity: sha512-wdf7g9NbVZCeAo2iGhsjJb7I8ZFfs6X8bumfrWg82VK+8P6AlLXwk48a1ASiJQDTS7Svq2xVzZg3sGO2aXpHRA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-beta.53':
+ resolution: {integrity: sha512-B4iIserJXuSnNzA5xBLFUIjTfhNy7d9sq4FUMQY3GhQWGVhS2RWWzzDnkSU6MUt7/aHUrep0CdQfXUJI9D3W7A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.5':
+ resolution: {integrity: sha512-0CWY7ubu12nhzz+tkpHjoG3IRSTlWYe0wrfJRf4qqjqQSGtAYgoL9kwzdvlhaFdZ5ffVeyYw9qLsChcjUMEloQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-beta.53':
+ resolution: {integrity: sha512-BUjAEgpABEJXilGq/BPh7jeU3WAJ5o15c1ZEgHaDWSz3LB881LQZnbNJHmUiM4d1JQWMYYyR1Y490IBHi2FPJg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.5':
+ resolution: {integrity: sha512-LztXnGzv6t2u830mnZrFLRVqT/DPJ9DL4ZTz/y93rqUVkeHjMMYIYaFj+BUthiYxbVH9dH0SZYufETspKY/NhA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.53':
+ resolution: {integrity: sha512-s27uU7tpCWSjHBnxyVXHt3rMrQdJq5MHNv3BzsewCIroIw3DJFjMH1dzCPPMUFxnh1r52Nf9IJ/eWp6LDoyGcw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.5':
+ resolution: {integrity: sha512-jUct1XVeGtyjqJXEAfvdFa8xoigYZ2rge7nYEm70ppQxpfH9ze2fbIrpHmP2tNM2vL/F6Dd0CpXhpjPbC6bSxQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-beta.53':
+ resolution: {integrity: sha512-cjWL/USPJ1g0en2htb4ssMjIycc36RvdQAx1WlXnS6DpULswiUTVXPDesTifSKYSyvx24E0YqQkEm0K/M2Z/AA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.5':
+ resolution: {integrity: sha512-VQ8F9ld5gw29epjnVGdrx8ugiLTe8BMqmhDYy7nGbdeDo4HAt4bgdZvLbViEhg7DZyHLpiEUlO5/jPSUrIuxRQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@rolldown/pluginutils@1.0.0-beta.53':
+ resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==}
+
+ '@rolldown/pluginutils@1.0.0-rc.3':
+ resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==}
+
+ '@rolldown/pluginutils@1.0.0-rc.5':
+ resolution: {integrity: sha512-RxlLX/DPoarZ9PtxVrQgZhPoor987YtKQqCo5zkjX+0S0yLJ7Vv515Wk6+xtTL67VONKJKxETWZwuZjss2idYw==}
+
+ '@rollup/pluginutils@5.3.0':
+ resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/rollup-android-arm-eabi@4.59.0':
+ resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.59.0':
+ resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.59.0':
+ resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.59.0':
+ resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.59.0':
+ resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.59.0':
+ resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.59.0':
+ resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.59.0':
+ resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.59.0':
+ resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.59.0':
+ resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-gnu@4.59.0':
+ resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-musl@4.59.0':
+ resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.59.0':
+ resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-musl@4.59.0':
+ resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.59.0':
+ resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-musl@4.59.0':
+ resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.59.0':
+ resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.59.0':
+ resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.59.0':
+ resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-openbsd-x64@4.59.0':
+ resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@rollup/rollup-openharmony-arm64@4.59.0':
+ resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.59.0':
+ resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.59.0':
+ resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-gnu@4.59.0':
+ resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.59.0':
+ resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rushstack/node-core-library@5.20.3':
+ resolution: {integrity: sha512-95JgEPq2k7tHxhF9/OJnnyHDXfC9cLhhta0An/6MlkDsX2A6dTzDrTUG18vx4vjc280V0fi0xDH9iQczpSuWsw==}
+ peerDependencies:
+ '@types/node': '*'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@rushstack/problem-matcher@0.2.1':
+ resolution: {integrity: sha512-gulfhBs6n+I5b7DvjKRfhMGyUejtSgOHTclF/eONr8hcgF1APEDjhxIsfdUYYMzC3rvLwGluqLjbwCFZ8nxrog==}
+ peerDependencies:
+ '@types/node': '*'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@rushstack/rig-package@0.7.2':
+ resolution: {integrity: sha512-9XbFWuqMYcHUso4mnETfhGVUSaADBRj6HUAAEYk50nMPn8WRICmBuCphycQGNB3duIR6EEZX3Xj3SYc2XiP+9A==}
+
+ '@rushstack/terminal@0.22.3':
+ resolution: {integrity: sha512-gHC9pIMrUPzAbBiI4VZMU7Q+rsCzb8hJl36lFIulIzoceKotyKL3Rd76AZ2CryCTKEg+0bnTj406HE5YY5OQvw==}
+ peerDependencies:
+ '@types/node': '*'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@rushstack/ts-command-line@5.3.3':
+ resolution: {integrity: sha512-c+ltdcvC7ym+10lhwR/vWiOhsrm/bP3By2VsFcs5qTKv+6tTmxgbVrtJ5NdNjANiV5TcmOZgUN+5KYQ4llsvEw==}
+
+ '@standard-schema/spec@1.1.0':
+ resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
+
+ '@tanstack/query-core@5.90.20':
+ resolution: {integrity: sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==}
+
+ '@tanstack/react-query@5.90.21':
+ resolution: {integrity: sha512-0Lu6y5t+tvlTJMTO7oh5NSpJfpg/5D41LlThfepTixPYkJ0sE2Jj0m0f6yYqujBwIXlId87e234+MxG3D3g7kg==}
+ peerDependencies:
+ react: ^18 || ^19
+
+ '@tybys/wasm-util@0.10.1':
+ resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+
+ '@types/argparse@1.0.38':
+ resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
+
+ '@types/babel__core@7.20.5':
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+ '@types/babel__generator@7.27.0':
+ resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
+
+ '@types/babel__template@7.4.4':
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+ '@types/babel__traverse@7.28.0':
+ resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
+
+ '@types/chai@5.2.3':
+ resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
+
+ '@types/deep-eql@4.0.2':
+ resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/jsesc@2.5.1':
+ resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==}
+
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ '@types/node@25.3.1':
+ resolution: {integrity: sha512-hj9YIJimBCipHVfHKRMnvmHg+wfhKc0o4mTtXh9pKBjC8TLJzz0nzGmLi5UJsYAUgSvXFHgb0V2oY10DUFtImw==}
+
+ '@types/prompt-sync@4.2.3':
+ resolution: {integrity: sha512-Ox77gCSx0YyeakGt/qfOZUSFNSSi+sh3ABoGOiCwiO2KODx492BJnUm9oIXS+AHJtqp12iM4RduY6viTJ9bYwA==}
+
+ '@types/react@19.2.14':
+ resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==}
+
+ '@types/yargs-parser@21.0.3':
+ resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
+
+ '@types/yargs@17.0.35':
+ resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==}
+
+ '@ucast/core@1.10.2':
+ resolution: {integrity: sha512-ons5CwXZ/51wrUPfoduC+cO7AS1/wRb0ybpQJ9RrssossDxVy4t49QxWoWgfBDvVKsz9VXzBk9z0wqTdZ+Cq8g==}
+
+ '@ucast/js@3.1.0':
+ resolution: {integrity: sha512-eJ7yQeYtMK85UZjxoxBEbTWx6UMxEXKbjVyp+NlzrT5oMKV5Gpo/9bjTl3r7msaXTVC8iD9NJacqJ8yp7joX+Q==}
+
+ '@ucast/mongo2js@1.4.1':
+ resolution: {integrity: sha512-9aeg5cmqwRQnKCXHN6I17wk83Rcm487bHelaG8T4vfpWneAI469wSI3Srnbu+PuZ5znWRbnwtVq9RgPL+bN6CA==}
+
+ '@ucast/mongo@2.4.3':
+ resolution: {integrity: sha512-XcI8LclrHWP83H+7H2anGCEeDq0n+12FU2mXCTz6/Tva9/9ddK/iacvvhCyW6cijAAOILmt0tWplRyRhVyZLsA==}
+
+ '@vitejs/plugin-react@5.1.4':
+ resolution: {integrity: sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
+
+ '@vitest/expect@4.0.18':
+ resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==}
+
+ '@vitest/mocker@4.0.18':
+ resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^6.0.0 || ^7.0.0-0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
+ '@vitest/pretty-format@4.0.18':
+ resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==}
+
+ '@vitest/runner@4.0.18':
+ resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==}
+
+ '@vitest/snapshot@4.0.18':
+ resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==}
+
+ '@vitest/spy@4.0.18':
+ resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==}
+
+ '@vitest/utils@4.0.18':
+ resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==}
+
+ '@volar/language-core@2.4.28':
+ resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==}
+
+ '@volar/source-map@2.4.28':
+ resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==}
+
+ '@volar/typescript@2.4.28':
+ resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==}
+
+ '@vue/compiler-core@3.5.29':
+ resolution: {integrity: sha512-cuzPhD8fwRHk8IGfmYaR4eEe4cAyJEL66Ove/WZL7yWNL134nqLddSLwNRIsFlnnW1kK+p8Ck3viFnC0chXCXw==}
+
+ '@vue/compiler-dom@3.5.29':
+ resolution: {integrity: sha512-n0G5o7R3uBVmVxjTIYcz7ovr8sy7QObFG8OQJ3xGCDNhbG60biP/P5KnyY8NLd81OuT1WJflG7N4KWYHaeeaIg==}
+
+ '@vue/compiler-vue2@2.7.16':
+ resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
+
+ '@vue/language-core@2.2.0':
+ resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@vue/shared@3.5.29':
+ resolution: {integrity: sha512-w7SR0A5zyRByL9XUkCfdLs7t9XOHUyJ67qPGQjOou3p6GvBeBW+AVjUUmlxtZ4PIYaRvE+1LmK44O4uajlZwcg==}
+
+ acorn@8.16.0:
+ resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ ajv-draft-04@1.0.0:
+ resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==}
+ peerDependencies:
+ ajv: ^8.5.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
+ ajv-formats@3.0.1:
+ resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
+ ajv@8.18.0:
+ resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==}
+
+ alien-signals@0.4.14:
+ resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==}
+
+ ansi-regex@4.1.1:
+ resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==}
+ engines: {node: '>=6'}
+
+ ansi-regex@6.2.2:
+ resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
+ engines: {node: '>=12'}
+
+ ansi-styles@6.2.3:
+ resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
+ engines: {node: '>=12'}
+
+ ansis@4.2.0:
+ resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
+ engines: {node: '>=14'}
+
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
+ ast-kit@3.0.0-beta.1:
+ resolution: {integrity: sha512-trmleAnZ2PxN/loHWVhhx1qeOHSRXq4TDsBBxq3GqeJitfk3+jTQ+v/C1km/KYq9M7wKqCewMh+/NAvVH7m+bw==}
+ engines: {node: '>=20.19.0'}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ axios@1.13.5:
+ resolution: {integrity: sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==}
+
+ balanced-match@4.0.4:
+ resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
+ engines: {node: 18 || 20 || >=22}
+
+ baseline-browser-mapping@2.10.0:
+ resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ birpc@4.0.0:
+ resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==}
+
+ brace-expansion@5.0.3:
+ resolution: {integrity: sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==}
+ engines: {node: 18 || 20 || >=22}
+
+ browserslist@4.28.1:
+ resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+ engines: {node: '>=8'}
+
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
+
+ call-me-maybe@1.0.2:
+ resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ caniuse-lite@1.0.30001774:
+ resolution: {integrity: sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==}
+
+ chai@6.2.2:
+ resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
+ engines: {node: '>=18'}
+
+ cliui@9.0.1:
+ resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==}
+ engines: {node: '>=20'}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ compare-versions@6.1.1:
+ resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==}
+
+ confbox@0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+
+ confbox@0.2.4:
+ resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
+
+ de-indent@1.0.2:
+ resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ defu@6.1.4:
+ resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ diff@8.0.3:
+ resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==}
+ engines: {node: '>=0.3.1'}
+
+ dts-resolver@2.1.3:
+ resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==}
+ engines: {node: '>=20.19.0'}
+ peerDependencies:
+ oxc-resolver: '>=11.0.0'
+ peerDependenciesMeta:
+ oxc-resolver:
+ optional: true
+
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
+
+ electron-to-chromium@1.5.302:
+ resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==}
+
+ emoji-regex@10.6.0:
+ resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
+
+ empathic@2.0.0:
+ resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==}
+ engines: {node: '>=14'}
+
+ entities@7.0.1:
+ resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
+ engines: {node: '>=0.12'}
+
+ 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-module-lexer@1.7.0:
+ resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+
+ es-object-atoms@1.1.1:
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+ engines: {node: '>= 0.4'}
+
+ es-set-tostringtag@2.1.0:
+ resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
+ engines: {node: '>= 0.4'}
+
+ esbuild@0.27.3:
+ resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+ expect-type@1.3.0:
+ resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
+ engines: {node: '>=12.0.0'}
+
+ exsolve@1.0.8:
+ resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-uri@3.1.0:
+ resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ follow-redirects@1.15.11:
+ resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ form-data@4.0.5:
+ resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
+ engines: {node: '>= 6'}
+
+ fs-extra@11.3.3:
+ resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==}
+ engines: {node: '>=14.14'}
+
+ 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==}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-east-asian-width@1.5.0:
+ resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==}
+ engines: {node: '>=18'}
+
+ 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-tsconfig@4.13.6:
+ resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==}
+
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ handlebars@4.7.8:
+ resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==}
+ engines: {node: '>=0.4.7'}
+ hasBin: true
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ 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.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ hookable@6.0.1:
+ resolution: {integrity: sha512-uKGyY8BuzN/a5gvzvA+3FVWo0+wUjgtfSdnmjtrOVwQCZPHpHDH2WRO3VZSOeluYrHoDCiXFffZXs8Dj1ULWtw==}
+
+ i18next@25.8.13:
+ resolution: {integrity: sha512-E0vzjBY1yM+nsFrtgkjLhST2NBkirkvOVoQa0MSldhsuZ3jUge7ZNpuwG0Cfc74zwo5ZwRzg3uOgT+McBn32iA==}
+ peerDependencies:
+ typescript: ^5
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ import-fresh@3.3.1:
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+ engines: {node: '>=6'}
+
+ import-lazy@4.0.0:
+ resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
+ engines: {node: '>=8'}
+
+ import-without-cache@0.2.5:
+ resolution: {integrity: sha512-B6Lc2s6yApwnD2/pMzFh/d5AVjdsDXjgkeJ766FmFuJELIGHNycKRj+l3A39yZPM4CchqNCB4RITEAYB1KUM6A==}
+ engines: {node: '>=20.19.0'}
+
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ jju@1.4.0:
+ resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-yaml@4.1.1:
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
+ hasBin: true
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ jsonfile@6.2.0:
+ resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
+
+ kolorist@1.8.0:
+ resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
+
+ lightningcss-android-arm64@1.31.1:
+ resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.31.1:
+ resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.31.1:
+ resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.31.1:
+ resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.31.1:
+ resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.31.1:
+ resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-arm64-musl@1.31.1:
+ resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-x64-gnu@1.31.1:
+ resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-linux-x64-musl@1.31.1:
+ resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-win32-arm64-msvc@1.31.1:
+ resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.31.1:
+ resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.31.1:
+ resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==}
+ engines: {node: '>= 12.0.0'}
+
+ local-pkg@1.1.2:
+ resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==}
+ engines: {node: '>=14'}
+
+ lodash@4.17.23:
+ resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ minimatch@10.2.1:
+ resolution: {integrity: sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==}
+ engines: {node: 20 || >=22}
+
+ minimatch@9.0.8:
+ resolution: {integrity: sha512-reYkDYtj/b19TeqbNZCV4q9t+Yxylf/rYBsLb42SXJatTv4/ylq5lEiAmhA/IToxO7NI2UzNMghHoHuaqDkAjw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mlly@1.8.0:
+ resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ muggle-string@0.4.1:
+ resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ neo-async@2.6.2:
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+
+ node-releases@2.0.27:
+ resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
+
+ obug@2.1.1:
+ resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
+
+ openapi-types@12.1.3:
+ resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==}
+
+ oxfmt@0.34.0:
+ resolution: {integrity: sha512-t+zTE4XGpzPTK+Zk9gSwcJcFi4pqjl6PwO/ZxPBJiJQ2XCKMucwjPlHxvPHyVKJtkMSyrDGfQ7Ntg/hUr4OgHQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ oxlint-tsgolint@0.15.0:
+ resolution: {integrity: sha512-iwvFmhKQVZzVTFygUVI4t2S/VKEm+Mqkw3jQRJwfDuTcUYI5LCIYzdO5Dbuv4mFOkXZCcXaRRh0m+uydB5xdqw==}
+ hasBin: true
+
+ oxlint@1.50.0:
+ resolution: {integrity: sha512-iSJ4IZEICBma8cZX7kxIIz9PzsYLF2FaLAYN6RKu7VwRVKdu7RIgpP99bTZaGl//Yao7fsaGZLSEo5xBrI5ReQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ oxlint-tsgolint: '>=0.14.1'
+ peerDependenciesMeta:
+ oxlint-tsgolint:
+ optional: true
+
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
+ path-browserify@1.0.1:
+ resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
+
+ 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@4.0.3:
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ engines: {node: '>=12'}
+
+ pkg-types@1.3.1:
+ resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
+
+ pkg-types@2.3.0:
+ resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
+
+ postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ prompt-sync@4.2.0:
+ resolution: {integrity: sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==}
+
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
+ quansync@0.2.11:
+ resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
+
+ quansync@1.0.0:
+ resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==}
+
+ react-refresh@0.18.0:
+ resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==}
+ engines: {node: '>=0.10.0'}
+
+ react@19.2.4:
+ resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==}
+ engines: {node: '>=0.10.0'}
+
+ reflect-metadata@0.2.2:
+ resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==}
+
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
+ rolldown-plugin-dts@0.22.2:
+ resolution: {integrity: sha512-Ge+XF962Kobjr0hRPx1neVnLU2jpKkD2zevZTfPKf/0el4eYo9SyGPm0stiHDG2JQuL0Q3HLD0Kn+ST8esvVdA==}
+ engines: {node: '>=20.19.0'}
+ peerDependencies:
+ '@ts-macro/tsc': ^0.3.6
+ '@typescript/native-preview': '>=7.0.0-dev.20250601.1'
+ rolldown: ^1.0.0-rc.3
+ typescript: ^5.0.0 || ^6.0.0-beta
+ vue-tsc: ~3.2.0
+ peerDependenciesMeta:
+ '@ts-macro/tsc':
+ optional: true
+ '@typescript/native-preview':
+ optional: true
+ typescript:
+ optional: true
+ vue-tsc:
+ optional: true
+
+ rolldown-vite@7.3.1:
+ resolution: {integrity: sha512-LYzdNAjRHhF2yA4JUQm/QyARyi216N2rpJ0lJZb8E9FU2y5v6Vk+xq/U4XBOxMefpWixT5H3TslmAHm1rqIq2w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ esbuild: ^0.27.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
+ 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
+
+ rolldown@1.0.0-beta.53:
+ resolution: {integrity: sha512-Qd9c2p0XKZdgT5AYd+KgAMggJ8ZmCs3JnS9PTMWkyUfteKlfmKtxJbWTHkVakxwXs1Ub7jrRYVeFeF7N0sQxyw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ rolldown@1.0.0-rc.5:
+ resolution: {integrity: sha512-0AdalTs6hNTioaCYIkAa7+xsmHBfU5hCNclZnM/lp7lGGDuUOb6N4BVNtwiomybbencDjq/waKjTImqiGCs5sw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ rollup@4.59.0:
+ resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.5.4:
+ resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ semver@7.7.4:
+ resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ 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'}
+
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
+ stackback@0.0.2:
+ resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
+ std-env@3.10.0:
+ resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
+
+ string-argv@0.3.2:
+ resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
+ engines: {node: '>=0.6.19'}
+
+ string-width@7.2.0:
+ resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+ engines: {node: '>=18'}
+
+ strip-ansi@5.2.0:
+ resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==}
+ engines: {node: '>=6'}
+
+ strip-ansi@7.1.2:
+ resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
+ engines: {node: '>=12'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ tagged-tag@1.0.0:
+ resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==}
+ engines: {node: '>=20'}
+
+ tinybench@2.9.0:
+ resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
+ tinyexec@1.0.2:
+ resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
+ engines: {node: '>=18'}
+
+ tinyglobby@0.2.15:
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ engines: {node: '>=12.0.0'}
+
+ tinypool@2.1.0:
+ resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==}
+ engines: {node: ^20.0.0 || >=22.0.0}
+
+ tinyrainbow@3.0.3:
+ resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==}
+ engines: {node: '>=14.0.0'}
+
+ tree-kill@1.2.2:
+ resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
+ hasBin: true
+
+ ts-pattern@5.9.0:
+ resolution: {integrity: sha512-6s5V71mX8qBUmlgbrfL33xDUwO0fq48rxAu2LBE11WBeGdpCPOsXksQbZJHvHwhrd3QjUusd3mAOM5Gg0mFBLg==}
+
+ tsdown@0.21.0-beta.2:
+ resolution: {integrity: sha512-OKj8mKf0ws1ucxuEi3mO/OGyfRQxO9MY2D6SoIE/7RZcbojsZSBhJr4xC4MNivMqrQvi3Ke2e+aRZDemPBWPCw==}
+ engines: {node: '>=20.19.0'}
+ hasBin: true
+ peerDependencies:
+ '@arethetypeswrong/core': ^0.18.1
+ '@vitejs/devtools': '*'
+ publint: ^0.3.0
+ typescript: ^5.0.0
+ unplugin-lightningcss: ^0.4.0
+ unplugin-unused: ^0.5.0
+ peerDependenciesMeta:
+ '@arethetypeswrong/core':
+ optional: true
+ '@vitejs/devtools':
+ optional: true
+ publint:
+ optional: true
+ typescript:
+ optional: true
+ unplugin-lightningcss:
+ optional: true
+ unplugin-unused:
+ optional: true
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ tsx@4.21.0:
+ resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
+ type-fest@5.4.4:
+ resolution: {integrity: sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==}
+ engines: {node: '>=20'}
+
+ typescript@5.8.2:
+ resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ ufo@1.6.3:
+ resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
+
+ uglify-js@3.19.3:
+ resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
+ engines: {node: '>=0.8.0'}
+ hasBin: true
+
+ unconfig-core@7.5.0:
+ resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==}
+
+ undici-types@7.18.2:
+ resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
+
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+
+ unrun@0.2.28:
+ resolution: {integrity: sha512-LqMrI3ZEUMZ2476aCsbUTfy95CHByqez05nju4AQv4XFPkxh5yai7Di1/Qb0FoELHEEPDWhQi23EJeFyrBV0Og==}
+ engines: {node: '>=20.19.0'}
+ hasBin: true
+ peerDependencies:
+ synckit: ^0.11.11
+ peerDependenciesMeta:
+ synckit:
+ optional: true
+
+ update-browserslist-db@1.2.3:
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ vite-plugin-dts@4.5.4:
+ resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==}
+ peerDependencies:
+ typescript: '*'
+ vite: '*'
+ peerDependenciesMeta:
+ vite:
+ optional: true
+
+ vite@7.3.1:
+ resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ lightningcss: ^1.21.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ vitest@4.0.18:
+ resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==}
+ 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.0.18
+ '@vitest/browser-preview': 4.0.18
+ '@vitest/browser-webdriverio': 4.0.18
+ '@vitest/ui': 4.0.18
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@opentelemetry/api':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser-playwright':
+ optional: true
+ '@vitest/browser-preview':
+ optional: true
+ '@vitest/browser-webdriverio':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
+ vscode-uri@3.1.0:
+ resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
+
+ why-is-node-running@2.3.0:
+ resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ wordwrap@1.0.0:
+ resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+
+ wrap-ansi@9.0.2:
+ resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
+ engines: {node: '>=18'}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
+ yargs-parser@22.0.0:
+ resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=23}
+
+ yargs@18.0.0:
+ resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=23}
+
+ zod@4.3.6:
+ resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==}
+
+snapshots:
+
+ '@apidevtools/json-schema-ref-parser@11.7.2':
+ dependencies:
+ '@jsdevtools/ono': 7.1.3
+ '@types/json-schema': 7.0.15
+ js-yaml: 4.1.1
+
+ '@apidevtools/openapi-schemas@2.1.0': {}
+
+ '@apidevtools/swagger-methods@3.0.2': {}
+
+ '@apidevtools/swagger-parser@10.1.1(openapi-types@12.1.3)':
+ dependencies:
+ '@apidevtools/json-schema-ref-parser': 11.7.2
+ '@apidevtools/openapi-schemas': 2.1.0
+ '@apidevtools/swagger-methods': 3.0.2
+ '@jsdevtools/ono': 7.1.3
+ ajv: 8.18.0
+ ajv-draft-04: 1.0.0(ajv@8.18.0)
+ call-me-maybe: 1.0.2
+ openapi-types: 12.1.3
+
+ '@babel/code-frame@7.29.0':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.29.0': {}
+
+ '@babel/core@7.29.0':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
+ '@babel/helpers': 7.28.6
+ '@babel/parser': 7.29.0
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.29.1':
+ dependencies:
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/generator@8.0.0-rc.1':
+ dependencies:
+ '@babel/parser': 8.0.0-rc.1
+ '@babel/types': 8.0.0-rc.1
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ '@types/jsesc': 2.5.1
+ jsesc: 3.1.0
+
+ '@babel/helper-compilation-targets@7.28.6':
+ dependencies:
+ '@babel/compat-data': 7.29.0
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.28.1
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-globals@7.28.0': {}
+
+ '@babel/helper-module-imports@7.28.6':
+ dependencies:
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-plugin-utils@7.28.6': {}
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-string-parser@8.0.0-rc.2': {}
+
+ '@babel/helper-validator-identifier@7.28.5': {}
+
+ '@babel/helper-validator-identifier@8.0.0-rc.1': {}
+
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helpers@7.28.6':
+ dependencies:
+ '@babel/template': 7.28.6
+ '@babel/types': 7.29.0
+
+ '@babel/parser@7.29.0':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@babel/parser@8.0.0-rc.1':
+ dependencies:
+ '@babel/types': 8.0.0-rc.1
+
+ '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/runtime@7.28.6': {}
+
+ '@babel/template@7.28.6':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
+
+ '@babel/traverse@7.29.0':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.29.0
+ '@babel/template': 7.28.6
+ '@babel/types': 7.29.0
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.29.0':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+
+ '@babel/types@8.0.0-rc.1':
+ dependencies:
+ '@babel/helper-string-parser': 8.0.0-rc.2
+ '@babel/helper-validator-identifier': 8.0.0-rc.1
+
+ '@casl/ability@6.8.0':
+ dependencies:
+ '@ucast/mongo2js': 1.4.1
+
+ '@casl/react@5.0.1(@casl/ability@6.8.0)(react@19.2.4)':
+ dependencies:
+ '@casl/ability': 6.8.0
+ react: 19.2.4
+
+ '@emnapi/core@1.8.1':
+ dependencies:
+ '@emnapi/wasi-threads': 1.1.0
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/runtime@1.8.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/wasi-threads@1.1.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@esbuild/aix-ppc64@0.27.3':
+ optional: true
+
+ '@esbuild/android-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/android-arm@0.27.3':
+ optional: true
+
+ '@esbuild/android-x64@0.27.3':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/darwin-x64@0.27.3':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-arm@0.27.3':
+ optional: true
+
+ '@esbuild/linux-ia32@0.27.3':
+ optional: true
+
+ '@esbuild/linux-loong64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.27.3':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-s390x@0.27.3':
+ optional: true
+
+ '@esbuild/linux-x64@0.27.3':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.27.3':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.27.3':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/sunos-x64@0.27.3':
+ optional: true
+
+ '@esbuild/win32-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/win32-ia32@0.27.3':
+ optional: true
+
+ '@esbuild/win32-x64@0.27.3':
+ optional: true
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@jsdevtools/ono@7.1.3': {}
+
+ '@microsoft/api-extractor-model@7.33.4(@types/node@25.3.1)':
+ dependencies:
+ '@microsoft/tsdoc': 0.16.0
+ '@microsoft/tsdoc-config': 0.18.1
+ '@rushstack/node-core-library': 5.20.3(@types/node@25.3.1)
+ transitivePeerDependencies:
+ - '@types/node'
+
+ '@microsoft/api-extractor@7.57.6(@types/node@25.3.1)':
+ dependencies:
+ '@microsoft/api-extractor-model': 7.33.4(@types/node@25.3.1)
+ '@microsoft/tsdoc': 0.16.0
+ '@microsoft/tsdoc-config': 0.18.1
+ '@rushstack/node-core-library': 5.20.3(@types/node@25.3.1)
+ '@rushstack/rig-package': 0.7.2
+ '@rushstack/terminal': 0.22.3(@types/node@25.3.1)
+ '@rushstack/ts-command-line': 5.3.3(@types/node@25.3.1)
+ diff: 8.0.3
+ lodash: 4.17.23
+ minimatch: 10.2.1
+ resolve: 1.22.11
+ semver: 7.5.4
+ source-map: 0.6.1
+ typescript: 5.8.2
+ transitivePeerDependencies:
+ - '@types/node'
+
+ '@microsoft/tsdoc-config@0.18.1':
+ dependencies:
+ '@microsoft/tsdoc': 0.16.0
+ ajv: 8.18.0
+ jju: 1.4.0
+ resolve: 1.22.11
+
+ '@microsoft/tsdoc@0.16.0': {}
+
+ '@napi-rs/wasm-runtime@1.1.1':
+ dependencies:
+ '@emnapi/core': 1.8.1
+ '@emnapi/runtime': 1.8.1
+ '@tybys/wasm-util': 0.10.1
+ optional: true
+
+ '@oxc-project/runtime@0.101.0': {}
+
+ '@oxc-project/types@0.101.0': {}
+
+ '@oxc-project/types@0.114.0': {}
+
+ '@oxfmt/binding-android-arm-eabi@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-android-arm64@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-darwin-arm64@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-darwin-x64@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-freebsd-x64@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-linux-arm-gnueabihf@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-linux-arm-musleabihf@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-linux-arm64-gnu@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-linux-arm64-musl@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-linux-ppc64-gnu@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-linux-riscv64-gnu@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-linux-riscv64-musl@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-linux-s390x-gnu@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-linux-x64-gnu@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-linux-x64-musl@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-openharmony-arm64@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-win32-arm64-msvc@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-win32-ia32-msvc@0.34.0':
+ optional: true
+
+ '@oxfmt/binding-win32-x64-msvc@0.34.0':
+ optional: true
+
+ '@oxlint-tsgolint/darwin-arm64@0.15.0':
+ optional: true
+
+ '@oxlint-tsgolint/darwin-x64@0.15.0':
+ optional: true
+
+ '@oxlint-tsgolint/linux-arm64@0.15.0':
+ optional: true
+
+ '@oxlint-tsgolint/linux-x64@0.15.0':
+ optional: true
+
+ '@oxlint-tsgolint/win32-arm64@0.15.0':
+ optional: true
+
+ '@oxlint-tsgolint/win32-x64@0.15.0':
+ optional: true
+
+ '@oxlint/binding-android-arm-eabi@1.50.0':
+ optional: true
+
+ '@oxlint/binding-android-arm64@1.50.0':
+ optional: true
+
+ '@oxlint/binding-darwin-arm64@1.50.0':
+ optional: true
+
+ '@oxlint/binding-darwin-x64@1.50.0':
+ optional: true
+
+ '@oxlint/binding-freebsd-x64@1.50.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm-gnueabihf@1.50.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm-musleabihf@1.50.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm64-gnu@1.50.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm64-musl@1.50.0':
+ optional: true
+
+ '@oxlint/binding-linux-ppc64-gnu@1.50.0':
+ optional: true
+
+ '@oxlint/binding-linux-riscv64-gnu@1.50.0':
+ optional: true
+
+ '@oxlint/binding-linux-riscv64-musl@1.50.0':
+ optional: true
+
+ '@oxlint/binding-linux-s390x-gnu@1.50.0':
+ optional: true
+
+ '@oxlint/binding-linux-x64-gnu@1.50.0':
+ optional: true
+
+ '@oxlint/binding-linux-x64-musl@1.50.0':
+ optional: true
+
+ '@oxlint/binding-openharmony-arm64@1.50.0':
+ optional: true
+
+ '@oxlint/binding-win32-arm64-msvc@1.50.0':
+ optional: true
+
+ '@oxlint/binding-win32-ia32-msvc@1.50.0':
+ optional: true
+
+ '@oxlint/binding-win32-x64-msvc@1.50.0':
+ optional: true
+
+ '@quansync/fs@1.0.0':
+ dependencies:
+ quansync: 1.0.0
+
+ '@rolldown/binding-android-arm64@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-android-arm64@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-darwin-arm64@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-darwin-x64@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-darwin-x64@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-freebsd-x64@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-beta.53':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.1.1
+ optional: true
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.5':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.1.1
+ optional: true
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/pluginutils@1.0.0-beta.53': {}
+
+ '@rolldown/pluginutils@1.0.0-rc.3': {}
+
+ '@rolldown/pluginutils@1.0.0-rc.5': {}
+
+ '@rollup/pluginutils@5.3.0(rollup@4.59.0)':
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-walker: 2.0.2
+ picomatch: 4.0.3
+ optionalDependencies:
+ rollup: 4.59.0
+
+ '@rollup/rollup-android-arm-eabi@4.59.0':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-musl@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-musl@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.59.0':
+ optional: true
+
+ '@rollup/rollup-openbsd-x64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-openharmony-arm64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.59.0':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.59.0':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.59.0':
+ optional: true
+
+ '@rushstack/node-core-library@5.20.3(@types/node@25.3.1)':
+ dependencies:
+ ajv: 8.18.0
+ ajv-draft-04: 1.0.0(ajv@8.18.0)
+ ajv-formats: 3.0.1(ajv@8.18.0)
+ fs-extra: 11.3.3
+ import-lazy: 4.0.0
+ jju: 1.4.0
+ resolve: 1.22.11
+ semver: 7.5.4
+ optionalDependencies:
+ '@types/node': 25.3.1
+
+ '@rushstack/problem-matcher@0.2.1(@types/node@25.3.1)':
+ optionalDependencies:
+ '@types/node': 25.3.1
+
+ '@rushstack/rig-package@0.7.2':
+ dependencies:
+ resolve: 1.22.11
+ strip-json-comments: 3.1.1
+
+ '@rushstack/terminal@0.22.3(@types/node@25.3.1)':
+ dependencies:
+ '@rushstack/node-core-library': 5.20.3(@types/node@25.3.1)
+ '@rushstack/problem-matcher': 0.2.1(@types/node@25.3.1)
+ supports-color: 8.1.1
+ optionalDependencies:
+ '@types/node': 25.3.1
+
+ '@rushstack/ts-command-line@5.3.3(@types/node@25.3.1)':
+ dependencies:
+ '@rushstack/terminal': 0.22.3(@types/node@25.3.1)
+ '@types/argparse': 1.0.38
+ argparse: 1.0.10
+ string-argv: 0.3.2
+ transitivePeerDependencies:
+ - '@types/node'
+
+ '@standard-schema/spec@1.1.0': {}
+
+ '@tanstack/query-core@5.90.20': {}
+
+ '@tanstack/react-query@5.90.21(react@19.2.4)':
+ dependencies:
+ '@tanstack/query-core': 5.90.20
+ react: 19.2.4
+
+ '@tybys/wasm-util@0.10.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@types/argparse@1.0.38': {}
+
+ '@types/babel__core@7.20.5':
+ dependencies:
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
+ '@types/babel__generator': 7.27.0
+ '@types/babel__template': 7.4.4
+ '@types/babel__traverse': 7.28.0
+
+ '@types/babel__generator@7.27.0':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@types/babel__template@7.4.4':
+ dependencies:
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
+
+ '@types/babel__traverse@7.28.0':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@types/chai@5.2.3':
+ dependencies:
+ '@types/deep-eql': 4.0.2
+ assertion-error: 2.0.1
+
+ '@types/deep-eql@4.0.2': {}
+
+ '@types/estree@1.0.8': {}
+
+ '@types/jsesc@2.5.1': {}
+
+ '@types/json-schema@7.0.15': {}
+
+ '@types/node@25.3.1':
+ dependencies:
+ undici-types: 7.18.2
+
+ '@types/prompt-sync@4.2.3': {}
+
+ '@types/react@19.2.14':
+ dependencies:
+ csstype: 3.2.3
+
+ '@types/yargs-parser@21.0.3': {}
+
+ '@types/yargs@17.0.35':
+ dependencies:
+ '@types/yargs-parser': 21.0.3
+
+ '@ucast/core@1.10.2': {}
+
+ '@ucast/js@3.1.0':
+ dependencies:
+ '@ucast/core': 1.10.2
+
+ '@ucast/mongo2js@1.4.1':
+ dependencies:
+ '@ucast/core': 1.10.2
+ '@ucast/js': 3.1.0
+ '@ucast/mongo': 2.4.3
+
+ '@ucast/mongo@2.4.3':
+ dependencies:
+ '@ucast/core': 1.10.2
+
+ '@vitejs/plugin-react@5.1.4(rolldown-vite@7.3.1(@types/node@25.3.1)(esbuild@0.27.3)(tsx@4.21.0))':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0)
+ '@rolldown/pluginutils': 1.0.0-rc.3
+ '@types/babel__core': 7.20.5
+ react-refresh: 0.18.0
+ vite: rolldown-vite@7.3.1(@types/node@25.3.1)(esbuild@0.27.3)(tsx@4.21.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vitest/expect@4.0.18':
+ dependencies:
+ '@standard-schema/spec': 1.1.0
+ '@types/chai': 5.2.3
+ '@vitest/spy': 4.0.18
+ '@vitest/utils': 4.0.18
+ chai: 6.2.2
+ tinyrainbow: 3.0.3
+
+ '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.3.1)(lightningcss@1.31.1)(tsx@4.21.0))':
+ dependencies:
+ '@vitest/spy': 4.0.18
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 7.3.1(@types/node@25.3.1)(lightningcss@1.31.1)(tsx@4.21.0)
+
+ '@vitest/pretty-format@4.0.18':
+ dependencies:
+ tinyrainbow: 3.0.3
+
+ '@vitest/runner@4.0.18':
+ dependencies:
+ '@vitest/utils': 4.0.18
+ pathe: 2.0.3
+
+ '@vitest/snapshot@4.0.18':
+ dependencies:
+ '@vitest/pretty-format': 4.0.18
+ magic-string: 0.30.21
+ pathe: 2.0.3
+
+ '@vitest/spy@4.0.18': {}
+
+ '@vitest/utils@4.0.18':
+ dependencies:
+ '@vitest/pretty-format': 4.0.18
+ tinyrainbow: 3.0.3
+
+ '@volar/language-core@2.4.28':
+ dependencies:
+ '@volar/source-map': 2.4.28
+
+ '@volar/source-map@2.4.28': {}
+
+ '@volar/typescript@2.4.28':
+ dependencies:
+ '@volar/language-core': 2.4.28
+ path-browserify: 1.0.1
+ vscode-uri: 3.1.0
+
+ '@vue/compiler-core@3.5.29':
+ dependencies:
+ '@babel/parser': 7.29.0
+ '@vue/shared': 3.5.29
+ entities: 7.0.1
+ estree-walker: 2.0.2
+ source-map-js: 1.2.1
+
+ '@vue/compiler-dom@3.5.29':
+ dependencies:
+ '@vue/compiler-core': 3.5.29
+ '@vue/shared': 3.5.29
+
+ '@vue/compiler-vue2@2.7.16':
+ dependencies:
+ de-indent: 1.0.2
+ he: 1.2.0
+
+ '@vue/language-core@2.2.0(typescript@5.9.3)':
+ dependencies:
+ '@volar/language-core': 2.4.28
+ '@vue/compiler-dom': 3.5.29
+ '@vue/compiler-vue2': 2.7.16
+ '@vue/shared': 3.5.29
+ alien-signals: 0.4.14
+ minimatch: 9.0.8
+ muggle-string: 0.4.1
+ path-browserify: 1.0.1
+ optionalDependencies:
+ typescript: 5.9.3
+
+ '@vue/shared@3.5.29': {}
+
+ acorn@8.16.0: {}
+
+ ajv-draft-04@1.0.0(ajv@8.18.0):
+ optionalDependencies:
+ ajv: 8.18.0
+
+ ajv-formats@3.0.1(ajv@8.18.0):
+ optionalDependencies:
+ ajv: 8.18.0
+
+ ajv@8.18.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.1.0
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
+ alien-signals@0.4.14: {}
+
+ ansi-regex@4.1.1: {}
+
+ ansi-regex@6.2.2: {}
+
+ ansi-styles@6.2.3: {}
+
+ ansis@4.2.0: {}
+
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
+ argparse@2.0.1: {}
+
+ assertion-error@2.0.1: {}
+
+ ast-kit@3.0.0-beta.1:
+ dependencies:
+ '@babel/parser': 8.0.0-rc.1
+ estree-walker: 3.0.3
+ pathe: 2.0.3
+
+ asynckit@0.4.0: {}
+
+ axios@1.13.5:
+ dependencies:
+ follow-redirects: 1.15.11
+ form-data: 4.0.5
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
+ balanced-match@4.0.4: {}
+
+ baseline-browser-mapping@2.10.0: {}
+
+ birpc@4.0.0: {}
+
+ brace-expansion@5.0.3:
+ dependencies:
+ balanced-match: 4.0.4
+
+ browserslist@4.28.1:
+ dependencies:
+ baseline-browser-mapping: 2.10.0
+ caniuse-lite: 1.0.30001774
+ electron-to-chromium: 1.5.302
+ node-releases: 2.0.27
+ update-browserslist-db: 1.2.3(browserslist@4.28.1)
+
+ cac@6.7.14: {}
+
+ call-bind-apply-helpers@1.0.2:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
+ call-me-maybe@1.0.2: {}
+
+ callsites@3.1.0: {}
+
+ caniuse-lite@1.0.30001774: {}
+
+ chai@6.2.2: {}
+
+ cliui@9.0.1:
+ dependencies:
+ string-width: 7.2.0
+ strip-ansi: 7.1.2
+ wrap-ansi: 9.0.2
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ compare-versions@6.1.1: {}
+
+ confbox@0.1.8: {}
+
+ confbox@0.2.4: {}
+
+ convert-source-map@2.0.0: {}
+
+ csstype@3.2.3: {}
+
+ de-indent@1.0.2: {}
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ defu@6.1.4: {}
+
+ delayed-stream@1.0.0: {}
+
+ detect-libc@2.1.2: {}
+
+ diff@8.0.3: {}
+
+ dts-resolver@2.1.3: {}
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ electron-to-chromium@1.5.302: {}
+
+ emoji-regex@10.6.0: {}
+
+ empathic@2.0.0: {}
+
+ entities@7.0.1: {}
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-module-lexer@1.7.0: {}
+
+ es-object-atoms@1.1.1:
+ 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.2
+
+ esbuild@0.27.3:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.27.3
+ '@esbuild/android-arm': 0.27.3
+ '@esbuild/android-arm64': 0.27.3
+ '@esbuild/android-x64': 0.27.3
+ '@esbuild/darwin-arm64': 0.27.3
+ '@esbuild/darwin-x64': 0.27.3
+ '@esbuild/freebsd-arm64': 0.27.3
+ '@esbuild/freebsd-x64': 0.27.3
+ '@esbuild/linux-arm': 0.27.3
+ '@esbuild/linux-arm64': 0.27.3
+ '@esbuild/linux-ia32': 0.27.3
+ '@esbuild/linux-loong64': 0.27.3
+ '@esbuild/linux-mips64el': 0.27.3
+ '@esbuild/linux-ppc64': 0.27.3
+ '@esbuild/linux-riscv64': 0.27.3
+ '@esbuild/linux-s390x': 0.27.3
+ '@esbuild/linux-x64': 0.27.3
+ '@esbuild/netbsd-arm64': 0.27.3
+ '@esbuild/netbsd-x64': 0.27.3
+ '@esbuild/openbsd-arm64': 0.27.3
+ '@esbuild/openbsd-x64': 0.27.3
+ '@esbuild/openharmony-arm64': 0.27.3
+ '@esbuild/sunos-x64': 0.27.3
+ '@esbuild/win32-arm64': 0.27.3
+ '@esbuild/win32-ia32': 0.27.3
+ '@esbuild/win32-x64': 0.27.3
+
+ escalade@3.2.0: {}
+
+ estree-walker@2.0.2: {}
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ expect-type@1.3.0: {}
+
+ exsolve@1.0.8: {}
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-uri@3.1.0: {}
+
+ fdir@6.5.0(picomatch@4.0.3):
+ optionalDependencies:
+ picomatch: 4.0.3
+
+ follow-redirects@1.15.11: {}
+
+ form-data@4.0.5:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ es-set-tostringtag: 2.1.0
+ hasown: 2.0.2
+ mime-types: 2.1.35
+
+ fs-extra@11.3.3:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ gensync@1.0.0-beta.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-east-asian-width@1.5.0: {}
+
+ 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.1
+ function-bind: 1.1.2
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ math-intrinsics: 1.1.0
+
+ get-proto@1.0.1:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.1
+
+ get-tsconfig@4.13.6:
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+
+ gopd@1.2.0: {}
+
+ graceful-fs@4.2.11: {}
+
+ 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-flag@4.0.0: {}
+
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ he@1.2.0: {}
+
+ hookable@6.0.1: {}
+
+ i18next@25.8.13(typescript@5.9.3):
+ dependencies:
+ '@babel/runtime': 7.28.6
+ optionalDependencies:
+ typescript: 5.9.3
+
+ import-fresh@3.3.1:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
+ import-lazy@4.0.0: {}
+
+ import-without-cache@0.2.5: {}
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ jju@1.4.0: {}
+
+ js-tokens@4.0.0: {}
+
+ js-yaml@4.1.1:
+ dependencies:
+ argparse: 2.0.1
+
+ jsesc@3.1.0: {}
+
+ json-schema-traverse@1.0.0: {}
+
+ json5@2.2.3: {}
+
+ jsonfile@6.2.0:
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
+ kolorist@1.8.0: {}
+
+ lightningcss-android-arm64@1.31.1:
+ optional: true
+
+ lightningcss-darwin-arm64@1.31.1:
+ optional: true
+
+ lightningcss-darwin-x64@1.31.1:
+ optional: true
+
+ lightningcss-freebsd-x64@1.31.1:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.31.1:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.31.1:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.31.1:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.31.1:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.31.1:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.31.1:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.31.1:
+ optional: true
+
+ lightningcss@1.31.1:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.31.1
+ lightningcss-darwin-arm64: 1.31.1
+ lightningcss-darwin-x64: 1.31.1
+ lightningcss-freebsd-x64: 1.31.1
+ lightningcss-linux-arm-gnueabihf: 1.31.1
+ lightningcss-linux-arm64-gnu: 1.31.1
+ lightningcss-linux-arm64-musl: 1.31.1
+ lightningcss-linux-x64-gnu: 1.31.1
+ lightningcss-linux-x64-musl: 1.31.1
+ lightningcss-win32-arm64-msvc: 1.31.1
+ lightningcss-win32-x64-msvc: 1.31.1
+
+ local-pkg@1.1.2:
+ dependencies:
+ mlly: 1.8.0
+ pkg-types: 2.3.0
+ quansync: 0.2.11
+
+ lodash@4.17.23: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ lru-cache@6.0.0:
+ dependencies:
+ yallist: 4.0.0
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ math-intrinsics@1.1.0: {}
+
+ mime-db@1.52.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ minimatch@10.2.1:
+ dependencies:
+ brace-expansion: 5.0.3
+
+ minimatch@9.0.8:
+ dependencies:
+ brace-expansion: 5.0.3
+
+ minimist@1.2.8: {}
+
+ mlly@1.8.0:
+ dependencies:
+ acorn: 8.16.0
+ pathe: 2.0.3
+ pkg-types: 1.3.1
+ ufo: 1.6.3
+
+ ms@2.1.3: {}
+
+ muggle-string@0.4.1: {}
+
+ nanoid@3.3.11: {}
+
+ neo-async@2.6.2: {}
+
+ node-releases@2.0.27: {}
+
+ obug@2.1.1: {}
+
+ openapi-types@12.1.3: {}
+
+ oxfmt@0.34.0:
+ dependencies:
+ tinypool: 2.1.0
+ optionalDependencies:
+ '@oxfmt/binding-android-arm-eabi': 0.34.0
+ '@oxfmt/binding-android-arm64': 0.34.0
+ '@oxfmt/binding-darwin-arm64': 0.34.0
+ '@oxfmt/binding-darwin-x64': 0.34.0
+ '@oxfmt/binding-freebsd-x64': 0.34.0
+ '@oxfmt/binding-linux-arm-gnueabihf': 0.34.0
+ '@oxfmt/binding-linux-arm-musleabihf': 0.34.0
+ '@oxfmt/binding-linux-arm64-gnu': 0.34.0
+ '@oxfmt/binding-linux-arm64-musl': 0.34.0
+ '@oxfmt/binding-linux-ppc64-gnu': 0.34.0
+ '@oxfmt/binding-linux-riscv64-gnu': 0.34.0
+ '@oxfmt/binding-linux-riscv64-musl': 0.34.0
+ '@oxfmt/binding-linux-s390x-gnu': 0.34.0
+ '@oxfmt/binding-linux-x64-gnu': 0.34.0
+ '@oxfmt/binding-linux-x64-musl': 0.34.0
+ '@oxfmt/binding-openharmony-arm64': 0.34.0
+ '@oxfmt/binding-win32-arm64-msvc': 0.34.0
+ '@oxfmt/binding-win32-ia32-msvc': 0.34.0
+ '@oxfmt/binding-win32-x64-msvc': 0.34.0
+
+ oxlint-tsgolint@0.15.0:
+ optionalDependencies:
+ '@oxlint-tsgolint/darwin-arm64': 0.15.0
+ '@oxlint-tsgolint/darwin-x64': 0.15.0
+ '@oxlint-tsgolint/linux-arm64': 0.15.0
+ '@oxlint-tsgolint/linux-x64': 0.15.0
+ '@oxlint-tsgolint/win32-arm64': 0.15.0
+ '@oxlint-tsgolint/win32-x64': 0.15.0
+
+ oxlint@1.50.0(oxlint-tsgolint@0.15.0):
+ optionalDependencies:
+ '@oxlint/binding-android-arm-eabi': 1.50.0
+ '@oxlint/binding-android-arm64': 1.50.0
+ '@oxlint/binding-darwin-arm64': 1.50.0
+ '@oxlint/binding-darwin-x64': 1.50.0
+ '@oxlint/binding-freebsd-x64': 1.50.0
+ '@oxlint/binding-linux-arm-gnueabihf': 1.50.0
+ '@oxlint/binding-linux-arm-musleabihf': 1.50.0
+ '@oxlint/binding-linux-arm64-gnu': 1.50.0
+ '@oxlint/binding-linux-arm64-musl': 1.50.0
+ '@oxlint/binding-linux-ppc64-gnu': 1.50.0
+ '@oxlint/binding-linux-riscv64-gnu': 1.50.0
+ '@oxlint/binding-linux-riscv64-musl': 1.50.0
+ '@oxlint/binding-linux-s390x-gnu': 1.50.0
+ '@oxlint/binding-linux-x64-gnu': 1.50.0
+ '@oxlint/binding-linux-x64-musl': 1.50.0
+ '@oxlint/binding-openharmony-arm64': 1.50.0
+ '@oxlint/binding-win32-arm64-msvc': 1.50.0
+ '@oxlint/binding-win32-ia32-msvc': 1.50.0
+ '@oxlint/binding-win32-x64-msvc': 1.50.0
+ oxlint-tsgolint: 0.15.0
+
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
+
+ path-browserify@1.0.1: {}
+
+ path-parse@1.0.7: {}
+
+ pathe@2.0.3: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@4.0.3: {}
+
+ pkg-types@1.3.1:
+ dependencies:
+ confbox: 0.1.8
+ mlly: 1.8.0
+ pathe: 2.0.3
+
+ pkg-types@2.3.0:
+ dependencies:
+ confbox: 0.2.4
+ exsolve: 1.0.8
+ pathe: 2.0.3
+
+ postcss@8.5.6:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ prompt-sync@4.2.0:
+ dependencies:
+ strip-ansi: 5.2.0
+
+ proxy-from-env@1.1.0: {}
+
+ quansync@0.2.11: {}
+
+ quansync@1.0.0: {}
+
+ react-refresh@0.18.0: {}
+
+ react@19.2.4: {}
+
+ reflect-metadata@0.2.2: {}
+
+ require-from-string@2.0.2: {}
+
+ resolve-from@4.0.0: {}
+
+ resolve-pkg-maps@1.0.0: {}
+
+ resolve@1.22.11:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ rolldown-plugin-dts@0.22.2(rolldown@1.0.0-rc.5)(typescript@5.9.3):
+ dependencies:
+ '@babel/generator': 8.0.0-rc.1
+ '@babel/helper-validator-identifier': 8.0.0-rc.1
+ '@babel/parser': 8.0.0-rc.1
+ '@babel/types': 8.0.0-rc.1
+ ast-kit: 3.0.0-beta.1
+ birpc: 4.0.0
+ dts-resolver: 2.1.3
+ get-tsconfig: 4.13.6
+ obug: 2.1.1
+ rolldown: 1.0.0-rc.5
+ optionalDependencies:
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - oxc-resolver
+
+ rolldown-vite@7.3.1(@types/node@25.3.1)(esbuild@0.27.3)(tsx@4.21.0):
+ dependencies:
+ '@oxc-project/runtime': 0.101.0
+ fdir: 6.5.0(picomatch@4.0.3)
+ lightningcss: 1.31.1
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rolldown: 1.0.0-beta.53
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ '@types/node': 25.3.1
+ esbuild: 0.27.3
+ fsevents: 2.3.3
+ tsx: 4.21.0
+
+ rolldown@1.0.0-beta.53:
+ dependencies:
+ '@oxc-project/types': 0.101.0
+ '@rolldown/pluginutils': 1.0.0-beta.53
+ optionalDependencies:
+ '@rolldown/binding-android-arm64': 1.0.0-beta.53
+ '@rolldown/binding-darwin-arm64': 1.0.0-beta.53
+ '@rolldown/binding-darwin-x64': 1.0.0-beta.53
+ '@rolldown/binding-freebsd-x64': 1.0.0-beta.53
+ '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.53
+ '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.53
+ '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.53
+ '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.53
+ '@rolldown/binding-linux-x64-musl': 1.0.0-beta.53
+ '@rolldown/binding-openharmony-arm64': 1.0.0-beta.53
+ '@rolldown/binding-wasm32-wasi': 1.0.0-beta.53
+ '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.53
+ '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.53
+
+ rolldown@1.0.0-rc.5:
+ dependencies:
+ '@oxc-project/types': 0.114.0
+ '@rolldown/pluginutils': 1.0.0-rc.5
+ optionalDependencies:
+ '@rolldown/binding-android-arm64': 1.0.0-rc.5
+ '@rolldown/binding-darwin-arm64': 1.0.0-rc.5
+ '@rolldown/binding-darwin-x64': 1.0.0-rc.5
+ '@rolldown/binding-freebsd-x64': 1.0.0-rc.5
+ '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.5
+ '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.5
+ '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.5
+ '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.5
+ '@rolldown/binding-linux-x64-musl': 1.0.0-rc.5
+ '@rolldown/binding-openharmony-arm64': 1.0.0-rc.5
+ '@rolldown/binding-wasm32-wasi': 1.0.0-rc.5
+ '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.5
+ '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.5
+
+ rollup@4.59.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.59.0
+ '@rollup/rollup-android-arm64': 4.59.0
+ '@rollup/rollup-darwin-arm64': 4.59.0
+ '@rollup/rollup-darwin-x64': 4.59.0
+ '@rollup/rollup-freebsd-arm64': 4.59.0
+ '@rollup/rollup-freebsd-x64': 4.59.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.59.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.59.0
+ '@rollup/rollup-linux-arm64-gnu': 4.59.0
+ '@rollup/rollup-linux-arm64-musl': 4.59.0
+ '@rollup/rollup-linux-loong64-gnu': 4.59.0
+ '@rollup/rollup-linux-loong64-musl': 4.59.0
+ '@rollup/rollup-linux-ppc64-gnu': 4.59.0
+ '@rollup/rollup-linux-ppc64-musl': 4.59.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.59.0
+ '@rollup/rollup-linux-riscv64-musl': 4.59.0
+ '@rollup/rollup-linux-s390x-gnu': 4.59.0
+ '@rollup/rollup-linux-x64-gnu': 4.59.0
+ '@rollup/rollup-linux-x64-musl': 4.59.0
+ '@rollup/rollup-openbsd-x64': 4.59.0
+ '@rollup/rollup-openharmony-arm64': 4.59.0
+ '@rollup/rollup-win32-arm64-msvc': 4.59.0
+ '@rollup/rollup-win32-ia32-msvc': 4.59.0
+ '@rollup/rollup-win32-x64-gnu': 4.59.0
+ '@rollup/rollup-win32-x64-msvc': 4.59.0
+ fsevents: 2.3.3
+
+ semver@6.3.1: {}
+
+ semver@7.5.4:
+ dependencies:
+ lru-cache: 6.0.0
+
+ semver@7.7.4: {}
+
+ siginfo@2.0.0: {}
+
+ source-map-js@1.2.1: {}
+
+ source-map@0.6.1: {}
+
+ sprintf-js@1.0.3: {}
+
+ stackback@0.0.2: {}
+
+ std-env@3.10.0: {}
+
+ string-argv@0.3.2: {}
+
+ string-width@7.2.0:
+ dependencies:
+ emoji-regex: 10.6.0
+ get-east-asian-width: 1.5.0
+ strip-ansi: 7.1.2
+
+ strip-ansi@5.2.0:
+ dependencies:
+ ansi-regex: 4.1.1
+
+ strip-ansi@7.1.2:
+ dependencies:
+ ansi-regex: 6.2.2
+
+ strip-json-comments@3.1.1: {}
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ tagged-tag@1.0.0: {}
+
+ tinybench@2.9.0: {}
+
+ tinyexec@1.0.2: {}
+
+ tinyglobby@0.2.15:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+
+ tinypool@2.1.0: {}
+
+ tinyrainbow@3.0.3: {}
+
+ tree-kill@1.2.2: {}
+
+ ts-pattern@5.9.0: {}
+
+ tsdown@0.21.0-beta.2(typescript@5.9.3):
+ dependencies:
+ ansis: 4.2.0
+ cac: 6.7.14
+ defu: 6.1.4
+ empathic: 2.0.0
+ hookable: 6.0.1
+ import-without-cache: 0.2.5
+ obug: 2.1.1
+ picomatch: 4.0.3
+ rolldown: 1.0.0-rc.5
+ rolldown-plugin-dts: 0.22.2(rolldown@1.0.0-rc.5)(typescript@5.9.3)
+ semver: 7.7.4
+ tinyexec: 1.0.2
+ tinyglobby: 0.2.15
+ tree-kill: 1.2.2
+ unconfig-core: 7.5.0
+ unrun: 0.2.28
+ optionalDependencies:
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - '@ts-macro/tsc'
+ - '@typescript/native-preview'
+ - oxc-resolver
+ - synckit
+ - vue-tsc
+
+ tslib@2.8.1:
+ optional: true
+
+ tsx@4.21.0:
+ dependencies:
+ esbuild: 0.27.3
+ get-tsconfig: 4.13.6
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ type-fest@5.4.4:
+ dependencies:
+ tagged-tag: 1.0.0
+
+ typescript@5.8.2: {}
+
+ typescript@5.9.3: {}
+
+ ufo@1.6.3: {}
+
+ uglify-js@3.19.3:
+ optional: true
+
+ unconfig-core@7.5.0:
+ dependencies:
+ '@quansync/fs': 1.0.0
+ quansync: 1.0.0
+
+ undici-types@7.18.2: {}
+
+ universalify@2.0.1: {}
+
+ unrun@0.2.28:
+ dependencies:
+ rolldown: 1.0.0-rc.5
+
+ update-browserslist-db@1.2.3(browserslist@4.28.1):
+ dependencies:
+ browserslist: 4.28.1
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ vite-plugin-dts@4.5.4(@types/node@25.3.1)(rolldown-vite@7.3.1(@types/node@25.3.1)(esbuild@0.27.3)(tsx@4.21.0))(rollup@4.59.0)(typescript@5.9.3):
+ dependencies:
+ '@microsoft/api-extractor': 7.57.6(@types/node@25.3.1)
+ '@rollup/pluginutils': 5.3.0(rollup@4.59.0)
+ '@volar/typescript': 2.4.28
+ '@vue/language-core': 2.2.0(typescript@5.9.3)
+ compare-versions: 6.1.1
+ debug: 4.4.3
+ kolorist: 1.8.0
+ local-pkg: 1.1.2
+ magic-string: 0.30.21
+ typescript: 5.9.3
+ optionalDependencies:
+ vite: rolldown-vite@7.3.1(@types/node@25.3.1)(esbuild@0.27.3)(tsx@4.21.0)
+ transitivePeerDependencies:
+ - '@types/node'
+ - rollup
+ - supports-color
+
+ vite@7.3.1(@types/node@25.3.1)(lightningcss@1.31.1)(tsx@4.21.0):
+ dependencies:
+ esbuild: 0.27.3
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.59.0
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ '@types/node': 25.3.1
+ fsevents: 2.3.3
+ lightningcss: 1.31.1
+ tsx: 4.21.0
+
+ vitest@4.0.18(@types/node@25.3.1)(lightningcss@1.31.1)(tsx@4.21.0):
+ dependencies:
+ '@vitest/expect': 4.0.18
+ '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.3.1)(lightningcss@1.31.1)(tsx@4.21.0))
+ '@vitest/pretty-format': 4.0.18
+ '@vitest/runner': 4.0.18
+ '@vitest/snapshot': 4.0.18
+ '@vitest/spy': 4.0.18
+ '@vitest/utils': 4.0.18
+ es-module-lexer: 1.7.0
+ expect-type: 1.3.0
+ magic-string: 0.30.21
+ obug: 2.1.1
+ pathe: 2.0.3
+ picomatch: 4.0.3
+ std-env: 3.10.0
+ tinybench: 2.9.0
+ tinyexec: 1.0.2
+ tinyglobby: 0.2.15
+ tinyrainbow: 3.0.3
+ vite: 7.3.1(@types/node@25.3.1)(lightningcss@1.31.1)(tsx@4.21.0)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 25.3.1
+ transitivePeerDependencies:
+ - jiti
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - terser
+ - tsx
+ - yaml
+
+ vscode-uri@3.1.0: {}
+
+ why-is-node-running@2.3.0:
+ dependencies:
+ siginfo: 2.0.0
+ stackback: 0.0.2
+
+ wordwrap@1.0.0: {}
+
+ wrap-ansi@9.0.2:
+ dependencies:
+ ansi-styles: 6.2.3
+ string-width: 7.2.0
+ strip-ansi: 7.1.2
+
+ y18n@5.0.8: {}
+
+ yallist@3.1.1: {}
+
+ yallist@4.0.0: {}
+
+ yargs-parser@22.0.0: {}
+
+ yargs@18.0.0:
+ dependencies:
+ cliui: 9.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ string-width: 7.2.0
+ y18n: 5.0.8
+ yargs-parser: 22.0.0
+
+ zod@4.3.6: {}
diff --git a/scripts/benchmark-vite-codegen.mjs b/scripts/benchmark-vite-codegen.mjs
new file mode 100644
index 0000000..ec673af
--- /dev/null
+++ b/scripts/benchmark-vite-codegen.mjs
@@ -0,0 +1,102 @@
+import fs from "fs";
+import { spawnSync } from "child_process";
+import path from "path";
+
+const ROOT = process.cwd();
+const EXAMPLE_ROOT = path.join(ROOT, "test/vite-example");
+const DATA_DIR = path.join(EXAMPLE_ROOT, "src/data");
+const DIST_INDEX = path.join(ROOT, "dist/index.mjs");
+const DIST_VITE = path.join(ROOT, "dist/vite.mjs");
+const SNAPSHOT_OPENAPI = path.join(ROOT, "test/benchmarks/openapi.localhost4000.json");
+
+function run(command, args, env = {}) {
+ const start = process.hrtime.bigint();
+ const result = spawnSync(command, args, {
+ cwd: ROOT,
+ stdio: "pipe",
+ shell: process.platform === "win32",
+ env: { ...process.env, ...env },
+ encoding: "utf-8",
+ });
+ const elapsedMs = Number(process.hrtime.bigint() - start) / 1_000_000;
+
+ if (result.status !== 0) {
+ const stdout = result.stdout?.toString() ?? "";
+ const stderr = result.stderr?.toString() ?? "";
+ throw new Error(`Command failed: ${command} ${args.join(" ")}\n${stdout}\n${stderr}`);
+ }
+
+ return elapsedMs;
+}
+
+function ensureBuiltPackage() {
+ if (!fs.existsSync(DIST_INDEX) || !fs.existsSync(DIST_VITE)) {
+ console.log("Building package (dist)...");
+ run("yarn", ["build"]);
+ }
+}
+
+function ensureBaselineGeneratedData() {
+ fs.rmSync(DATA_DIR, { recursive: true, force: true });
+ run("yarn", [
+ "start",
+ "generate",
+ "--input",
+ "./test/petstore.yaml",
+ "--output",
+ "./test/vite-example/src/data",
+ "--importPath",
+ "relative",
+ "--no-prettier",
+ ]);
+}
+
+function buildBaseline() {
+ return run("yarn", ["vite", "build", "--config", "test/vite-example/vite.base.config.ts"]);
+}
+
+function buildWithCodegen(incremental) {
+ if (!incremental) {
+ fs.rmSync(DATA_DIR, { recursive: true, force: true });
+ }
+ const openApiInput = fs.existsSync(SNAPSHOT_OPENAPI) ? SNAPSHOT_OPENAPI : path.join(ROOT, "test/petstore.yaml");
+ return run("yarn", ["vite", "build", "--config", "test/vite-example/vite.codegen.config.ts"], {
+ OPENAPI_CODEGEN_INCREMENTAL: incremental ? "true" : "false",
+ OPENAPI_CODEGEN_INPUT: openApiInput,
+ });
+}
+
+function pctDiff(value, baseline) {
+ return ((value - baseline) / baseline) * 100;
+}
+
+function printMs(label, ms) {
+ console.log(`${label}: ${ms.toFixed(1)}ms`);
+}
+
+function main() {
+ ensureBuiltPackage();
+ ensureBaselineGeneratedData();
+
+ const baselineMs = buildBaseline();
+ const codegenColdMs = buildWithCodegen(false);
+
+ // Prime cache once; measure second incremental run.
+ buildWithCodegen(true);
+ const codegenWarmMs = buildWithCodegen(true);
+
+ console.log("\nVite build benchmark (test/vite-example):");
+ console.log(
+ `OpenAPI input: ${fs.existsSync(SNAPSHOT_OPENAPI) ? "test/benchmarks/openapi.localhost4000.json" : "test/petstore.yaml (fallback)"}`,
+ );
+ printMs("baseline (no plugin)", baselineMs);
+ printMs("with openApiCodegen (incremental=false)", codegenColdMs);
+ printMs("with openApiCodegen (incremental=true, warm)", codegenWarmMs);
+ console.log(
+ `\nOverhead vs baseline:\n` +
+ `cold: ${pctDiff(codegenColdMs, baselineMs).toFixed(1)}%\n` +
+ `warm: ${pctDiff(codegenWarmMs, baselineMs).toFixed(1)}%`,
+ );
+}
+
+main();
diff --git a/scripts/publish.mjs b/scripts/publish.mjs
new file mode 100644
index 0000000..ce9a530
--- /dev/null
+++ b/scripts/publish.mjs
@@ -0,0 +1,53 @@
+import { execSync } from "child_process";
+import fs from "fs";
+import path from "path";
+import readline from "readline";
+
+function exec(command) {
+ try {
+ return execSync(command, { encoding: "utf8", stdio: ["inherit", "pipe", "inherit"] }).trim();
+ } catch (error) {
+ process.exit(1);
+ }
+}
+
+function main() {
+ // check if the working directory is clean
+ const status = execSync("git status --porcelain", { encoding: "utf8" }).trim();
+ if (status) {
+ console.error("Working directory not clean. Please commit all changes before publishing.");
+ process.exit(1);
+ }
+
+ // build, just in case
+ console.log("Building...");
+ execSync("pnpm build", { stdio: "inherit" });
+
+ // read version from package.json
+ const pkg = JSON.parse(fs.readFileSync(path.resolve(process.cwd(), "package.json"), "utf8"));
+ const version = pkg.version;
+
+ // create a new git tag
+ console.log(`Creating tag v${version}...`);
+ try {
+ execSync(`git tag -a v${version} -m "v${version}"`, { stdio: "inherit" });
+ } catch (error) {
+ console.error(`Failed to create tag v${version}. It might already exist.`);
+ process.exit(1);
+ }
+
+ console.log(`Publishing version: v${version}`);
+
+ const rl = readline.createInterface({
+ input: process.stdin,
+ output: process.stdout,
+ });
+
+ rl.question("Press enter to continue (or Ctrl+C to cancel)", () => {
+ rl.close();
+ console.log("Pushing tag...");
+ execSync(`git push origin "v${version}"`, { stdio: "inherit" });
+ });
+}
+
+main();
diff --git a/scripts/publish.sh b/scripts/publish.sh
deleted file mode 100755
index 3ae5eaa..0000000
--- a/scripts/publish.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-set -e
-
-# check if the working directory is clean
-if [ -n "$(git status --porcelain)" ]; then
- echo "Working directory not clean. Please commit all changes before publishing."
- exit 1
-fi
-
-# build, just in case
-yarn build
-
-# read version from package.json
-VERSION=$(node -p -e "require('./package.json').version")
-
-# create a new git tag or error out if the tag already exists
-git tag -a v$VERSION -m "v$VERSION"
-
-echo "Publishing version: v$VERSION"
-
-read -p "Press enter to continue"
-
-git push origin "v$VERSION"
\ No newline at end of file
diff --git a/scripts/snapshot-openapi-localhost.mjs b/scripts/snapshot-openapi-localhost.mjs
new file mode 100644
index 0000000..ae75fa5
--- /dev/null
+++ b/scripts/snapshot-openapi-localhost.mjs
@@ -0,0 +1,23 @@
+import fs from "fs";
+import path from "path";
+
+const ROOT = process.cwd();
+const URL = process.env.OPENAPI_SNAPSHOT_URL ?? "http://localhost:4000/docs-json";
+const OUTPUT = path.resolve(ROOT, process.env.OPENAPI_SNAPSHOT_OUTPUT ?? "test/benchmarks/openapi.localhost4000.json");
+
+async function main() {
+ const res = await fetch(URL);
+ if (!res.ok) {
+ throw new Error(`Failed to fetch OpenAPI (${res.status} ${res.statusText}) from ${URL}`);
+ }
+
+ const json = await res.json();
+ fs.mkdirSync(path.dirname(OUTPUT), { recursive: true });
+ fs.writeFileSync(OUTPUT, `${JSON.stringify(json, null, 2)}\n`, "utf-8");
+ console.log(`Saved OpenAPI snapshot to ${OUTPUT}`);
+}
+
+main().catch((error) => {
+ console.error(error instanceof Error ? error.message : String(error));
+ process.exit(1);
+});
diff --git a/src/commands/generate.command.ts b/src/commands/generate.command.ts
index 51af9c1..f3181ad 100644
--- a/src/commands/generate.command.ts
+++ b/src/commands/generate.command.ts
@@ -16,6 +16,9 @@ class GenerateOptions implements GenerateParams {
@YargOption({ envAlias: "output" })
output?: string;
+ @YargOption({ envAlias: "incremental", type: "boolean" })
+ incremental?: boolean;
+
@YargOption({ envAlias: "tsNamespaces", type: "boolean" })
tsNamespaces?: boolean;
@@ -43,6 +46,9 @@ class GenerateOptions implements GenerateParams {
@YargOption({ envAlias: "extractEnums", type: "boolean" })
extractEnums?: boolean;
+ @YargOption({ envAlias: "modelsInCommon", type: "boolean" })
+ modelsInCommon?: boolean;
+
@YargOption({ envAlias: "removeOperationPrefixEndingWith" })
removeOperationPrefixEndingWith?: string;
@@ -64,9 +70,21 @@ class GenerateOptions implements GenerateParams {
@YargOption({ envAlias: "mutationEffects", type: "boolean" })
mutationEffects?: boolean;
+ @YargOption({ envAlias: "workspaceContext", type: "boolean" })
+ workspaceContext?: boolean;
+
@YargOption({ envAlias: "parseRequestParams", type: "boolean" })
parseRequestParams?: boolean;
+ @YargOption({ envAlias: "inlineEndpoints", type: "boolean" })
+ inlineEndpoints?: boolean;
+
+ @YargOption({ envAlias: "inlineEndpointsExcludeModules" })
+ inlineEndpointsExcludeModules?: string;
+
+ @YargOption({ envAlias: "modelsOnly", type: "boolean" })
+ modelsOnly?: boolean;
+
@YargOption({ envAlias: "axiosRequestConfig", type: "boolean" })
axiosRequestConfig?: boolean;
diff --git a/src/commands/generate.ts b/src/commands/generate.ts
index 4117ec3..421b079 100644
--- a/src/commands/generate.ts
+++ b/src/commands/generate.ts
@@ -1,25 +1,22 @@
import { exec } from "child_process";
-
-import { OpenAPIV3 } from "openapi-types";
-
-import { resolveConfig } from "@/generators/core/resolveConfig";
-import { generateCodeFromOpenAPIDoc } from "@/generators/generateCodeFromOpenAPIDoc";
+import { runGenerate } from "@/generators/run/generate.runner";
import { GenerateOptions } from "@/generators/types/options";
-import { writeGenerateFileData } from "@/generators/utils/file.utils";
import { logError, logInfo, logSuccess } from "@/helpers/cli.helper";
import { loadConfig } from "@/helpers/config.helper";
-import SwaggerParser from "@apidevtools/swagger-parser";
+import { Profiler } from "@/helpers/profile.helper";
export type GenerateParams = {
config?: string;
excludeTags?: string;
- format?: boolean;
+ inlineEndpointsExcludeModules?: string;
+ prettier?: boolean;
verbose?: boolean;
} & Partial<
Pick<
GenerateOptions,
| "input"
| "output"
+ | "incremental"
| "tsNamespaces"
| "tsPath"
| "splitByTags"
@@ -27,61 +24,61 @@ export type GenerateParams = {
| "removeOperationPrefixEndingWith"
| "importPath"
| "extractEnums"
+ | "modelsInCommon"
| "acl"
| "checkAcl"
+ | "standalone"
| "baseUrl"
| "replaceOptionalWithNullish"
| "infiniteQueries"
| "axiosRequestConfig"
| "mutationEffects"
+ | "workspaceContext"
| "parseRequestParams"
+ | "inlineEndpoints"
| "builderConfigs"
+ | "modelsOnly"
>
>;
-export async function generate({ format, verbose, config: configParam, ...params }: GenerateParams) {
+export async function generate({ prettier, verbose, config: configParam, ...params }: GenerateParams) {
const start = Date.now();
+ const profiler = new Profiler(process.env.OPENAPI_CODEGEN_PROFILE === "1");
- if (verbose) {
- logInfo("Resolving config...");
- }
- const fileConfig = await loadConfig(configParam);
- const config = resolveConfig({ fileConfig, params });
-
- if (verbose) {
- logInfo("Parsing OpenAPI spec...");
- }
- const openApiDoc = (await SwaggerParser.bundle(config.input)) as OpenAPIV3.Document;
-
+ const fileConfig = await profiler.runAsync("config.load", async () => await loadConfig(configParam));
if (verbose) {
logInfo("Generating code...");
}
- const filesData = generateCodeFromOpenAPIDoc(openApiDoc, config);
+ const result = await runGenerate({ fileConfig, params, profiler });
+ const config = result.config;
- if (verbose) {
- logInfo("Writing files...");
+ if (result.skipped && verbose) {
+ logInfo("OpenAPI and config unchanged. Skipping generation.");
}
- writeGenerateFileData(filesData);
if (verbose) {
logSuccess(`Time: ${Date.now() - start}ms`);
+ if (profiler.enabled) {
+ logInfo("Profile breakdown:");
+ profiler.formatLines().forEach((line) => logInfo(` ${line}`));
+ }
}
- if (format) {
- execOxfmt({ output: config.output, verbose });
+ if (prettier) {
+ execPrettier({ output: config.output, verbose });
}
}
-function execOxfmt({ output, verbose }: Pick) {
+function execPrettier({ output, verbose }: Pick) {
if (verbose) {
- logInfo("Running Oxfmt...");
+ logInfo("Running Prettier...");
}
-
- exec(`oxfmt ${output}`, (error) => {
+ const ignorePathArg = process.env.NODE_ENV === "production" ? "" : "--ignore-path .prettierignore";
+ exec(`prettier --write ${output} ${ignorePathArg}`, (error) => {
if (verbose) {
if (error) {
- logError(error, "Oxfmt error");
+ logError(error, "Prettier error");
} else {
- logSuccess("Oxfmt finished.");
+ logSuccess("Prettier finished.");
}
}
});
diff --git a/src/generators/const/options.const.ts b/src/generators/const/options.const.ts
index 58f1aa1..a6649ac 100644
--- a/src/generators/const/options.const.ts
+++ b/src/generators/const/options.const.ts
@@ -8,6 +8,7 @@ export const DEFAULT_GENERATE_OPTIONS: GenerateOptions = {
// Base options
input: "http://localhost:4000/docs-json/",
output: "output",
+ incremental: true,
splitByTags: true,
defaultTag: "Common",
excludeTags: [],
@@ -39,20 +40,27 @@ export const DEFAULT_GENERATE_OPTIONS: GenerateOptions = {
},
},
baseUrl: "",
+ modelsOnly: false,
+ standalone: false,
// Zod options
schemaSuffix: SCHEMA_SUFFIX,
enumSuffix: ENUM_SUFFIX,
+ modelsInCommon: false,
withDefaultValues: true,
extractEnums: true,
replaceOptionalWithNullish: false,
// Endpoints options
restClientImportPath: "",
+ errorHandlingImportPath: "",
removeOperationPrefixEndingWith: "Controller_",
parseRequestParams: true,
+ inlineEndpoints: false,
+ inlineEndpointsExcludeModules: [],
// Queries options
queryTypesImportPath: PACKAGE_IMPORT_PATH,
axiosRequestConfig: false,
mutationEffects: true,
+ workspaceContext: false,
// Infinite queries options
infiniteQueries: false,
infiniteQueryParamNames: {
@@ -67,6 +75,7 @@ export const DEFAULT_GENERATE_OPTIONS: GenerateOptions = {
acl: true,
checkAcl: true,
abilityContextGenericAppAbilities: false,
+ abilityContextImportPath: "",
// Builder Configs options
builderConfigs: false,
filterParamName: "filter",
diff --git a/src/generators/core/SchemaResolver.class.ts b/src/generators/core/SchemaResolver.class.ts
index 49b544e..0612642 100644
--- a/src/generators/core/SchemaResolver.class.ts
+++ b/src/generators/core/SchemaResolver.class.ts
@@ -1,6 +1,7 @@
import { OpenAPIV3 } from "openapi-types";
import { ALLOWED_METHODS } from "@/generators/const/openapi.const";
+import { Profiler } from "@/helpers/profile.helper";
import { OperationObject } from "@/generators/types/openapi";
import { GenerateOptions } from "@/generators/types/options";
import { ValidationError } from "@/generators/types/validation";
@@ -52,6 +53,23 @@ interface ZodSchemaData {
tags: string[];
}
+export interface OperationContext {
+ path: string;
+ method: OpenAPIV3.HttpMethods;
+ operation: OperationObject;
+ tag: string;
+ operationName: string;
+ isUniqueOperationName: boolean;
+ parameters: OpenAPIV3.ParameterObject[];
+ deepRefs: string[];
+ responses: {
+ statusCode: string;
+ responseObj: OpenAPIV3.ResponseObject;
+ matchingMediaType?: string;
+ schema?: OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject;
+ }[];
+}
+
interface CompositeZodSchemaData {
code: string;
zodSchemas: {
@@ -83,12 +101,25 @@ export class SchemaResolver {
private readonly schemaData: SchemaData[] = [];
private readonly zodSchemaData: ZodSchemaData[] = [];
private readonly compositeZodSchemaData: CompositeZodSchemaData[] = [];
+ private readonly schemaRefs: string[];
+ private readonly schemaByRef = new Map();
+ private readonly schemaDataByRef = new Map();
+ private readonly schemaDataByName = new Map();
+ private readonly refByZodSchemaName = new Map();
+ private readonly zodSchemaDataByName = new Map();
+ private readonly compositeByCode = new Map();
+ private readonly compositeSchemaByZodSchemaName = new Map<
+ string,
+ { zodSchema: ZodSchema; schema?: OpenAPIV3.SchemaObject }
+ >();
readonly dependencyGraph: DependencyGraph;
readonly enumZodSchemas: EnumZodSchemaData[] = [];
readonly extractedEnumZodSchemaData: ExtractedEnumZodSchemaData[] = [];
readonly operationsByTag: Record = {};
readonly operationNames: string[] = [];
+ private readonly operationNameCounts = new Map();
+ private readonly operationContexts: OperationContext[] = [];
readonly validationErrors: ValidationError[] = [];
@@ -96,28 +127,37 @@ export class SchemaResolver {
return this.openApiDoc.components?.schemas ?? {};
}
- private get schemaRefs() {
- return Object.keys(this.docSchemas).map(getSchemaRef);
- }
-
constructor(
public readonly openApiDoc: OpenAPIV3.Document,
public readonly options: GenerateOptions,
+ private readonly profiler?: Profiler,
) {
+ this.schemaRefs = Object.keys(this.docSchemas).map(getSchemaRef);
this.dependencyGraph = getOpenAPISchemaDependencyGraph(this.schemaRefs, this.getSchemaByRef.bind(this));
this.enumZodSchemas = getEnumZodSchemasFromOpenAPIDoc(this);
this.operationsByTag = getOperationsByTag(openApiDoc, options);
this.operationNames = getUniqueOperationNamesWithoutSplitByTags(openApiDoc, this.operationsByTag, options);
+ for (const name of this.operationNames) {
+ this.operationNameCounts.set(name, (this.operationNameCounts.get(name) ?? 0) + 1);
+ }
this.initialize();
}
getSchemaByRef(ref: string) {
- return this.docSchemas[getSchemaNameByRef(ref)] as OpenAPIV3.SchemaObject;
+ const correctRef = autocorrectRef(ref);
+ const cachedSchema = this.schemaByRef.get(correctRef);
+ if (cachedSchema) {
+ return cachedSchema;
+ }
+
+ const schema = this.docSchemas[getSchemaNameByRef(correctRef)] as OpenAPIV3.SchemaObject;
+ this.schemaByRef.set(correctRef, schema);
+ return schema;
}
getSchemaDataByName(name: string) {
- return this.schemaData.find((data) => data.name === name);
+ return this.schemaDataByName.get(name);
}
getZodSchemaNameByRef(ref: string) {
@@ -131,7 +171,7 @@ export class SchemaResolver {
}
getRefByZodSchemaName(zodSchemaName: string) {
- return this.schemaData.find((data) => data.zodSchemaName === zodSchemaName)?.ref;
+ return this.refByZodSchemaName.get(zodSchemaName);
}
getTagByZodSchemaName(zodSchemaName: string) {
@@ -146,7 +186,7 @@ export class SchemaResolver {
const schemaRef = this.getRefByZodSchemaName(zodSchemaName);
const schemaTags = schemaRef ? (this.getSchemaDataByRef(schemaRef)?.tags ?? []) : [];
- const zodSchemaTags = this.zodSchemaData.find((data) => data.zodSchemaName === zodSchemaName)?.tags ?? [];
+ const zodSchemaTags = this.zodSchemaDataByName.get(zodSchemaName)?.tags ?? [];
const tags = getUniqueArray(schemaTags, zodSchemaTags);
const tag = tags.length === 1 ? tags[0] : this.options.defaultTag;
@@ -154,22 +194,22 @@ export class SchemaResolver {
}
getCodeByZodSchemaName(name: string) {
- return this.zodSchemaData.find((data) => data.zodSchemaName === name)?.code;
+ return this.zodSchemaDataByName.get(name)?.code;
}
getZodSchemaNamesByCompositeCode(code: string) {
- return this.compositeZodSchemaData
- .find((data) => data.code === code)
- ?.zodSchemas.map((schema) => schema.zodSchemaName);
+ return this.compositeByCode.get(code)?.zodSchemas.map((schema) => schema.zodSchemaName);
}
setZodSchema(name: string, code: string, tag: string) {
- const zodSchema = this.zodSchemaData.find((data) => data.zodSchemaName === name);
+ const zodSchema = this.zodSchemaDataByName.get(name);
if (zodSchema) {
zodSchema.code = code;
zodSchema.tags = (zodSchema.tags ?? []).concat(tag);
} else {
- this.zodSchemaData.push({ zodSchemaName: name, code, tags: [tag] });
+ const newZodSchemaData = { zodSchemaName: name, code, tags: [tag] };
+ this.zodSchemaData.push(newZodSchemaData);
+ this.zodSchemaDataByName.set(name, newZodSchemaData);
}
}
@@ -180,25 +220,23 @@ export class SchemaResolver {
schema?: OpenAPIV3.SchemaObject,
) {
const compositeZodSchema = { zodSchemaName, zodSchema, schema };
- const compositeData = this.compositeZodSchemaData.find((data) => data.code === code);
+ const compositeData = this.compositeByCode.get(code);
if (compositeData) {
compositeData.zodSchemas.push(compositeZodSchema);
} else {
- this.compositeZodSchemaData.push({ code, zodSchemas: [compositeZodSchema] });
+ const newCompositeData = { code, zodSchemas: [compositeZodSchema] };
+ this.compositeZodSchemaData.push(newCompositeData);
+ this.compositeByCode.set(code, newCompositeData);
}
+ this.compositeSchemaByZodSchemaName.set(zodSchemaName, { zodSchema, schema });
}
getCompositeZodSchemaByZodSchemaName(zodSchemaName: string) {
- const compositeZodSchema = this.compositeZodSchemaData.find((data) =>
- data.zodSchemas.some((schema) => schema.zodSchemaName === zodSchemaName),
- );
- return compositeZodSchema?.zodSchemas.find((schema) => schema.zodSchemaName === zodSchemaName)?.zodSchema;
+ return this.compositeSchemaByZodSchemaName.get(zodSchemaName)?.zodSchema;
}
getSchemaByCompositeZodSchemaName(compositeZodSchemaName: string) {
- return this.compositeZodSchemaData
- .find((data) => data.zodSchemas.some((schema) => schema.zodSchemaName === compositeZodSchemaName))
- ?.zodSchemas.find((schema) => schema.zodSchemaName === compositeZodSchemaName)?.schema;
+ return this.compositeSchemaByZodSchemaName.get(compositeZodSchemaName)?.schema;
}
getEnumZodSchemaDataByCode(code: string) {
@@ -219,14 +257,21 @@ export class SchemaResolver {
}
getZodSchemas() {
- return this.zodSchemaData.reduce((acc, { zodSchemaName, code }) => ({ ...acc, [zodSchemaName]: code }), {});
+ const zodSchemas = {} as Record;
+ for (const { zodSchemaName, code } of this.zodSchemaData) {
+ zodSchemas[zodSchemaName] = code;
+ }
+ return zodSchemas;
}
getExtractedEnumZodSchemas() {
- return this.extractedEnumZodSchemaData.reduce(
- (acc, { zodSchemaName, code }) => (zodSchemaName ? { ...acc, [zodSchemaName]: code } : acc),
- {},
- );
+ const zodSchemas = {} as Record;
+ for (const { zodSchemaName, code } of this.extractedEnumZodSchemaData) {
+ if (zodSchemaName) {
+ zodSchemas[zodSchemaName] = code;
+ }
+ }
+ return zodSchemas;
}
resolveObject(obj: OpenAPIV3.ReferenceObject | T): T {
@@ -259,6 +304,14 @@ export class SchemaResolver {
return this.options.baseUrl;
}
+ isOperationNameUnique(operationName: string) {
+ return (this.operationNameCounts.get(operationName) ?? 0) <= 1;
+ }
+
+ getOperationContexts() {
+ return this.operationContexts;
+ }
+
getZodSchemaObj(zodSchemaName: string) {
const ref = this.getRefByZodSchemaName(zodSchemaName);
if (ref) {
@@ -272,15 +325,16 @@ export class SchemaResolver {
const enumZodSchemaData = this.getExtractedEnumZodSchemaDataByName(zodSchemaName);
if (enumZodSchemaData) {
- return enumZodSchemaData.meta.schemas.reduce(
- (acc, curr) => ({ ...acc, ...this.resolveObject(curr) }),
- {} as OpenAPIV3.SchemaObject,
- );
+ const schemaObject = {} as OpenAPIV3.SchemaObject;
+ for (const schema of enumZodSchemaData.meta.schemas) {
+ Object.assign(schemaObject, this.resolveObject(schema));
+ }
+ return schemaObject;
}
}
private getSchemaDataByRef(ref: string) {
- return this.schemaData.find((data) => data.ref === ref);
+ return this.schemaDataByRef.get(ref);
}
private getExtractedEnumZodSchemaDataByName(enumZodSchemaName: string) {
@@ -288,131 +342,183 @@ export class SchemaResolver {
}
private initialize() {
- this.schemaRefs.forEach((ref) => {
- const correctRef = autocorrectRef(ref);
- const name = getSchemaNameByRef(correctRef);
- const zodSchemaName = getZodSchemaName(name, this.options.schemaSuffix);
- this.schemaData.push({ ref: correctRef, name, zodSchemaName, tags: [], deepRefOperations: [] });
- });
-
- for (const path in this.openApiDoc.paths) {
- if (isPathExcluded(path, this.options)) {
- continue;
- }
+ const p = this.profiler ?? new Profiler(false);
- const pathItemObj = this.openApiDoc.paths[path] as OpenAPIV3.PathItemObject;
+ p.runSync("resolver.init.seedSchemas", () => {
+ this.schemaRefs.forEach((ref) => {
+ const correctRef = autocorrectRef(ref);
+ const name = getSchemaNameByRef(correctRef);
+ const zodSchemaName = getZodSchemaName(name, this.options.schemaSuffix);
+ const data = { ref: correctRef, name, zodSchemaName, tags: [], deepRefOperations: [] };
+ this.schemaData.push(data);
+ this.schemaDataByRef.set(correctRef, data);
+ this.schemaDataByName.set(name, data);
+ this.refByZodSchemaName.set(zodSchemaName, correctRef);
+ });
+ });
- const pathItem = pick(pathItemObj, ALLOWED_METHODS);
- for (const method in pathItem) {
- const operation = pathItem[method as keyof typeof pathItem] as OperationObject | undefined;
- if (!operation || isOperationExcluded(operation, this.options)) {
+ p.runSync("resolver.init.operationsLoop", () => {
+ for (const path in this.openApiDoc.paths) {
+ if (isPathExcluded(path, this.options)) {
continue;
}
- const tag = getOperationTag(operation, this.options);
- const operationName = getUniqueOperationName({
- path,
- method,
- operation,
- operationsByTag: this.operationsByTag,
- options: this.options,
- });
- const isUniqueOperationName = this.operationNames.filter((name) => name === operationName).length <= 1;
- const zodSchemaOperationName = snakeToCamel(
- getZodSchemaOperationName(operationName, isUniqueOperationName, tag),
- );
- const schemaRefObjs = [] as OpenAPIV3.ReferenceObject[];
-
- operation.parameters?.map((parameter) => {
- const parameterObject = parameter as OpenAPIV3.ParameterObject;
- const parameterSchema = parameterObject.schema;
- const schemaInfo = `Operation ${operation.operationId ?? path} parameter ${parameterObject.name}`;
-
- schemaRefObjs.push(...getSchemaRefObjs(this, parameterSchema, schemaInfo));
-
- if (this.options.extractEnums) {
- updateExtractedEnumZodSchemaData({
- resolver: this,
- schema: parameterSchema,
- schemaInfo,
- tags: [tag],
- nameSegments: [zodSchemaOperationName, parameterObject.name],
- includeSelf: true,
- });
- }
- });
+ const pathItemObj = this.openApiDoc.paths[path] as OpenAPIV3.PathItemObject;
+ const pathParameters = this.getParameters(pathItemObj.parameters ?? []);
- if (operation.requestBody) {
- const requestBodyObj = this.resolveObject(operation.requestBody);
- const mediaTypes = Object.keys(requestBodyObj.content ?? {});
- const matchingMediaType = mediaTypes.find(isParamMediaTypeAllowed);
- if (matchingMediaType) {
- const matchingMediaSchema = requestBodyObj.content?.[matchingMediaType]?.schema;
- const schemaInfo = `Operation ${operation.operationId} request body`;
-
- schemaRefObjs.push(...getSchemaRefObjs(this, matchingMediaSchema, schemaInfo));
-
- if (this.options.extractEnums) {
- updateExtractedEnumZodSchemaData({
- resolver: this,
- schema: matchingMediaSchema,
- schemaInfo,
- tags: [tag],
- nameSegments: [getBodyZodSchemaName(zodSchemaOperationName)],
- });
- }
+ const pathItem = pick(pathItemObj, ALLOWED_METHODS);
+ for (const method in pathItem) {
+ const operation = pathItem[method as keyof typeof pathItem] as OperationObject | undefined;
+ if (!operation || isOperationExcluded(operation, this.options)) {
+ continue;
}
- }
- for (const statusCode in operation.responses) {
- const responseObj = this.resolveObject(operation.responses[statusCode]);
- const mediaTypes = Object.keys(responseObj?.content ?? {});
- const matchingMediaType = mediaTypes.find(isMediaTypeAllowed);
- if (matchingMediaType) {
- const matchingMediaSchema = responseObj.content?.[matchingMediaType]?.schema;
- const schemaInfo = `Operation ${operation.operationId} response body`;
-
- schemaRefObjs.push(...getSchemaRefObjs(this, matchingMediaSchema, schemaInfo));
-
- if (this.options.extractEnums) {
- updateExtractedEnumZodSchemaData({
- resolver: this,
- schema: matchingMediaSchema,
- schemaInfo,
- tags: [tag],
- nameSegments: [getResponseZodSchemaName({ statusCode, operationName, isUniqueOperationName, tag })],
- });
+ const tag = getOperationTag(operation, this.options);
+ const operationName = getUniqueOperationName({
+ path,
+ method,
+ operation,
+ operationsByTag: this.operationsByTag,
+ options: this.options,
+ });
+ const isUniqueOperationName = this.isOperationNameUnique(operationName);
+ const parameters = p.runSync("resolver.init.parameters.mergeResolve", () =>
+ Object.entries({
+ ...pathParameters,
+ ...this.getParameters(operation.parameters ?? []),
+ }).map(([, param]) => this.resolveObject(param as OpenAPIV3.ReferenceObject | OpenAPIV3.ParameterObject)),
+ );
+ const responses = p.runSync("resolver.init.responses.prepare", () =>
+ Object.entries(operation.responses).map(([statusCode, response]) => {
+ const responseObj = this.resolveObject(response) as OpenAPIV3.ResponseObject;
+ const mediaTypes = Object.keys(responseObj?.content ?? {});
+ const matchingMediaType = mediaTypes.find(isMediaTypeAllowed);
+ const schema = matchingMediaType ? responseObj.content?.[matchingMediaType]?.schema : undefined;
+ return { statusCode, responseObj, matchingMediaType, schema };
+ }),
+ );
+ const zodSchemaOperationName = snakeToCamel(
+ getZodSchemaOperationName(operationName, isUniqueOperationName, tag),
+ );
+ const schemaRefObjs = [] as OpenAPIV3.ReferenceObject[];
+
+ p.runSync("resolver.init.parameters.refs", () => {
+ parameters.forEach((parameter) => {
+ const parameterObject = this.resolveObject(
+ parameter as OpenAPIV3.ReferenceObject | OpenAPIV3.ParameterObject,
+ );
+ const parameterSchema = parameterObject.schema;
+ const schemaInfo = `Operation ${operation.operationId ?? path} parameter ${parameterObject.name}`;
+
+ schemaRefObjs.push(...getSchemaRefObjs(this, parameterSchema, schemaInfo));
+
+ if (this.options.extractEnums) {
+ updateExtractedEnumZodSchemaData({
+ resolver: this,
+ schema: parameterSchema,
+ schemaInfo,
+ tags: [tag],
+ nameSegments: [zodSchemaOperationName, parameterObject.name],
+ includeSelf: true,
+ });
+ }
+ });
+ });
+
+ p.runSync("resolver.init.requestBody.refs", () => {
+ if (operation.requestBody) {
+ const requestBodyObj = this.resolveObject(operation.requestBody);
+ const mediaTypes = Object.keys(requestBodyObj.content ?? {});
+ const matchingMediaType = mediaTypes.find(isParamMediaTypeAllowed);
+ if (matchingMediaType) {
+ const matchingMediaSchema = requestBodyObj.content?.[matchingMediaType]?.schema;
+ const schemaInfo = `Operation ${operation.operationId} request body`;
+
+ schemaRefObjs.push(...getSchemaRefObjs(this, matchingMediaSchema, schemaInfo));
+
+ if (this.options.extractEnums) {
+ updateExtractedEnumZodSchemaData({
+ resolver: this,
+ schema: matchingMediaSchema,
+ schemaInfo,
+ tags: [tag],
+ nameSegments: [getBodyZodSchemaName(zodSchemaOperationName)],
+ });
+ }
+ }
}
- }
+ });
+
+ p.runSync("resolver.init.responses.refs", () => {
+ for (const responseData of responses) {
+ if (!responseData.matchingMediaType) {
+ continue;
+ }
+
+ const schemaInfo = `Operation ${operation.operationId} response body`;
+ schemaRefObjs.push(...getSchemaRefObjs(this, responseData.schema, schemaInfo));
+
+ if (this.options.extractEnums) {
+ updateExtractedEnumZodSchemaData({
+ resolver: this,
+ schema: responseData.schema,
+ schemaInfo,
+ tags: [tag],
+ nameSegments: [
+ getResponseZodSchemaName({
+ statusCode: responseData.statusCode,
+ operationName,
+ isUniqueOperationName,
+ tag,
+ }),
+ ],
+ });
+ }
+ }
+ });
+
+ const deepRefs = p.runSync("resolver.init.deepRefs", () => getDeepSchemaRefObjs(this, schemaRefObjs));
+ const operationContext: OperationContext = {
+ path,
+ method: method as OpenAPIV3.HttpMethods,
+ operation,
+ tag,
+ operationName,
+ isUniqueOperationName,
+ parameters,
+ deepRefs,
+ responses,
+ };
+ this.operationContexts.push(operationContext);
+ deepRefs.forEach((schemaRef) => {
+ const schemaData = this.getSchemaDataByRef(schemaRef);
+ if (schemaData) {
+ schemaData.tags.push(tag);
+ schemaData.deepRefOperations.push(operation);
+ }
+ });
}
-
- const deepRefs = getDeepSchemaRefObjs(this, schemaRefObjs);
- deepRefs.forEach((schemaRef) => {
- const schemaData = this.getSchemaDataByRef(schemaRef);
- if (schemaData) {
- schemaData.tags.push(tag);
- schemaData.deepRefOperations.push(operation);
- }
- });
}
- }
+ });
if (this.options.extractEnums) {
- this.schemaRefs.forEach((ref) => {
- const schemaRef = autocorrectRef(ref);
-
- updateExtractedEnumZodSchemaData({
- resolver: this,
- schema: this.getSchemaByRef(schemaRef),
- schemaRef,
- tags: this.getSchemaDataByRef(schemaRef)?.tags ?? [],
- nameSegments: [getSchemaNameByRef(schemaRef)],
+ p.runSync("resolver.init.enums.finalize", () => {
+ this.schemaRefs.forEach((ref) => {
+ const schemaRef = autocorrectRef(ref);
+
+ updateExtractedEnumZodSchemaData({
+ resolver: this,
+ schema: this.getSchemaByRef(schemaRef),
+ schemaRef,
+ tags: this.getSchemaDataByRef(schemaRef)?.tags ?? [],
+ nameSegments: [getSchemaNameByRef(schemaRef)],
+ });
});
- });
- resolveExtractedEnumZodSchemaTags(this);
- this.handleDuplicateEnumZodSchemas();
- resolveExtractedEnumZodSchemaNames(this);
+ resolveExtractedEnumZodSchemaTags(this);
+ this.handleDuplicateEnumZodSchemas();
+ resolveExtractedEnumZodSchemaNames(this);
+ });
}
}
@@ -452,4 +558,10 @@ export class SchemaResolver {
...this.extractedEnumZodSchemaData.filter(({ code }) => !codes.has(code)),
);
}
+
+ private getParameters(parameters: NonNullable) {
+ return Object.fromEntries(
+ (parameters ?? []).map((param) => [isReferenceObject(param) ? param.$ref : param.name, param] as const),
+ );
+ }
}
diff --git a/src/generators/core/endpoints/getEndpointBody.ts b/src/generators/core/endpoints/getEndpointBody.ts
index 8f18f8e..97a48e2 100644
--- a/src/generators/core/endpoints/getEndpointBody.ts
+++ b/src/generators/core/endpoints/getEndpointBody.ts
@@ -1,12 +1,10 @@
import { BODY_PARAMETER_NAME } from "@/generators/const/endpoints.const";
import { SchemaResolver } from "@/generators/core/SchemaResolver.class";
-import { getZodChain } from "@/generators/core/zod/getZodChain";
-import { getZodSchema } from "@/generators/core/zod/getZodSchema";
-import { resolveZodSchemaName } from "@/generators/core/zod/resolveZodSchemaName";
import { EndpointParameter } from "@/generators/types/endpoint";
import { OperationObject } from "@/generators/types/openapi";
import { isParamMediaTypeAllowed } from "@/generators/utils/openapi.utils";
import { getBodyZodSchemaName, getZodSchemaOperationName } from "@/generators/utils/zod-schema.utils";
+import { resolveEndpointZodSchema } from "./resolveEndpointZodSchema";
export function getEndpointBody({
resolver,
@@ -37,31 +35,21 @@ export function getEndpointBody({
return;
}
- const zodSchema = getZodSchema({
- schema,
+ const zodSchema = resolveEndpointZodSchema({
resolver,
+ schema,
meta: { isRequired: requestBodyObj.required ?? true },
tag,
- });
-
- const schemaObject = resolver.resolveObject(schema);
-
- const zodSchemaName = resolveZodSchemaName({
- schema: schemaObject,
- zodSchema,
fallbackName: getBodyZodSchemaName(getZodSchemaOperationName(operationName, isUniqueOperationName, tag)),
- resolver,
- tag,
+ composeBeforeResolve: false,
});
- const zodChain = getZodChain({ schema: schemaObject, meta: zodSchema.meta, options: resolver.options });
-
return {
endpointParameter: {
name: BODY_PARAMETER_NAME,
type: "Body",
description: requestBodyObj.description,
- zodSchema: zodSchemaName + zodChain,
+ zodSchema,
bodyObject: requestBodyObj,
},
requestFormat: matchingMediaType,
diff --git a/src/generators/core/endpoints/getEndpointParameter.ts b/src/generators/core/endpoints/getEndpointParameter.ts
index ae670c5..be0a4f0 100644
--- a/src/generators/core/endpoints/getEndpointParameter.ts
+++ b/src/generators/core/endpoints/getEndpointParameter.ts
@@ -3,9 +3,7 @@ import { match } from "ts-pattern";
import { ALLOWED_PATH_IN } from "@/generators/const/openapi.const";
import { SchemaResolver } from "@/generators/core/SchemaResolver.class";
-import { getZodChain } from "@/generators/core/zod/getZodChain";
-import { getEnumZodSchemaCodeFromEnumNames, getZodSchema } from "@/generators/core/zod/getZodSchema";
-import { resolveZodSchemaName } from "@/generators/core/zod/resolveZodSchemaName";
+import { getEnumZodSchemaCodeFromEnumNames } from "@/generators/core/zod/getZodSchema";
import { EndpointParameter } from "@/generators/types/endpoint";
import { ParameterObject } from "@/generators/types/openapi";
import {
@@ -18,6 +16,7 @@ import {
getParamZodSchemaName,
getZodSchemaOperationName,
} from "@/generators/utils/zod-schema.utils";
+import { resolveEndpointZodSchema } from "./resolveEndpointZodSchema";
export function getEndpointParameter({
resolver,
@@ -80,23 +79,13 @@ export function getEndpointParameter({
parameterSortingEnumSchemaName = enumZodSchemaName;
}
- const zodSchema = getZodSchema({
- schema,
+ const zodSchemaName = resolveEndpointZodSchema({
resolver,
+ schema,
meta: { isRequired: paramObj.in === "path" ? true : (paramObj.required ?? false) },
tag,
- });
-
- const schemaObject = resolver.resolveObject(schema);
-
- const zodChain = getZodChain({ schema: schemaObject, meta: zodSchema.meta, options: resolver.options });
-
- const zodSchemaName = resolveZodSchemaName({
- schema: schemaObject,
- zodSchema: zodSchema.assign(zodSchema.getCodeString(tag) + zodChain),
fallbackName,
- resolver,
- tag,
+ composeBeforeResolve: true,
});
return {
diff --git a/src/generators/core/endpoints/getEndpointsFromOpenAPIDoc.ts b/src/generators/core/endpoints/getEndpointsFromOpenAPIDoc.ts
index 28f116e..ffcf67a 100644
--- a/src/generators/core/endpoints/getEndpointsFromOpenAPIDoc.ts
+++ b/src/generators/core/endpoints/getEndpointsFromOpenAPIDoc.ts
@@ -1,27 +1,14 @@
import { OpenAPIV3 } from "openapi-types";
import { JSON_APPLICATION_FORMAT } from "@/generators/const/endpoints.const";
-import { ALLOWED_METHODS } from "@/generators/const/openapi.const";
import { HttpStatusCode } from "@/generators/const/validation.const";
import { STRING_SCHEMA, VOID_SCHEMA } from "@/generators/const/zod.const";
-import { SchemaResolver } from "@/generators/core/SchemaResolver.class";
-import { getZodChain } from "@/generators/core/zod/getZodChain";
-import { getZodSchema } from "@/generators/core/zod/getZodSchema";
-import { resolveZodSchemaName } from "@/generators/core/zod/resolveZodSchemaName";
+import { Profiler } from "@/helpers/profile.helper";
import { Endpoint, EndpointParameter } from "@/generators/types/endpoint";
-import { OperationObject } from "@/generators/types/openapi";
import { invalidVariableNameCharactersToCamel } from "@/generators/utils/js.utils";
-import { pick } from "@/generators/utils/object.utils";
import { isReferenceObject } from "@/generators/utils/openapi-schema.utils";
-import {
- isErrorStatus,
- isMainResponseStatus,
- isMediaTypeAllowed,
- isPathExcluded,
- replaceHyphenatedPath,
-} from "@/generators/utils/openapi.utils";
-import { getUniqueOperationName, isOperationExcluded } from "@/generators/utils/operation.utils";
-import { formatTag, getOperationTag } from "@/generators/utils/tag.utils";
+import { isErrorStatus, isMainResponseStatus, replaceHyphenatedPath } from "@/generators/utils/openapi.utils";
+import { formatTag } from "@/generators/utils/tag.utils";
import {
getInvalidOperationIdError,
getInvalidStatusCodeError,
@@ -34,183 +21,158 @@ import { getResponseZodSchemaName } from "@/generators/utils/zod-schema.utils";
import { getEndpointAcl } from "./getEndpointAcl";
import { getEndpointBody } from "./getEndpointBody";
import { getEndpointParameter } from "./getEndpointParameter";
+import { resolveEndpointZodSchema } from "./resolveEndpointZodSchema";
+import type { OperationContext, SchemaResolver } from "../SchemaResolver.class";
-export function getEndpointsFromOpenAPIDoc(resolver: SchemaResolver) {
+export function getEndpointsFromOpenAPIDoc(resolver: SchemaResolver, profiler?: Profiler) {
const endpoints = [];
+ const p = profiler ?? new Profiler(false);
- for (const path in resolver.openApiDoc.paths) {
- if (isPathExcluded(path, resolver.options)) {
- continue;
- }
+ for (const context of resolver.getOperationContexts()) {
+ endpoints.push(buildEndpointFromOperationContext(resolver, context, p));
+ }
+
+ return endpoints;
+}
- const pathItemObj = resolver.openApiDoc.paths[path] as OpenAPIV3.PathItemObject;
- const pathItem = pick(pathItemObj, ALLOWED_METHODS);
- const pathParameters = getParameters(pathItemObj.parameters ?? []);
+export function buildEndpointFromOperationContext(
+ resolver: SchemaResolver,
+ context: OperationContext,
+ profiler?: Profiler,
+) {
+ const p = profiler ?? new Profiler(false);
+ const { path, method, operation, operationName, isUniqueOperationName, tag, parameters, responses } = context;
+
+ const invalidOperationId =
+ operation.operationId && operation.operationId !== invalidVariableNameCharactersToCamel(operation.operationId);
+ if (operation.operationId && invalidOperationId) {
+ resolver.validationErrors.push(getInvalidOperationIdError(operation.operationId));
+ }
- for (const method in pathItem) {
- const operation = pathItem[method as keyof typeof pathItem] as OperationObject | undefined;
- if (!operation || isOperationExcluded(operation, resolver.options)) {
- continue;
- }
+ const endpoint: Endpoint = {
+ method,
+ path: replaceHyphenatedPath(path),
+ operationName,
+ description: operation.description,
+ summary: operation.summary,
+ tags: operation.tags?.map(formatTag),
+ requestFormat: JSON_APPLICATION_FORMAT,
+ parameters: [],
+ response: "",
+ errors: [],
+ responseStatusCodes: [],
+ mediaUpload: !!operation["x-media-upload"],
+ mediaDownload: !!operation["x-media-download"],
+ };
- const invalidOperationId =
- operation.operationId && operation.operationId !== invalidVariableNameCharactersToCamel(operation.operationId);
- if (operation.operationId && invalidOperationId) {
- resolver.validationErrors.push(getInvalidOperationIdError(operation.operationId));
+ p.runSync("endpoints.requestBody", () => {
+ if (operation.requestBody) {
+ const body = getEndpointBody({ resolver, operation, operationName, isUniqueOperationName, tag });
+ if (body) {
+ endpoint.parameters.push(body.endpointParameter);
+ endpoint.requestFormat = body.requestFormat;
}
+ }
+ });
- const parameters = Object.entries({
- ...pathParameters,
- ...getParameters(operation.parameters ?? []),
- }).map(([, param]) => param);
- const operationName = getUniqueOperationName({
- path,
- method,
- operation,
- operationsByTag: resolver.operationsByTag,
- options: resolver.options,
- });
- const isUniqueOperationName = resolver.operationNames.filter((name) => name === operationName).length <= 1;
- const tag = getOperationTag(operation, resolver.options);
- const endpoint: Endpoint = {
- method: method as OpenAPIV3.HttpMethods,
- path: replaceHyphenatedPath(path),
+ p.runSync("endpoints.params", () => {
+ for (const param of parameters) {
+ const endpointParameter = getEndpointParameter({
+ resolver,
+ param,
operationName,
- description: operation.description,
- summary: operation.summary,
- tags: operation.tags?.map(formatTag),
- requestFormat: JSON_APPLICATION_FORMAT,
- parameters: [],
- response: "",
- errors: [],
- responseStatusCodes: [],
- mediaUpload: !!operation["x-media-upload"],
- mediaDownload: !!operation["x-media-download"],
- };
-
- if (operation.requestBody) {
- const body = getEndpointBody({ resolver, operation, operationName, isUniqueOperationName, tag });
- if (body) {
- endpoint.parameters.push(body.endpointParameter);
- endpoint.requestFormat = body.requestFormat;
+ isUniqueOperationName,
+ tag,
+ });
+ if (endpointParameter) {
+ endpoint.parameters.push(endpointParameter);
+ }
+ }
+ });
+
+ p.runSync("endpoints.pathParams", () => {
+ const missingPathParameters = getMissingPathParameters(endpoint);
+ missingPathParameters.forEach((pathParam) => {
+ endpoint.parameters.push(pathParam);
+ });
+ if (missingPathParameters.length > 0) {
+ resolver.validationErrors.push(getMissingPathParameterError(missingPathParameters, path));
+ }
+ });
+
+ p.runSync("endpoints.responses", () => {
+ for (const responseData of responses) {
+ const { statusCode, responseObj, matchingMediaType, schema } = responseData;
+ endpoint.responseStatusCodes.push(statusCode);
+ let responseZodSchema: string | undefined;
+ if (matchingMediaType) {
+ endpoint.responseFormat = matchingMediaType;
+ } else {
+ responseZodSchema = VOID_SCHEMA;
+ if (statusCode === "200") {
+ resolver.validationErrors.push(
+ getInvalidStatusCodeError({ received: "200", expected: "204" }, operation, endpoint),
+ );
}
}
- for (const param of parameters) {
- const endpointParameter = getEndpointParameter({
+ if (schema) {
+ responseZodSchema = resolveEndpointZodSchema({
resolver,
- param,
- operationName,
- isUniqueOperationName,
+ schema,
+ meta: { isRequired: true },
tag,
+ fallbackName: isReferenceObject(schema)
+ ? undefined
+ : getResponseZodSchemaName({ statusCode, operationName, isUniqueOperationName, tag }),
+ composeBeforeResolve: false,
});
- if (endpointParameter) {
- endpoint.parameters.push(endpointParameter);
- }
}
- const missingPathParameters = getMissingPathParameters(endpoint);
- missingPathParameters.forEach((pathParam) => {
- endpoint.parameters.push(pathParam);
- });
- if (missingPathParameters.length > 0) {
- resolver.validationErrors.push(getMissingPathParameterError(missingPathParameters, path));
- }
-
- for (const statusCode in operation.responses) {
- endpoint.responseStatusCodes.push(statusCode);
-
- const responseObj = resolver.resolveObject(operation.responses[statusCode]);
- const mediaTypes = Object.keys(responseObj?.content ?? {});
- const matchingMediaType = mediaTypes.find(isMediaTypeAllowed);
-
- let schema: OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject | undefined;
- let responseZodSchema: string | undefined;
- if (matchingMediaType) {
- endpoint.responseFormat = matchingMediaType;
- schema = responseObj.content?.[matchingMediaType]?.schema;
- } else {
- responseZodSchema = VOID_SCHEMA;
- if (statusCode === "200") {
- resolver.validationErrors.push(
- getInvalidStatusCodeError({ received: "200", expected: "204" }, operation, endpoint),
- );
- }
- }
-
- if (schema) {
- const zodSchema = getZodSchema({
- schema,
- resolver,
- meta: { isRequired: true },
- tag,
+ if (responseZodSchema) {
+ const status = Number(statusCode);
+
+ if (isMainResponseStatus(status) && !endpoint.response) {
+ endpoint.response = responseZodSchema;
+ endpoint.responseObject = responseObj;
+ endpoint.responseDescription = responseObj?.description;
+ } else if (statusCode !== "default" && isErrorStatus(status)) {
+ endpoint.errors.push({
+ zodSchema: responseZodSchema,
+ status,
+ description: responseObj?.description,
});
-
- const schemaObject = resolver.resolveObject(schema);
-
- const zodSchemaName = resolveZodSchemaName({
- schema: schemaObject,
- zodSchema,
- fallbackName: zodSchema.ref
- ? undefined
- : getResponseZodSchemaName({ statusCode, operationName, isUniqueOperationName, tag }),
- resolver,
- tag,
- });
-
- responseZodSchema =
- zodSchemaName + getZodChain({ schema: schemaObject, meta: zodSchema.meta, options: resolver.options });
}
-
- if (responseZodSchema) {
- const status = Number(statusCode);
-
- if (isMainResponseStatus(status) && !endpoint.response) {
- endpoint.response = responseZodSchema;
- endpoint.responseObject = responseObj;
- endpoint.responseDescription = responseObj?.description;
- } else if (statusCode !== "default" && isErrorStatus(status)) {
- endpoint.errors.push({
- zodSchema: responseZodSchema,
- status,
- description: responseObj?.description,
- });
- }
- }
- }
-
- if (!endpoint.response) {
- endpoint.response = VOID_SCHEMA;
- }
-
- const mainStatusCodes = Object.keys(operation.responses).map(Number).filter(isMainResponseStatus);
- if (mainStatusCodes.length > 1) {
- resolver.validationErrors.push(
- getMultipleSuccessStatusCodesError(mainStatusCodes.map(String) as HttpStatusCode[], operation, endpoint),
- );
}
+ }
+ });
- endpoint.acl = getEndpointAcl({ resolver, endpoint, operation });
+ if (!endpoint.response) {
+ endpoint.response = VOID_SCHEMA;
+ }
- if (operation.security?.[0].Authorization && !endpoint.responseStatusCodes.includes("401")) {
- resolver.validationErrors.push(getMissingStatusCodeError("401", operation, endpoint));
- }
+ p.runSync("endpoints.statusValidation", () => {
+ const mainStatusCodes = Object.keys(operation.responses).map(Number).filter(isMainResponseStatus);
+ if (mainStatusCodes.length > 1) {
+ resolver.validationErrors.push(
+ getMultipleSuccessStatusCodesError(mainStatusCodes.map(String) as HttpStatusCode[], operation, endpoint),
+ );
+ }
+ });
- if (endpoint.acl?.[0] && !endpoint.responseStatusCodes.includes("403")) {
- resolver.validationErrors.push(getMissingStatusCodeError("403", operation, endpoint));
- }
+ p.runSync("endpoints.acl", () => {
+ endpoint.acl = getEndpointAcl({ resolver, endpoint, operation });
+ });
- endpoints.push(endpoint);
- }
+ if (operation.security?.[0].Authorization && !endpoint.responseStatusCodes.includes("401")) {
+ resolver.validationErrors.push(getMissingStatusCodeError("401", operation, endpoint));
}
- return endpoints;
-}
+ if (endpoint.acl?.[0] && !endpoint.responseStatusCodes.includes("403")) {
+ resolver.validationErrors.push(getMissingStatusCodeError("403", operation, endpoint));
+ }
-function getParameters(parameters: NonNullable) {
- return Object.fromEntries(
- (parameters ?? []).map((param) => [isReferenceObject(param) ? param.$ref : param.name, param] as const),
- );
+ return endpoint;
}
function getMissingPathParameters(endpoint: Endpoint): EndpointParameter[] {
diff --git a/src/generators/core/endpoints/resolveEndpointZodSchema.ts b/src/generators/core/endpoints/resolveEndpointZodSchema.ts
new file mode 100644
index 0000000..7ee32b7
--- /dev/null
+++ b/src/generators/core/endpoints/resolveEndpointZodSchema.ts
@@ -0,0 +1,92 @@
+import { OpenAPIV3 } from "openapi-types";
+
+import { SchemaResolver } from "@/generators/core/SchemaResolver.class";
+import { getZodChain } from "@/generators/core/zod/getZodChain";
+import { getZodSchema } from "@/generators/core/zod/getZodSchema";
+import { resolveZodSchemaName } from "@/generators/core/zod/resolveZodSchemaName";
+import { ZodSchemaMetaData } from "@/generators/core/zod/ZodSchema.class";
+import { isReferenceObject } from "@/generators/utils/openapi-schema.utils";
+
+type EndpointZodSchemaCache = {
+ byObject: WeakMap