From e4bb824048ca1ba8ffe661d7710d91b88a8e8451 Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 18 May 2026 09:09:59 +0100 Subject: [PATCH 1/3] chore: update lichess api schema --- specs/lichess-api.yaml | 8 +++++--- specs/schemas/BroadcastGameEntry.yaml | 2 ++ specs/schemas/BroadcastTour.yaml | 2 ++ specs/schemas/PuzzleAndGame.yaml | 3 +++ .../externalengine/api-external-engine-id-analyse.yaml | 8 ++++++-- .../externalengine/api-external-engine-work-id.yaml | 8 ++++++-- .../tags/externalengine/api-external-engine-work.yaml | 10 +++++++--- specs/tags/games/api-games-user-username.yaml | 4 ++-- specs/tags/openingexplorer/lichess.yaml | 8 ++++++-- specs/tags/openingexplorer/masters-pgn-gameId.yaml | 8 ++++++-- specs/tags/openingexplorer/masters.yaml | 8 ++++++-- specs/tags/openingexplorer/player.yaml | 8 ++++++-- specs/tags/tablebase/antichess.yaml | 8 ++++++-- specs/tags/tablebase/atomic.yaml | 8 ++++++-- specs/tags/tablebase/standard.yaml | 8 ++++++-- 15 files changed, 75 insertions(+), 26 deletions(-) diff --git a/specs/lichess-api.yaml b/specs/lichess-api.yaml index 85fddf1..75459b4 100644 --- a/specs/lichess-api.yaml +++ b/specs/lichess-api.yaml @@ -1,6 +1,6 @@ openapi: "3.1.0" info: - version: 2.0.139 + version: 2.0.143 title: Lichess.org API reference contact: name: "Lichess.org API" @@ -219,7 +219,8 @@ tags: Runs . - **The endpoint hostname is not lichess.org but explorer.lichess.org.** + > [!important] + > The hostname for these endpoints is `explorer.lichess.org` and not `lichess.org`. - name: Puzzles description: | Fetch and solve [puzzles](https://lichess.org/training), view your puzzle history and dashboard. @@ -241,7 +242,8 @@ tags: description: | Lookup positions from the [Lichess tablebase server](https://lichess.org/blog/W3WeMyQAACQAdfAL/7-piece-syzygy-tablebases-are-complete). - **The endpoint hostname is not lichess.org but tablebase.lichess.org.** + > [!important] + > The hostname for these endpoints is `tablebase.lichess.org` and not `lichess.org`. - name: Teams description: | Access and manage Lichess teams and their members. diff --git a/specs/schemas/BroadcastGameEntry.yaml b/specs/schemas/BroadcastGameEntry.yaml index 54c9176..33394a1 100644 --- a/specs/schemas/BroadcastGameEntry.yaml +++ b/specs/schemas/BroadcastGameEntry.yaml @@ -20,6 +20,8 @@ properties: description: The change in rating for the player as a result of this game fideTC: $ref: "./FideTimeControl.yaml" + ongoing: + type: boolean required: - round diff --git a/specs/schemas/BroadcastTour.yaml b/specs/schemas/BroadcastTour.yaml index f992bd2..5f1c40b 100644 --- a/specs/schemas/BroadcastTour.yaml +++ b/specs/schemas/BroadcastTour.yaml @@ -62,6 +62,8 @@ properties: description: "Full tournament description in markdown format, or in HTML if the html=1 query parameter is set." teamTable: type: boolean + showTeamScores: + type: boolean url: type: string format: uri diff --git a/specs/schemas/PuzzleAndGame.yaml b/specs/schemas/PuzzleAndGame.yaml index 9b3b414..75b7408 100644 --- a/specs/schemas/PuzzleAndGame.yaml +++ b/specs/schemas/PuzzleAndGame.yaml @@ -71,6 +71,9 @@ properties: type: integer fen: type: string + lastMove: + type: string + description: In UCI format, e.g. "e2e4" solution: type: array items: diff --git a/specs/tags/externalengine/api-external-engine-id-analyse.yaml b/specs/tags/externalengine/api-external-engine-id-analyse.yaml index 5887de9..5ae49ad 100644 --- a/specs/tags/externalengine/api-external-engine-id-analyse.yaml +++ b/specs/tags/externalengine/api-external-engine-id-analyse.yaml @@ -1,5 +1,3 @@ -servers: - - url: https://engine.lichess.ovh parameters: - in: path name: id @@ -13,6 +11,12 @@ post: summary: Analyse with external engine tags: - External engine + servers: + - url: https://engine.lichess.ovh + - url: http://localhost:{port} + variables: + port: + default: "9666" security: [] description: | **Endpoint: `https://engine.lichess.ovh/api/external-engine/{id}/analyse`** diff --git a/specs/tags/externalengine/api-external-engine-work-id.yaml b/specs/tags/externalengine/api-external-engine-work-id.yaml index 10660bd..6cfa88a 100644 --- a/specs/tags/externalengine/api-external-engine-work-id.yaml +++ b/specs/tags/externalengine/api-external-engine-work-id.yaml @@ -1,5 +1,3 @@ -servers: - - url: https://engine.lichess.ovh parameters: - in: path name: id @@ -12,6 +10,12 @@ post: summary: Answer analysis request tags: - External engine + servers: + - url: https://engine.lichess.ovh + - url: http://localhost:{port} + variables: + port: + default: "9666" security: [] description: | **Endpoint: `https://engine.lichess.ovh/api/external-engine/work/{id}`** diff --git a/specs/tags/externalengine/api-external-engine-work.yaml b/specs/tags/externalengine/api-external-engine-work.yaml index aad0146..27d4c6c 100644 --- a/specs/tags/externalengine/api-external-engine-work.yaml +++ b/specs/tags/externalengine/api-external-engine-work.yaml @@ -1,10 +1,14 @@ -servers: - - url: https://engine.lichess.ovh post: operationId: apiExternalEngineAcquire summary: Acquire analysis request tags: - External engine + servers: + - url: https://engine.lichess.ovh + - url: http://localhost:{port} + variables: + port: + default: "9666" security: [] description: | **Endpoint: `https://engine.lichess.ovh/api/external-engine/work`** @@ -12,7 +16,7 @@ post: have been registered with the given `secret`. Uses long polling. After acquiring a request, the provider should immediately - [start streaming the results](#tag/external-engine/POST/api/external-engine/workid). + [start streaming the results](#tag/external-engine/POST/api/external-engine/work/{id}). requestBody: description: Provider credentials. required: true diff --git a/specs/tags/games/api-games-user-username.yaml b/specs/tags/games/api-games-user-username.yaml index b5d67e8..b2bfb99 100644 --- a/specs/tags/games/api-games-user-username.yaml +++ b/specs/tags/games/api-games-user-username.yaml @@ -185,7 +185,7 @@ get: type: string default: "'*'" content: - application/json: + application/x-ndjson: schema: oneOf: - $ref: "../../schemas/GamePgn.yaml" @@ -193,5 +193,5 @@ get: examples: application/x-chess-pgn: $ref: "../../examples/games-apiGamesUserPgn.pgn.yaml" - application/json: + application/x-ndjson: $ref: "../../examples/games-apiGamesUserJson.json.yaml" diff --git a/specs/tags/openingexplorer/lichess.yaml b/specs/tags/openingexplorer/lichess.yaml index 754702b..50e38ef 100644 --- a/specs/tags/openingexplorer/lichess.yaml +++ b/specs/tags/openingexplorer/lichess.yaml @@ -1,5 +1,3 @@ -servers: - - url: https://explorer.lichess.org get: operationId: openingExplorerLichess summary: Lichess games @@ -11,6 +9,12 @@ get: Example: `curl https://explorer.lichess.org/lichess?variant=standard&speeds=blitz,rapid,classical&ratings=2200,2500&fen=rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR%20w%20KQkq%20-%200%201` tags: - Opening Explorer + servers: + - url: https://explorer.lichess.org + - url: http://localhost:{port} + variables: + port: + default: "9002" security: - OAuth2: [] parameters: diff --git a/specs/tags/openingexplorer/masters-pgn-gameId.yaml b/specs/tags/openingexplorer/masters-pgn-gameId.yaml index bf73dd0..c7afa38 100644 --- a/specs/tags/openingexplorer/masters-pgn-gameId.yaml +++ b/specs/tags/openingexplorer/masters-pgn-gameId.yaml @@ -1,5 +1,3 @@ -servers: - - url: https://explorer.lichess.org get: operationId: openingExplorerMasterGame summary: OTB master game @@ -9,6 +7,12 @@ get: Example: `curl https://explorer.lichess.org/masters/pgn/aAbqI4ey` tags: - Opening Explorer + servers: + - url: https://explorer.lichess.org + - url: http://localhost:{port} + variables: + port: + default: "9002" security: - OAuth2: [] parameters: diff --git a/specs/tags/openingexplorer/masters.yaml b/specs/tags/openingexplorer/masters.yaml index 3db84e0..8df692c 100644 --- a/specs/tags/openingexplorer/masters.yaml +++ b/specs/tags/openingexplorer/masters.yaml @@ -1,5 +1,3 @@ -servers: - - url: https://explorer.lichess.org get: operationId: openingExplorerMaster summary: Masters database @@ -9,6 +7,12 @@ get: Example: `curl https://explorer.lichess.org/masters?play=d2d4,d7d5,c2c4,c7c6,c4d5` tags: - Opening Explorer + servers: + - url: https://explorer.lichess.org + - url: http://localhost:{port} + variables: + port: + default: "9002" security: - OAuth2: [] parameters: diff --git a/specs/tags/openingexplorer/player.yaml b/specs/tags/openingexplorer/player.yaml index 7a1edb7..3d25ae3 100644 --- a/specs/tags/openingexplorer/player.yaml +++ b/specs/tags/openingexplorer/player.yaml @@ -1,5 +1,3 @@ -servers: - - url: https://explorer.lichess.org get: operationId: openingExplorerPlayer summary: Player games @@ -19,6 +17,12 @@ get: Example: `curl https://explorer.lichess.org/player?player=revoof&color=white&play=d2d4,d7d5&recentGames=1` tags: - Opening Explorer + servers: + - url: https://explorer.lichess.org + - url: http://localhost:{port} + variables: + port: + default: "9002" security: - OAuth2: [] parameters: diff --git a/specs/tags/tablebase/antichess.yaml b/specs/tags/tablebase/antichess.yaml index d004bbe..3ab14d6 100644 --- a/specs/tags/tablebase/antichess.yaml +++ b/specs/tags/tablebase/antichess.yaml @@ -1,5 +1,3 @@ -servers: - - url: https://tablebase.lichess.org get: operationId: antichessAtomic summary: Tablebase lookup for Antichess @@ -7,6 +5,12 @@ get: **Endpoint: ** tags: - Tablebase + servers: + - url: https://tablebase.lichess.org + - url: http://localhost:{port} + variables: + port: + default: "9000" security: [] parameters: - in: query diff --git a/specs/tags/tablebase/atomic.yaml b/specs/tags/tablebase/atomic.yaml index a9dbff9..518e1e1 100644 --- a/specs/tags/tablebase/atomic.yaml +++ b/specs/tags/tablebase/atomic.yaml @@ -1,5 +1,3 @@ -servers: - - url: https://tablebase.lichess.org get: operationId: tablebaseAtomic summary: Tablebase lookup for Atomic chess @@ -7,6 +5,12 @@ get: **Endpoint: ** tags: - Tablebase + servers: + - url: https://tablebase.lichess.org + - url: http://localhost:{port} + variables: + port: + default: "9000" security: [] parameters: - in: query diff --git a/specs/tags/tablebase/standard.yaml b/specs/tags/tablebase/standard.yaml index d60f50c..e7c9e3c 100644 --- a/specs/tags/tablebase/standard.yaml +++ b/specs/tags/tablebase/standard.yaml @@ -1,5 +1,3 @@ -servers: - - url: https://tablebase.lichess.org get: operationId: tablebaseStandard summary: Tablebase lookup @@ -9,6 +7,12 @@ get: Example: `curl http://tablebase.lichess.org/standard?fen=4k3/6KP/8/8/8/8/7p/8_w_-_-_0_1` tags: - Tablebase + servers: + - url: https://tablebase.lichess.org + - url: http://localhost:{port} + variables: + port: + default: "9000" security: [] parameters: - in: query From 15c8f746d6fb161754675df40dfc0a6af89e05d6 Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 18 May 2026 09:37:54 +0100 Subject: [PATCH 2/3] fix: update `servers` generation --- scripts/gen-client.ts | 65 ++++++++++++++++++------------- src/client/index.ts | 2 +- src/schemas/BroadcastGameEntry.ts | 1 + src/schemas/BroadcastTour.ts | 1 + src/schemas/PuzzleAndGame.ts | 1 + 5 files changed, 43 insertions(+), 27 deletions(-) diff --git a/scripts/gen-client.ts b/scripts/gen-client.ts index 14c826d..fcecfeb 100644 --- a/scripts/gen-client.ts +++ b/scripts/gen-client.ts @@ -38,15 +38,17 @@ const OpenApiSchemaPaths = z.record(OpenApiSchemaPath, SchemaSchemaRef); const OpenApiSchemaComponents = z.object(); +const OpenApiServersSchema = z.tuple([ + z.object({ url: z.literal("https://lichess.org") }), + z.object({ url: z.literal("https://lichess.dev") }), + z.object({ url: z.literal("http://localhost:{port}") }), + z.object({ url: z.literal("http://l.org") }), +]); + const OpenApiSchemaSchema = z.object({ openapi: z.literal("3.1.0"), info: OpenApiSchemaInfo, - servers: z.tuple([ - z.object({ url: z.literal("https://lichess.org") }), - z.object({ url: z.literal("https://lichess.dev") }), - z.object({ url: z.literal("http://localhost:{port}") }), - z.object({ url: z.literal("http://l.org") }), - ]), + servers: OpenApiServersSchema, tags: z.array(z.object({ name: z.string(), description: z.string() })), paths: OpenApiSchemaPaths, components: OpenApiSchemaComponents, @@ -248,10 +250,30 @@ const ResponseStatus = z.string(); const OperationResponses = z.record(ResponseStatus, ResponseSchema); +const LichessServerSchema = z.union([ + z.object({ + url: z.literal([ + "https://engine.lichess.ovh", + "https://explorer.lichess.org", + "https://tablebase.lichess.org", + ]), + }), + z.object({ + url: z.literal("http://localhost:{port}"), + variables: z.object({ port: z.object({ default: z.string() }) }), + }), +]); + +const LichessServersSchema = z + .tuple([LichessServerSchema]) + .rest(LichessServerSchema) + .transform((s) => ({ url: s[0].url, __id: "__servers" as const })); + const BaseTagSchemaOperation = z.object({ operationId: z.string(), summary: z.string(), description: z.string(), + servers: LichessServersSchema.optional(), tags: z.array(z.string()), security: SecuritySchema, parameters: OperationParameters, @@ -312,18 +334,7 @@ const TagSchemaSchemaPut = BaseTagSchemaOperation.extend({ const TagSchemaSchema = z .object({ - servers: z - .tuple([ - z.object({ - url: z.literal([ - "https://engine.lichess.ovh", - "https://explorer.lichess.org", - "https://tablebase.lichess.org", - ]), - }), - ]) - .transform((s) => ({ url: s[0].url, __id: "__servers" as const })) - .optional(), + // servers: LichessServersSchema.optional(), parameters: z .array(OperationPathParameterSchema) .transform((s) => ({ parameters: s, __id: "__parameters" as const })) @@ -603,10 +614,10 @@ function processOperation( return { parameters, __type: "__parameters" } as const; } - if (operation.__id === "__servers") { - const baseUrl = operation.url; - return { baseUrl, __type: "__servers" } as const; - } + // if (operation.__id === "__servers") { + // const baseUrl = operation.url; + // return { baseUrl, __type: "__servers" } as const; + // } const { processedPath, hasPathParams } = processRawPath(rawApiPath); const pathLiteral = hasPathParams @@ -665,10 +676,12 @@ function processOperation( requestObjCode = `${requestPieces.join(", ")}`; } + const baseUrl = options?.baseUrl || operation.servers?.url; + let baseUrlLine = ""; let baseUrlArg = ""; - if (options?.baseUrl) { - baseUrlLine = ` const baseUrl = "${options.baseUrl}";\n`; + if (baseUrl) { + baseUrlLine = ` const baseUrl = "${baseUrl}";\n`; baseUrlArg = ", baseUrl"; } @@ -692,8 +705,8 @@ ${baseUrlLine}\ function processTag(tagSchema: TagSchema, rawApiPath: string) { const methodsCode: string[] = []; - let sharedPathParams: OperationPathParameter[] | undefined = undefined; - let baseUrl: string | undefined = undefined; + let sharedPathParams: OperationPathParameter[] | undefined; + let baseUrl: string | undefined; for (const operation of Object.values(tagSchema)) { const processedOperation = processOperation(operation, rawApiPath, { diff --git a/src/client/index.ts b/src/client/index.ts index 2549276..81d4af9 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -558,7 +558,7 @@ export class Lichess { }, { 200: { - kind: "json", + kind: "ndjson", schema: z.union([schemas.GamePgn, schemas.GameJson]), }, }, diff --git a/src/schemas/BroadcastGameEntry.ts b/src/schemas/BroadcastGameEntry.ts index fdfbeae..2957c35 100644 --- a/src/schemas/BroadcastGameEntry.ts +++ b/src/schemas/BroadcastGameEntry.ts @@ -15,6 +15,7 @@ const BroadcastGameEntry = z.object({ customPoints: z.optional(BroadcastCustomPoints), ratingDiff: z.optional(z.int()), fideTC: FideTimeControl, + ongoing: z.optional(z.boolean()), }); type BroadcastGameEntry = z.infer; diff --git a/src/schemas/BroadcastTour.ts b/src/schemas/BroadcastTour.ts index b79f1f2..100a782 100644 --- a/src/schemas/BroadcastTour.ts +++ b/src/schemas/BroadcastTour.ts @@ -27,6 +27,7 @@ const BroadcastTour = z.object({ image: z.optional(z.url()), description: z.optional(z.string()), teamTable: z.optional(z.boolean()), + showTeamScores: z.optional(z.boolean()), url: z.url(), communityOwner: z.optional(LightUser), }); diff --git a/src/schemas/PuzzleAndGame.ts b/src/schemas/PuzzleAndGame.ts index b50f4e7..92b2a86 100644 --- a/src/schemas/PuzzleAndGame.ts +++ b/src/schemas/PuzzleAndGame.ts @@ -46,6 +46,7 @@ const PuzzleAndGame = z.object({ plays: z.int(), rating: z.int(), fen: z.optional(z.string()), + lastMove: z.optional(z.string()), solution: z.array(z.string()), themes: z.array(z.string()), }), From 820d23d013dc8219309c8be53729b82be7d44ab6 Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 18 May 2026 19:03:18 +0100 Subject: [PATCH 3/3] chore: update dependencies, fix lint warnings --- bun.lock | 128 ++++++++++++++++++++--------------------- package.json | 16 +++--- scripts/gen-client.ts | 51 +++++----------- scripts/gen-schemas.ts | 4 +- scripts/shared.ts | 55 +++++++++++++----- src/client/index.ts | 2 +- 6 files changed, 130 insertions(+), 126 deletions(-) diff --git a/bun.lock b/bun.lock index f03663a..5677dab 100644 --- a/bun.lock +++ b/bun.lock @@ -5,52 +5,52 @@ "": { "name": "@lichess/api", "dependencies": { - "minizod": "^0.0.3", + "minizod": "0.0.3", }, "devDependencies": { - "@biomejs/biome": "2.4.12", - "@gameroman/config": "^0.1.0", - "@types/bun": "^1.3.11", - "@typescript/native-preview": "^7.0.0-dev.20260401.1", - "tsdown": "^0.21.7", - "zod": "^4.3.6", + "@biomejs/biome": "2.4.15", + "@gameroman/config": "0.1.0", + "@types/bun": "1.3.14", + "@typescript/native-preview": "7.0.0-dev.20260517.1", + "tsdown": "0.22.0", + "zod": "4.4.3", }, }, }, "packages": { - "@babel/generator": ["@babel/generator@8.0.0-rc.3", "", { "dependencies": { "@babel/parser": "^8.0.0-rc.3", "@babel/types": "^8.0.0-rc.3", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "@types/jsesc": "^2.5.0", "jsesc": "^3.0.2" } }, "sha512-em37/13/nR320G4jab/nIIHZgc2Wz2y/D39lxnTyxB4/D/omPQncl/lSdlnJY1OhQcRGugTSIF2l/69o31C9dA=="], + "@babel/generator": ["@babel/generator@8.0.0-rc.5", "", { "dependencies": { "@babel/parser": "^8.0.0-rc.5", "@babel/types": "^8.0.0-rc.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "@types/jsesc": "^2.5.0", "jsesc": "^3.0.2" } }, "sha512-nFZPWz3FHIS7y6rMIVoa/WBwjdutfIaRJIBQjzn+t3RnecZoRNlGmGcyR2wb0T/IgSd50Kz/6dG8/LvMCRunjg=="], - "@babel/helper-string-parser": ["@babel/helper-string-parser@8.0.0-rc.3", "", {}, "sha512-AmwWFx1m8G/a5cXkxLxTiWl+YEoWuoFLUCwqMlNuWO1tqAYITQAbCRPUkyBHv1VOFgfjVOqEj6L3u15J5ZCzTA=="], + "@babel/helper-string-parser": ["@babel/helper-string-parser@8.0.0-rc.5", "", {}, "sha512-sN7R8rBvDurfaziNfDEIjIntlazmlkCDGO4SNl2RJ3wRCn+QxspLV7hzYAE8WWVd2joVuT8sUxeePdLp2idI1A=="], - "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@8.0.0-rc.3", "", {}, "sha512-8AWCJ2VJJyDFlGBep5GpaaQ9AAaE/FjAcrqI7jyssYhtL7WGV0DOKpJsQqM037xDbpRLHXsY8TwU7zDma7coOw=="], + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@8.0.0-rc.5", "", {}, "sha512-ehJDxHvtbZ85RtX/L2fi0h9AGsBNqB5Euv1EB8RMAvGYvD+2X+QbpzzOpbklnNXO+WSZJNOaetw2BBj27xsWVg=="], - "@babel/parser": ["@babel/parser@8.0.0-rc.3", "", { "dependencies": { "@babel/types": "^8.0.0-rc.3" }, "bin": "./bin/babel-parser.js" }, "sha512-B20dvP3MfNc/XS5KKCHy/oyWl5IA6Cn9YjXRdDlCjNmUFrjvLXMNUfQq/QUy9fnG2gYkKKcrto2YaF9B32ToOQ=="], + "@babel/parser": ["@babel/parser@8.0.0-rc.4", "", { "dependencies": { "@babel/types": "^8.0.0-rc.4" }, "bin": "./bin/babel-parser.js" }, "sha512-0S/1yefMa15N4i2v3t8Fw9pgMHhf2gF6Lc1UEXI96Ls6FNAjqvHHZouZ2ZS/deqLhbMFtmfVeFac6iTsvFbLwA=="], - "@babel/types": ["@babel/types@8.0.0-rc.3", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.0-rc.3", "@babel/helper-validator-identifier": "^8.0.0-rc.3" } }, "sha512-mOm5ZrYmphGfqVWoH5YYMTITb3cDXsFgmvFlvkvWDMsR9X8RFnt7a0Wb6yNIdoFsiMO9WjYLq+U/FMtqIYAF8Q=="], + "@babel/types": ["@babel/types@8.0.0-rc.5", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.0-rc.5", "@babel/helper-validator-identifier": "^8.0.0-rc.5" } }, "sha512-JeSVu/m8x/zpp4CLjYHVNXuhEyOkhPXuxM8YOXjh6L4LlvQNKuUNOTo5KdBuKAcTDHw8DquToTaEkhsBqPXOaA=="], - "@biomejs/biome": ["@biomejs/biome@2.4.12", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.12", "@biomejs/cli-darwin-x64": "2.4.12", "@biomejs/cli-linux-arm64": "2.4.12", "@biomejs/cli-linux-arm64-musl": "2.4.12", "@biomejs/cli-linux-x64": "2.4.12", "@biomejs/cli-linux-x64-musl": "2.4.12", "@biomejs/cli-win32-arm64": "2.4.12", "@biomejs/cli-win32-x64": "2.4.12" }, "bin": { "biome": "bin/biome" } }, "sha512-Rro7adQl3NLq/zJCIL98eElXKI8eEiBtoeu5TbXF/U3qbjuSc7Jb5rjUbeHHcquDWeSf3HnGP7XI5qGrlRk/pA=="], + "@biomejs/biome": ["@biomejs/biome@2.4.15", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.15", "@biomejs/cli-darwin-x64": "2.4.15", "@biomejs/cli-linux-arm64": "2.4.15", "@biomejs/cli-linux-arm64-musl": "2.4.15", "@biomejs/cli-linux-x64": "2.4.15", "@biomejs/cli-linux-x64-musl": "2.4.15", "@biomejs/cli-win32-arm64": "2.4.15", "@biomejs/cli-win32-x64": "2.4.15" }, "bin": { "biome": "bin/biome" } }, "sha512-j5VH3a/h/HXTKBM50MDMxRCzkeLv9S2XJcW2WgnZT1+xyisi+0bISrXR82gCX+8S9lvK0skEvHJRN+3Ktr2hlw=="], - "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-BnMU4Pc3ciEVteVpZ0BK33MLr7X57F5w1dwDLDn+/iy/yTrA4Q/N2yftidFtsA4vrDh0FMXDpacNV/Tl3fbmng=="], + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.15", "", { "os": "darwin", "cpu": "arm64" }, "sha512-rF3PPqLq1yoST79zaQbDjVJwsuIeci/O+9bgNmC5QpgOqz6aqYuzA4abyAGx+mgyiDXn4A049xAN8gijbuR1Qg=="], - "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-x9uJ0bI1rJsWICp3VH8w/5PnAVD3A7SqzDpbrfoUQX1QyWrK5jSU4fRLo/wSgGeplCivbxBRKmt5Xq4/nWvq8A=="], + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.15", "", { "os": "darwin", "cpu": "x64" }, "sha512-/5KHXYMfSJs1fNXiX30xFtI8JcCFV6zaVVLxOa0M2sfqBKHkpQhRTv94yxQWxeTY2lzo2OuTlNvPC+hDQt2wcQ=="], - "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-tOwuCuZZtKi1jVzbk/5nXmIsziOB6yqN8c9r9QM0EJYPU6DpQWf11uBOSCfFKKM4H3d9ZoarvlgMfbcuD051Pw=="], + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-owaAMZD/T4LrD0ELNCk0Km3qrRHuM0X6EAyVE1FSqGY0rbLoiDLrO4Us2tllm6cAeB2Ioa9C2C08NZPdr8+0Ug=="], - "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-FhfpkAAlKL6kwvcVap0Hgp4AhZmtd3YImg0kK1jd7C/aSoh4SfsB2f++yG1rU0lr8Y5MCFJrcSkmssiL9Xnnig=="], + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-ZPcxznxm0pogHBLZhYntyR3sR+MrZjqJIKEr7ZqVen0Rl+P/4upVmfYXjftizi9RoqZntg33fv/1fbdhbYXpEQ=="], - "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.12", "", { "os": "linux", "cpu": "x64" }, "sha512-8pFeAnLU9QdW9jCIslB/v82bI0lhBmz2ZAKc8pVMFPO0t0wAHsoEkrUQUbMkIorTRIjbqyNZHA3lEXavsPWYSw=="], + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.15", "", { "os": "linux", "cpu": "x64" }, "sha512-0jj7THz12GbUOLmMibktK6DZjqz2zV64KFxyBtcFTKPiiOIY0a7vns1elpO1dERvxpsZ5ik0oFfz0oGwFde1+g=="], - "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.12", "", { "os": "linux", "cpu": "x64" }, "sha512-dwTIgZrGutzhkQCuvHynCkyW6hJxUuyZqKKO0YNfaS2GUoRO+tOvxXZqZB6SkWAOdfZTzwaw8IEdUnIkHKHoew=="], + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.15", "", { "os": "linux", "cpu": "x64" }, "sha512-CNq/9W38SYSH023lfcQ4KKU8K0YX8T//FZUhcgtMMRABDojx5XsMV7jlweAvGSl389wJQB29Qo6Zb/a+jdvt+w=="], - "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-B0DLnx0vA9ya/3v7XyCaP+/lCpnbWbMOfUFFve+xb5OxyYvdHaS55YsSddr228Y+JAFk58agCuZTsqNiw2a6ig=="], + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.15", "", { "os": "win32", "cpu": "arm64" }, "sha512-ouhkYdlhp/1GghEJPdWwD/Vi3gQ1nFxuSpMolWsbq3Lsq3QUR4jl6UdhhscdCugKU5vOEuMiJhvKj66O0OCq+w=="], - "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.12", "", { "os": "win32", "cpu": "x64" }, "sha512-yMckRzTyZ83hkk8iDFWswqSdU8tvZxspJKnYNh7JZr/zhZNOlzH13k4ecboU6MurKExCe2HUkH75pGI/O2JwGA=="], + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.15", "", { "os": "win32", "cpu": "x64" }, "sha512-zBrGq5mx5wwpnow4+2BxUvleDM+GNd4sLbPaMapsSLQLD0NGRCquqPBTgN+7XkUteHvj7M+BstuI8tmnV7+HgQ=="], - "@emnapi/core": ["@emnapi/core@1.7.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg=="], + "@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], - "@emnapi/runtime": ["@emnapi/runtime@1.7.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA=="], + "@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], - "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], "@gameroman/config": ["@gameroman/config@0.1.0", "", { "peerDependencies": { "@biomejs/biome": "^2.4.13", "oxfmt": ">=0.46.0", "oxlint": "^1.61.0", "oxlint-tsgolint": ">=0.22.0", "typescript": "^6.0.3" }, "optionalPeers": ["@biomejs/biome", "oxfmt", "oxlint", "oxlint-tsgolint", "typescript"] }, "sha512-n0h7gUhPHuEkbQi89ZY1hn87wEJzfHEyCKG/K1EiSWYYYmq2D32yuQTyyQqoxfOfzSxf1tauqX4MxwMqPClh5Q=="], @@ -62,47 +62,47 @@ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" } }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], - "@oxc-project/types": ["@oxc-project/types@0.122.0", "", {}, "sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA=="], + "@oxc-project/types": ["@oxc-project/types@0.130.0", "", {}, "sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q=="], "@quansync/fs": ["@quansync/fs@1.0.0", "", { "dependencies": { "quansync": "^1.0.0" } }, "sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ=="], - "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-rc.12", "", { "os": "android", "cpu": "arm64" }, "sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA=="], + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.1", "", { "os": "android", "cpu": "arm64" }, "sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg=="], - "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-rc.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg=="], + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg=="], - "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-rc.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw=="], + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg=="], - "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-rc.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q=="], + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw=="], - "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12", "", { "os": "linux", "cpu": "arm" }, "sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q=="], + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.1", "", { "os": "linux", "cpu": "arm" }, "sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ=="], - "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg=="], + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A=="], - "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-rc.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw=="], + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg=="], - "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g=="], + "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg=="], - "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og=="], + "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ=="], - "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-rc.12", "", { "os": "linux", "cpu": "x64" }, "sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg=="], + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.1", "", { "os": "linux", "cpu": "x64" }, "sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw=="], - "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-rc.12", "", { "os": "linux", "cpu": "x64" }, "sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig=="], + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.1", "", { "os": "linux", "cpu": "x64" }, "sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ=="], - "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.0-rc.12", "", { "os": "none", "cpu": "arm64" }, "sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA=="], + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.1", "", { "os": "none", "cpu": "arm64" }, "sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ=="], - "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-rc.12", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1" }, "cpu": "none" }, "sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg=="], + "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.1", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ=="], - "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q=="], + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw=="], - "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-rc.12", "", { "os": "win32", "cpu": "x64" }, "sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw=="], + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.1", "", { "os": "win32", "cpu": "x64" }, "sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ=="], - "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.12", "", {}, "sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw=="], + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], - "@types/bun": ["@types/bun@1.3.11", "", { "dependencies": { "bun-types": "1.3.11" } }, "sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg=="], + "@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="], "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], @@ -110,21 +110,21 @@ "@types/node": ["@types/node@25.0.3", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA=="], - "@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20260401.1", "", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260401.1", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260401.1", "@typescript/native-preview-linux-arm": "7.0.0-dev.20260401.1", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260401.1", "@typescript/native-preview-linux-x64": "7.0.0-dev.20260401.1", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260401.1", "@typescript/native-preview-win32-x64": "7.0.0-dev.20260401.1" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-xJcN9WlY/P6xKjCMH4+DTzZSj/EKR6H9avuqUKs4eKyPEvaQ4bX+9Ys3Vl2qhlUaD7IRWY7HN7db0LHAGlWRSA=="], + "@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20260517.1", "", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260517.1", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260517.1", "@typescript/native-preview-linux-arm": "7.0.0-dev.20260517.1", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260517.1", "@typescript/native-preview-linux-x64": "7.0.0-dev.20260517.1", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260517.1", "@typescript/native-preview-win32-x64": "7.0.0-dev.20260517.1" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-RSenvv0X4Uubpqyq9Z28xucCqpt5Gm/YaBs04b2Chps+qxYH+sRhYlLoiRkCx9x7Kxx6WLK3mjP+Xj6YNxHZjg=="], - "@typescript/native-preview-darwin-arm64": ["@typescript/native-preview-darwin-arm64@7.0.0-dev.20260401.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-9PCc1D4/zLic30g1upOw6ZmUl98fnrXYRv5wIZ6fxm1zZAObieRKUX3Jbr8M9N8iQQFxPIZPniIScsxAbmbJvw=="], + "@typescript/native-preview-darwin-arm64": ["@typescript/native-preview-darwin-arm64@7.0.0-dev.20260517.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-YjoHUk4g7ayc8328Wt/JU9T+ChfOO1hNc5qGmkkygL4J4Q3/Wp+EqCNcFinYRSca0Yl5WdcVngd8xyGFeTlwUA=="], - "@typescript/native-preview-darwin-x64": ["@typescript/native-preview-darwin-x64@7.0.0-dev.20260401.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-wwzca1KrjSVC6ApXfITsg/wF4GGbhVYebc7zChpuyi+phrHfw6ThTPB5XFUH4nA32vqw0Hn/6KACipMgzg8GPA=="], + "@typescript/native-preview-darwin-x64": ["@typescript/native-preview-darwin-x64@7.0.0-dev.20260517.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-E/xAkhVaWaoU/u5itoRc1WD8M+A/JPmNbb4SiBexTZDQ3h/5xWU0HRwq/drRiLjFlcm0e1i66MzB8tbc2icctQ=="], - "@typescript/native-preview-linux-arm": ["@typescript/native-preview-linux-arm@7.0.0-dev.20260401.1", "", { "os": "linux", "cpu": "arm" }, "sha512-bbIkRZYjtyoyCJ3wFES7qn3EwYO5Go1hxArL5X5oWiBmUHq5gMIxTZDv5mpWxopVf9Eyh4ErHefXjf1s4J+6Ag=="], + "@typescript/native-preview-linux-arm": ["@typescript/native-preview-linux-arm@7.0.0-dev.20260517.1", "", { "os": "linux", "cpu": "arm" }, "sha512-CJZJ21rSBtBxmfebMh8K/kH+e3Z+s8hM2+4ud0ZesEBgkBjePBo6FR4/1IJl38i4OvYnpbZerANR0yCRytv/Pw=="], - "@typescript/native-preview-linux-arm64": ["@typescript/native-preview-linux-arm64@7.0.0-dev.20260401.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-1hgKibGi4QZF1J0hKltgY4nj4yKDmI4Ang5ar80I+YeUdGxV/fP2kU3bJang7QtHuSso6W+a52SF62zgqbzdow=="], + "@typescript/native-preview-linux-arm64": ["@typescript/native-preview-linux-arm64@7.0.0-dev.20260517.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-u+xY12IarGGRFXh7hbN/cxW5aYNdwa84mG0pyXglvThXT0rzzPGUEJdxVkNBo6UHqnc4FJihdcaioWpXBxQe9w=="], - "@typescript/native-preview-linux-x64": ["@typescript/native-preview-linux-x64@7.0.0-dev.20260401.1", "", { "os": "linux", "cpu": "x64" }, "sha512-1ysZ4c/Wa3RYIlrwVceYlhb1m1hxQ4P2x92valZXH0bNWEPb+oiQ4Yf35O/vi5h8zDdX/ZQ59vivYl27cF1VVA=="], + "@typescript/native-preview-linux-x64": ["@typescript/native-preview-linux-x64@7.0.0-dev.20260517.1", "", { "os": "linux", "cpu": "x64" }, "sha512-yRnlMPugNitsW9lBBQVfy8NgeUrgenjspq2LKeYmaAlvw6uf1bkbSHw6hJeCpl1oh7kH+RAHUx0yzm/RlfFdKg=="], - "@typescript/native-preview-win32-arm64": ["@typescript/native-preview-win32-arm64@7.0.0-dev.20260401.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-fZYLCRe36y1BuzRFFpU2/RQ212l6Y1dccRMh8oTB8HlAVAAwtbkb6cjEn0Ablj4Dy16+Ih8R9uHsxPLNhtKw1Q=="], + "@typescript/native-preview-win32-arm64": ["@typescript/native-preview-win32-arm64@7.0.0-dev.20260517.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-fomiKzxtXrrasjJWbwaC8BGbzVQQv0VYVWijF0yKdXqxXjDRD01zT72Z1sjQGz0QJ19TVTVhJiNa7nI3wUaEsw=="], - "@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20260401.1", "", { "os": "win32", "cpu": "x64" }, "sha512-I6ses4SjWvpbvSpm1BPFRrDeqrzu7JTchJG/a26iwwmTLv4fAGLc5/o6Kv9Naygozop1W3KOcVM5i3A9oxiIjQ=="], + "@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20260517.1", "", { "os": "win32", "cpu": "x64" }, "sha512-ekFca6XpdGIfLwqaRSm0GzYvI1COhoN+a62KeSwmaZN8EGWN/Rwrp/Tm9VjWGrdHSOLQFdEAGNibmp4bRB4HyA=="], "ansis": ["ansis@4.2.0", "", {}, "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig=="], @@ -132,13 +132,13 @@ "birpc": ["birpc@4.0.0", "", {}, "sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw=="], - "bun-types": ["bun-types@1.3.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg=="], + "bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="], "cac": ["cac@7.0.0", "", {}, "sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ=="], - "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + "defu": ["defu@6.1.7", "", {}, "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ=="], - "dts-resolver": ["dts-resolver@2.1.3", "", { "peerDependencies": { "oxc-resolver": ">=11.0.0" }, "optionalPeers": ["oxc-resolver"] }, "sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw=="], + "dts-resolver": ["dts-resolver@3.0.0", "", { "peerDependencies": { "oxc-resolver": ">=11.0.0" }, "optionalPeers": ["oxc-resolver"] }, "sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q=="], "empathic": ["empathic@2.0.0", "", {}, "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA=="], @@ -146,11 +146,11 @@ "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], - "get-tsconfig": ["get-tsconfig@4.13.7", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q=="], + "get-tsconfig": ["get-tsconfig@5.0.0-beta.5", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-/6gFNr0N04nob252sTQxyFLi3eKFRqIg1I87YcqAMT1i6SQrSF6KujUEQrtrjMV0H/eejTCltLdDSTEMzHbnsQ=="], - "hookable": ["hookable@6.1.0", "", {}, "sha512-ZoKZSJgu8voGK2geJS+6YtYjvIzu9AOM/KZXsBxr83uhLL++e9pEv/dlgwgy3dvHg06kTz6JOh1hk3C8Ceiymw=="], + "hookable": ["hookable@6.1.1", "", {}, "sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ=="], - "import-without-cache": ["import-without-cache@0.2.5", "", {}, "sha512-B6Lc2s6yApwnD2/pMzFh/d5AVjdsDXjgkeJ766FmFuJELIGHNycKRj+l3A39yZPM4CchqNCB4RITEAYB1KUM6A=="], + "import-without-cache": ["import-without-cache@0.4.0", "", {}, "sha512-NkJQA7oZ4YHQhd2+H3BoRFKF3d/XNsiKpHZCQEMH9pDX27hQQLsTyOocyRgaIVtf8gHX3Nt3LPkR4e5EdtPAGQ=="], "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], @@ -166,19 +166,19 @@ "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], - "rolldown": ["rolldown@1.0.0-rc.12", "", { "dependencies": { "@oxc-project/types": "=0.122.0", "@rolldown/pluginutils": "1.0.0-rc.12" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-rc.12", "@rolldown/binding-darwin-arm64": "1.0.0-rc.12", "@rolldown/binding-darwin-x64": "1.0.0-rc.12", "@rolldown/binding-freebsd-x64": "1.0.0-rc.12", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.12", "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.12", "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.12", "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.12", "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.12", "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.12", "@rolldown/binding-linux-x64-musl": "1.0.0-rc.12", "@rolldown/binding-openharmony-arm64": "1.0.0-rc.12", "@rolldown/binding-wasm32-wasi": "1.0.0-rc.12", "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.12", "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.12" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A=="], + "rolldown": ["rolldown@1.0.1", "", { "dependencies": { "@oxc-project/types": "=0.130.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.1", "@rolldown/binding-darwin-arm64": "1.0.1", "@rolldown/binding-darwin-x64": "1.0.1", "@rolldown/binding-freebsd-x64": "1.0.1", "@rolldown/binding-linux-arm-gnueabihf": "1.0.1", "@rolldown/binding-linux-arm64-gnu": "1.0.1", "@rolldown/binding-linux-arm64-musl": "1.0.1", "@rolldown/binding-linux-ppc64-gnu": "1.0.1", "@rolldown/binding-linux-s390x-gnu": "1.0.1", "@rolldown/binding-linux-x64-gnu": "1.0.1", "@rolldown/binding-linux-x64-musl": "1.0.1", "@rolldown/binding-openharmony-arm64": "1.0.1", "@rolldown/binding-wasm32-wasi": "1.0.1", "@rolldown/binding-win32-arm64-msvc": "1.0.1", "@rolldown/binding-win32-x64-msvc": "1.0.1" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ=="], - "rolldown-plugin-dts": ["rolldown-plugin-dts@0.23.2", "", { "dependencies": { "@babel/generator": "8.0.0-rc.3", "@babel/helper-validator-identifier": "8.0.0-rc.3", "@babel/parser": "8.0.0-rc.3", "@babel/types": "8.0.0-rc.3", "ast-kit": "^3.0.0-beta.1", "birpc": "^4.0.0", "dts-resolver": "^2.1.3", "get-tsconfig": "^4.13.7", "obug": "^2.1.1", "picomatch": "^4.0.4" }, "peerDependencies": { "@ts-macro/tsc": "^0.3.6", "@typescript/native-preview": ">=7.0.0-dev.20260325.1", "rolldown": "^1.0.0-rc.12", "typescript": "^5.0.0 || ^6.0.0", "vue-tsc": "~3.2.0" }, "optionalPeers": ["@ts-macro/tsc", "@typescript/native-preview", "typescript", "vue-tsc"] }, "sha512-PbSqLawLgZBGcOGT3yqWBGn4cX+wh2nt5FuBGdcMHyOhoukmjbhYAl8NT9sE4U38Cm9tqLOIQeOrvzeayM0DLQ=="], + "rolldown-plugin-dts": ["rolldown-plugin-dts@0.25.1", "", { "dependencies": { "@babel/generator": "8.0.0-rc.5", "@babel/helper-validator-identifier": "8.0.0-rc.5", "@babel/parser": "8.0.0-rc.4", "ast-kit": "^3.0.0-beta.1", "birpc": "^4.0.0", "dts-resolver": "^3.0.0", "get-tsconfig": "5.0.0-beta.5", "obug": "^2.1.1" }, "peerDependencies": { "@ts-macro/tsc": "^0.3.6", "@typescript/native-preview": ">=7.0.0-dev.20260325.1", "rolldown": "^1.0.0", "typescript": "^5.0.0 || ^6.0.0", "vue-tsc": "~3.2.0" }, "optionalPeers": ["@ts-macro/tsc", "@typescript/native-preview", "typescript", "vue-tsc"] }, "sha512-zK82aC/8z1iVW+g0bCnlQZq04Y5bNeL/RcRwTYBwsnU6wH0N+6vpIFkN7JC0kYRS5qKA+pxQyfIPvXJ6Q5xSpQ=="], "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "tinyexec": ["tinyexec@1.0.4", "", {}, "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw=="], + "tinyexec": ["tinyexec@1.1.2", "", {}, "sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA=="], - "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="], "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], - "tsdown": ["tsdown@0.21.7", "", { "dependencies": { "ansis": "^4.2.0", "cac": "^7.0.0", "defu": "^6.1.4", "empathic": "^2.0.0", "hookable": "^6.1.0", "import-without-cache": "^0.2.5", "obug": "^2.1.1", "picomatch": "^4.0.4", "rolldown": "1.0.0-rc.12", "rolldown-plugin-dts": "^0.23.2", "semver": "^7.7.4", "tinyexec": "^1.0.4", "tinyglobby": "^0.2.15", "tree-kill": "^1.2.2", "unconfig-core": "^7.5.0", "unrun": "^0.2.34" }, "peerDependencies": { "@arethetypeswrong/core": "^0.18.1", "@tsdown/css": "0.21.7", "@tsdown/exe": "0.21.7", "@vitejs/devtools": "*", "publint": "^0.3.0", "typescript": "^5.0.0 || ^6.0.0", "unplugin-unused": "^0.5.0" }, "optionalPeers": ["@arethetypeswrong/core", "@tsdown/css", "@tsdown/exe", "@vitejs/devtools", "publint", "typescript", "unplugin-unused"], "bin": { "tsdown": "dist/run.mjs" } }, "sha512-ukKIxKQzngkWvOYJAyptudclkm4VQqbjq+9HF5K5qDO8GJsYtMh8gIRwicbnZEnvFPr6mquFwYAVZ8JKt3rY2g=="], + "tsdown": ["tsdown@0.22.0", "", { "dependencies": { "ansis": "^4.2.0", "cac": "^7.0.0", "defu": "^6.1.7", "empathic": "^2.0.0", "hookable": "^6.1.1", "import-without-cache": "^0.4.0", "obug": "^2.1.1", "picomatch": "^4.0.4", "rolldown": "^1.0.0", "rolldown-plugin-dts": "^0.25.0", "semver": "^7.7.4", "tinyexec": "^1.1.2", "tinyglobby": "^0.2.16", "tree-kill": "^1.2.2", "unconfig-core": "^7.5.0" }, "peerDependencies": { "@arethetypeswrong/core": "^0.18.1", "@tsdown/css": "0.22.0", "@tsdown/exe": "0.22.0", "@vitejs/devtools": "*", "publint": "^0.3.8", "tsx": "*", "typescript": "^5.0.0 || ^6.0.0", "unplugin-unused": "^0.5.0", "unrun": "*" }, "optionalPeers": ["@arethetypeswrong/core", "@tsdown/css", "@tsdown/exe", "@vitejs/devtools", "publint", "tsx", "typescript", "unplugin-unused", "unrun"], "bin": { "tsdown": "./dist/run.mjs" } }, "sha512-FgW0hHb27nGQA/+F3d5+U9wKXkfilk9DVkc5+7x/ZqF03g+Hoz/eeApT32jqxATt9eRoR+1jxk7MUMON+O4CXw=="], "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], @@ -186,8 +186,8 @@ "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], - "unrun": ["unrun@0.2.34", "", { "dependencies": { "rolldown": "1.0.0-rc.12" }, "peerDependencies": { "synckit": "^0.11.11" }, "optionalPeers": ["synckit"], "bin": { "unrun": "dist/cli.mjs" } }, "sha512-LyaghRBR++r7svhDK6tnDz2XaYHWdneBOA0jbS8wnRsHerI9MFljX4fIiTgbbNbEVzZ0C9P1OjWLLe1OqoaaEw=="], + "zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], - "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], + "@babel/generator/@babel/parser": ["@babel/parser@8.0.0-rc.5", "", { "dependencies": { "@babel/types": "^8.0.0-rc.5" }, "bin": "./bin/babel-parser.js" }, "sha512-/Mfg83rK3+jsRbl4Vbd0jqxc6M1A1/WNFtgrowRM1unEsD3XcNnrBdMM0JWakd0/RN9lseQKwPduW1TiEwKOlQ=="], } } diff --git a/package.json b/package.json index 4d9dfd3..2803f92 100644 --- a/package.json +++ b/package.json @@ -31,21 +31,21 @@ "gen": "bun run --sequential gen:schemas gen:client format", "test": "bun test", "typecheck": "tsgo --noEmit", - "lint": "biome check ./src", + "lint": "biome check", "format": "biome check --write --linter-enabled=false", "build": "bunx --bun tsdown", "prepublishOnly": "bun run build" }, "dependencies": { - "minizod": "^0.0.3" + "minizod": "0.0.3" }, "devDependencies": { - "@biomejs/biome": "2.4.12", - "@gameroman/config": "^0.1.0", - "@types/bun": "^1.3.11", - "@typescript/native-preview": "^7.0.0-dev.20260401.1", - "tsdown": "^0.21.7", - "zod": "^4.3.6" + "@biomejs/biome": "2.4.15", + "@gameroman/config": "0.1.0", + "@types/bun": "1.3.14", + "@typescript/native-preview": "7.0.0-dev.20260517.1", + "tsdown": "0.22.0", + "zod": "4.4.3" }, "engines": { "node": ">=24" diff --git a/scripts/gen-client.ts b/scripts/gen-client.ts index fcecfeb..2a4ee49 100644 --- a/scripts/gen-client.ts +++ b/scripts/gen-client.ts @@ -6,6 +6,8 @@ import { OperationParameterBase, OperationQueryParameterSchema, type QueryParamSchemaSchema, + recordToObject, + refToName, type Schema, SchemaSchema, SchemaSchemaBoolean, @@ -334,7 +336,7 @@ const TagSchemaSchemaPut = BaseTagSchemaOperation.extend({ const TagSchemaSchema = z .object({ - // servers: LichessServersSchema.optional(), + servers: LichessServersSchema.optional(), parameters: z .array(OperationPathParameterSchema) .transform((s) => ({ parameters: s, __id: "__parameters" as const })) @@ -464,13 +466,13 @@ function schemaToTypescriptTypes( case "$ref": case "notverified:reftoprimitive": { const ref = schema.$ref; - const name = ref.split("/").pop()!.replace(".yaml", ""); + const name = refToName(ref); const typescriptSchema = `schemas.${name}` as const; return typescriptSchema; } case "notverified:reftoprimitive:nullable": { const ref = schema.allOf[0].$ref; - const name = ref.split("/").pop()!.replace(".yaml", ""); + const name = refToName(ref); const typescriptSchema = `schemas.${name} | null` as const; return typescriptSchema; } @@ -485,15 +487,7 @@ function schemaToTypescriptTypes( : (`?: ${typescriptSchema}` as const); objectRecord[k] = propStr; } - const entries = Object.entries(objectRecord); - if (entries.length === 1) { - return `{ "${entries[0]![0]}" ${entries[0]![1]} }` as const; - } - return ( - "{\n" + - entries.map(([k, v]) => ` "${k}" ${v},` as const).join("\n") + - "\n}" - ); + return recordToObject(objectRecord, { colon: false }); } case "boolean": case "boolean-like": { @@ -535,7 +529,7 @@ function schemaToTypescriptTypes( } case "array:notverified:reftoprimitive": { const ref = schema.items.$ref; - const name = ref.split("/").pop()!.replace(".yaml", ""); + const name = refToName(ref); const typescriptSchema = `schemas.${name}` as const; return `(${typescriptSchema})[]` as const; } @@ -563,32 +557,15 @@ function extractQueryParams(queryParams: OperationQueryParameter[]) { ? `: ${typescriptSchema}` : `?: ${typescriptSchema}`; } - const entries = Object.entries(params); - if (entries.length === 1) { - return `{ "${entries[0]![0]}" ${entries[0]![1]} }` as const; - } - return ( - "{\n" + - entries.map(([k, v]) => ` "${k}" ${v},` as const).join("\n") + - "\n}" - ); + return recordToObject(params, { colon: false }); } function extractPathParams(pathParams: OperationPathParameter[]) { const params: Record = {}; for (const param of pathParams) { - const typescriptSchema = schemaToTypescriptTypes(param.schema); - params[param.name] = `: ${typescriptSchema}` as const; - } - const entries = Object.entries(params); - if (entries.length === 1) { - return `{ "${entries[0]![0]}" ${entries[0]![1]} }` as const; + params[param.name] = schemaToTypescriptTypes(param.schema); } - return ( - "{\n" + - entries.map(([k, v]) => ` "${k}" ${v},` as const).join("\n") + - "\n}" - ); + return recordToObject(params); } function extractBodyTypes(bodySchema: Schema) { @@ -614,10 +591,10 @@ function processOperation( return { parameters, __type: "__parameters" } as const; } - // if (operation.__id === "__servers") { - // const baseUrl = operation.url; - // return { baseUrl, __type: "__servers" } as const; - // } + if (operation.__id === "__servers") { + const baseUrl = operation.url; + return { baseUrl, __type: "__servers" } as const; + } const { processedPath, hasPathParams } = processRawPath(rawApiPath); const pathLiteral = hasPathParams diff --git a/scripts/gen-schemas.ts b/scripts/gen-schemas.ts index 4581677..2a8fa33 100644 --- a/scripts/gen-schemas.ts +++ b/scripts/gen-schemas.ts @@ -3,11 +3,11 @@ import * as fs from "node:fs/promises"; import * as path from "node:path"; import { ZodError } from "zod"; import { prettifyError } from "zod/mini"; -import { convertToZod, SchemaSchema } from "./shared"; +import { convertToZod, refToName, SchemaSchema, StringYamlRef } from "./shared"; async function processFile(filePath: string) { const normalizedFilePath = filePath.replaceAll("\\", "/"); - const fileName = normalizedFilePath.split("/").pop()!.replace(".yaml", ""); + const fileName = refToName(StringYamlRef.parse(normalizedFilePath)); const yamlStr = await Bun.file(normalizedFilePath).text(); const yamlContent = Bun.YAML.parse(yamlStr); const parsedSchema = SchemaSchema.safeParse(yamlContent); diff --git a/scripts/shared.ts b/scripts/shared.ts index fac964f..4b7a6b1 100644 --- a/scripts/shared.ts +++ b/scripts/shared.ts @@ -1,3 +1,4 @@ +import * as path from "node:path"; import * as z from "zod"; const SchemaUnparsed = z @@ -29,6 +30,8 @@ const StringYamlRef = z .templateLiteral([z.string(), ".yaml"]) .brand("StringYamlRef"); +type StringYamlRef = z.infer; + const SchemaSchemaRef = BaseSchema.extend({ type: z.literal("object").optional(), $ref: StringYamlRef, @@ -240,6 +243,33 @@ function parseUnparsed(schema: Unparsed) { type ConvertResult = { readonly zodSchema: string; readonly refs: string[] }; +function refToName(ref: StringYamlRef) { + return path.basename(ref).replace(".yaml", ""); +} + +function recordToObject( + object: Record, + options = { colon: true }, +) { + const entries = Object.entries(object); + + const colon = options.colon ? ":" : ""; + + if (entries.length <= 1) { + const firstEntry = entries[0]; + if (firstEntry) { + return `{ "${firstEntry[0]}"${colon} ${firstEntry[1]} }`; + } + return "Record"; + } + + const entriesKv = entries + .map(([k, v]) => ` "${k}"${colon} ${v},`) + .join("\n"); + + return `{\n${entriesKv}\n}`; +} + function convertToZod(schema: Schema, prefix: string = ""): ConvertResult { if (schema.const !== undefined) { return { @@ -252,7 +282,7 @@ function convertToZod(schema: Schema, prefix: string = ""): ConvertResult { switch (schema.__schema) { case "$ref": { const ref = schema.$ref; - const name = ref.split("/").pop()!.replace(".yaml", ""); + const name = refToName(ref); const prefixedName = `${prefix}${name}` as const; return { zodSchema: prefixedName, refs: prefix ? [] : [name] } as const; } @@ -262,7 +292,9 @@ function convertToZod(schema: Schema, prefix: string = ""): ConvertResult { ); const zodSchemas = subResults.map((r) => r.zodSchema); const allRefs = new Set(); - subResults.forEach((r) => r.refs.forEach((ref) => allRefs.add(ref))); + subResults.forEach( + (r) => void r.refs.forEach((ref) => void allRefs.add(ref)), + ); return { zodSchema: `z.union([${zodSchemas.join(", ")}])`, refs: Array.from(allRefs), @@ -286,10 +318,8 @@ function convertToZod(schema: Schema, prefix: string = ""): ConvertResult { case "anyOf": { const refNames: string[] = []; const allRefs = new Set(); - for (const [_, refYaml] of Object.entries( - schema.discriminator.mapping, - )) { - const name = refYaml.split("/").pop()!.replace(".yaml", ""); + for (const [_, ref] of Object.entries(schema.discriminator.mapping)) { + const name = refToName(ref); refNames.push(prefix + name); if (!prefix) allRefs.add(name); } @@ -387,20 +417,14 @@ function convertToZod(schema: Schema, prefix: string = ""): ConvertResult { parseUnparsed(v), prefix, ); - propRefs.forEach((r) => allRefs.add(r)); + propRefs.forEach((r) => void allRefs.add(r)); let propStr = sch; if (!required.has(k)) { propStr = `z.optional(${propStr})`; } zodProps[k] = propStr; } - const entries = Object.entries(zodProps); - const inner = - entries.length === 1 - ? `{ "${entries[0]![0]}": ${entries[0]![1]} }` - : "{\n" + - entries.map(([k, v]) => ` "${k}": ${v},`).join("\n") + - "\n}"; + const inner = recordToObject(zodProps); return { zodSchema: `z.object(${inner})`, refs: Array.from(allRefs), @@ -471,6 +495,9 @@ export { assertNever, convertToZod, QueryParamSchemaSchema, + recordToObject, + refToName, SchemaSchema, SchemaSchemaRef, + StringYamlRef, }; diff --git a/src/client/index.ts b/src/client/index.ts index 81d4af9..2f9e189 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -3147,7 +3147,7 @@ export class Lichess { "clock.increment": number; } | { days: 1 | 2 | 3 | 5 | 7 | 10 | 14 } - | {} + | Record ) & { rated?: boolean; color?: schemas.ChallengeColor;