diff --git a/.github/workflows/update-api.yml b/.github/workflows/update-api.yml index e0622d6..598c453 100644 --- a/.github/workflows/update-api.yml +++ b/.github/workflows/update-api.yml @@ -50,12 +50,6 @@ jobs: - name: Generate files run: bun run gen - - name: Build - run: bun run build - - - name: Run tests - run: bun run test - - name: Create or update Pull Request uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0 with: diff --git a/package.json b/package.json index ef241c6..7950918 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@lichess/api", "version": "0.0.2", "type": "module", - "author": "GameRoMan", + "author": "gameroman", "license": "MIT", "scripts": { "gen:schemas": "bun ./scripts/gen-schemas", @@ -15,6 +15,14 @@ "build": "bunx --bun tsdown", "prepublishOnly": "bun run build" }, + "keywords": [ + "api", + "lichess" + ], + "imports": { + "#lib/*": "./src/lib/*.ts", + "#schemas": "./src/schemas/index.ts" + }, "repository": { "type": "git", "url": "git+https://github.com/lichess-api/typescript.git" diff --git a/scripts/gen-client.ts b/scripts/gen-client.ts index 34ab15f..f6b3d92 100644 --- a/scripts/gen-client.ts +++ b/scripts/gen-client.ts @@ -804,11 +804,11 @@ async function processSchema(schema: OpenApiSchema): Promise { const API_URL = schema.servers[0].url; - const clientCodeTs = `import * as z from "zod"; + const clientCodeTs = `import * as z from "zod/mini"; -import { ndjsonStream } from "~/lib/ndjson"; +import { ndjsonStream } from "#lib/ndjson"; -import * as schemas from "~/schemas"; +import * as schemas from "#schemas"; import { Requestor } from "./requestor"; diff --git a/scripts/gen-schemas.ts b/scripts/gen-schemas.ts index 469a347..f0634e2 100644 --- a/scripts/gen-schemas.ts +++ b/scripts/gen-schemas.ts @@ -36,7 +36,7 @@ async function processFile(filePath: string) { ? (`\n${refImports}\n` as const) : ("" as const); - const tsCode = `import * as z from "zod"; + const tsCode = `import * as z from "zod/mini"; ${spacedRefImports} const ${fileName} = ${zodSchema}; diff --git a/scripts/shared.ts b/scripts/shared.ts index dc85128..0f3277b 100644 --- a/scripts/shared.ts +++ b/scripts/shared.ts @@ -303,15 +303,15 @@ function convertToZod(schema: Schema, prefix: string = ""): ConvertResult { } let schemaStr = "z.string()"; if (schema.minLength !== undefined) { - schemaStr += `.min(${schema.minLength})`; + schemaStr += `.check(z.minLength(${schema.minLength}))`; } if (schema.maxLength !== undefined) { - schemaStr += `.max(${schema.maxLength})`; + schemaStr += `.check(z.maxLength(${schema.maxLength}))`; } return { zodSchema: schemaStr, refs: [] } as const; } case "string:nullable": { - return { zodSchema: "z.string().nullable()", refs: [] } as const; + return { zodSchema: "z.nullable(z.string())", refs: [] } as const; } case "enum:number": { const literals = schema.enum.map((v) => JSON.stringify(v)).join(", "); @@ -331,23 +331,23 @@ function convertToZod(schema: Schema, prefix: string = ""): ConvertResult { } } if (schema.minimum !== undefined) { - schemaStr += `.min(${schema.minimum})`; + schemaStr += `.check(z.minimum(${schema.minimum}))`; } if (schema.maximum !== undefined) { - schemaStr += `.max(${schema.maximum})`; + schemaStr += `.check(z.maximum(${schema.maximum}))`; } return { zodSchema: schemaStr, refs: [] } as const; } case "integer:nullable": { - return { zodSchema: "z.int().nullable()", refs: [] } as const; + return { zodSchema: "z.nullable(z.int())", refs: [] } as const; } case "number": { let schemaStr = "z.number()"; if (schema.minimum !== undefined) { - schemaStr += `.min(${schema.minimum})`; + schemaStr += `.check(z.minimum(${schema.minimum}))`; } if (schema.maximum !== undefined) { - schemaStr += `.max(${schema.maximum})`; + schemaStr += `.check(z.maximum(${schema.maximum}))`; } return { zodSchema: schemaStr, refs: [] } as const; } @@ -377,7 +377,7 @@ function convertToZod(schema: Schema, prefix: string = ""): ConvertResult { propRefs.forEach((r) => allRefs.add(r)); let propStr = sch; if (!required.has(k)) { - propStr += ".optional()"; + propStr = `z.optional(${propStr})`; } zodProps[k] = propStr; } @@ -422,10 +422,10 @@ function convertToZod(schema: Schema, prefix: string = ""): ConvertResult { inner += `.length(${schema.minItems})`; } else { if (schema.minItems !== undefined) { - inner += `.min(${schema.minItems})`; + inner += `.check(z.minLength(${schema.minItems}))`; } if (schema.maxItems !== undefined) { - inner += `.max(${schema.maxItems})`; + inner += `.check(z.maxLength(${schema.maxItems}))`; } } zodSchemaStr = inner; diff --git a/src/client/index.ts b/src/client/index.ts index d01035c..e0ec288 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -1,8 +1,8 @@ -import * as z from "zod"; +import * as z from "zod/mini"; -import { ndjsonStream } from "~/lib/ndjson"; +import { ndjsonStream } from "#lib/ndjson"; -import * as schemas from "~/schemas"; +import * as schemas from "#schemas"; import { Requestor } from "./requestor"; @@ -34,13 +34,13 @@ export class Lichess { z.object({ id: z.string(), name: z.string(), - flair: schemas.Flair.optional(), - title: schemas.Title.optional(), - online: z.boolean().optional(), - playing: z.boolean().optional(), - streaming: z.boolean().optional(), - patron: schemas.Patron.optional(), - patronColor: schemas.PatronColor.optional(), + flair: z.optional(schemas.Flair), + title: z.optional(schemas.Title), + online: z.optional(z.boolean()), + playing: z.optional(z.boolean()), + streaming: z.optional(z.boolean()), + patron: z.optional(schemas.Patron), + patronColor: z.optional(schemas.PatronColor), }), ); const json: unknown = await response.clone().json(); @@ -334,7 +334,7 @@ export class Lichess { return { status, response, data } as const; } case 404: { - const schema = z.object({ error: z.string().optional() }); + const schema = z.object({ error: z.optional(z.string()) }); const json: unknown = await response.clone().json(); const data = schema.parse(json); return { status, response, data } as const; @@ -485,7 +485,7 @@ export class Lichess { const { response, status } = await this.requestor.get({ path }); switch (status) { case 200: { - const schema = z.object({ email: z.string().optional() }); + const schema = z.object({ email: z.optional(z.string()) }); const json: unknown = await response.clone().json(); const data = schema.parse(json); return { status, response, data } as const; @@ -505,8 +505,8 @@ export class Lichess { switch (status) { case 200: { const schema = z.object({ - prefs: schemas.UserPreferences.optional(), - language: z.string().optional(), + prefs: z.optional(schemas.UserPreferences), + language: z.optional(z.string()), }); const json: unknown = await response.clone().json(); const data = schema.parse(json); @@ -526,7 +526,7 @@ export class Lichess { const { response, status } = await this.requestor.get({ path }); switch (status) { case 200: { - const schema = z.object({ kid: z.boolean().optional() }); + const schema = z.object({ kid: z.optional(z.boolean()) }); const json: unknown = await response.clone().json(); const data = schema.parse(json); return { status, response, data } as const; @@ -861,7 +861,7 @@ export class Lichess { color: schemas.GameColor, lastMove: z.string(), source: schemas.GameSource, - status: schemas.GameStatusName.optional(), + status: z.optional(schemas.GameStatusName), variant: schemas.Variant, speed: schemas.Speed, perf: schemas.PerfType, @@ -870,16 +870,16 @@ export class Lichess { opponent: z.object({ id: z.string(), username: z.string(), - rating: z.int().optional(), - ratingDiff: z.int().optional(), - ai: z.int().optional(), + rating: z.optional(z.int()), + ratingDiff: z.optional(z.int()), + ai: z.optional(z.int()), }), isMyTurn: z.boolean(), secondsLeft: z.int(), - tournamentId: z.string().optional(), - swissId: z.string().optional(), - winner: schemas.GameColor.optional(), - ratingDiff: z.int().optional(), + tournamentId: z.optional(z.string()), + swissId: z.optional(z.string()), + winner: z.optional(schemas.GameColor), + ratingDiff: z.optional(z.int()), }), ), }); @@ -906,7 +906,7 @@ export class Lichess { return { status, stream } as const; } case 429: { - const schema = z.object({ error: z.string().optional() }); + const schema = z.object({ error: z.optional(z.string()) }); const json: unknown = await response.clone().json(); const data = schema.parse(json); return { status, response, data } as const; @@ -927,8 +927,8 @@ export class Lichess { switch (status) { case 200: { const schema = z.object({ - id: z.string().optional(), - url: z.url().optional(), + id: z.optional(z.string()), + url: z.optional(z.url()), }); const json: unknown = await response.clone().json(); const data = schema.parse(json); @@ -1656,11 +1656,11 @@ export class Lichess { rating: z.int(), username: z.string(), performance: z.int(), - title: schemas.Title.optional(), - team: z.string().optional(), - flair: schemas.Flair.optional(), - patronColor: schemas.PatronColor.optional(), - sheet: schemas.ArenaSheet.optional(), + title: z.optional(schemas.Title), + team: z.optional(z.string()), + flair: z.optional(schemas.Flair), + patronColor: z.optional(schemas.PatronColor), + sheet: z.optional(schemas.ArenaSheet), }); const stream = ndjsonStream({ response, schema }); return { status, stream } as const; @@ -1689,7 +1689,7 @@ export class Lichess { players: z.array( z.object({ user: schemas.LightUser, - score: z.int().optional(), + score: z.optional(z.int()), }), ), }), @@ -2216,13 +2216,13 @@ export class Lichess { switch (status) { case 200: { const schema = z.object({ - absent: z.boolean().optional(), + absent: z.optional(z.boolean()), rank: z.int(), points: z.number(), tieBreak: z.int(), rating: z.int(), username: z.string(), - title: schemas.Title.optional(), + title: z.optional(schemas.Title), performance: z.int(), }); const stream = ndjsonStream({ response, schema }); @@ -2534,8 +2534,8 @@ export class Lichess { maxPerPage: z.int(), currentPageResults: z.array(schemas.BroadcastByUser), nbResults: z.int(), - previousPage: z.int().nullable(), - nextPage: z.int().nullable(), + previousPage: z.nullable(z.int()), + nextPage: z.nullable(z.int()), nbPages: z.int(), }); const json: unknown = await response.clone().json(); @@ -2561,8 +2561,8 @@ export class Lichess { currentPage: z.int(), maxPerPage: z.int(), currentPageResults: z.array(schemas.BroadcastWithLastRound), - previousPage: z.int().nullable(), - nextPage: z.int().nullable(), + previousPage: z.nullable(z.int()), + nextPage: z.nullable(z.int()), }); const json: unknown = await response.clone().json(); const data = schema.parse(json); @@ -2813,7 +2813,7 @@ export class Lichess { return { status, response, data } as const; } case 400: { - const schema = z.object({ error: z.string().optional() }); + const schema = z.object({ error: z.optional(z.string()) }); const json: unknown = await response.clone().json(); const data = schema.parse(json); return { status, response, data } as const; @@ -2943,10 +2943,10 @@ export class Lichess { switch (status) { case 200: { const schema = z.object({ - pending: z.array(schemas.Simul).optional(), - created: z.array(schemas.Simul).optional(), - started: z.array(schemas.Simul).optional(), - finished: z.array(schemas.Simul).optional(), + pending: z.optional(z.array(schemas.Simul)), + created: z.optional(z.array(schemas.Simul)), + started: z.optional(z.array(schemas.Simul)), + finished: z.optional(z.array(schemas.Simul)), }); const json: unknown = await response.clone().json(); const data = schema.parse(json); @@ -3046,11 +3046,11 @@ export class Lichess { switch (status) { case 200: { const schema = z.object({ - joinedTeamAt: z.int().optional(), + joinedTeamAt: z.optional(z.int()), id: z.string(), name: z.string(), - title: schemas.Title.optional(), - patronColor: schemas.PatronColor.optional(), + title: z.optional(schemas.Title), + patronColor: z.optional(schemas.PatronColor), }); const stream = ndjsonStream({ response, schema }); return { status, stream } as const; @@ -3257,23 +3257,23 @@ export class Lichess { z.intersection( schemas.LightUser, z.object({ - stream: z - .object({ - service: z.literal(["twitch", "youtube"]).optional(), - status: z.string().optional(), - lang: z.string().optional(), - }) - .optional(), - streamer: z - .object({ - name: z.string().optional(), - headline: z.string().optional(), - description: z.string().optional(), - twitch: z.url().optional(), - youtube: z.url().optional(), - image: z.url().optional(), - }) - .optional(), + stream: z.optional( + z.object({ + service: z.optional(z.literal(["twitch", "youtube"])), + status: z.optional(z.string()), + lang: z.optional(z.string()), + }), + ), + streamer: z.optional( + z.object({ + name: z.optional(z.string()), + headline: z.optional(z.string()), + description: z.optional(z.string()), + twitch: z.optional(z.url()), + youtube: z.optional(z.url()), + image: z.optional(z.url()), + }), + ), }), ), ); @@ -3333,7 +3333,7 @@ export class Lichess { case 200: { const schema = z.union([ z.array(z.string()), - z.object({ result: z.array(schemas.LightUserOnline).optional() }), + z.object({ result: z.optional(z.array(schemas.LightUserOnline)) }), ]); const json: unknown = await response.clone().json(); const data = schema.parse(json); @@ -4144,8 +4144,8 @@ export class Lichess { switch (status) { case 200: { const schema = z.object({ - in: z.array(schemas.ChallengeJson).optional(), - out: z.array(schemas.ChallengeJson).optional(), + in: z.optional(z.array(schemas.ChallengeJson)), + out: z.optional(z.array(schemas.ChallengeJson)), }); const json: unknown = await response.clone().json(); const data = schema.parse(json); @@ -4322,18 +4322,22 @@ export class Lichess { switch (status) { case 201: { const schema = z.object({ - id: z.string().min(8).max(8).optional(), - variant: schemas.Variant.optional(), - speed: schemas.Speed.optional(), - perf: schemas.PerfType.optional(), - rated: z.boolean().optional(), - fen: z.string().optional(), - turns: z.int().optional(), - source: schemas.GameSource.optional(), - status: schemas.GameStatus.optional(), - createdAt: z.int().optional(), - player: schemas.GameColor.optional(), - fullId: z.string().min(12).max(12).optional(), + id: z.optional( + z.string().check(z.minLength(8)).check(z.maxLength(8)), + ), + variant: z.optional(schemas.Variant), + speed: z.optional(schemas.Speed), + perf: z.optional(schemas.PerfType), + rated: z.optional(z.boolean()), + fen: z.optional(z.string()), + turns: z.optional(z.int()), + source: z.optional(schemas.GameSource), + status: z.optional(schemas.GameStatus), + createdAt: z.optional(z.int()), + player: z.optional(schemas.GameColor), + fullId: z.optional( + z.string().check(z.minLength(12)).check(z.maxLength(12)), + ), }); const json: unknown = await response.clone().json(); const data = schema.parse(json); @@ -4687,7 +4691,7 @@ export class Lichess { return { status, response, data } as const; } case 404: { - const schema = z.object({ error: z.string().optional() }); + const schema = z.object({ error: z.optional(z.string()) }); const json: unknown = await response.clone().json(); const data = schema.parse(json); return { status, response, data } as const; @@ -4823,14 +4827,14 @@ export class Lichess { switch (status) { case 200: { const schema = z.object({ - time: z.int().min(0), - depth: z.int().min(0), - nodes: z.int().min(0), + time: z.int().check(z.minimum(0)), + depth: z.int().check(z.minimum(0)), + nodes: z.int().check(z.minimum(0)), pvs: z.array( z.object({ - depth: z.int().min(0), - cp: z.int().optional(), - mate: z.int().optional(), + depth: z.int().check(z.minimum(0)), + cp: z.optional(z.int()), + mate: z.optional(z.int()), moves: z.array(z.string()), }), ), @@ -4995,9 +4999,9 @@ export class Lichess { z.string(), z.union([ z.object({ - userId: z.string().optional(), - scopes: z.string().optional(), - expires: z.int().nullable().optional(), + userId: z.optional(z.string()), + scopes: z.optional(z.string()), + expires: z.optional(z.nullable(z.int())), }), z.null(), ]), diff --git a/src/client/requestor.ts b/src/client/requestor.ts index f05c5fc..66970ea 100644 --- a/src/client/requestor.ts +++ b/src/client/requestor.ts @@ -1,5 +1,3 @@ -import { addQueryParams } from "~/utils"; - type QueryParams = Record< string, string | number | boolean | string[] | number[] | null | undefined @@ -14,6 +12,19 @@ type RequestHandlerParams = { type RequestMethod = "GET" | "POST" | "HEAD" | "PUT" | "DELETE"; +function addQueryParams(url: URL, params: Record): void { + Object.entries(params).forEach(([key, value]) => { + if (value === undefined || value === null) return; + + if (Array.isArray(value)) { + url.searchParams.set(key, value.join(",")); + return; + } + + url.searchParams.set(key, String(value)); + }); +} + export class Requestor { readonly #headers: { readonly Authorization: `Bearer ${string}` } | undefined; readonly #baseUrl: string; diff --git a/src/lib/ndjson.ts b/src/lib/ndjson.ts index 8a4b3ab..a338558 100644 --- a/src/lib/ndjson.ts +++ b/src/lib/ndjson.ts @@ -1,11 +1,11 @@ -import type * as z from "zod"; +import type * as z from "zod/mini"; async function* ndjsonStream({ response, schema, }: { response: Response; - schema: z.ZodType; + schema: z.ZodMiniType; }): AsyncGenerator { if (!response.body) { throw new Error("Response has no body"); diff --git a/src/schemas/ArenaPerf.ts b/src/schemas/ArenaPerf.ts index f023694..f5ba671 100644 --- a/src/schemas/ArenaPerf.ts +++ b/src/schemas/ArenaPerf.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { PerfType } from "./PerfType"; @@ -6,7 +6,7 @@ const ArenaPerf = z.object({ key: PerfType, name: z.string(), position: z.int(), - icon: z.string().optional(), + icon: z.optional(z.string()), }); type ArenaPerf = z.infer; diff --git a/src/schemas/ArenaPosition.ts b/src/schemas/ArenaPosition.ts index 54dae91..64aa176 100644 --- a/src/schemas/ArenaPosition.ts +++ b/src/schemas/ArenaPosition.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const ArenaPosition = z.union([ z.object({ diff --git a/src/schemas/ArenaRatingObj.ts b/src/schemas/ArenaRatingObj.ts index 875cded..3835f33 100644 --- a/src/schemas/ArenaRatingObj.ts +++ b/src/schemas/ArenaRatingObj.ts @@ -1,9 +1,9 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { PerfType } from "./PerfType"; const ArenaRatingObj = z.object({ - perf: PerfType.optional(), + perf: z.optional(PerfType), rating: z.int(), }); diff --git a/src/schemas/ArenaSheet.ts b/src/schemas/ArenaSheet.ts index f5fb314..1b5413c 100644 --- a/src/schemas/ArenaSheet.ts +++ b/src/schemas/ArenaSheet.ts @@ -1,8 +1,8 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const ArenaSheet = z.object({ scores: z.string(), - fire: z.boolean().optional(), + fire: z.optional(z.boolean()), }); type ArenaSheet = z.infer; diff --git a/src/schemas/ArenaStatus.ts b/src/schemas/ArenaStatus.ts index cb9310d..4e0e24a 100644 --- a/src/schemas/ArenaStatus.ts +++ b/src/schemas/ArenaStatus.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const ArenaStatus = z.literal([10, 20, 30]); diff --git a/src/schemas/ArenaStatusName.ts b/src/schemas/ArenaStatusName.ts index 1b5d004..078ab71 100644 --- a/src/schemas/ArenaStatusName.ts +++ b/src/schemas/ArenaStatusName.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const ArenaStatusName = z.literal(["created", "started", "finished"]); diff --git a/src/schemas/ArenaTournament.ts b/src/schemas/ArenaTournament.ts index 63ffb24..7e2a351 100644 --- a/src/schemas/ArenaTournament.ts +++ b/src/schemas/ArenaTournament.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { ArenaPerf } from "./ArenaPerf"; import { ArenaPosition } from "./ArenaPosition"; @@ -22,30 +22,30 @@ const ArenaTournament = z.object({ finishesAt: z.int(), status: ArenaStatus, perf: ArenaPerf, - secondsToStart: z.int().optional(), - hasMaxRating: z.boolean().optional(), - maxRating: ArenaRatingObj.optional(), - minRating: ArenaRatingObj.optional(), - minRatedGames: z.object({ nb: z.int().optional() }).optional(), - botsAllowed: z.boolean().optional(), - minAccountAgeInDays: z.int().optional(), - onlyTitled: z.boolean().optional(), - teamMember: z.string().optional(), - private: z.boolean().optional(), - position: ArenaPosition.optional(), - schedule: z - .object({ - freq: z.string().optional(), - speed: z.string().optional(), - }) - .optional(), - teamBattle: z - .object({ - teams: z.array(z.string()).optional(), - nbLeaders: z.int().optional(), - }) - .optional(), - winner: LightUser.optional(), + secondsToStart: z.optional(z.int()), + hasMaxRating: z.optional(z.boolean()), + maxRating: z.optional(ArenaRatingObj), + minRating: z.optional(ArenaRatingObj), + minRatedGames: z.optional(z.object({ nb: z.optional(z.int()) })), + botsAllowed: z.optional(z.boolean()), + minAccountAgeInDays: z.optional(z.int()), + onlyTitled: z.optional(z.boolean()), + teamMember: z.optional(z.string()), + private: z.optional(z.boolean()), + position: z.optional(ArenaPosition), + schedule: z.optional( + z.object({ + freq: z.optional(z.string()), + speed: z.optional(z.string()), + }), + ), + teamBattle: z.optional( + z.object({ + teams: z.optional(z.array(z.string())), + nbLeaders: z.optional(z.int()), + }), + ), + winner: z.optional(LightUser), }); type ArenaTournament = z.infer; diff --git a/src/schemas/ArenaTournamentFull.ts b/src/schemas/ArenaTournamentFull.ts index fb9e033..d759c25 100644 --- a/src/schemas/ArenaTournamentFull.ts +++ b/src/schemas/ArenaTournamentFull.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { ArenaRatingObj } from "./ArenaRatingObj"; import { ArenaSheet } from "./ArenaSheet"; @@ -12,152 +12,152 @@ import { Verdicts } from "./Verdicts"; const ArenaTournamentFull = z.object({ id: z.string(), fullName: z.string(), - rated: z.boolean().optional(), - spotlight: z.object({ headline: z.string().optional() }).optional(), - berserkable: z.boolean().optional(), - onlyTitled: z.boolean().optional(), + rated: z.optional(z.boolean()), + spotlight: z.optional(z.object({ headline: z.optional(z.string()) })), + berserkable: z.optional(z.boolean()), + onlyTitled: z.optional(z.boolean()), clock: Clock, - minutes: z.int().optional(), - createdBy: z.string().optional(), - system: z.string().optional(), - secondsToStart: z.int().optional(), - secondsToFinish: z.int().optional(), - isFinished: z.boolean().optional(), - isRecentlyFinished: z.boolean().optional(), - pairingsClosed: z.boolean().optional(), - startsAt: z.string().optional(), + minutes: z.optional(z.int()), + createdBy: z.optional(z.string()), + system: z.optional(z.string()), + secondsToStart: z.optional(z.int()), + secondsToFinish: z.optional(z.int()), + isFinished: z.optional(z.boolean()), + isRecentlyFinished: z.optional(z.boolean()), + pairingsClosed: z.optional(z.boolean()), + startsAt: z.optional(z.string()), nbPlayers: z.int(), - verdicts: Verdicts.optional(), - quote: z - .object({ - text: z.string().optional(), - author: z.string().optional(), - }) - .optional(), - greatPlayer: z - .object({ - name: z.string().optional(), - url: z.url().optional(), - }) - .optional(), - allowList: z.array(z.string()).optional(), - hasMaxRating: z.boolean().optional(), - maxRating: ArenaRatingObj.optional(), - minRating: ArenaRatingObj.optional(), - minRatedGames: z.object({ nb: z.int().optional() }).optional(), - botsAllowed: z.boolean().optional(), - minAccountAgeInDays: z.int().optional(), - perf: z - .object({ + verdicts: z.optional(Verdicts), + quote: z.optional( + z.object({ + text: z.optional(z.string()), + author: z.optional(z.string()), + }), + ), + greatPlayer: z.optional( + z.object({ + name: z.optional(z.string()), + url: z.optional(z.url()), + }), + ), + allowList: z.optional(z.array(z.string())), + hasMaxRating: z.optional(z.boolean()), + maxRating: z.optional(ArenaRatingObj), + minRating: z.optional(ArenaRatingObj), + minRatedGames: z.optional(z.object({ nb: z.optional(z.int()) })), + botsAllowed: z.optional(z.boolean()), + minAccountAgeInDays: z.optional(z.int()), + perf: z.optional( + z.object({ icon: z.string(), key: z.string(), name: z.string(), - }) - .optional(), - schedule: z - .object({ + }), + ), + schedule: z.optional( + z.object({ freq: z.string(), speed: z.string(), - }) - .optional(), - description: z.string().optional(), - variant: z.string().optional(), - duels: z - .array( + }), + ), + description: z.optional(z.string()), + variant: z.optional(z.string()), + duels: z.optional( + z.array( z.object({ - id: z.string().optional(), - p: z - .tuple([ + id: z.optional(z.string()), + p: z.optional( + z.tuple([ z.object({ - n: z.string().optional(), - r: z.int().optional(), - k: z.int().optional(), + n: z.optional(z.string()), + r: z.optional(z.int()), + k: z.optional(z.int()), }), z.object({ - n: z.string().optional(), - r: z.int().optional(), - k: z.int().optional(), + n: z.optional(z.string()), + r: z.optional(z.int()), + k: z.optional(z.int()), }), - ]) - .optional(), + ]), + ), }), - ) - .optional(), - standing: z - .object({ - page: z.int().optional(), - players: z - .array( + ), + ), + standing: z.optional( + z.object({ + page: z.optional(z.int()), + players: z.optional( + z.array( z.object({ - name: z.string().optional(), - title: Title.optional(), - patron: Patron.optional(), - patronColor: PatronColor.optional(), - flair: Flair.optional(), - rank: z.int().optional(), - rating: z.int().optional(), - score: z.int().optional(), - sheet: ArenaSheet.optional(), + name: z.optional(z.string()), + title: z.optional(Title), + patron: z.optional(Patron), + patronColor: z.optional(PatronColor), + flair: z.optional(Flair), + rank: z.optional(z.int()), + rating: z.optional(z.int()), + score: z.optional(z.int()), + sheet: z.optional(ArenaSheet), }), - ) - .optional(), - }) - .optional(), - featured: z - .object({ - id: z.string().optional(), - fen: z.string().optional(), - orientation: z.string().optional(), - color: z.string().optional(), - lastMove: z.string().optional(), - white: z - .object({ - name: z.string().optional(), - id: z.string().optional(), - rank: z.int().optional(), - rating: z.int().optional(), - }) - .optional(), - black: z - .object({ - name: z.string().optional(), - id: z.string().optional(), - rank: z.int().optional(), - rating: z.int().optional(), - }) - .optional(), - c: z - .object({ - white: z.int().optional(), - black: z.int().optional(), - }) - .optional(), - }) - .optional(), - podium: z - .array( + ), + ), + }), + ), + featured: z.optional( + z.object({ + id: z.optional(z.string()), + fen: z.optional(z.string()), + orientation: z.optional(z.string()), + color: z.optional(z.string()), + lastMove: z.optional(z.string()), + white: z.optional( + z.object({ + name: z.optional(z.string()), + id: z.optional(z.string()), + rank: z.optional(z.int()), + rating: z.optional(z.int()), + }), + ), + black: z.optional( + z.object({ + name: z.optional(z.string()), + id: z.optional(z.string()), + rank: z.optional(z.int()), + rating: z.optional(z.int()), + }), + ), + c: z.optional( + z.object({ + white: z.optional(z.int()), + black: z.optional(z.int()), + }), + ), + }), + ), + podium: z.optional( + z.array( z.object({ - name: z.string().optional(), - title: Title.optional(), - patron: Patron.optional(), - patronColor: PatronColor.optional(), - flair: Flair.optional(), - rank: z.int().optional(), - rating: z.int().optional(), - score: z.int().optional(), - nb: z - .object({ - game: z.int().optional(), - berserk: z.int().optional(), - win: z.int().optional(), - }) - .optional(), - performance: z.int().optional(), + name: z.optional(z.string()), + title: z.optional(Title), + patron: z.optional(Patron), + patronColor: z.optional(PatronColor), + flair: z.optional(Flair), + rank: z.optional(z.int()), + rating: z.optional(z.int()), + score: z.optional(z.int()), + nb: z.optional( + z.object({ + game: z.optional(z.int()), + berserk: z.optional(z.int()), + win: z.optional(z.int()), + }), + ), + performance: z.optional(z.int()), }), - ) - .optional(), - stats: z - .object({ + ), + ), + stats: z.optional( + z.object({ games: z.int(), moves: z.int(), whiteWins: z.int(), @@ -165,9 +165,9 @@ const ArenaTournamentFull = z.object({ draws: z.int(), berserks: z.int(), averageRating: z.int(), - }) - .optional(), - myUsername: z.string().optional(), + }), + ), + myUsername: z.optional(z.string()), }); type ArenaTournamentFull = z.infer; diff --git a/src/schemas/ArenaTournamentPlayed.ts b/src/schemas/ArenaTournamentPlayed.ts index 2f89426..f77004b 100644 --- a/src/schemas/ArenaTournamentPlayed.ts +++ b/src/schemas/ArenaTournamentPlayed.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { ArenaTournament } from "./ArenaTournament"; import { ArenaTournamentPlayer } from "./ArenaTournamentPlayer"; diff --git a/src/schemas/ArenaTournamentPlayer.ts b/src/schemas/ArenaTournamentPlayer.ts index c39f2b3..908f4ad 100644 --- a/src/schemas/ArenaTournamentPlayer.ts +++ b/src/schemas/ArenaTournamentPlayer.ts @@ -1,10 +1,10 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const ArenaTournamentPlayer = z.object({ games: z.int(), score: z.int(), rank: z.int(), - performance: z.int().optional(), + performance: z.optional(z.int()), }); type ArenaTournamentPlayer = z.infer; diff --git a/src/schemas/ArenaTournaments.ts b/src/schemas/ArenaTournaments.ts index da4ed79..9b3a82c 100644 --- a/src/schemas/ArenaTournaments.ts +++ b/src/schemas/ArenaTournaments.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { ArenaTournament } from "./ArenaTournament"; diff --git a/src/schemas/BroadcastByUser.ts b/src/schemas/BroadcastByUser.ts index 2575c69..d9f2aff 100644 --- a/src/schemas/BroadcastByUser.ts +++ b/src/schemas/BroadcastByUser.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastTour } from "./BroadcastTour"; diff --git a/src/schemas/BroadcastCustomPoints.ts b/src/schemas/BroadcastCustomPoints.ts index 22a36fb..6ea6198 100644 --- a/src/schemas/BroadcastCustomPoints.ts +++ b/src/schemas/BroadcastCustomPoints.ts @@ -1,6 +1,9 @@ -import * as z from "zod"; +import * as z from "zod/mini"; -const BroadcastCustomPoints = z.number().min(0).max(10); +const BroadcastCustomPoints = z + .number() + .check(z.minimum(0)) + .check(z.maximum(10)); type BroadcastCustomPoints = z.infer; diff --git a/src/schemas/BroadcastCustomPointsPerColor.ts b/src/schemas/BroadcastCustomPointsPerColor.ts index 8f74892..5c06a20 100644 --- a/src/schemas/BroadcastCustomPointsPerColor.ts +++ b/src/schemas/BroadcastCustomPointsPerColor.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastCustomPoints } from "./BroadcastCustomPoints"; diff --git a/src/schemas/BroadcastCustomScoring.ts b/src/schemas/BroadcastCustomScoring.ts index 1c6379c..a5be4d2 100644 --- a/src/schemas/BroadcastCustomScoring.ts +++ b/src/schemas/BroadcastCustomScoring.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastCustomPointsPerColor } from "./BroadcastCustomPointsPerColor"; diff --git a/src/schemas/BroadcastForm.ts b/src/schemas/BroadcastForm.ts index 53ebd77..b64f16b 100644 --- a/src/schemas/BroadcastForm.ts +++ b/src/schemas/BroadcastForm.ts @@ -1,27 +1,29 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastTiebreakExtendedCode } from "./BroadcastTiebreakExtendedCode"; import { FideTimeControl } from "./FideTimeControl"; const BroadcastForm = z.object({ - name: z.string().min(3).max(80), - "info.format": z.string().max(80).optional(), - "info.location": z.string().max(80).optional(), - "info.tc": z.string().max(80).optional(), - "info.fideTc": FideTimeControl.optional(), - "info.timeZone": z.string().optional(), - "info.players": z.string().max(120).optional(), - "info.website": z.url().optional(), - "info.standings": z.url().optional(), - markdown: z.string().max(20000).optional(), - showScores: z.boolean().optional(), - showRatingDiffs: z.boolean().optional(), - teamTable: z.boolean().optional(), - visibility: z.literal(["public", "unlisted", "private"]).optional(), - players: z.string().optional(), - teams: z.string().optional(), - tier: z.literal([3, 4, 5]).optional(), - "tiebreaks[]": z.array(BroadcastTiebreakExtendedCode).max(5).optional(), + name: z.string().check(z.minLength(3)).check(z.maxLength(80)), + "info.format": z.optional(z.string().check(z.maxLength(80))), + "info.location": z.optional(z.string().check(z.maxLength(80))), + "info.tc": z.optional(z.string().check(z.maxLength(80))), + "info.fideTc": z.optional(FideTimeControl), + "info.timeZone": z.optional(z.string()), + "info.players": z.optional(z.string().check(z.maxLength(120))), + "info.website": z.optional(z.url()), + "info.standings": z.optional(z.url()), + markdown: z.optional(z.string().check(z.maxLength(20000))), + showScores: z.optional(z.boolean()), + showRatingDiffs: z.optional(z.boolean()), + teamTable: z.optional(z.boolean()), + visibility: z.optional(z.literal(["public", "unlisted", "private"])), + players: z.optional(z.string()), + teams: z.optional(z.string()), + tier: z.optional(z.literal([3, 4, 5])), + "tiebreaks[]": z.optional( + z.array(BroadcastTiebreakExtendedCode).check(z.maxLength(5)), + ), }); type BroadcastForm = z.infer; diff --git a/src/schemas/BroadcastGameEntry.ts b/src/schemas/BroadcastGameEntry.ts index 9e4d967..282a691 100644 --- a/src/schemas/BroadcastGameEntry.ts +++ b/src/schemas/BroadcastGameEntry.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastCustomPoints } from "./BroadcastCustomPoints"; import { BroadcastPlayerWithFed } from "./BroadcastPlayerWithFed"; @@ -10,10 +10,10 @@ const BroadcastGameEntry = z.object({ id: z.string(), opponent: BroadcastPlayerWithFed, color: GameColor, - points: z.literal(["1", "1/2", "0"]).optional(), - customPoints: BroadcastCustomPoints.optional(), - ratingDiff: z.int().optional(), - fideTC: FideTimeControl.optional(), + points: z.optional(z.literal(["1", "1/2", "0"])), + customPoints: z.optional(BroadcastCustomPoints), + ratingDiff: z.optional(z.int()), + fideTC: z.optional(FideTimeControl), }); type BroadcastGameEntry = z.infer; diff --git a/src/schemas/BroadcastGroup.ts b/src/schemas/BroadcastGroup.ts index 123938c..9968ecb 100644 --- a/src/schemas/BroadcastGroup.ts +++ b/src/schemas/BroadcastGroup.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastGroupTour } from "./BroadcastGroupTour"; diff --git a/src/schemas/BroadcastGroupTour.ts b/src/schemas/BroadcastGroupTour.ts index f831678..2353a46 100644 --- a/src/schemas/BroadcastGroupTour.ts +++ b/src/schemas/BroadcastGroupTour.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const BroadcastGroupTour = z.object({ id: z.string(), diff --git a/src/schemas/BroadcastMyRound.ts b/src/schemas/BroadcastMyRound.ts index d056685..2f08dbf 100644 --- a/src/schemas/BroadcastMyRound.ts +++ b/src/schemas/BroadcastMyRound.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastRoundInfo } from "./BroadcastRoundInfo"; import { BroadcastRoundStudyInfo } from "./BroadcastRoundStudyInfo"; diff --git a/src/schemas/BroadcastPgnPush.ts b/src/schemas/BroadcastPgnPush.ts index a2889bc..01e91fc 100644 --- a/src/schemas/BroadcastPgnPush.ts +++ b/src/schemas/BroadcastPgnPush.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastPgnPushTags } from "./BroadcastPgnPushTags"; @@ -6,8 +6,8 @@ const BroadcastPgnPush = z.object({ games: z.array( z.object({ tags: BroadcastPgnPushTags, - moves: z.int().optional(), - error: z.string().optional(), + moves: z.optional(z.int()), + error: z.optional(z.string()), }), ), }); diff --git a/src/schemas/BroadcastPgnPushTags.ts b/src/schemas/BroadcastPgnPushTags.ts index 0334c5e..04c9144 100644 --- a/src/schemas/BroadcastPgnPushTags.ts +++ b/src/schemas/BroadcastPgnPushTags.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const BroadcastPgnPushTags = z.record(z.string(), z.string()); diff --git a/src/schemas/BroadcastPhotos.ts b/src/schemas/BroadcastPhotos.ts index 6156a06..2ad0e50 100644 --- a/src/schemas/BroadcastPhotos.ts +++ b/src/schemas/BroadcastPhotos.ts @@ -1,11 +1,11 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const BroadcastPhotos = z.record( z.string(), z.object({ small: z.string(), medium: z.string(), - credit: z.string().optional(), + credit: z.optional(z.string()), }), ); diff --git a/src/schemas/BroadcastPlayerEntry.ts b/src/schemas/BroadcastPlayerEntry.ts index 67c2035..3514513 100644 --- a/src/schemas/BroadcastPlayerEntry.ts +++ b/src/schemas/BroadcastPlayerEntry.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastPlayerTiebreak } from "./BroadcastPlayerTiebreak"; import { BroadcastPlayerWithFed } from "./BroadcastPlayerWithFed"; @@ -6,12 +6,14 @@ import { BroadcastPlayerWithFed } from "./BroadcastPlayerWithFed"; const BroadcastPlayerEntry = z.intersection( BroadcastPlayerWithFed, z.object({ - score: z.number().optional(), - played: z.int().optional(), - ratingDiff: z.int().optional(), - performance: z.int().optional(), - tiebreaks: z.array(BroadcastPlayerTiebreak).max(5).optional(), - rank: z.int().min(1).optional(), + score: z.optional(z.number()), + played: z.optional(z.int()), + ratingDiff: z.optional(z.int()), + performance: z.optional(z.int()), + tiebreaks: z.optional( + z.array(BroadcastPlayerTiebreak).check(z.maxLength(5)), + ), + rank: z.optional(z.int().check(z.minimum(1))), }), ); diff --git a/src/schemas/BroadcastPlayerEntryWithFideAndGames.ts b/src/schemas/BroadcastPlayerEntryWithFideAndGames.ts index 617570c..49935ea 100644 --- a/src/schemas/BroadcastPlayerEntryWithFideAndGames.ts +++ b/src/schemas/BroadcastPlayerEntryWithFideAndGames.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastGameEntry } from "./BroadcastGameEntry"; import { BroadcastPlayerEntry } from "./BroadcastPlayerEntry"; @@ -6,19 +6,19 @@ import { BroadcastPlayerEntry } from "./BroadcastPlayerEntry"; const BroadcastPlayerEntryWithFideAndGames = z.intersection( BroadcastPlayerEntry, z.object({ - fide: z - .object({ - year: z.int().optional(), - ratings: z - .object({ - standard: z.int().optional(), - rapid: z.int().optional(), - blitz: z.int().optional(), - }) - .optional(), - }) - .optional(), - games: z.array(BroadcastGameEntry).optional(), + fide: z.optional( + z.object({ + year: z.optional(z.int()), + ratings: z.optional( + z.object({ + standard: z.optional(z.int()), + rapid: z.optional(z.int()), + blitz: z.optional(z.int()), + }), + ), + }), + ), + games: z.optional(z.array(BroadcastGameEntry)), }), ); diff --git a/src/schemas/BroadcastPlayerTiebreak.ts b/src/schemas/BroadcastPlayerTiebreak.ts index f9fbf5b..100b32b 100644 --- a/src/schemas/BroadcastPlayerTiebreak.ts +++ b/src/schemas/BroadcastPlayerTiebreak.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastTiebreakExtendedCode } from "./BroadcastTiebreakExtendedCode"; diff --git a/src/schemas/BroadcastPlayerWithFed.ts b/src/schemas/BroadcastPlayerWithFed.ts index 6677cac..6875452 100644 --- a/src/schemas/BroadcastPlayerWithFed.ts +++ b/src/schemas/BroadcastPlayerWithFed.ts @@ -1,14 +1,14 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { Title } from "./Title"; const BroadcastPlayerWithFed = z.object({ name: z.string(), - title: Title.optional(), - rating: z.int().optional(), - fideId: z.int().optional(), - team: z.string().optional(), - fed: z.string().optional(), + title: z.optional(Title), + rating: z.optional(z.int()), + fideId: z.optional(z.int()), + team: z.optional(z.string()), + fed: z.optional(z.string()), }); type BroadcastPlayerWithFed = z.infer; diff --git a/src/schemas/BroadcastRound.ts b/src/schemas/BroadcastRound.ts index 9273699..9022d72 100644 --- a/src/schemas/BroadcastRound.ts +++ b/src/schemas/BroadcastRound.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastGroup } from "./BroadcastGroup"; import { BroadcastPhotos } from "./BroadcastPhotos"; @@ -12,8 +12,8 @@ const BroadcastRound = z.object({ tour: BroadcastTour, study: BroadcastRoundStudyInfo, games: z.array(BroadcastRoundGame), - group: BroadcastGroup.optional(), - isSubscribed: z.boolean().optional(), + group: z.optional(BroadcastGroup), + isSubscribed: z.optional(z.boolean()), photos: BroadcastPhotos, }); diff --git a/src/schemas/BroadcastRoundForm.ts b/src/schemas/BroadcastRoundForm.ts index 450fefc..cb62d12 100644 --- a/src/schemas/BroadcastRoundForm.ts +++ b/src/schemas/BroadcastRoundForm.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastCustomPoints } from "./BroadcastCustomPoints"; import { BroadcastRoundFormName } from "./BroadcastRoundFormName"; @@ -9,14 +9,14 @@ const BroadcastRoundForm = z.intersection( z.object({ name: BroadcastRoundFormName, syncUrl: z.url(), - onlyRound: z.int().min(1).max(999).optional(), - slices: z.string().optional(), + onlyRound: z.optional(z.int().check(z.minimum(1)).check(z.maximum(999))), + slices: z.optional(z.string()), }), z.object({ name: BroadcastRoundFormName, syncUrls: z.string(), - onlyRound: z.int().min(1).max(999).optional(), - slices: z.string().optional(), + onlyRound: z.optional(z.int().check(z.minimum(1)).check(z.maximum(999))), + slices: z.optional(z.string()), }), z.object({ name: BroadcastRoundFormName, @@ -28,17 +28,17 @@ const BroadcastRoundForm = z.intersection( }), ]), z.object({ - syncSource: z.literal(["push", "url", "urls", "ids", "users"]).optional(), - startsAt: z.int().min(1356998400070).optional(), - startsAfterPrevious: z.boolean().optional(), - delay: z.int().min(0).max(3600).optional(), - status: z.literal(["new", "started", "finished"]).optional(), - rated: z.boolean().optional(), - "customScoring.white.win": BroadcastCustomPoints.optional(), - "customScoring.white.draw": BroadcastCustomPoints.optional(), - "customScoring.black.win": BroadcastCustomPoints.optional(), - "customScoring.black.draw": BroadcastCustomPoints.optional(), - period: z.int().min(2).max(60).optional(), + syncSource: z.optional(z.literal(["push", "url", "urls", "ids", "users"])), + startsAt: z.optional(z.int().check(z.minimum(1356998400070))), + startsAfterPrevious: z.optional(z.boolean()), + delay: z.optional(z.int().check(z.minimum(0)).check(z.maximum(3600))), + status: z.optional(z.literal(["new", "started", "finished"])), + rated: z.optional(z.boolean()), + "customScoring.white.win": z.optional(BroadcastCustomPoints), + "customScoring.white.draw": z.optional(BroadcastCustomPoints), + "customScoring.black.win": z.optional(BroadcastCustomPoints), + "customScoring.black.draw": z.optional(BroadcastCustomPoints), + period: z.optional(z.int().check(z.minimum(2)).check(z.maximum(60))), }), ); diff --git a/src/schemas/BroadcastRoundFormName.ts b/src/schemas/BroadcastRoundFormName.ts index 23d5dbb..9101eb4 100644 --- a/src/schemas/BroadcastRoundFormName.ts +++ b/src/schemas/BroadcastRoundFormName.ts @@ -1,6 +1,9 @@ -import * as z from "zod"; +import * as z from "zod/mini"; -const BroadcastRoundFormName = z.string().min(3).max(80); +const BroadcastRoundFormName = z + .string() + .check(z.minLength(3)) + .check(z.maxLength(80)); type BroadcastRoundFormName = z.infer; diff --git a/src/schemas/BroadcastRoundGame.ts b/src/schemas/BroadcastRoundGame.ts index 6cd98fe..b808acf 100644 --- a/src/schemas/BroadcastRoundGame.ts +++ b/src/schemas/BroadcastRoundGame.ts @@ -1,27 +1,27 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { Title } from "./Title"; const BroadcastRoundGame = z.object({ id: z.string(), name: z.string(), - fen: z.string().optional(), - players: z - .array( + fen: z.optional(z.string()), + players: z.optional( + z.array( z.object({ - name: z.string().optional(), - title: Title.optional(), - rating: z.int().optional(), - fideId: z.int().optional(), - fed: z.string().optional(), - clock: z.int().optional(), + name: z.optional(z.string()), + title: z.optional(Title), + rating: z.optional(z.int()), + fideId: z.optional(z.int()), + fed: z.optional(z.string()), + clock: z.optional(z.int()), }), - ) - .optional(), - lastMove: z.string().optional(), - check: z.literal(["+", "#"]).optional(), - thinkTime: z.int().optional(), - status: z.literal(["*", "1-0", "0-1", "½-½"]).optional(), + ), + ), + lastMove: z.optional(z.string()), + check: z.optional(z.literal(["+", "#"])), + thinkTime: z.optional(z.int()), + status: z.optional(z.literal(["*", "1-0", "0-1", "½-½"])), }); type BroadcastRoundGame = z.infer; diff --git a/src/schemas/BroadcastRoundInfo.ts b/src/schemas/BroadcastRoundInfo.ts index 2c3217c..114a2fe 100644 --- a/src/schemas/BroadcastRoundInfo.ts +++ b/src/schemas/BroadcastRoundInfo.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastCustomScoring } from "./BroadcastCustomScoring"; @@ -8,14 +8,14 @@ const BroadcastRoundInfo = z.object({ slug: z.string(), createdAt: z.int(), rated: z.boolean(), - ongoing: z.boolean().optional(), - startsAt: z.int().optional(), - startsAfterPrevious: z.boolean().optional(), - finishedAt: z.int().optional(), - finished: z.boolean().optional(), + ongoing: z.optional(z.boolean()), + startsAt: z.optional(z.int()), + startsAfterPrevious: z.optional(z.boolean()), + finishedAt: z.optional(z.int()), + finished: z.optional(z.boolean()), url: z.url(), - delay: z.int().optional(), - customScoring: BroadcastCustomScoring.optional(), + delay: z.optional(z.int()), + customScoring: z.optional(BroadcastCustomScoring), }); type BroadcastRoundInfo = z.infer; diff --git a/src/schemas/BroadcastRoundNew.ts b/src/schemas/BroadcastRoundNew.ts index b272863..b931846 100644 --- a/src/schemas/BroadcastRoundNew.ts +++ b/src/schemas/BroadcastRoundNew.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastRoundInfo } from "./BroadcastRoundInfo"; import { BroadcastRoundStudyInfo } from "./BroadcastRoundStudyInfo"; diff --git a/src/schemas/BroadcastRoundStudyInfo.ts b/src/schemas/BroadcastRoundStudyInfo.ts index 302d5d4..bb62516 100644 --- a/src/schemas/BroadcastRoundStudyInfo.ts +++ b/src/schemas/BroadcastRoundStudyInfo.ts @@ -1,14 +1,14 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const BroadcastRoundStudyInfo = z.object({ - writeable: z.boolean().optional(), - features: z - .object({ - chat: z.boolean().optional(), - computer: z.boolean().optional(), - explorer: z.boolean().optional(), - }) - .optional(), + writeable: z.optional(z.boolean()), + features: z.optional( + z.object({ + chat: z.optional(z.boolean()), + computer: z.optional(z.boolean()), + explorer: z.optional(z.boolean()), + }), + ), }); type BroadcastRoundStudyInfo = z.infer; diff --git a/src/schemas/BroadcastTiebreakExtendedCode.ts b/src/schemas/BroadcastTiebreakExtendedCode.ts index f6bdbfc..ac34b61 100644 --- a/src/schemas/BroadcastTiebreakExtendedCode.ts +++ b/src/schemas/BroadcastTiebreakExtendedCode.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const BroadcastTiebreakExtendedCode = z.literal([ "AOB", diff --git a/src/schemas/BroadcastTop.ts b/src/schemas/BroadcastTop.ts index 29564c6..1c180b5 100644 --- a/src/schemas/BroadcastTop.ts +++ b/src/schemas/BroadcastTop.ts @@ -1,19 +1,19 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastWithLastRound } from "./BroadcastWithLastRound"; const BroadcastTop = z.object({ - active: z.array(BroadcastWithLastRound).optional(), - upcoming: z.tuple([]).optional(), - past: z - .object({ - currentPage: z.int().optional(), - maxPerPage: z.int().optional(), - currentPageResults: z.array(BroadcastWithLastRound).optional(), - previousPage: z.int().nullable().optional(), - nextPage: z.int().nullable().optional(), - }) - .optional(), + active: z.optional(z.array(BroadcastWithLastRound)), + upcoming: z.optional(z.tuple([])), + past: z.optional( + z.object({ + currentPage: z.optional(z.int()), + maxPerPage: z.optional(z.int()), + currentPageResults: z.optional(z.array(BroadcastWithLastRound)), + previousPage: z.optional(z.nullable(z.int())), + nextPage: z.optional(z.nullable(z.int())), + }), + ), }); type BroadcastTop = z.infer; diff --git a/src/schemas/BroadcastTour.ts b/src/schemas/BroadcastTour.ts index d7d6f59..dfff1cd 100644 --- a/src/schemas/BroadcastTour.ts +++ b/src/schemas/BroadcastTour.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { LightUser } from "./LightUser"; @@ -7,26 +7,28 @@ const BroadcastTour = z.object({ name: z.string(), slug: z.string(), createdAt: z.int(), - dates: z.array(z.int()).min(1).max(2).optional(), - info: z - .object({ - website: z.url().optional(), - players: z.string().optional(), - location: z.string().optional(), - tc: z.string().optional(), - fideTc: z.literal(["standard", "rapid", "blitz"]).optional(), - timeZone: z.string().optional(), - standings: z.url().optional(), - format: z.string().optional(), - }) - .optional(), - tier: z.int().optional(), - image: z.url().optional(), - description: z.string().optional(), - leaderboard: z.boolean().optional(), - teamTable: z.boolean().optional(), + dates: z.optional( + z.array(z.int()).check(z.minLength(1)).check(z.maxLength(2)), + ), + info: z.optional( + z.object({ + website: z.optional(z.url()), + players: z.optional(z.string()), + location: z.optional(z.string()), + tc: z.optional(z.string()), + fideTc: z.optional(z.literal(["standard", "rapid", "blitz"])), + timeZone: z.optional(z.string()), + standings: z.optional(z.url()), + format: z.optional(z.string()), + }), + ), + tier: z.optional(z.int()), + image: z.optional(z.url()), + description: z.optional(z.string()), + leaderboard: z.optional(z.boolean()), + teamTable: z.optional(z.boolean()), url: z.url(), - communityOwner: LightUser.optional(), + communityOwner: z.optional(LightUser), }); type BroadcastTour = z.infer; diff --git a/src/schemas/BroadcastWithLastRound.ts b/src/schemas/BroadcastWithLastRound.ts index bcd2ff6..1e0eb6a 100644 --- a/src/schemas/BroadcastWithLastRound.ts +++ b/src/schemas/BroadcastWithLastRound.ts @@ -1,12 +1,12 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastRoundInfo } from "./BroadcastRoundInfo"; import { BroadcastTour } from "./BroadcastTour"; const BroadcastWithLastRound = z.object({ - group: z.string().optional(), - tour: BroadcastTour.optional(), - round: BroadcastRoundInfo.optional(), + group: z.optional(z.string()), + tour: z.optional(BroadcastTour), + round: z.optional(BroadcastRoundInfo), }); type BroadcastWithLastRound = z.infer; diff --git a/src/schemas/BroadcastWithRounds.ts b/src/schemas/BroadcastWithRounds.ts index 485df9e..7d73623 100644 --- a/src/schemas/BroadcastWithRounds.ts +++ b/src/schemas/BroadcastWithRounds.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { BroadcastGroup } from "./BroadcastGroup"; import { BroadcastPhotos } from "./BroadcastPhotos"; @@ -7,10 +7,10 @@ import { BroadcastTour } from "./BroadcastTour"; const BroadcastWithRounds = z.object({ tour: BroadcastTour, - group: BroadcastGroup.optional(), + group: z.optional(BroadcastGroup), rounds: z.array(BroadcastRoundInfo), - defaultRoundId: z.string().optional(), - photos: BroadcastPhotos.optional(), + defaultRoundId: z.optional(z.string()), + photos: z.optional(BroadcastPhotos), }); type BroadcastWithRounds = z.infer; diff --git a/src/schemas/BulkPairing.ts b/src/schemas/BulkPairing.ts index 4aa6474..2fea5c2 100644 --- a/src/schemas/BulkPairing.ts +++ b/src/schemas/BulkPairing.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { Clock } from "./Clock"; import { VariantKey } from "./VariantKey"; @@ -7,15 +7,15 @@ const BulkPairing = z.object({ id: z.string(), games: z.array( z.object({ - id: z.string().optional(), - black: z.string().optional(), - white: z.string().optional(), + id: z.optional(z.string()), + black: z.optional(z.string()), + white: z.optional(z.string()), }), ), variant: VariantKey, clock: Clock, pairAt: z.int(), - pairedAt: z.int().nullable(), + pairedAt: z.nullable(z.int()), rated: z.boolean(), startClocksAt: z.int(), scheduledAt: z.int(), diff --git a/src/schemas/ChallengeCanceledEvent.ts b/src/schemas/ChallengeCanceledEvent.ts index ff0ecb8..a7e4dd5 100644 --- a/src/schemas/ChallengeCanceledEvent.ts +++ b/src/schemas/ChallengeCanceledEvent.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { ChallengeJson } from "./ChallengeJson"; diff --git a/src/schemas/ChallengeColor.ts b/src/schemas/ChallengeColor.ts index ccc0174..73bf367 100644 --- a/src/schemas/ChallengeColor.ts +++ b/src/schemas/ChallengeColor.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const ChallengeColor = z.literal(["white", "black", "random"]); diff --git a/src/schemas/ChallengeDeclinedEvent.ts b/src/schemas/ChallengeDeclinedEvent.ts index 9bd25d9..edd0fb2 100644 --- a/src/schemas/ChallengeDeclinedEvent.ts +++ b/src/schemas/ChallengeDeclinedEvent.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { ChallengeDeclinedJson } from "./ChallengeDeclinedJson"; diff --git a/src/schemas/ChallengeDeclinedJson.ts b/src/schemas/ChallengeDeclinedJson.ts index 9c67755..a3dc44f 100644 --- a/src/schemas/ChallengeDeclinedJson.ts +++ b/src/schemas/ChallengeDeclinedJson.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { ChallengeJson } from "./ChallengeJson"; diff --git a/src/schemas/ChallengeEvent.ts b/src/schemas/ChallengeEvent.ts index 75d7d6a..80eabe9 100644 --- a/src/schemas/ChallengeEvent.ts +++ b/src/schemas/ChallengeEvent.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { ChallengeJson } from "./ChallengeJson"; import { GameCompat } from "./GameCompat"; @@ -6,7 +6,7 @@ import { GameCompat } from "./GameCompat"; const ChallengeEvent = z.object({ type: z.literal("challenge"), challenge: ChallengeJson, - compat: GameCompat.optional(), + compat: z.optional(GameCompat), }); type ChallengeEvent = z.infer; diff --git a/src/schemas/ChallengeJson.ts b/src/schemas/ChallengeJson.ts index a5bd6bf..d7bfb4d 100644 --- a/src/schemas/ChallengeJson.ts +++ b/src/schemas/ChallengeJson.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { ChallengeColor } from "./ChallengeColor"; import { ChallengeStatus } from "./ChallengeStatus"; @@ -19,14 +19,14 @@ const ChallengeJson = z.object({ speed: Speed, timeControl: TimeControl, color: ChallengeColor, - finalColor: GameColor.optional(), + finalColor: z.optional(GameColor), perf: z.object({ icon: z.string(), name: z.string(), }), - direction: z.literal(["in", "out"]).optional(), - initialFen: z.string().optional(), - rematchOf: z.string().optional(), + direction: z.optional(z.literal(["in", "out"])), + initialFen: z.optional(z.string()), + rematchOf: z.optional(z.string()), }); type ChallengeJson = z.infer; diff --git a/src/schemas/ChallengeOpenJson.ts b/src/schemas/ChallengeOpenJson.ts index f8e8baf..eda75dc 100644 --- a/src/schemas/ChallengeOpenJson.ts +++ b/src/schemas/ChallengeOpenJson.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { ChallengeColor } from "./ChallengeColor"; import { ChallengeStatus } from "./ChallengeStatus"; @@ -18,15 +18,15 @@ const ChallengeOpenJson = z.object({ speed: Speed, timeControl: TimeControl, color: ChallengeColor, - finalColor: GameColor.optional(), + finalColor: z.optional(GameColor), perf: z.object({ - icon: z.string().optional(), - name: z.string().optional(), + icon: z.optional(z.string()), + name: z.optional(z.string()), }), - initialFen: z.string().optional(), + initialFen: z.optional(z.string()), urlWhite: z.url(), urlBlack: z.url(), - open: z.object({ userIds: z.tuple([z.string(), z.string()]).optional() }), + open: z.object({ userIds: z.optional(z.tuple([z.string(), z.string()])) }), }); type ChallengeOpenJson = z.infer; diff --git a/src/schemas/ChallengeStatus.ts b/src/schemas/ChallengeStatus.ts index e20897f..4c78be4 100644 --- a/src/schemas/ChallengeStatus.ts +++ b/src/schemas/ChallengeStatus.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const ChallengeStatus = z.literal([ "created", diff --git a/src/schemas/ChallengeUser.ts b/src/schemas/ChallengeUser.ts index 2c2f1b5..ba0779e 100644 --- a/src/schemas/ChallengeUser.ts +++ b/src/schemas/ChallengeUser.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { Flair } from "./Flair"; import { Patron } from "./Patron"; @@ -8,14 +8,14 @@ import { Title } from "./Title"; const ChallengeUser = z.object({ id: z.string(), name: z.string(), - rating: z.int().optional(), - title: Title.optional(), - flair: Flair.optional(), - patron: Patron.optional(), - patronColor: PatronColor.optional(), - provisional: z.boolean().optional(), - online: z.boolean().optional(), - lag: z.int().optional(), + rating: z.optional(z.int()), + title: z.optional(Title), + flair: z.optional(Flair), + patron: z.optional(Patron), + patronColor: z.optional(PatronColor), + provisional: z.optional(z.boolean()), + online: z.optional(z.boolean()), + lag: z.optional(z.int()), }); type ChallengeUser = z.infer; diff --git a/src/schemas/ChatLineEvent.ts b/src/schemas/ChatLineEvent.ts index 254d0b3..c781262 100644 --- a/src/schemas/ChatLineEvent.ts +++ b/src/schemas/ChatLineEvent.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const ChatLineEvent = z.object({ type: z.literal("chatLine"), diff --git a/src/schemas/Clock.ts b/src/schemas/Clock.ts index 106cec6..d62fa3a 100644 --- a/src/schemas/Clock.ts +++ b/src/schemas/Clock.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const Clock = z.object({ limit: z.int(), diff --git a/src/schemas/CloudEval.ts b/src/schemas/CloudEval.ts index 498a0f6..450978c 100644 --- a/src/schemas/CloudEval.ts +++ b/src/schemas/CloudEval.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const CloudEval = z.object({ depth: z.int(), diff --git a/src/schemas/Count.ts b/src/schemas/Count.ts index 94a391f..db87268 100644 --- a/src/schemas/Count.ts +++ b/src/schemas/Count.ts @@ -1,15 +1,15 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const Count = z.object({ all: z.int(), rated: z.int(), - ai: z.int().optional(), + ai: z.optional(z.int()), draw: z.int(), - drawH: z.int().optional(), + drawH: z.optional(z.int()), loss: z.int(), - lossH: z.int().optional(), + lossH: z.optional(z.int()), win: z.int(), - winH: z.int().optional(), + winH: z.optional(z.int()), bookmark: z.int(), playing: z.int(), import: z.int(), diff --git a/src/schemas/Crosstable.ts b/src/schemas/Crosstable.ts index a97f584..1d0348c 100644 --- a/src/schemas/Crosstable.ts +++ b/src/schemas/Crosstable.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const Crosstable = z.object({ users: z.record(z.string(), z.number()), diff --git a/src/schemas/Error.ts b/src/schemas/Error.ts index 652974e..7bba7e0 100644 --- a/src/schemas/Error.ts +++ b/src/schemas/Error.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const Error = z.object({ error: z.string() }); diff --git a/src/schemas/ExternalEngine.ts b/src/schemas/ExternalEngine.ts index 0e43b5b..77d7b27 100644 --- a/src/schemas/ExternalEngine.ts +++ b/src/schemas/ExternalEngine.ts @@ -1,16 +1,16 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { UciVariant } from "./UciVariant"; const ExternalEngine = z.object({ id: z.string(), - name: z.string().min(3).max(200), + name: z.string().check(z.minLength(3)).check(z.maxLength(200)), clientSecret: z.string(), userId: z.string(), - maxThreads: z.int().min(1).max(65536), - maxHash: z.int().min(1).max(1048576), + maxThreads: z.int().check(z.minimum(1)).check(z.maximum(65536)), + maxHash: z.int().check(z.minimum(1)).check(z.maximum(1048576)), variants: z.array(UciVariant), - providerData: z.string().nullable().optional(), + providerData: z.optional(z.nullable(z.string())), }); type ExternalEngine = z.infer; diff --git a/src/schemas/ExternalEngineRegistration.ts b/src/schemas/ExternalEngineRegistration.ts index e769e75..95cf1f1 100644 --- a/src/schemas/ExternalEngineRegistration.ts +++ b/src/schemas/ExternalEngineRegistration.ts @@ -1,14 +1,14 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { UciVariant } from "./UciVariant"; const ExternalEngineRegistration = z.object({ - name: z.string().min(3).max(200), - maxThreads: z.int().min(1).max(65536), - maxHash: z.int().min(1).max(1048576), - variants: z.array(UciVariant).optional(), - providerSecret: z.string().min(16).max(1024), - providerData: z.string().optional(), + name: z.string().check(z.minLength(3)).check(z.maxLength(200)), + maxThreads: z.int().check(z.minimum(1)).check(z.maximum(65536)), + maxHash: z.int().check(z.minimum(1)).check(z.maximum(1048576)), + variants: z.optional(z.array(UciVariant)), + providerSecret: z.string().check(z.minLength(16)).check(z.maxLength(1024)), + providerData: z.optional(z.string()), }); type ExternalEngineRegistration = z.infer; diff --git a/src/schemas/ExternalEngineWork.ts b/src/schemas/ExternalEngineWork.ts index f1d1647..68e7d05 100644 --- a/src/schemas/ExternalEngineWork.ts +++ b/src/schemas/ExternalEngineWork.ts @@ -1,14 +1,20 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { ExternalEngineWorkCommon } from "./ExternalEngineWorkCommon"; const ExternalEngineWork = z.union([ z.intersection( - z.object({ movetime: z.int().min(1) }), + z.object({ movetime: z.int().check(z.minimum(1)) }), + ExternalEngineWorkCommon, + ), + z.intersection( + z.object({ depth: z.int().check(z.minimum(1)) }), + ExternalEngineWorkCommon, + ), + z.intersection( + z.object({ nodes: z.int().check(z.minimum(1)) }), ExternalEngineWorkCommon, ), - z.intersection(z.object({ depth: z.int().min(1) }), ExternalEngineWorkCommon), - z.intersection(z.object({ nodes: z.int().min(1) }), ExternalEngineWorkCommon), ]); type ExternalEngineWork = z.infer; diff --git a/src/schemas/ExternalEngineWorkCommon.ts b/src/schemas/ExternalEngineWorkCommon.ts index 453b6db..c802fe4 100644 --- a/src/schemas/ExternalEngineWorkCommon.ts +++ b/src/schemas/ExternalEngineWorkCommon.ts @@ -1,11 +1,11 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { UciVariant } from "./UciVariant"; const ExternalEngineWorkCommon = z.object({ sessionId: z.string(), - threads: z.int().min(1), - hash: z.int().min(1), + threads: z.int().check(z.minimum(1)), + hash: z.int().check(z.minimum(1)), multiPv: z.literal([1, 2, 3, 4, 5]), variant: UciVariant, initialFen: z.string(), diff --git a/src/schemas/FIDEPlayer.ts b/src/schemas/FIDEPlayer.ts index c633d58..f867157 100644 --- a/src/schemas/FIDEPlayer.ts +++ b/src/schemas/FIDEPlayer.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { FIDEPlayerPhoto } from "./FIDEPlayerPhoto"; import { Title } from "./Title"; @@ -6,14 +6,14 @@ import { Title } from "./Title"; const FIDEPlayer = z.object({ id: z.int(), name: z.string(), - title: Title.optional(), + title: z.optional(Title), federation: z.string(), - year: z.int().nullable().optional(), - inactive: z.int().optional(), - standard: z.int().optional(), - rapid: z.int().optional(), - blitz: z.int().optional(), - photo: FIDEPlayerPhoto.optional(), + year: z.optional(z.nullable(z.int())), + inactive: z.optional(z.int()), + standard: z.optional(z.int()), + rapid: z.optional(z.int()), + blitz: z.optional(z.int()), + photo: z.optional(FIDEPlayerPhoto), }); type FIDEPlayer = z.infer; diff --git a/src/schemas/FIDEPlayerPhoto.ts b/src/schemas/FIDEPlayerPhoto.ts index ab031a8..7075abd 100644 --- a/src/schemas/FIDEPlayerPhoto.ts +++ b/src/schemas/FIDEPlayerPhoto.ts @@ -1,9 +1,9 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const FIDEPlayerPhoto = z.object({ small: z.string(), medium: z.string(), - credit: z.string().optional(), + credit: z.optional(z.string()), }); type FIDEPlayerPhoto = z.infer; diff --git a/src/schemas/FideTimeControl.ts b/src/schemas/FideTimeControl.ts index 9e55cb0..6ae9aec 100644 --- a/src/schemas/FideTimeControl.ts +++ b/src/schemas/FideTimeControl.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const FideTimeControl = z.literal(["standard", "rapid", "blitz"]); diff --git a/src/schemas/Flair.ts b/src/schemas/Flair.ts index d2174e5..805d558 100644 --- a/src/schemas/Flair.ts +++ b/src/schemas/Flair.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const Flair = z.string(); diff --git a/src/schemas/FromPositionFEN.ts b/src/schemas/FromPositionFEN.ts index 81fc060..2ba7c64 100644 --- a/src/schemas/FromPositionFEN.ts +++ b/src/schemas/FromPositionFEN.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const FromPositionFEN = z.string(); diff --git a/src/schemas/GameChat.ts b/src/schemas/GameChat.ts index 598574d..9f56839 100644 --- a/src/schemas/GameChat.ts +++ b/src/schemas/GameChat.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const GameChat = z.array( z.object({ diff --git a/src/schemas/GameColor.ts b/src/schemas/GameColor.ts index 5a01115..4d8ab49 100644 --- a/src/schemas/GameColor.ts +++ b/src/schemas/GameColor.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const GameColor = z.literal(["white", "black"]); diff --git a/src/schemas/GameCompat.ts b/src/schemas/GameCompat.ts index 558393c..3821b87 100644 --- a/src/schemas/GameCompat.ts +++ b/src/schemas/GameCompat.ts @@ -1,8 +1,8 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const GameCompat = z.object({ - bot: z.boolean().optional(), - board: z.boolean().optional(), + bot: z.optional(z.boolean()), + board: z.optional(z.boolean()), }); type GameCompat = z.infer; diff --git a/src/schemas/GameEventInfo.ts b/src/schemas/GameEventInfo.ts index a17a075..80abe07 100644 --- a/src/schemas/GameEventInfo.ts +++ b/src/schemas/GameEventInfo.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { GameColor } from "./GameColor"; import { GameCompat } from "./GameCompat"; @@ -11,24 +11,24 @@ import { Variant } from "./Variant"; const GameEventInfo = z.object({ fullId: z.string(), gameId: z.string(), - fen: z.string().optional(), - color: GameColor.optional(), - lastMove: z.string().optional(), - source: GameSource.optional(), - status: GameStatus.optional(), - variant: Variant.optional(), - speed: Speed.optional(), - perf: z.string().optional(), - rated: z.boolean().optional(), - hasMoved: z.boolean().optional(), - opponent: GameEventOpponent.optional(), - isMyTurn: z.boolean().optional(), - secondsLeft: z.int().optional(), - winner: GameColor.optional(), - ratingDiff: z.int().optional(), - compat: GameCompat.optional(), - id: z.string().optional(), - tournamentId: z.string().optional(), + fen: z.optional(z.string()), + color: z.optional(GameColor), + lastMove: z.optional(z.string()), + source: z.optional(GameSource), + status: z.optional(GameStatus), + variant: z.optional(Variant), + speed: z.optional(Speed), + perf: z.optional(z.string()), + rated: z.optional(z.boolean()), + hasMoved: z.optional(z.boolean()), + opponent: z.optional(GameEventOpponent), + isMyTurn: z.optional(z.boolean()), + secondsLeft: z.optional(z.int()), + winner: z.optional(GameColor), + ratingDiff: z.optional(z.int()), + compat: z.optional(GameCompat), + id: z.optional(z.string()), + tournamentId: z.optional(z.string()), }); type GameEventInfo = z.infer; diff --git a/src/schemas/GameEventOpponent.ts b/src/schemas/GameEventOpponent.ts index 1d019ec..cb072e1 100644 --- a/src/schemas/GameEventOpponent.ts +++ b/src/schemas/GameEventOpponent.ts @@ -1,11 +1,11 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const GameEventOpponent = z.union([ z.object({ id: z.string(), username: z.string(), rating: z.int(), - ratingDiff: z.int().optional(), + ratingDiff: z.optional(z.int()), }), z.object({ id: z.null(), diff --git a/src/schemas/GameEventPlayer.ts b/src/schemas/GameEventPlayer.ts index ef4efac..89cc5f3 100644 --- a/src/schemas/GameEventPlayer.ts +++ b/src/schemas/GameEventPlayer.ts @@ -1,14 +1,14 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { Title } from "./Title"; const GameEventPlayer = z.object({ - aiLevel: z.int().optional(), + aiLevel: z.optional(z.int()), id: z.string(), name: z.string(), - title: z.union([Title, z.null()]).optional(), - rating: z.int().optional(), - provisional: z.boolean().optional(), + title: z.optional(z.union([Title, z.null()])), + rating: z.optional(z.int()), + provisional: z.optional(z.boolean()), }); type GameEventPlayer = z.infer; diff --git a/src/schemas/GameFinishEvent.ts b/src/schemas/GameFinishEvent.ts index 1837d8a..b94a447 100644 --- a/src/schemas/GameFinishEvent.ts +++ b/src/schemas/GameFinishEvent.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { GameEventInfo } from "./GameEventInfo"; diff --git a/src/schemas/GameFullEvent.ts b/src/schemas/GameFullEvent.ts index b111958..632e3c1 100644 --- a/src/schemas/GameFullEvent.ts +++ b/src/schemas/GameFullEvent.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { GameEventPlayer } from "./GameEventPlayer"; import { GameStateEvent } from "./GameStateEvent"; @@ -9,22 +9,22 @@ const GameFullEvent = z.object({ type: z.literal("gameFull"), id: z.string(), variant: Variant, - clock: z - .object({ - initial: z.int().optional(), - increment: z.int().optional(), - }) - .optional(), + clock: z.optional( + z.object({ + initial: z.optional(z.int()), + increment: z.optional(z.int()), + }), + ), speed: Speed, - perf: z.object({ name: z.string().optional() }), + perf: z.object({ name: z.optional(z.string()) }), rated: z.boolean(), createdAt: z.int(), white: GameEventPlayer, black: GameEventPlayer, initialFen: z.string(), state: GameStateEvent, - daysPerTurn: z.int().optional(), - tournamentId: z.string().optional(), + daysPerTurn: z.optional(z.int()), + tournamentId: z.optional(z.string()), }); type GameFullEvent = z.infer; diff --git a/src/schemas/GameJson.ts b/src/schemas/GameJson.ts index 3c98c1f..db03c2d 100644 --- a/src/schemas/GameJson.ts +++ b/src/schemas/GameJson.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { GameColor } from "./GameColor"; import { GameMoveAnalysis } from "./GameMoveAnalysis"; @@ -17,31 +17,31 @@ const GameJson = z.object({ createdAt: z.int(), lastMoveAt: z.int(), status: GameStatusName, - source: z.string().optional(), + source: z.optional(z.string()), players: GamePlayers, - initialFen: z.string().optional(), - winner: GameColor.optional(), - opening: GameOpening.optional(), - moves: z.string().optional(), - pgn: z.string().optional(), - daysPerTurn: z.int().optional(), - analysis: z.array(GameMoveAnalysis).optional(), - tournament: z.string().optional(), - swiss: z.string().optional(), - clock: z - .object({ + initialFen: z.optional(z.string()), + winner: z.optional(GameColor), + opening: z.optional(GameOpening), + moves: z.optional(z.string()), + pgn: z.optional(z.string()), + daysPerTurn: z.optional(z.int()), + analysis: z.optional(z.array(GameMoveAnalysis)), + tournament: z.optional(z.string()), + swiss: z.optional(z.string()), + clock: z.optional( + z.object({ initial: z.int(), increment: z.int(), totalTime: z.int(), - }) - .optional(), - clocks: z.array(z.int()).optional(), - division: z - .object({ - middle: z.int().optional(), - end: z.int().optional(), - }) - .optional(), + }), + ), + clocks: z.optional(z.array(z.int())), + division: z.optional( + z.object({ + middle: z.optional(z.int()), + end: z.optional(z.int()), + }), + ), }); type GameJson = z.infer; diff --git a/src/schemas/GameMoveAnalysis.ts b/src/schemas/GameMoveAnalysis.ts index 2a5ca31..1b08270 100644 --- a/src/schemas/GameMoveAnalysis.ts +++ b/src/schemas/GameMoveAnalysis.ts @@ -1,16 +1,16 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const GameMoveAnalysis = z.object({ - eval: z.int().optional(), - mate: z.int().optional(), - best: z.string().optional(), - variation: z.string().optional(), - judgment: z - .object({ - name: z.literal(["Inaccuracy", "Mistake", "Blunder"]).optional(), - comment: z.string().optional(), - }) - .optional(), + eval: z.optional(z.int()), + mate: z.optional(z.int()), + best: z.optional(z.string()), + variation: z.optional(z.string()), + judgment: z.optional( + z.object({ + name: z.optional(z.literal(["Inaccuracy", "Mistake", "Blunder"])), + comment: z.optional(z.string()), + }), + ), }); type GameMoveAnalysis = z.infer; diff --git a/src/schemas/GameOpening.ts b/src/schemas/GameOpening.ts index bb93e85..7e428ae 100644 --- a/src/schemas/GameOpening.ts +++ b/src/schemas/GameOpening.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const GameOpening = z.object({ eco: z.string(), diff --git a/src/schemas/GamePgn.ts b/src/schemas/GamePgn.ts index e1fb1bb..7aa97b2 100644 --- a/src/schemas/GamePgn.ts +++ b/src/schemas/GamePgn.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const GamePgn = z.string(); diff --git a/src/schemas/GamePlayerUser.ts b/src/schemas/GamePlayerUser.ts index b77d84d..a51ba57 100644 --- a/src/schemas/GamePlayerUser.ts +++ b/src/schemas/GamePlayerUser.ts @@ -1,24 +1,24 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { LightUser } from "./LightUser"; const GamePlayerUser = z.object({ user: LightUser, rating: z.int(), - ratingDiff: z.int().optional(), - name: z.string().optional(), - provisional: z.boolean().optional(), - aiLevel: z.int().optional(), - analysis: z - .object({ + ratingDiff: z.optional(z.int()), + name: z.optional(z.string()), + provisional: z.optional(z.boolean()), + aiLevel: z.optional(z.int()), + analysis: z.optional( + z.object({ inaccuracy: z.int(), mistake: z.int(), blunder: z.int(), acpl: z.int(), - accuracy: z.int().optional(), - }) - .optional(), - team: z.string().optional(), + accuracy: z.optional(z.int()), + }), + ), + team: z.optional(z.string()), }); type GamePlayerUser = z.infer; diff --git a/src/schemas/GamePlayers.ts b/src/schemas/GamePlayers.ts index ffb6b39..30b3910 100644 --- a/src/schemas/GamePlayers.ts +++ b/src/schemas/GamePlayers.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { GamePlayerUser } from "./GamePlayerUser"; diff --git a/src/schemas/GameSource.ts b/src/schemas/GameSource.ts index 2d6e5c2..c883f31 100644 --- a/src/schemas/GameSource.ts +++ b/src/schemas/GameSource.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const GameSource = z.literal([ "lobby", diff --git a/src/schemas/GameStartEvent.ts b/src/schemas/GameStartEvent.ts index 4372a58..e63b282 100644 --- a/src/schemas/GameStartEvent.ts +++ b/src/schemas/GameStartEvent.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { GameEventInfo } from "./GameEventInfo"; diff --git a/src/schemas/GameStateEvent.ts b/src/schemas/GameStateEvent.ts index 35a583d..13e7743 100644 --- a/src/schemas/GameStateEvent.ts +++ b/src/schemas/GameStateEvent.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { GameColor } from "./GameColor"; import { GameStatusName } from "./GameStatusName"; @@ -11,17 +11,17 @@ const GameStateEvent = z.object({ winc: z.int(), binc: z.int(), status: GameStatusName, - winner: GameColor.optional(), - wdraw: z.boolean().optional(), - bdraw: z.boolean().optional(), - wtakeback: z.boolean().optional(), - btakeback: z.boolean().optional(), - expiration: z - .object({ + winner: z.optional(GameColor), + wdraw: z.optional(z.boolean()), + bdraw: z.optional(z.boolean()), + wtakeback: z.optional(z.boolean()), + btakeback: z.optional(z.boolean()), + expiration: z.optional( + z.object({ idleMillis: z.int(), millisToMove: z.int(), - }) - .optional(), + }), + ), }); type GameStateEvent = z.infer; diff --git a/src/schemas/GameStatus.ts b/src/schemas/GameStatus.ts index 10af510..c4ebd68 100644 --- a/src/schemas/GameStatus.ts +++ b/src/schemas/GameStatus.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { GameStatusId } from "./GameStatusId"; import { GameStatusName } from "./GameStatusName"; diff --git a/src/schemas/GameStatusId.ts b/src/schemas/GameStatusId.ts index a55aaba..2158fbd 100644 --- a/src/schemas/GameStatusId.ts +++ b/src/schemas/GameStatusId.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const GameStatusId = z.literal([ 10, 20, 25, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 60, diff --git a/src/schemas/GameStatusName.ts b/src/schemas/GameStatusName.ts index 9c37bb3..432fe3f 100644 --- a/src/schemas/GameStatusName.ts +++ b/src/schemas/GameStatusName.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const GameStatusName = z.literal([ "created", diff --git a/src/schemas/GameStream.ts b/src/schemas/GameStream.ts index d73b249..d772c3d 100644 --- a/src/schemas/GameStream.ts +++ b/src/schemas/GameStream.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { GameStreamGame } from "./GameStreamGame"; diff --git a/src/schemas/GameStreamGame.ts b/src/schemas/GameStreamGame.ts index 4014cae..97c784f 100644 --- a/src/schemas/GameStreamGame.ts +++ b/src/schemas/GameStreamGame.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { GameColor } from "./GameColor"; import { GameStatusId } from "./GameStatusId"; @@ -9,37 +9,37 @@ import { VariantKey } from "./VariantKey"; const GameStreamGame = z.object({ id: z.string(), - rated: z.boolean().optional(), - variant: VariantKey.optional(), - speed: Speed.optional(), - perf: PerfType.optional(), - createdAt: z.int().optional(), - status: GameStatusId.optional(), - statusName: GameStatusName.optional(), - clock: z - .object({ - initial: z.int().optional(), - increment: z.int().optional(), - totalTime: z.int().optional(), - }) - .optional(), - players: z - .object({ - white: z - .object({ - userId: z.string().optional(), - rating: z.int().optional(), - }) - .optional(), - black: z - .object({ - userId: z.string().optional(), - rating: z.int().optional(), - }) - .optional(), - }) - .optional(), - winner: GameColor.optional(), + rated: z.optional(z.boolean()), + variant: z.optional(VariantKey), + speed: z.optional(Speed), + perf: z.optional(PerfType), + createdAt: z.optional(z.int()), + status: z.optional(GameStatusId), + statusName: z.optional(GameStatusName), + clock: z.optional( + z.object({ + initial: z.optional(z.int()), + increment: z.optional(z.int()), + totalTime: z.optional(z.int()), + }), + ), + players: z.optional( + z.object({ + white: z.optional( + z.object({ + userId: z.optional(z.string()), + rating: z.optional(z.int()), + }), + ), + black: z.optional( + z.object({ + userId: z.optional(z.string()), + rating: z.optional(z.int()), + }), + ), + }), + ), + winner: z.optional(GameColor), }); type GameStreamGame = z.infer; diff --git a/src/schemas/Leaderboard.ts b/src/schemas/Leaderboard.ts index 7d47ec4..c630f36 100644 --- a/src/schemas/Leaderboard.ts +++ b/src/schemas/Leaderboard.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { TopUser } from "./TopUser"; diff --git a/src/schemas/LightUser.ts b/src/schemas/LightUser.ts index 9c6919c..419809d 100644 --- a/src/schemas/LightUser.ts +++ b/src/schemas/LightUser.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { Flair } from "./Flair"; import { Patron } from "./Patron"; @@ -8,10 +8,10 @@ import { Title } from "./Title"; const LightUser = z.object({ id: z.string(), name: z.string(), - flair: Flair.optional(), - title: Title.optional(), - patron: Patron.optional(), - patronColor: PatronColor.optional(), + flair: z.optional(Flair), + title: z.optional(Title), + patron: z.optional(Patron), + patronColor: z.optional(PatronColor), }); type LightUser = z.infer; diff --git a/src/schemas/LightUserOnline.ts b/src/schemas/LightUserOnline.ts index 2b6580d..224fe18 100644 --- a/src/schemas/LightUserOnline.ts +++ b/src/schemas/LightUserOnline.ts @@ -1,10 +1,10 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { LightUser } from "./LightUser"; const LightUserOnline = z.intersection( LightUser, - z.object({ online: z.boolean().optional() }), + z.object({ online: z.optional(z.boolean()) }), ); type LightUserOnline = z.infer; diff --git a/src/schemas/MoveStream.ts b/src/schemas/MoveStream.ts index 4d92da6..39692d4 100644 --- a/src/schemas/MoveStream.ts +++ b/src/schemas/MoveStream.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { MoveStreamEntry } from "./MoveStreamEntry"; diff --git a/src/schemas/MoveStreamEntry.ts b/src/schemas/MoveStreamEntry.ts index 4b2d94b..93191e8 100644 --- a/src/schemas/MoveStreamEntry.ts +++ b/src/schemas/MoveStreamEntry.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { GameColor } from "./GameColor"; import { GamePlayers } from "./GamePlayers"; @@ -11,24 +11,24 @@ import { Variant } from "./Variant"; const MoveStreamEntry = z.union([ z.object({ id: z.string(), - variant: Variant.optional(), - speed: Speed.optional(), - perf: PerfType.optional(), - rated: z.boolean().optional(), - initialFen: z.string().optional(), - fen: z.string().optional(), - player: GameColor.optional(), - turns: z.int().optional(), - startedAtTurn: z.int().optional(), - source: GameSource.optional(), - status: GameStatus.optional(), - createdAt: z.int().optional(), - lastMove: z.string().optional(), - players: GamePlayers.optional(), + variant: z.optional(Variant), + speed: z.optional(Speed), + perf: z.optional(PerfType), + rated: z.optional(z.boolean()), + initialFen: z.optional(z.string()), + fen: z.optional(z.string()), + player: z.optional(GameColor), + turns: z.optional(z.int()), + startedAtTurn: z.optional(z.int()), + source: z.optional(GameSource), + status: z.optional(GameStatus), + createdAt: z.optional(z.int()), + lastMove: z.optional(z.string()), + players: z.optional(GamePlayers), }), z.object({ fen: z.string(), - lm: z.string().optional(), + lm: z.optional(z.string()), wc: z.int(), bc: z.int(), }), diff --git a/src/schemas/NotFound.ts b/src/schemas/NotFound.ts index c8f62f6..61b4a20 100644 --- a/src/schemas/NotFound.ts +++ b/src/schemas/NotFound.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const NotFound = z.object({ error: z.string() }); diff --git a/src/schemas/OAuthError.ts b/src/schemas/OAuthError.ts index ddd43ec..97cd5e4 100644 --- a/src/schemas/OAuthError.ts +++ b/src/schemas/OAuthError.ts @@ -1,8 +1,8 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const OAuthError = z.object({ error: z.string(), - error_description: z.string().optional(), + error_description: z.optional(z.string()), }); type OAuthError = z.infer; diff --git a/src/schemas/Ok.ts b/src/schemas/Ok.ts index aa017ae..b251e23 100644 --- a/src/schemas/Ok.ts +++ b/src/schemas/Ok.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const Ok = z.object({ ok: z.boolean() }); diff --git a/src/schemas/OpeningExplorerGamePlayer.ts b/src/schemas/OpeningExplorerGamePlayer.ts index cf7cc8b..223be84 100644 --- a/src/schemas/OpeningExplorerGamePlayer.ts +++ b/src/schemas/OpeningExplorerGamePlayer.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const OpeningExplorerGamePlayer = z.object({ name: z.string(), diff --git a/src/schemas/OpeningExplorerLichess.ts b/src/schemas/OpeningExplorerLichess.ts index 93d7de8..bc43de3 100644 --- a/src/schemas/OpeningExplorerLichess.ts +++ b/src/schemas/OpeningExplorerLichess.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { OpeningExplorerLichessGame } from "./OpeningExplorerLichessGame"; import { OpeningExplorerOpening } from "./OpeningExplorerOpening"; @@ -23,21 +23,21 @@ const OpeningExplorerLichess = z.object({ topGames: z.array( z.intersection(z.object({ uci: z.string() }), OpeningExplorerLichessGame), ), - recentGames: z - .array( + recentGames: z.optional( + z.array( z.intersection(z.object({ uci: z.string() }), OpeningExplorerLichessGame), - ) - .optional(), - history: z - .array( + ), + ), + history: z.optional( + z.array( z.object({ month: z.string(), white: z.int(), draws: z.int(), black: z.int(), }), - ) - .optional(), + ), + ), }); type OpeningExplorerLichess = z.infer; diff --git a/src/schemas/OpeningExplorerLichessGame.ts b/src/schemas/OpeningExplorerLichessGame.ts index 027c3b2..9558dfa 100644 --- a/src/schemas/OpeningExplorerLichessGame.ts +++ b/src/schemas/OpeningExplorerLichessGame.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { GameColor } from "./GameColor"; import { OpeningExplorerGamePlayer } from "./OpeningExplorerGamePlayer"; @@ -7,11 +7,11 @@ import { Speed } from "./Speed"; const OpeningExplorerLichessGame = z.object({ id: z.string(), winner: z.union([GameColor, z.null()]), - speed: Speed.optional(), + speed: z.optional(Speed), white: OpeningExplorerGamePlayer, black: OpeningExplorerGamePlayer, year: z.number(), - month: z.string().nullable(), + month: z.nullable(z.string()), }); type OpeningExplorerLichessGame = z.infer; diff --git a/src/schemas/OpeningExplorerMasters.ts b/src/schemas/OpeningExplorerMasters.ts index 8816d78..9a99491 100644 --- a/src/schemas/OpeningExplorerMasters.ts +++ b/src/schemas/OpeningExplorerMasters.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { OpeningExplorerMastersGame } from "./OpeningExplorerMastersGame"; import { OpeningExplorerOpening } from "./OpeningExplorerOpening"; diff --git a/src/schemas/OpeningExplorerMastersGame.ts b/src/schemas/OpeningExplorerMastersGame.ts index 281087d..72c3b52 100644 --- a/src/schemas/OpeningExplorerMastersGame.ts +++ b/src/schemas/OpeningExplorerMastersGame.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { GameColor } from "./GameColor"; import { OpeningExplorerGamePlayer } from "./OpeningExplorerGamePlayer"; @@ -9,7 +9,7 @@ const OpeningExplorerMastersGame = z.object({ white: OpeningExplorerGamePlayer, black: OpeningExplorerGamePlayer, year: z.int(), - month: z.string().optional(), + month: z.optional(z.string()), }); type OpeningExplorerMastersGame = z.infer; diff --git a/src/schemas/OpeningExplorerOpening.ts b/src/schemas/OpeningExplorerOpening.ts index ec704b9..8a95bc5 100644 --- a/src/schemas/OpeningExplorerOpening.ts +++ b/src/schemas/OpeningExplorerOpening.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const OpeningExplorerOpening = z.object({ eco: z.string(), diff --git a/src/schemas/OpeningExplorerPlayer.ts b/src/schemas/OpeningExplorerPlayer.ts index b91c238..7c9ed54 100644 --- a/src/schemas/OpeningExplorerPlayer.ts +++ b/src/schemas/OpeningExplorerPlayer.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { OpeningExplorerOpening } from "./OpeningExplorerOpening"; import { OpeningExplorerPlayerGame } from "./OpeningExplorerPlayerGame"; diff --git a/src/schemas/OpeningExplorerPlayerGame.ts b/src/schemas/OpeningExplorerPlayerGame.ts index e301df7..2c0fabd 100644 --- a/src/schemas/OpeningExplorerPlayerGame.ts +++ b/src/schemas/OpeningExplorerPlayerGame.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { GameColor } from "./GameColor"; import { OpeningExplorerGamePlayer } from "./OpeningExplorerGamePlayer"; diff --git a/src/schemas/OpponentGoneEvent.ts b/src/schemas/OpponentGoneEvent.ts index 5704890..8f0c7b5 100644 --- a/src/schemas/OpponentGoneEvent.ts +++ b/src/schemas/OpponentGoneEvent.ts @@ -1,9 +1,9 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const OpponentGoneEvent = z.object({ type: z.literal("opponentGone"), gone: z.boolean(), - claimWinInSeconds: z.int().optional(), + claimWinInSeconds: z.optional(z.int()), }); type OpponentGoneEvent = z.infer; diff --git a/src/schemas/PatchQuery.ts b/src/schemas/PatchQuery.ts index 5baa25d..bbc3d52 100644 --- a/src/schemas/PatchQuery.ts +++ b/src/schemas/PatchQuery.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const PatchQuery = z.unknown(); diff --git a/src/schemas/Patron.ts b/src/schemas/Patron.ts index f019caa..459464b 100644 --- a/src/schemas/Patron.ts +++ b/src/schemas/Patron.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const Patron = z.boolean(); diff --git a/src/schemas/PatronColor.ts b/src/schemas/PatronColor.ts index a43cfd1..73e1a61 100644 --- a/src/schemas/PatronColor.ts +++ b/src/schemas/PatronColor.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const PatronColor = z.literal([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); diff --git a/src/schemas/Perf.ts b/src/schemas/Perf.ts index c60e3b5..dd2c4b7 100644 --- a/src/schemas/Perf.ts +++ b/src/schemas/Perf.ts @@ -1,12 +1,12 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const Perf = z.object({ games: z.int(), rating: z.int(), rd: z.int(), prog: z.int(), - prov: z.boolean().optional(), - rank: z.int().optional(), + prov: z.optional(z.boolean()), + rank: z.optional(z.int()), }); type Perf = z.infer; diff --git a/src/schemas/PerfStat.ts b/src/schemas/PerfStat.ts index 90419ef..644ac2f 100644 --- a/src/schemas/PerfStat.ts +++ b/src/schemas/PerfStat.ts @@ -1,37 +1,37 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { LightUser } from "./LightUser"; const PerfStat = z.object({ user: z.object({ name: z.string() }), perf: z.object({ - glicko: z - .object({ - rating: z.number().optional(), - deviation: z.number().optional(), - provisional: z.boolean().optional(), - }) - .optional(), - nb: z.int().optional(), - progress: z.int().optional(), + glicko: z.optional( + z.object({ + rating: z.optional(z.number()), + deviation: z.optional(z.number()), + provisional: z.optional(z.boolean()), + }), + ), + nb: z.optional(z.int()), + progress: z.optional(z.int()), }), - rank: z.int().nullable(), + rank: z.nullable(z.int()), percentile: z.number(), stat: z.object({ - highest: z - .object({ + highest: z.optional( + z.object({ int: z.int(), at: z.iso.datetime(), gameId: z.string(), - }) - .optional(), - lowest: z - .object({ + }), + ), + lowest: z.optional( + z.object({ int: z.int(), at: z.iso.datetime(), gameId: z.string(), - }) - .optional(), + }), + ), bestWins: z.object({ results: z.array( z.object({ @@ -68,65 +68,65 @@ const PerfStat = z.object({ win: z.object({ cur: z.object({ v: z.int(), - from: z - .object({ + from: z.optional( + z.object({ at: z.iso.datetime(), gameId: z.string(), - }) - .optional(), - to: z - .object({ + }), + ), + to: z.optional( + z.object({ at: z.iso.datetime(), gameId: z.string(), - }) - .optional(), + }), + ), }), max: z.object({ v: z.int(), - from: z - .object({ + from: z.optional( + z.object({ at: z.iso.datetime(), gameId: z.string(), - }) - .optional(), - to: z - .object({ + }), + ), + to: z.optional( + z.object({ at: z.iso.datetime(), gameId: z.string(), - }) - .optional(), + }), + ), }), }), loss: z.object({ cur: z.object({ v: z.int(), - from: z - .object({ + from: z.optional( + z.object({ at: z.iso.datetime(), gameId: z.string(), - }) - .optional(), - to: z - .object({ + }), + ), + to: z.optional( + z.object({ at: z.iso.datetime(), gameId: z.string(), - }) - .optional(), + }), + ), }), max: z.object({ v: z.int(), - from: z - .object({ + from: z.optional( + z.object({ at: z.string(), gameId: z.string(), - }) - .optional(), - to: z - .object({ + }), + ), + to: z.optional( + z.object({ at: z.string(), gameId: z.string(), - }) - .optional(), + }), + ), }), }), }), @@ -135,39 +135,39 @@ const PerfStat = z.object({ cur: z.object({ v: z.int() }), max: z.object({ v: z.int(), - from: z - .object({ + from: z.optional( + z.object({ at: z.iso.datetime(), gameId: z.string(), - }) - .optional(), - to: z - .object({ + }), + ), + to: z.optional( + z.object({ at: z.iso.datetime(), gameId: z.string(), - }) - .optional(), + }), + ), }), }), time: z.object({ cur: z.object({ v: z.int() }), max: z.object({ v: z.int(), - from: z - .object({ + from: z.optional( + z.object({ at: z.iso.datetime(), gameId: z.string(), - }) - .optional(), - to: z - .object({ + }), + ), + to: z.optional( + z.object({ at: z.iso.datetime(), gameId: z.string(), - }) - .optional(), + }), + ), }), }), - lastDate: z.iso.datetime().optional(), + lastDate: z.optional(z.iso.datetime()), }), }), }); diff --git a/src/schemas/PerfTop10.ts b/src/schemas/PerfTop10.ts index dd02dba..ef14bf0 100644 --- a/src/schemas/PerfTop10.ts +++ b/src/schemas/PerfTop10.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { TopUser } from "./TopUser"; diff --git a/src/schemas/PerfType.ts b/src/schemas/PerfType.ts index 830e3e8..e079560 100644 --- a/src/schemas/PerfType.ts +++ b/src/schemas/PerfType.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const PerfType = z.literal([ "ultraBullet", diff --git a/src/schemas/Perfs.ts b/src/schemas/Perfs.ts index eae7dce..eafdb4f 100644 --- a/src/schemas/Perfs.ts +++ b/src/schemas/Perfs.ts @@ -1,27 +1,27 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { Perf } from "./Perf"; import { PuzzleModePerf } from "./PuzzleModePerf"; const Perfs = z.object({ - chess960: Perf.optional(), - atomic: Perf.optional(), - racingKings: Perf.optional(), - ultraBullet: Perf.optional(), - blitz: Perf.optional(), - kingOfTheHill: Perf.optional(), - threeCheck: Perf.optional(), - antichess: Perf.optional(), - crazyhouse: Perf.optional(), - bullet: Perf.optional(), - correspondence: Perf.optional(), - horde: Perf.optional(), - puzzle: Perf.optional(), - classical: Perf.optional(), - rapid: Perf.optional(), - storm: PuzzleModePerf.optional(), - racer: PuzzleModePerf.optional(), - streak: PuzzleModePerf.optional(), + chess960: z.optional(Perf), + atomic: z.optional(Perf), + racingKings: z.optional(Perf), + ultraBullet: z.optional(Perf), + blitz: z.optional(Perf), + kingOfTheHill: z.optional(Perf), + threeCheck: z.optional(Perf), + antichess: z.optional(Perf), + crazyhouse: z.optional(Perf), + bullet: z.optional(Perf), + correspondence: z.optional(Perf), + horde: z.optional(Perf), + puzzle: z.optional(Perf), + classical: z.optional(Perf), + rapid: z.optional(Perf), + storm: z.optional(PuzzleModePerf), + racer: z.optional(PuzzleModePerf), + streak: z.optional(PuzzleModePerf), }); type Perfs = z.infer; diff --git a/src/schemas/PlayTime.ts b/src/schemas/PlayTime.ts index ca7ee1a..f23c5e6 100644 --- a/src/schemas/PlayTime.ts +++ b/src/schemas/PlayTime.ts @@ -1,9 +1,9 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const PlayTime = z.object({ total: z.int(), tv: z.int(), - human: z.int().optional(), + human: z.optional(z.int()), }); type PlayTime = z.infer; diff --git a/src/schemas/Profile.ts b/src/schemas/Profile.ts index 35226e1..9123092 100644 --- a/src/schemas/Profile.ts +++ b/src/schemas/Profile.ts @@ -1,17 +1,17 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const Profile = z.object({ - flag: z.string().optional(), - location: z.string().optional(), - bio: z.string().optional(), - realName: z.string().optional(), - fideRating: z.int().optional(), - uscfRating: z.int().optional(), - ecfRating: z.int().optional(), - cfcRating: z.int().optional(), - rcfRating: z.int().optional(), - dsbRating: z.int().optional(), - links: z.string().optional(), + flag: z.optional(z.string()), + location: z.optional(z.string()), + bio: z.optional(z.string()), + realName: z.optional(z.string()), + fideRating: z.optional(z.int()), + uscfRating: z.optional(z.int()), + ecfRating: z.optional(z.int()), + cfcRating: z.optional(z.int()), + rcfRating: z.optional(z.int()), + dsbRating: z.optional(z.int()), + links: z.optional(z.string()), }); type Profile = z.infer; diff --git a/src/schemas/PuzzleActivity.ts b/src/schemas/PuzzleActivity.ts index 19fe16d..558b666 100644 --- a/src/schemas/PuzzleActivity.ts +++ b/src/schemas/PuzzleActivity.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const PuzzleActivity = z.object({ date: z.int(), diff --git a/src/schemas/PuzzleAndGame.ts b/src/schemas/PuzzleAndGame.ts index 7aa5d34..3ab743a 100644 --- a/src/schemas/PuzzleAndGame.ts +++ b/src/schemas/PuzzleAndGame.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { Flair } from "./Flair"; import { GameColor } from "./GameColor"; @@ -19,23 +19,23 @@ const PuzzleAndGame = z.object({ players: z.tuple([ z.object({ color: GameColor, - flair: Flair.optional(), + flair: z.optional(Flair), id: z.string(), name: z.string(), - patron: Patron.optional(), - patronColor: PatronColor.optional(), + patron: z.optional(Patron), + patronColor: z.optional(PatronColor), rating: z.int(), - title: Title.optional(), + title: z.optional(Title), }), z.object({ color: GameColor, - flair: Flair.optional(), + flair: z.optional(Flair), id: z.string(), name: z.string(), - patron: Patron.optional(), - patronColor: PatronColor.optional(), + patron: z.optional(Patron), + patronColor: z.optional(PatronColor), rating: z.int(), - title: Title.optional(), + title: z.optional(Title), }), ]), rated: z.boolean(), diff --git a/src/schemas/PuzzleBatchSelect.ts b/src/schemas/PuzzleBatchSelect.ts index 92edfa8..162d5d4 100644 --- a/src/schemas/PuzzleBatchSelect.ts +++ b/src/schemas/PuzzleBatchSelect.ts @@ -1,11 +1,11 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { PuzzleAndGame } from "./PuzzleAndGame"; import { PuzzleGlicko } from "./PuzzleGlicko"; const PuzzleBatchSelect = z.object({ - puzzles: z.array(PuzzleAndGame).optional(), - glicko: PuzzleGlicko.optional(), + puzzles: z.optional(z.array(PuzzleAndGame)), + glicko: z.optional(PuzzleGlicko), }); type PuzzleBatchSelect = z.infer; diff --git a/src/schemas/PuzzleBatchSolveRequest.ts b/src/schemas/PuzzleBatchSolveRequest.ts index 51cf8f8..843312f 100644 --- a/src/schemas/PuzzleBatchSolveRequest.ts +++ b/src/schemas/PuzzleBatchSolveRequest.ts @@ -1,15 +1,15 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const PuzzleBatchSolveRequest = z.object({ - solutions: z - .array( + solutions: z.optional( + z.array( z.object({ - id: z.string().optional(), - win: z.boolean().optional(), - rated: z.boolean().optional(), + id: z.optional(z.string()), + win: z.optional(z.boolean()), + rated: z.optional(z.boolean()), }), - ) - .optional(), + ), + ), }); type PuzzleBatchSolveRequest = z.infer; diff --git a/src/schemas/PuzzleBatchSolveResponse.ts b/src/schemas/PuzzleBatchSolveResponse.ts index a899dfe..8982bb7 100644 --- a/src/schemas/PuzzleBatchSolveResponse.ts +++ b/src/schemas/PuzzleBatchSolveResponse.ts @@ -1,20 +1,20 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { PuzzleAndGame } from "./PuzzleAndGame"; import { PuzzleGlicko } from "./PuzzleGlicko"; const PuzzleBatchSolveResponse = z.object({ - puzzles: z.array(PuzzleAndGame).optional(), - glicko: PuzzleGlicko.optional(), - rounds: z - .array( + puzzles: z.optional(z.array(PuzzleAndGame)), + glicko: z.optional(PuzzleGlicko), + rounds: z.optional( + z.array( z.object({ - id: z.string().optional(), - win: z.boolean().optional(), - ratingDiff: z.int().optional(), + id: z.optional(z.string()), + win: z.optional(z.boolean()), + ratingDiff: z.optional(z.int()), }), - ) - .optional(), + ), + ), }); type PuzzleBatchSolveResponse = z.infer; diff --git a/src/schemas/PuzzleDashboard.ts b/src/schemas/PuzzleDashboard.ts index af20df2..fecff79 100644 --- a/src/schemas/PuzzleDashboard.ts +++ b/src/schemas/PuzzleDashboard.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { PuzzlePerformance } from "./PuzzlePerformance"; diff --git a/src/schemas/PuzzleGlicko.ts b/src/schemas/PuzzleGlicko.ts index f89b5e1..43e93ad 100644 --- a/src/schemas/PuzzleGlicko.ts +++ b/src/schemas/PuzzleGlicko.ts @@ -1,9 +1,9 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const PuzzleGlicko = z.object({ - rating: z.number().optional(), - deviation: z.number().optional(), - provisional: z.boolean().optional(), + rating: z.optional(z.number()), + deviation: z.optional(z.number()), + provisional: z.optional(z.boolean()), }); type PuzzleGlicko = z.infer; diff --git a/src/schemas/PuzzleModePerf.ts b/src/schemas/PuzzleModePerf.ts index ba939ee..dd5d449 100644 --- a/src/schemas/PuzzleModePerf.ts +++ b/src/schemas/PuzzleModePerf.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const PuzzleModePerf = z.object({ runs: z.int(), diff --git a/src/schemas/PuzzlePerformance.ts b/src/schemas/PuzzlePerformance.ts index 415989b..4e85cad 100644 --- a/src/schemas/PuzzlePerformance.ts +++ b/src/schemas/PuzzlePerformance.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const PuzzlePerformance = z.object({ firstWins: z.int(), diff --git a/src/schemas/PuzzleRaceResults.ts b/src/schemas/PuzzleRaceResults.ts index 032972c..cf6c30d 100644 --- a/src/schemas/PuzzleRaceResults.ts +++ b/src/schemas/PuzzleRaceResults.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { Patron } from "./Patron"; import { PatronColor } from "./PatronColor"; @@ -10,10 +10,10 @@ const PuzzleRaceResults = z.object({ z.object({ name: z.string(), score: z.int(), - id: z.string().optional(), - flair: z.string().optional(), - patron: Patron.optional(), - patronColor: PatronColor.optional(), + id: z.optional(z.string()), + flair: z.optional(z.string()), + patron: z.optional(Patron), + patronColor: z.optional(PatronColor), }), ), puzzles: z.array( diff --git a/src/schemas/PuzzleRacer.ts b/src/schemas/PuzzleRacer.ts index 1a41c81..5a801c0 100644 --- a/src/schemas/PuzzleRacer.ts +++ b/src/schemas/PuzzleRacer.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const PuzzleRacer = z.object({ id: z.string(), diff --git a/src/schemas/PuzzleReplay.ts b/src/schemas/PuzzleReplay.ts index 33a3ca5..a47b364 100644 --- a/src/schemas/PuzzleReplay.ts +++ b/src/schemas/PuzzleReplay.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const PuzzleReplay = z.object({ replay: z.object({ diff --git a/src/schemas/PuzzleStormDashboard.ts b/src/schemas/PuzzleStormDashboard.ts index bfe1028..23b1c45 100644 --- a/src/schemas/PuzzleStormDashboard.ts +++ b/src/schemas/PuzzleStormDashboard.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const PuzzleStormDashboard = z.object({ days: z.array( diff --git a/src/schemas/RatingHistory.ts b/src/schemas/RatingHistory.ts index 14a6fb2..33bbc57 100644 --- a/src/schemas/RatingHistory.ts +++ b/src/schemas/RatingHistory.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { RatingHistoryEntry } from "./RatingHistoryEntry"; diff --git a/src/schemas/RatingHistoryEntry.ts b/src/schemas/RatingHistoryEntry.ts index 6bd4e87..b263598 100644 --- a/src/schemas/RatingHistoryEntry.ts +++ b/src/schemas/RatingHistoryEntry.ts @@ -1,8 +1,8 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const RatingHistoryEntry = z.object({ - name: z.string().optional(), - points: z.array(z.tuple([z.int(), z.int(), z.int(), z.int()])).optional(), + name: z.optional(z.string()), + points: z.optional(z.array(z.tuple([z.int(), z.int(), z.int(), z.int()]))), }); type RatingHistoryEntry = z.infer; diff --git a/src/schemas/Simul.ts b/src/schemas/Simul.ts index 816a636..5970811 100644 --- a/src/schemas/Simul.ts +++ b/src/schemas/Simul.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { LightUser } from "./LightUser"; import { VariantKey } from "./VariantKey"; @@ -8,28 +8,28 @@ const Simul = z.object({ host: z.intersection( LightUser, z.object({ - rating: z.int().optional(), - provisional: z.boolean().optional(), - gameId: z.string().optional(), - online: z.boolean().optional(), + rating: z.optional(z.int()), + provisional: z.optional(z.boolean()), + gameId: z.optional(z.string()), + online: z.optional(z.boolean()), }), ), name: z.string(), fullName: z.string(), variants: z.array( z.object({ - key: VariantKey.optional(), - icon: z.string().optional(), - name: z.string().optional(), + key: z.optional(VariantKey), + icon: z.optional(z.string()), + name: z.optional(z.string()), }), ), isCreated: z.boolean(), isFinished: z.boolean(), isRunning: z.boolean(), - text: z.string().optional(), - estimatedStartAt: z.int().optional(), - startedAt: z.int().optional(), - finishedAt: z.int().optional(), + text: z.optional(z.string()), + estimatedStartAt: z.optional(z.int()), + startedAt: z.optional(z.int()), + finishedAt: z.optional(z.int()), nbApplicants: z.int(), nbPairings: z.int(), }); diff --git a/src/schemas/Speed.ts b/src/schemas/Speed.ts index 24a5f42..84fc846 100644 --- a/src/schemas/Speed.ts +++ b/src/schemas/Speed.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const Speed = z.literal([ "ultraBullet", diff --git a/src/schemas/StudyImportPgnChapters.ts b/src/schemas/StudyImportPgnChapters.ts index 6634193..3e58f42 100644 --- a/src/schemas/StudyImportPgnChapters.ts +++ b/src/schemas/StudyImportPgnChapters.ts @@ -1,27 +1,27 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const StudyImportPgnChapters = z.object({ - chapters: z - .array( + chapters: z.optional( + z.array( z.object({ - id: z.string().optional(), - name: z.string().optional(), - players: z - .tuple([ + id: z.optional(z.string()), + name: z.optional(z.string()), + players: z.optional( + z.tuple([ z.object({ - name: z.string().nullable().optional(), - rating: z.int().optional(), + name: z.optional(z.nullable(z.string())), + rating: z.optional(z.int()), }), z.object({ - name: z.string().nullable().optional(), - rating: z.int().optional(), + name: z.optional(z.nullable(z.string())), + rating: z.optional(z.int()), }), - ]) - .optional(), - status: z.string().optional(), + ]), + ), + status: z.optional(z.string()), }), - ) - .optional(), + ), + ), }); type StudyImportPgnChapters = z.infer; diff --git a/src/schemas/StudyMetadata.ts b/src/schemas/StudyMetadata.ts index c355e2a..5bf86e0 100644 --- a/src/schemas/StudyMetadata.ts +++ b/src/schemas/StudyMetadata.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const StudyMetadata = z.object({ id: z.string(), diff --git a/src/schemas/StudyPgn.ts b/src/schemas/StudyPgn.ts index 7ff5236..0edd21c 100644 --- a/src/schemas/StudyPgn.ts +++ b/src/schemas/StudyPgn.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const StudyPgn = z.string(); diff --git a/src/schemas/SwissFromPositionFEN.ts b/src/schemas/SwissFromPositionFEN.ts index 28282e6..224fb37 100644 --- a/src/schemas/SwissFromPositionFEN.ts +++ b/src/schemas/SwissFromPositionFEN.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const SwissFromPositionFEN = z.string(); diff --git a/src/schemas/SwissStatus.ts b/src/schemas/SwissStatus.ts index 49edb48..b819f27 100644 --- a/src/schemas/SwissStatus.ts +++ b/src/schemas/SwissStatus.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const SwissStatus = z.literal(["created", "started", "finished"]); diff --git a/src/schemas/SwissTournament.ts b/src/schemas/SwissTournament.ts index 96fd8c4..16b2771 100644 --- a/src/schemas/SwissTournament.ts +++ b/src/schemas/SwissTournament.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { SwissStatus } from "./SwissStatus"; import { Verdicts } from "./Verdicts"; @@ -18,8 +18,8 @@ const SwissTournament = z.object({ nbPlayers: z.number(), nbOngoing: z.number(), status: SwissStatus, - stats: z - .object({ + stats: z.optional( + z.object({ games: z.number(), whiteWins: z.number(), blackWins: z.number(), @@ -27,16 +27,16 @@ const SwissTournament = z.object({ byes: z.number(), absences: z.number(), averageRating: z.number(), - }) - .optional(), + }), + ), rated: z.boolean(), verdicts: Verdicts, - nextRound: z - .object({ - at: z.iso.datetime().optional(), - in: z.int().optional(), - }) - .optional(), + nextRound: z.optional( + z.object({ + at: z.optional(z.iso.datetime()), + in: z.optional(z.int()), + }), + ), }); type SwissTournament = z.infer; diff --git a/src/schemas/SwissUnauthorisedEdit.ts b/src/schemas/SwissUnauthorisedEdit.ts index d4d421e..594d809 100644 --- a/src/schemas/SwissUnauthorisedEdit.ts +++ b/src/schemas/SwissUnauthorisedEdit.ts @@ -1,6 +1,6 @@ -import * as z from "zod"; +import * as z from "zod/mini"; -const SwissUnauthorisedEdit = z.object({ error: z.string().optional() }); +const SwissUnauthorisedEdit = z.object({ error: z.optional(z.string()) }); type SwissUnauthorisedEdit = z.infer; diff --git a/src/schemas/TablebaseJson.ts b/src/schemas/TablebaseJson.ts index 8a8c1b3..328df6f 100644 --- a/src/schemas/TablebaseJson.ts +++ b/src/schemas/TablebaseJson.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { TablebaseMove } from "./TablebaseMove"; @@ -15,16 +15,16 @@ const TablebaseJson = z.object({ "syzygy-loss", "loss", ]), - dtz: z.int().nullable().optional(), - precise_dtz: z.int().nullable().optional(), - dtc: z.int().nullable().optional(), - dtm: z.int().nullable().optional(), - dtw: z.int().nullable().optional(), - checkmate: z.boolean().optional(), - stalemate: z.boolean().optional(), - variant_win: z.boolean().optional(), - variant_loss: z.boolean().optional(), - insufficient_material: z.boolean().optional(), + dtz: z.optional(z.nullable(z.int())), + precise_dtz: z.optional(z.nullable(z.int())), + dtc: z.optional(z.nullable(z.int())), + dtm: z.optional(z.nullable(z.int())), + dtw: z.optional(z.nullable(z.int())), + checkmate: z.optional(z.boolean()), + stalemate: z.optional(z.boolean()), + variant_win: z.optional(z.boolean()), + variant_loss: z.optional(z.boolean()), + insufficient_material: z.optional(z.boolean()), moves: z.array(TablebaseMove), }); diff --git a/src/schemas/TablebaseMove.ts b/src/schemas/TablebaseMove.ts index e9fb46e..e0ceae8 100644 --- a/src/schemas/TablebaseMove.ts +++ b/src/schemas/TablebaseMove.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const TablebaseMove = z.object({ uci: z.string(), @@ -15,18 +15,18 @@ const TablebaseMove = z.object({ "syzygy-win", "win", ]), - dtz: z.int().nullable().optional(), - precise_dtz: z.int().nullable().optional(), - dtc: z.int().nullable().optional(), - dtm: z.int().nullable().optional(), - dtw: z.int().nullable().optional(), - zeroing: z.boolean().optional(), - conversion: z.boolean().optional(), - checkmate: z.boolean().optional(), - stalemate: z.boolean().optional(), - variant_win: z.boolean().optional(), - variant_loss: z.boolean().optional(), - insufficient_material: z.boolean().optional(), + dtz: z.optional(z.nullable(z.int())), + precise_dtz: z.optional(z.nullable(z.int())), + dtc: z.optional(z.nullable(z.int())), + dtm: z.optional(z.nullable(z.int())), + dtw: z.optional(z.nullable(z.int())), + zeroing: z.optional(z.boolean()), + conversion: z.optional(z.boolean()), + checkmate: z.optional(z.boolean()), + stalemate: z.optional(z.boolean()), + variant_win: z.optional(z.boolean()), + variant_loss: z.optional(z.boolean()), + insufficient_material: z.optional(z.boolean()), }); type TablebaseMove = z.infer; diff --git a/src/schemas/Team.ts b/src/schemas/Team.ts index 6ac374a..50aa1ac 100644 --- a/src/schemas/Team.ts +++ b/src/schemas/Team.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { Flair } from "./Flair"; import { LightUser } from "./LightUser"; @@ -6,14 +6,14 @@ import { LightUser } from "./LightUser"; const Team = z.object({ id: z.string(), name: z.string(), - description: z.string().optional(), - flair: Flair.optional(), - leader: LightUser.optional(), - leaders: z.array(LightUser).optional(), - nbMembers: z.int().optional(), - open: z.boolean().optional(), - joined: z.boolean().optional(), - requested: z.boolean().optional(), + description: z.optional(z.string()), + flair: z.optional(Flair), + leader: z.optional(LightUser), + leaders: z.optional(z.array(LightUser)), + nbMembers: z.optional(z.int()), + open: z.optional(z.boolean()), + joined: z.optional(z.boolean()), + requested: z.optional(z.boolean()), }); type Team = z.infer; diff --git a/src/schemas/TeamPaginatorJson.ts b/src/schemas/TeamPaginatorJson.ts index ed04173..d6a4f2a 100644 --- a/src/schemas/TeamPaginatorJson.ts +++ b/src/schemas/TeamPaginatorJson.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { Team } from "./Team"; @@ -6,8 +6,8 @@ const TeamPaginatorJson = z.object({ currentPage: z.int(), maxPerPage: z.int(), currentPageResults: z.array(Team), - previousPage: z.int().nullable(), - nextPage: z.int().nullable(), + previousPage: z.nullable(z.int()), + nextPage: z.nullable(z.int()), nbResults: z.int(), nbPages: z.int(), }); diff --git a/src/schemas/TeamRequest.ts b/src/schemas/TeamRequest.ts index 85bcbc7..e281364 100644 --- a/src/schemas/TeamRequest.ts +++ b/src/schemas/TeamRequest.ts @@ -1,10 +1,10 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const TeamRequest = z.object({ teamId: z.string(), userId: z.string(), date: z.int(), - message: z.string().optional(), + message: z.optional(z.string()), }); type TeamRequest = z.infer; diff --git a/src/schemas/TeamRequestWithUser.ts b/src/schemas/TeamRequestWithUser.ts index f2b8d45..2f69eb4 100644 --- a/src/schemas/TeamRequestWithUser.ts +++ b/src/schemas/TeamRequestWithUser.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { TeamRequest } from "./TeamRequest"; import { User } from "./User"; diff --git a/src/schemas/TimeControl.ts b/src/schemas/TimeControl.ts index bbba352..d2becb3 100644 --- a/src/schemas/TimeControl.ts +++ b/src/schemas/TimeControl.ts @@ -1,17 +1,17 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const TimeControl = z.union([ z.object({ - type: z.literal("clock").optional(), - limit: z.int().optional(), - increment: z.int().optional(), - show: z.string().optional(), + type: z.optional(z.literal("clock")), + limit: z.optional(z.int()), + increment: z.optional(z.int()), + show: z.optional(z.string()), }), z.object({ - type: z.literal("correspondence").optional(), - daysPerTurn: z.int().optional(), + type: z.optional(z.literal("correspondence")), + daysPerTurn: z.optional(z.int()), }), - z.object({ type: z.literal("unlimited").optional() }), + z.object({ type: z.optional(z.literal("unlimited")) }), ]); type TimeControl = z.infer; diff --git a/src/schemas/Timeline.ts b/src/schemas/Timeline.ts index 44f51ff..114f25b 100644 --- a/src/schemas/Timeline.ts +++ b/src/schemas/Timeline.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { Flair } from "./Flair"; import { Patron } from "./Patron"; @@ -44,10 +44,10 @@ const Timeline = z.object({ z.object({ id: z.string(), name: z.string(), - title: Title.optional(), - flair: Flair.optional(), - patron: Patron.optional(), - patronColor: PatronColor.optional(), + title: z.optional(Title), + flair: z.optional(Flair), + patron: z.optional(Patron), + patronColor: z.optional(PatronColor), }), ), }); diff --git a/src/schemas/TimelineEntryBlogPost.ts b/src/schemas/TimelineEntryBlogPost.ts index bcf06e0..84781cc 100644 --- a/src/schemas/TimelineEntryBlogPost.ts +++ b/src/schemas/TimelineEntryBlogPost.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const TimelineEntryBlogPost = z.object({ type: z.literal(["blog-post"]), diff --git a/src/schemas/TimelineEntryFollow.ts b/src/schemas/TimelineEntryFollow.ts index 53135b6..1a9eb12 100644 --- a/src/schemas/TimelineEntryFollow.ts +++ b/src/schemas/TimelineEntryFollow.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const TimelineEntryFollow = z.object({ type: z.literal(["follow"]), diff --git a/src/schemas/TimelineEntryForumPost.ts b/src/schemas/TimelineEntryForumPost.ts index 935cef4..dee8d04 100644 --- a/src/schemas/TimelineEntryForumPost.ts +++ b/src/schemas/TimelineEntryForumPost.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const TimelineEntryForumPost = z.object({ type: z.literal(["forum-post"]), diff --git a/src/schemas/TimelineEntryGameEnd.ts b/src/schemas/TimelineEntryGameEnd.ts index 8b15777..12e02a0 100644 --- a/src/schemas/TimelineEntryGameEnd.ts +++ b/src/schemas/TimelineEntryGameEnd.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { PerfType } from "./PerfType"; diff --git a/src/schemas/TimelineEntryPlanRenew.ts b/src/schemas/TimelineEntryPlanRenew.ts index b75a318..484b254 100644 --- a/src/schemas/TimelineEntryPlanRenew.ts +++ b/src/schemas/TimelineEntryPlanRenew.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const TimelineEntryPlanRenew = z.object({ type: z.literal(["plan-renew"]), diff --git a/src/schemas/TimelineEntryPlanStart.ts b/src/schemas/TimelineEntryPlanStart.ts index 9af524e..6101ee1 100644 --- a/src/schemas/TimelineEntryPlanStart.ts +++ b/src/schemas/TimelineEntryPlanStart.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const TimelineEntryPlanStart = z.object({ type: z.literal(["plan-start"]), diff --git a/src/schemas/TimelineEntrySimul.ts b/src/schemas/TimelineEntrySimul.ts index 3675470..2d2748d 100644 --- a/src/schemas/TimelineEntrySimul.ts +++ b/src/schemas/TimelineEntrySimul.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const TimelineEntrySimul = z.object({ type: z.literal(["simul-create", "simul-join"]), diff --git a/src/schemas/TimelineEntryStreamStart.ts b/src/schemas/TimelineEntryStreamStart.ts index d194a44..6072089 100644 --- a/src/schemas/TimelineEntryStreamStart.ts +++ b/src/schemas/TimelineEntryStreamStart.ts @@ -1,11 +1,11 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const TimelineEntryStreamStart = z.object({ type: z.literal(["stream-start"]), date: z.number(), data: z.object({ id: z.string(), - title: z.string().optional(), + title: z.optional(z.string()), }), }); diff --git a/src/schemas/TimelineEntryStudyLike.ts b/src/schemas/TimelineEntryStudyLike.ts index be148f2..26058bc 100644 --- a/src/schemas/TimelineEntryStudyLike.ts +++ b/src/schemas/TimelineEntryStudyLike.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const TimelineEntryStudyLike = z.object({ type: z.literal(["study-like"]), diff --git a/src/schemas/TimelineEntryTeamCreate.ts b/src/schemas/TimelineEntryTeamCreate.ts index f385cf1..8c01947 100644 --- a/src/schemas/TimelineEntryTeamCreate.ts +++ b/src/schemas/TimelineEntryTeamCreate.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const TimelineEntryTeamCreate = z.object({ type: z.literal(["team-create"]), diff --git a/src/schemas/TimelineEntryTeamJoin.ts b/src/schemas/TimelineEntryTeamJoin.ts index ec39146..2cc1def 100644 --- a/src/schemas/TimelineEntryTeamJoin.ts +++ b/src/schemas/TimelineEntryTeamJoin.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const TimelineEntryTeamJoin = z.object({ type: z.literal(["team-join"]), diff --git a/src/schemas/TimelineEntryTourJoin.ts b/src/schemas/TimelineEntryTourJoin.ts index 1a9463b..34e46bb 100644 --- a/src/schemas/TimelineEntryTourJoin.ts +++ b/src/schemas/TimelineEntryTourJoin.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const TimelineEntryTourJoin = z.object({ type: z.literal(["tour-join"]), diff --git a/src/schemas/TimelineEntryUblogPost.ts b/src/schemas/TimelineEntryUblogPost.ts index 44e493c..2ffd6e0 100644 --- a/src/schemas/TimelineEntryUblogPost.ts +++ b/src/schemas/TimelineEntryUblogPost.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const TimelineEntryUblogPost = z.object({ type: z.literal(["ublog-post"]), diff --git a/src/schemas/TimelineEntryUblogPostLike.ts b/src/schemas/TimelineEntryUblogPostLike.ts index 798657a..beff640 100644 --- a/src/schemas/TimelineEntryUblogPostLike.ts +++ b/src/schemas/TimelineEntryUblogPostLike.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const TimelineEntryUblogPostLike = z.object({ type: z.literal(["ublog-post-like"]), diff --git a/src/schemas/Title.ts b/src/schemas/Title.ts index 6371128..cb00452 100644 --- a/src/schemas/Title.ts +++ b/src/schemas/Title.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const Title = z.literal([ "GM", diff --git a/src/schemas/Top10s.ts b/src/schemas/Top10s.ts index 595171a..697e53d 100644 --- a/src/schemas/Top10s.ts +++ b/src/schemas/Top10s.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { PerfTop10 } from "./PerfTop10"; diff --git a/src/schemas/TopUser.ts b/src/schemas/TopUser.ts index a9f5ec6..560be59 100644 --- a/src/schemas/TopUser.ts +++ b/src/schemas/TopUser.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { Patron } from "./Patron"; import { PatronColor } from "./PatronColor"; @@ -7,19 +7,19 @@ import { Title } from "./Title"; const TopUser = z.object({ id: z.string(), username: z.string(), - perfs: z - .record( + perfs: z.optional( + z.record( z.string(), z.object({ rating: z.int(), progress: z.int(), }), - ) - .optional(), - title: Title.optional(), - patron: Patron.optional(), - patronColor: PatronColor.optional(), - online: z.boolean().optional(), + ), + ), + title: z.optional(Title), + patron: z.optional(Patron), + patronColor: z.optional(PatronColor), + online: z.optional(z.boolean()), }); type TopUser = z.infer; diff --git a/src/schemas/TvFeed.ts b/src/schemas/TvFeed.ts index ec5f0cd..c4e037c 100644 --- a/src/schemas/TvFeed.ts +++ b/src/schemas/TvFeed.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { TvFeedFeatured } from "./TvFeedFeatured"; import { TvFeedFen } from "./TvFeedFen"; diff --git a/src/schemas/TvFeedFeatured.ts b/src/schemas/TvFeedFeatured.ts index 322c513..74b03b4 100644 --- a/src/schemas/TvFeedFeatured.ts +++ b/src/schemas/TvFeedFeatured.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { GameColor } from "./GameColor"; import { LightUser } from "./LightUser"; diff --git a/src/schemas/TvFeedFen.ts b/src/schemas/TvFeedFen.ts index c5d78e6..7fb68be 100644 --- a/src/schemas/TvFeedFen.ts +++ b/src/schemas/TvFeedFen.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const TvFeedFen = z.object({ t: z.literal("fen"), diff --git a/src/schemas/TvGame.ts b/src/schemas/TvGame.ts index f50e0b4..72994c4 100644 --- a/src/schemas/TvGame.ts +++ b/src/schemas/TvGame.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { GameColor } from "./GameColor"; import { LightUser } from "./LightUser"; diff --git a/src/schemas/UciVariant.ts b/src/schemas/UciVariant.ts index 32eaa03..34c568c 100644 --- a/src/schemas/UciVariant.ts +++ b/src/schemas/UciVariant.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const UciVariant = z.literal([ "chess", diff --git a/src/schemas/User.ts b/src/schemas/User.ts index 90edac7..d233235 100644 --- a/src/schemas/User.ts +++ b/src/schemas/User.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { Flair } from "./Flair"; import { Patron } from "./Patron"; @@ -11,18 +11,18 @@ import { Title } from "./Title"; const User = z.object({ id: z.string(), username: z.string(), - perfs: Perfs.optional(), - title: Title.optional(), - flair: Flair.optional(), - createdAt: z.int().optional(), - disabled: z.boolean().optional(), - tosViolation: z.boolean().optional(), - profile: Profile.optional(), - seenAt: z.int().optional(), - playTime: PlayTime.optional(), - patron: Patron.optional(), - patronColor: PatronColor.optional(), - verified: z.boolean().optional(), + perfs: z.optional(Perfs), + title: z.optional(Title), + flair: z.optional(Flair), + createdAt: z.optional(z.int()), + disabled: z.optional(z.boolean()), + tosViolation: z.optional(z.boolean()), + profile: z.optional(Profile), + seenAt: z.optional(z.int()), + playTime: z.optional(PlayTime), + patron: z.optional(Patron), + patronColor: z.optional(PatronColor), + verified: z.optional(z.boolean()), }); type User = z.infer; diff --git a/src/schemas/UserActivity.ts b/src/schemas/UserActivity.ts index 42c6572..9b9f887 100644 --- a/src/schemas/UserActivity.ts +++ b/src/schemas/UserActivity.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { Flair } from "./Flair"; import { PuzzleModePerf } from "./PuzzleModePerf"; @@ -11,31 +11,31 @@ const UserActivity = z.object({ start: z.int(), end: z.int(), }), - games: z - .object({ - chess960: UserActivityScore.optional(), - atomic: UserActivityScore.optional(), - racingKings: UserActivityScore.optional(), - ultraBullet: UserActivityScore.optional(), - blitz: UserActivityScore.optional(), - kingOfTheHill: UserActivityScore.optional(), - bullet: UserActivityScore.optional(), - correspondence: UserActivityScore.optional(), - horde: UserActivityScore.optional(), - puzzle: UserActivityScore.optional(), - classical: UserActivityScore.optional(), - rapid: UserActivityScore.optional(), - }) - .optional(), - puzzles: z.object({ score: UserActivityScore.optional() }).optional(), - storm: PuzzleModePerf.optional(), - racer: PuzzleModePerf.optional(), - streak: PuzzleModePerf.optional(), - tournaments: z - .object({ - nb: z.int().optional(), - best: z - .array( + games: z.optional( + z.object({ + chess960: z.optional(UserActivityScore), + atomic: z.optional(UserActivityScore), + racingKings: z.optional(UserActivityScore), + ultraBullet: z.optional(UserActivityScore), + blitz: z.optional(UserActivityScore), + kingOfTheHill: z.optional(UserActivityScore), + bullet: z.optional(UserActivityScore), + correspondence: z.optional(UserActivityScore), + horde: z.optional(UserActivityScore), + puzzle: z.optional(UserActivityScore), + classical: z.optional(UserActivityScore), + rapid: z.optional(UserActivityScore), + }), + ), + puzzles: z.optional(z.object({ score: z.optional(UserActivityScore) })), + storm: z.optional(PuzzleModePerf), + racer: z.optional(PuzzleModePerf), + streak: z.optional(PuzzleModePerf), + tournaments: z.optional( + z.object({ + nb: z.optional(z.int()), + best: z.optional( + z.array( z.object({ tournament: z.object({ id: z.string(), @@ -46,59 +46,59 @@ const UserActivity = z.object({ rank: z.int(), rankPercent: z.int(), }), - ) - .optional(), - }) - .optional(), - practice: z - .array( + ), + ), + }), + ), + practice: z.optional( + z.array( z.object({ url: z.string(), name: z.string(), nbPositions: z.int(), }), - ) - .optional(), - simuls: z.array(z.string()).optional(), - correspondenceMoves: z - .object({ + ), + ), + simuls: z.optional(z.array(z.string())), + correspondenceMoves: z.optional( + z.object({ nb: z.int(), games: z.array(UserActivityCorrespondenceGame), - }) - .optional(), - correspondenceEnds: z - .object({ + }), + ), + correspondenceEnds: z.optional( + z.object({ correspondence: z.object({ score: UserActivityScore, games: z.array(UserActivityCorrespondenceGame), }), - }) - .optional(), - follows: z - .object({ - in: UserActivityFollowList.optional(), - out: UserActivityFollowList.optional(), - }) - .optional(), - studies: z - .array( + }), + ), + follows: z.optional( + z.object({ + in: z.optional(UserActivityFollowList), + out: z.optional(UserActivityFollowList), + }), + ), + studies: z.optional( + z.array( z.object({ id: z.string(), name: z.string(), }), - ) - .optional(), - teams: z - .array( + ), + ), + teams: z.optional( + z.array( z.object({ url: z.url(), name: z.string(), - flair: Flair.optional(), + flair: z.optional(Flair), }), - ) - .optional(), - posts: z - .array( + ), + ), + posts: z.optional( + z.array( z.object({ topicUrl: z.string(), topicName: z.string(), @@ -109,10 +109,10 @@ const UserActivity = z.object({ }), ), }), - ) - .optional(), - patron: z.object({ months: z.int() }).optional(), - stream: z.boolean().optional(), + ), + ), + patron: z.optional(z.object({ months: z.int() })), + stream: z.optional(z.boolean()), }); type UserActivity = z.infer; diff --git a/src/schemas/UserActivityCorrespondenceGame.ts b/src/schemas/UserActivityCorrespondenceGame.ts index 3b524b4..6c21bf8 100644 --- a/src/schemas/UserActivityCorrespondenceGame.ts +++ b/src/schemas/UserActivityCorrespondenceGame.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { GameColor } from "./GameColor"; import { VariantKey } from "./VariantKey"; @@ -7,10 +7,10 @@ const UserActivityCorrespondenceGame = z.object({ id: z.string(), color: GameColor, url: z.url(), - variant: VariantKey.optional(), - speed: z.literal("correspondence").optional(), - perf: z.literal("correspondence").optional(), - rated: z.boolean().optional(), + variant: z.optional(VariantKey), + speed: z.optional(z.literal("correspondence")), + perf: z.optional(z.literal("correspondence")), + rated: z.optional(z.boolean()), opponent: z.union([ z.object({ aiLevel: z.int() }), z.object({ diff --git a/src/schemas/UserActivityFollowList.ts b/src/schemas/UserActivityFollowList.ts index 96550e5..b98dcf9 100644 --- a/src/schemas/UserActivityFollowList.ts +++ b/src/schemas/UserActivityFollowList.ts @@ -1,8 +1,8 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const UserActivityFollowList = z.object({ ids: z.array(z.string()), - nb: z.int().optional(), + nb: z.optional(z.int()), }); type UserActivityFollowList = z.infer; diff --git a/src/schemas/UserActivityScore.ts b/src/schemas/UserActivityScore.ts index 5d2e566..acf566c 100644 --- a/src/schemas/UserActivityScore.ts +++ b/src/schemas/UserActivityScore.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const UserActivityScore = z.object({ win: z.int(), diff --git a/src/schemas/UserExtended.ts b/src/schemas/UserExtended.ts index a82403f..2c3c14e 100644 --- a/src/schemas/UserExtended.ts +++ b/src/schemas/UserExtended.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { Count } from "./Count"; import { User } from "./User"; @@ -8,14 +8,14 @@ const UserExtended = z.intersection( User, z.object({ url: z.url(), - playing: z.url().optional(), - count: Count.optional(), - streaming: z.boolean().optional(), - streamer: UserStreamer.optional(), - followable: z.boolean().optional(), - following: z.boolean().optional(), - blocking: z.boolean().optional(), - fideId: z.number().optional(), + playing: z.optional(z.url()), + count: z.optional(Count), + streaming: z.optional(z.boolean()), + streamer: z.optional(UserStreamer), + followable: z.optional(z.boolean()), + following: z.optional(z.boolean()), + blocking: z.optional(z.boolean()), + fideId: z.optional(z.number()), }), ); diff --git a/src/schemas/UserNote.ts b/src/schemas/UserNote.ts index b11d7bd..d346a7d 100644 --- a/src/schemas/UserNote.ts +++ b/src/schemas/UserNote.ts @@ -1,12 +1,12 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { LightUser } from "./LightUser"; const UserNote = z.object({ - from: LightUser.optional(), - to: LightUser.optional(), - text: z.string().optional(), - date: z.int().optional(), + from: z.optional(LightUser), + to: z.optional(LightUser), + text: z.optional(z.string()), + date: z.optional(z.int()), }); type UserNote = z.infer; diff --git a/src/schemas/UserPreferences.ts b/src/schemas/UserPreferences.ts index e28ca8e..93cd15c 100644 --- a/src/schemas/UserPreferences.ts +++ b/src/schemas/UserPreferences.ts @@ -1,12 +1,12 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const UserPreferences = z.object({ - dark: z.boolean().optional(), - transp: z.boolean().optional(), - bgImg: z.url().optional(), - is3d: z.boolean().optional(), - theme: z - .literal([ + dark: z.optional(z.boolean()), + transp: z.optional(z.boolean()), + bgImg: z.optional(z.url()), + is3d: z.optional(z.boolean()), + theme: z.optional( + z.literal([ "blue", "blue2", "blue3", @@ -31,10 +31,10 @@ const UserPreferences = z.object({ "purple-diag", "pink", "ic", - ]) - .optional(), - pieceSet: z - .literal([ + ]), + ), + pieceSet: z.optional( + z.literal([ "cburnett", "merida", "alpha", @@ -61,10 +61,10 @@ const UserPreferences = z.object({ "icpieces", "shapes", "letter", - ]) - .optional(), - theme3d: z - .literal([ + ]), + ), + theme3d: z.optional( + z.literal([ "Black-White-Aluminium", "Brushed-Aluminium", "China-Blue", @@ -80,10 +80,10 @@ const UserPreferences = z.object({ "Wax", "Jade", "Woodi", - ]) - .optional(), - pieceSet3d: z - .literal([ + ]), + ), + pieceSet3d: z.optional( + z.literal([ "Basic", "Wood", "Metal", @@ -95,10 +95,10 @@ const UserPreferences = z.object({ "Experimental", "Staunton", "CubesAndPi", - ]) - .optional(), - soundSet: z - .literal([ + ]), + ), + soundSet: z.optional( + z.literal([ "silent", "standard", "piano", @@ -108,38 +108,38 @@ const UserPreferences = z.object({ "robot", "music", "speech", - ]) - .optional(), - blindfold: z.int().optional(), - autoQueen: z.int().optional(), - autoThreefold: z.int().optional(), - takeback: z.int().optional(), - moretime: z.int().optional(), - clockTenths: z.int().optional(), - clockBar: z.boolean().optional(), - clockSound: z.boolean().optional(), - premove: z.boolean().optional(), - animation: z.int().optional(), - pieceNotation: z.int().optional(), - captured: z.boolean().optional(), - follow: z.boolean().optional(), - highlight: z.boolean().optional(), - destination: z.boolean().optional(), - coords: z.int().optional(), - replay: z.int().optional(), - challenge: z.int().optional(), - message: z.int().optional(), - submitMove: z.int().optional(), - confirmResign: z.int().optional(), - insightShare: z.int().optional(), - keyboardMove: z.int().optional(), - voiceMove: z.boolean().optional(), - zen: z.int().optional(), - ratings: z.int().optional(), - moveEvent: z.int().optional(), - rookCastle: z.int().optional(), - flairs: z.boolean().optional(), - sayGG: z.literal([0, 1, 2]).optional(), + ]), + ), + blindfold: z.optional(z.int()), + autoQueen: z.optional(z.int()), + autoThreefold: z.optional(z.int()), + takeback: z.optional(z.int()), + moretime: z.optional(z.int()), + clockTenths: z.optional(z.int()), + clockBar: z.optional(z.boolean()), + clockSound: z.optional(z.boolean()), + premove: z.optional(z.boolean()), + animation: z.optional(z.int()), + pieceNotation: z.optional(z.int()), + captured: z.optional(z.boolean()), + follow: z.optional(z.boolean()), + highlight: z.optional(z.boolean()), + destination: z.optional(z.boolean()), + coords: z.optional(z.int()), + replay: z.optional(z.int()), + challenge: z.optional(z.int()), + message: z.optional(z.int()), + submitMove: z.optional(z.int()), + confirmResign: z.optional(z.int()), + insightShare: z.optional(z.int()), + keyboardMove: z.optional(z.int()), + voiceMove: z.optional(z.boolean()), + zen: z.optional(z.int()), + ratings: z.optional(z.int()), + moveEvent: z.optional(z.int()), + rookCastle: z.optional(z.int()), + flairs: z.optional(z.boolean()), + sayGG: z.optional(z.literal([0, 1, 2])), }); type UserPreferences = z.infer; diff --git a/src/schemas/UserStreamer.ts b/src/schemas/UserStreamer.ts index 5a19e91..726342b 100644 --- a/src/schemas/UserStreamer.ts +++ b/src/schemas/UserStreamer.ts @@ -1,8 +1,8 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const UserStreamer = z.object({ - twitch: z.object({ channel: z.url().optional() }).optional(), - youtube: z.object({ channel: z.url().optional() }).optional(), + twitch: z.optional(z.object({ channel: z.optional(z.url()) })), + youtube: z.optional(z.object({ channel: z.optional(z.url()) })), }); type UserStreamer = z.infer; diff --git a/src/schemas/Variant.ts b/src/schemas/Variant.ts index 250e4eb..c5c7326 100644 --- a/src/schemas/Variant.ts +++ b/src/schemas/Variant.ts @@ -1,11 +1,11 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { VariantKey } from "./VariantKey"; const Variant = z.object({ key: VariantKey, name: z.string(), - short: z.string().optional(), + short: z.optional(z.string()), }); type Variant = z.infer; diff --git a/src/schemas/VariantKey.ts b/src/schemas/VariantKey.ts index 0f23a47..73c15d9 100644 --- a/src/schemas/VariantKey.ts +++ b/src/schemas/VariantKey.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const VariantKey = z.literal([ "standard", diff --git a/src/schemas/Verdict.ts b/src/schemas/Verdict.ts index d171ded..bef73ac 100644 --- a/src/schemas/Verdict.ts +++ b/src/schemas/Verdict.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; const Verdict = z.object({ condition: z.string(), diff --git a/src/schemas/Verdicts.ts b/src/schemas/Verdicts.ts index 8933bd6..1ac9a24 100644 --- a/src/schemas/Verdicts.ts +++ b/src/schemas/Verdicts.ts @@ -1,4 +1,4 @@ -import * as z from "zod"; +import * as z from "zod/mini"; import { Verdict } from "./Verdict"; diff --git a/src/utils/index.ts b/src/utils/index.ts deleted file mode 100644 index 443bf4c..0000000 --- a/src/utils/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -export function addQueryParams( - url: URL, - params: Record, -): void { - Object.entries(params).forEach(([key, value]) => { - if (value === undefined || value === null) return; - - if (Array.isArray(value)) { - url.searchParams.set(key, value.join(",")); - return; - } - - url.searchParams.set(key, String(value)); - }); -} diff --git a/tests/index.test.ts b/tests/index.test.ts index 6954e67..0c806e9 100644 --- a/tests/index.test.ts +++ b/tests/index.test.ts @@ -32,5 +32,5 @@ describe.concurrent("Lichess", () => { expect(received.length).toBeGreaterThanOrEqual(2); expect(received[0]?.t).toBe("featured"); - }, 3_500); + }, 4_000); });