@vielzeug/spell 2.1.1 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"spell.cjs","names":[],"sources":["../src/types.ts","../src/errors.ts","../src/_dev.ts","../src/safe-object.ts","../src/messages.ts","../../arsenal/dist/guards/isPlainObject.js","../src/core.ts","../src/schemas/array.ts","../src/schemas/bigint.ts","../src/schemas/boolean.ts","../src/schemas/date.ts","../src/schemas/enum.ts","../src/schemas/instanceof.ts","../src/schemas/intersect.ts","../src/schemas/lazy.ts","../src/schemas/literal.ts","../src/schemas/map.ts","../src/schemas/never.ts","../src/schemas/number.ts","../src/schemas/union.ts","../src/schemas/object.ts","../src/schemas/raw-or.ts","../src/schemas/record.ts","../src/schemas/set.ts","../src/formats.ts","../src/schemas/string.ts","../src/schemas/tuple.ts","../src/schemas/variant.ts","../src/s.ts","../src/index.ts"],"sourcesContent":["/* -------------------- Error Codes -------------------- */\n\nexport const ErrorCode = {\n custom: 'custom',\n invalid_base64: 'invalid_base64',\n invalid_date: 'invalid_date',\n invalid_duration: 'invalid_duration',\n invalid_enum: 'invalid_enum',\n invalid_finite: 'invalid_finite',\n invalid_integer: 'invalid_integer',\n invalid_keys: 'invalid_keys',\n invalid_length: 'invalid_length',\n invalid_literal: 'invalid_literal',\n invalid_multiple_of: 'invalid_multiple_of',\n invalid_safe: 'invalid_safe',\n invalid_string: 'invalid_string',\n invalid_type: 'invalid_type',\n invalid_union: 'invalid_union',\n invalid_unique: 'invalid_unique',\n invalid_url: 'invalid_url',\n invalid_variant: 'invalid_variant',\n too_big: 'too_big',\n too_small: 'too_small',\n} as const;\n\nexport type ErrorCode = (typeof ErrorCode)[keyof typeof ErrorCode];\n\n/* -------------------- Messages -------------------- */\n\n/**\n * A validation message — either a static string or a function that receives context and returns a string.\n * **Note:** Static string values are used verbatim with no interpolation. Use the function form\n * for context-dependent messages (e.g. `(ctx) => \\`Must be at least ${ctx.min}\\``).\n */\nexport type MessageFn<Ctx extends Record<string, unknown> = Record<string, unknown>> = string | ((ctx: Ctx) => string);\n\n/* -------------------- JSON Schema -------------------- */\n\n/** Plain JSON Schema object (targeting JSON Schema 2020-12). */\nexport type JsonSchema = Record<string, unknown>;\n\n/* -------------------- Issues -------------------- */\n\n/**\n * A typed discriminated union of all issues emitted by built-in validators.\n *\n * Narrowing on `code` gives precise access to `params`:\n * ```ts\n * if (error.code === 'too_small') {\n * const min = error.params.min; // number | bigint | Date\n * }\n * ```\n */\nexport type Issue =\n | { code: 'custom'; message: string; params?: Record<string, unknown>; path: (string | number)[] }\n | { code: 'invalid_base64'; message: string; params: { format: string }; path: (string | number)[] }\n | { code: 'invalid_date'; message: string; params?: undefined; path: (string | number)[] }\n | { code: 'invalid_duration'; message: string; params: { format: string }; path: (string | number)[] }\n | { code: 'invalid_enum'; message: string; params: { values: readonly unknown[] }; path: (string | number)[] }\n | { code: 'invalid_finite'; message: string; params?: undefined; path: (string | number)[] }\n | { code: 'invalid_integer'; message: string; params?: undefined; path: (string | number)[] }\n | { code: 'invalid_keys'; message: string; params: { keys: string[] }; path: (string | number)[] }\n | { code: 'invalid_length'; message: string; params: { exact: number }; path: (string | number)[] }\n | { code: 'invalid_literal'; message: string; params: { expected: unknown }; path: (string | number)[] }\n | { code: 'invalid_multiple_of'; message: string; params: { step: number | bigint }; path: (string | number)[] }\n | { code: 'invalid_safe'; message: string; params?: undefined; path: (string | number)[] }\n | {\n code: 'invalid_string';\n message: string;\n params: { format?: string; includes?: string; pattern?: string; prefix?: string; suffix?: string };\n path: (string | number)[];\n }\n | { code: 'invalid_type'; message: string; params?: undefined; path: (string | number)[] }\n | { code: 'invalid_union'; message: string; params: { errors: Issue[][] }; path: (string | number)[] }\n | { code: 'invalid_unique'; message: string; params: { unique: true }; path: (string | number)[] }\n | { code: 'invalid_url'; message: string; params: { format: string }; path: (string | number)[] }\n | {\n code: 'invalid_variant';\n message: string;\n params: { discriminator: string; expected: string[] };\n path: (string | number)[];\n }\n | {\n code: 'too_big';\n message: string;\n params: { exclusive?: boolean; max: number | bigint | Date };\n path: (string | number)[];\n }\n | {\n code: 'too_small';\n message: string;\n params: { exclusive?: boolean; min: number | bigint | Date };\n path: (string | number)[];\n }\n | { code: string & {}; message: string; params?: Record<string, unknown>; path: (string | number)[] };\n\n/** ParseContext carries the active message set through the parse pipeline. */\nexport type ParseContext = {\n messages: import('./messages').Messages;\n};\n\n/**\n * Validator function. Receives the value after type-checking and the active ParseContext.\n * Returns an Issue array on failure, null on success, or a Promise for async validators.\n */\nexport type ValidateFn = (value: unknown, ctx?: ParseContext) => Issue[] | null | Promise<Issue[] | null>;\n\nexport type CheckContext = {\n addIssue: (issue: {\n code: string;\n message: string;\n params?: Record<string, unknown>;\n path?: (string | number)[];\n }) => void;\n};\n\n/**\n * Return type of a `check()` callback.\n * - `string` — validation failed; the string becomes the error message.\n * - `false` — validation failed with no message (use `addIssue` for a message).\n * - `true` / `null` / `void` — validation passed.\n *\n * The shorthand `condition || 'message'` works naturally:\n * ```ts\n * s.string().check((value) => value.length > 0 || 'Cannot be empty')\n * ```\n */\nexport type ValidateResult = boolean | null | undefined | string;\n\n/** Re-exported from errors for convenience — defined there. */\nexport type { FlatError, FlatErrorFirst } from './errors';\n\n/* -------------------- Schema Introspection -------------------- */\n\n/**\n * Visitor map for schema.walk(). Container handlers receive already-walked children (type R).\n * All handlers are optional — unmatched kinds return `null` unless an `unknown` fallback is provided.\n *\n * Each handler receives the concrete schema type for that kind, enabling access to\n * schema-specific properties (e.g. `ArraySchema.itemSchema`) without casting.\n */\nexport type SchemaWalker<R> = {\n array?: <T extends AnySchema, Mode extends SchemaMode>(\n schema: import('./schemas/array').ArraySchema<T, Mode>,\n item: R | null,\n ) => R;\n bigint?: <Input, Mode extends SchemaMode>(schema: import('./schemas/bigint').BigIntSchema<Input, Mode>) => R;\n boolean?: <Input, Mode extends SchemaMode>(schema: import('./schemas/boolean').BooleanSchema<Input, Mode>) => R;\n date?: <Input, Mode extends SchemaMode>(schema: import('./schemas/date').DateSchema<Input, Mode>) => R;\n enum?: <T extends import('./schemas/enum').EnumValues, Mode extends SchemaMode>(\n schema: import('./schemas/enum').EnumSchema<T, Mode>,\n ) => R;\n instanceof?: <T, Mode extends SchemaMode>(schema: import('./schemas/instanceof').InstanceOfSchema<T, Mode>) => R;\n intersect?: <T extends readonly AnySchema[], Mode extends SchemaMode>(\n schema: import('./schemas/intersect').IntersectSchema<T, Mode>,\n branches: (R | null)[],\n ) => R;\n lazy?: <T, Input, Mode extends SchemaMode>(schema: import('./schemas/lazy').LazySchema<T, Input, Mode>) => R;\n literal?: <T extends string | number | boolean | null | undefined, Mode extends SchemaMode>(\n schema: import('./schemas/literal').LiteralSchema<T, Mode>,\n ) => R;\n map?: <K extends AnySchema, V extends AnySchema, Mode extends SchemaMode>(\n schema: import('./schemas/map').MapSchema<K, V, Mode>,\n key: R | null,\n value: R | null,\n ) => R;\n never?: <Mode extends SchemaMode>(schema: import('./schemas/never').NeverSchema<Mode>) => R;\n number?: <Input, Mode extends SchemaMode>(schema: import('./schemas/number').NumberSchema<Input, Mode>) => R;\n object?: <T extends import('./schemas/object').ObjectShape, Mode extends SchemaMode>(\n schema: import('./schemas/object').ObjectSchema<T, Mode>,\n fields: Record<string, R | null>,\n ) => R;\n pipe?: <To extends AnySchema, From extends AnySchema, Mode extends SchemaMode>(\n schema: import('./core').PipeSchema<To, From, Mode>,\n from: R | null,\n to: R | null,\n ) => R;\n record?: <K extends AnySchema, V extends AnySchema, Mode extends SchemaMode>(\n schema: import('./schemas/record').RecordSchema<K, V, Mode>,\n key: R | null,\n value: R | null,\n ) => R;\n set?: <T extends AnySchema, Mode extends SchemaMode>(\n schema: import('./schemas/set').SetSchema<T, Mode>,\n item: R | null,\n ) => R;\n string?: <Input, Mode extends SchemaMode>(schema: import('./schemas/string').StringSchema<Input, Mode>) => R;\n tuple?: <T extends import('./schemas/tuple').TupleSchemas, Rest extends AnySchema | null, Mode extends SchemaMode>(\n schema: import('./schemas/tuple').TupleSchema<T, Rest, Mode>,\n items: (R | null)[],\n rest: R | null,\n ) => R;\n union?: <T extends readonly AnySchema[], Mode extends SchemaMode>(\n schema: import('./schemas/union').UnionSchema<T, Mode>,\n branches: (R | null)[],\n ) => R;\n unknown?: (schema: AnySchema) => R;\n variant?: <\n K extends string,\n M extends Record<string, import('./schemas/object').ObjectSchema<any, any>>,\n Mode extends SchemaMode,\n >(\n schema: import('./schemas/variant').VariantSchema<K, M, Mode>,\n branches: Record<string, R | null>,\n ) => R;\n};\n\ntype BaseDescriptor = {\n description?: string;\n isNullable?: boolean;\n isOptional?: boolean;\n};\n\nexport type SchemaDescriptor = BaseDescriptor &\n (\n | { kind: 'any' | 'unknown' | 'never' | 'boolean' | 'bigint' | 'date' | 'lazy' }\n | { className: string; kind: 'instanceof' }\n | {\n contentEncoding?: string;\n format?: string;\n kind: 'string';\n maxLength?: number;\n minLength?: number;\n pattern?: string | null;\n }\n | {\n exclusiveMaximum?: number;\n exclusiveMinimum?: number;\n kind: 'number';\n maximum?: number;\n minimum?: number;\n multipleOf?: number;\n typeHint?: 'integer';\n }\n | { kind: 'literal'; value: string | number | boolean | null | undefined }\n | { kind: 'enum'; values: readonly (string | number)[] }\n | { items: SchemaDescriptor; kind: 'array'; maxItems?: number; minItems?: number }\n | { items: SchemaDescriptor[]; kind: 'tuple'; rest: SchemaDescriptor | null }\n | { fields: Record<string, SchemaDescriptor>; kind: 'object'; strict: boolean }\n | { key: SchemaDescriptor; kind: 'record'; value: SchemaDescriptor }\n | { items: SchemaDescriptor; kind: 'set' }\n | { key: SchemaDescriptor; kind: 'map'; value: SchemaDescriptor }\n | { branches: SchemaDescriptor[]; kind: 'union' | 'intersect' }\n | { branches: Record<string, SchemaDescriptor>; discriminator: string; kind: 'variant' }\n | { from: SchemaDescriptor; kind: 'pipe'; to: SchemaDescriptor }\n );\n\n/* -------------------- ParseResult (forward-references SpellValidationError) -------------------- */\n\nimport type { Schema } from './core';\n// Import only the type to avoid circular dependencies\nimport type { SpellValidationError } from './errors';\n\nexport type ParseResult<T> = { data: T; success: true } | { error: SpellValidationError; success: false };\n\n/* -------------------- Schema execution mode / Infer (forward-references Schema) -------------------- */\n\n/** @internal */\nexport const schemaInput = Symbol('spell.schemaInput');\n/** Public structural marker for a schema's parsing capability. */\nexport const schemaMode = Symbol('spell.schemaMode');\n/** @internal */\nexport const schemaOutput = Symbol('spell.schemaOutput');\n\n/** Whether a schema can be parsed synchronously or requires asynchronous parsing. */\nexport type SchemaMode = 'async' | 'sync';\n\n/** A structural schema surface accepted by composition helpers. */\nexport type SchemaSurface<Output = unknown, Input = Output, Mode extends SchemaMode = SchemaMode> = {\n _parseFullAsync(value: unknown, ctx?: ParseContext): Promise<{ data: unknown; issues: Issue[] }>;\n _parseFullSync(value: unknown, ctx?: ParseContext): { data: unknown; issues: Issue[] };\n definition(): SchemaDescriptor;\n isOptional: boolean;\n optional(): SchemaSurface<Output | undefined, Input | undefined, Mode>;\n required(): SchemaSurface<Exclude<Output, undefined>, Exclude<Input, undefined>, Mode>;\n readonly [schemaInput]: Input;\n readonly [schemaMode]: Mode;\n readonly [schemaOutput]: Output;\n walk<R>(visitor: SchemaWalker<R>): R | null;\n};\n\nexport type AnySchema<Output = unknown, Input = Output, Mode extends SchemaMode = SchemaMode> = SchemaSurface<\n Output,\n Input,\n Mode\n>;\n\n/** Extracts a schema's parsing capability. */\nexport type InferSchemaMode<T> = T extends { readonly [schemaMode]: infer Mode extends SchemaMode } ? Mode : never;\n\n/** Selects async mode when any member of a schema collection is async. */\nexport type MergeSchemaModes<Modes extends SchemaMode> = 'async' extends Modes ? 'async' : 'sync';\n\nexport type InferOutput<T> =\n T extends Schema<infer Output, unknown, SchemaMode>\n ? Output\n : T extends { readonly [schemaOutput]: infer Output }\n ? Output\n : never;\nexport type InferInput<T> = T extends { readonly [schemaInput]: infer Input } ? Input : unknown;\nexport type Infer<T> = InferOutput<T>;\n\n/** Re-exported for convenience — defined in messages.ts. */\nexport type { Messages } from './messages';\n","import { ErrorCode, type Issue, type MessageFn } from './types';\n\n/* -------------------- Helpers -------------------- */\n\ntype IssueParams<C extends string> = Extract<Issue, { code: C }> extends { params: infer P } ? P : undefined;\n\n/**\n * Creates a single-error failure array. Use in validator functions instead of building the array manually.\n * Typed overloads ensure params match the given error code.\n */\nexport function fail<C extends ErrorCode>(code: C, message: string, params: IssueParams<C>): Issue[];\nexport function fail(code: string, message: string, params?: Record<string, unknown>): Issue[];\nexport function fail(code: string, message: string, params?: Record<string, unknown>): Issue[] {\n return [{ code, message, params, path: [] } as Issue];\n}\n\n/** @internal */\nexport function resolveMessage<Ctx extends Record<string, unknown>>(msg: MessageFn<Ctx>, ctx: Ctx): string {\n return typeof msg === 'function' ? msg(ctx) : msg;\n}\n\nexport function prependIssuePath(issues: Issue[], prefix: string | number): Issue[] {\n return issues.map((issue) => ({ ...issue, path: [prefix, ...issue.path] }));\n}\n\n/* -------------------- SpellError -------------------- */\n\n/** Base class for all spell errors. Use `instanceof SpellError` to catch any spell-originated error. */\nexport class SpellError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static is(err: unknown): err is SpellError {\n return err instanceof SpellError;\n }\n}\n\n/* -------------------- SpellValidationError -------------------- */\n\nfunction formatIssues(issues: Issue[]): string {\n return issues\n .map(({ code, message, path }) => {\n const pathStr = path.length ? path.join('.') : 'value';\n\n return `${pathStr}: ${message} [${code}]`;\n })\n .join('\\n');\n}\n\nfunction pathsEqual(left: readonly (string | number)[], right: readonly (string | number)[]): boolean {\n return left.length === right.length && left.every((segment, index) => segment === right[index]);\n}\n\nexport type FlatError = { messages: string[]; path: (string | number)[] };\nexport type FlatErrorFirst = { message: string; path: (string | number)[] };\n\nexport class SpellDefinitionError extends SpellError {}\n\nexport class SpellValidationError extends SpellError {\n readonly issues: Issue[];\n\n constructor(issues: Issue[], cause?: unknown) {\n super(formatIssues(issues), { cause });\n this.issues = issues;\n }\n\n /**\n * Returns the most-specific branch errors for `issue`, or the first union issue when omitted.\n * Surfaces the branch with the fewest issues at the deepest path — the one that \"came closest\" to matching.\n */\n bestMatch(issue?: Extract<Issue, { code: 'invalid_union' }>): Issue[] | null {\n const unionIssue =\n issue ??\n this.issues.find(\n (entry): entry is Extract<Issue, { code: 'invalid_union' }> => entry.code === ErrorCode.invalid_union,\n );\n\n if (!unionIssue) return null;\n\n const branches = unionIssue.params.errors;\n\n if (branches.length === 0) return null;\n\n const scored = branches.map((branchIssues) => {\n const maxDepth = branchIssues.reduce((d, i) => Math.max(d, i.path.length), 0);\n\n return { issues: branchIssues, score: maxDepth * 1000 - branchIssues.length };\n });\n\n scored.sort((a, b) => b.score - a.score);\n\n return scored[0]?.issues;\n }\n\n flatten(): { fieldErrors: FlatError[]; formErrors: string[] } {\n const fieldErrors: FlatError[] = [];\n const formErrors: string[] = [];\n const pathMap = new Map<string, number>();\n\n for (const issue of this.issues) {\n if (issue.path.length === 0) {\n formErrors.push(issue.message);\n } else {\n const key = JSON.stringify(issue.path);\n const existing = pathMap.get(key);\n\n if (existing !== undefined) {\n fieldErrors[existing]?.messages.push(issue.message);\n } else {\n pathMap.set(key, fieldErrors.length);\n fieldErrors.push({ messages: [issue.message], path: [...issue.path] });\n }\n }\n }\n\n return { fieldErrors, formErrors };\n }\n\n flattenFirst(): { fieldErrors: FlatErrorFirst[]; formErrors: string[] } {\n const { fieldErrors, formErrors } = this.flatten();\n\n return {\n fieldErrors: fieldErrors.map((fe) => ({ message: fe.messages[0]!, path: fe.path })),\n formErrors,\n };\n }\n\n /** Returns every message attached to exactly `path`, in issue order. */\n messagesAt(...path: (string | number)[]): string[] {\n return this.issues.filter((issue) => pathsEqual(issue.path, path)).map((issue) => issue.message);\n }\n}\n","const isDev = !(globalThis as { __SPELL_PROD__?: boolean }).__SPELL_PROD__;\n\n/** @internal */\nexport function warn(msg: string): void {\n if (isDev) console.warn(`[@vielzeug/spell] ${msg}`);\n}\n\n/** @internal — Run fn only in dev builds. Use when dev-only logic goes beyond a single warn() / error() call. */\nexport function devOnly(fn: () => void): void {\n if (isDev) fn();\n}\n","export const UNSAFE_OBJECT_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\nexport function isUnsafeObjectKey(key: string): boolean {\n return UNSAFE_OBJECT_KEYS.has(key);\n}\n\nexport function defineOwnProperty<T>(target: Record<string, T>, key: string, value: T): void {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true,\n });\n}\n\nexport function objectFromEntries<T>(entries: Iterable<readonly [string, T]>): Record<string, T> {\n const out: Record<string, T> = {};\n\n for (const [key, value] of entries) defineOwnProperty(out, key, value);\n\n return out;\n}\n\nexport function cloneRecord<T>(source: Record<string, T>): Record<string, T> {\n return objectFromEntries(Object.entries(source));\n}\n","import { warn } from './_dev';\nimport { cloneRecord, defineOwnProperty, isUnsafeObjectKey } from './safe-object';\nimport type { ParseContext } from './types';\n\nexport type Messages = {\n array: {\n length: (ctx: { exact: number; value: unknown[] }) => string;\n max: (ctx: { max: number; value: unknown[] }) => string;\n min: (ctx: { min: number; value: unknown[] }) => string;\n nonEmpty: () => string;\n type: () => string;\n unique: () => string;\n };\n bigint: {\n max: (ctx: { max: bigint; value: bigint }) => string;\n min: (ctx: { min: bigint; value: bigint }) => string;\n multipleOf: (ctx: { step: bigint; value: bigint }) => string;\n negative: () => string;\n nonNegative: () => string;\n nonPositive: () => string;\n positive: () => string;\n type: () => string;\n };\n boolean: {\n type: () => string;\n };\n check: {\n default: () => string;\n };\n date: {\n max: (ctx: { max: Date; value: Date }) => string;\n min: (ctx: { min: Date; value: Date }) => string;\n type: () => string;\n };\n enum: {\n invalid: (ctx: { values: readonly unknown[] }) => string;\n };\n instanceof: {\n type: (ctx: { className: string }) => string;\n };\n literal: {\n expected: (ctx: { expected: unknown }) => string;\n };\n map: {\n max: (ctx: { max: number; value: Map<unknown, unknown> }) => string;\n min: (ctx: { min: number; value: Map<unknown, unknown> }) => string;\n nonEmpty: () => string;\n size: (ctx: { exact: number; value: Map<unknown, unknown> }) => string;\n type: () => string;\n };\n never: {\n invalid: () => string;\n };\n number: {\n finite: () => string;\n int: () => string;\n max: (ctx: { max: number; value: number }) => string;\n min: (ctx: { min: number; value: number }) => string;\n multipleOf: (ctx: { step: number; value: number }) => string;\n negative: () => string;\n nonNegative: () => string;\n nonPositive: () => string;\n positive: () => string;\n safe: () => string;\n type: () => string;\n };\n object: {\n invalidKeys: (ctx: { keys: string[] }) => string;\n type: () => string;\n };\n set: {\n max: (ctx: { max: number; value: Set<unknown> }) => string;\n min: (ctx: { min: number; value: Set<unknown> }) => string;\n nonEmpty: () => string;\n size: (ctx: { exact: number; value: Set<unknown> }) => string;\n type: () => string;\n };\n string: {\n base64: () => string;\n base64url: () => string;\n cuid: () => string;\n cuid2: () => string;\n date: () => string;\n dateTime: () => string;\n duration: () => string;\n email: () => string;\n emoji: () => string;\n endsWith: (ctx: { suffix: string; value: string }) => string;\n hex: () => string;\n hexColor: () => string;\n includes: (ctx: { substr: string; value: string }) => string;\n ip: () => string;\n jwt: () => string;\n length: (ctx: { exact: number; value: string }) => string;\n max: (ctx: { max: number; value: string }) => string;\n min: (ctx: { min: number; value: string }) => string;\n nanoid: () => string;\n nonEmpty: () => string;\n numeric: () => string;\n regex: (ctx: { value: string }) => string;\n semver: () => string;\n slug: () => string;\n startsWith: (ctx: { prefix: string; value: string }) => string;\n time: () => string;\n type: () => string;\n ulid: () => string;\n url: () => string;\n uuid: () => string;\n };\n tuple: {\n length: (ctx: { exact: number }) => string;\n min: (ctx: { min: number }) => string;\n type: () => string;\n };\n union: {\n invalid: () => string;\n };\n variant: {\n invalidDiscriminator: (ctx: { discriminator: string; expected: string[] }) => string;\n type: () => string;\n };\n};\n\nexport type DeepPartial<T> = {\n [K in keyof T]?: T[K] extends Record<string, unknown> ? DeepPartial<T[K]> : T[K];\n};\n\nconst _builtinMessages: Messages = {\n array: {\n length: ({ exact }) => `Must have exactly ${exact} items`,\n max: ({ max }) => `Must have at most ${max} items`,\n min: ({ min }) => `Must have at least ${min} items`,\n nonEmpty: () => 'Cannot be empty',\n type: () => 'Expected array',\n unique: () => 'All items must be unique',\n },\n bigint: {\n max: ({ max }) => `Must be at most ${max}`,\n min: ({ min }) => `Must be at least ${min}`,\n multipleOf: ({ step }) => `Must be a multiple of ${step}`,\n negative: () => 'Must be negative',\n nonNegative: () => 'Must be non-negative',\n nonPositive: () => 'Must be non-positive',\n positive: () => 'Must be positive',\n type: () => 'Expected bigint',\n },\n boolean: {\n type: () => 'Expected boolean',\n },\n check: {\n default: () => 'Invalid value',\n },\n date: {\n max: ({ max }) => `Must be before ${max.toISOString()}`,\n min: ({ min }) => `Must be after ${min.toISOString()}`,\n type: () => 'Expected valid date',\n },\n enum: {\n invalid: ({ values }) => `Expected one of: ${values.map((v) => JSON.stringify(v)).join(', ')}`,\n },\n instanceof: {\n type: ({ className }) => `Expected instance of ${className}`,\n },\n literal: {\n expected: ({ expected }) => `Expected ${JSON.stringify(expected)}`,\n },\n map: {\n max: ({ max }) => `Must contain at most ${max} entries`,\n min: ({ min }) => `Must contain at least ${min} entries`,\n nonEmpty: () => 'Cannot be empty',\n size: ({ exact }) => `Must contain exactly ${exact} entries`,\n type: () => 'Expected map',\n },\n never: {\n invalid: () => 'Value is not allowed',\n },\n number: {\n finite: () => 'Must be finite',\n int: () => 'Must be an integer',\n max: ({ max }) => `Must be at most ${max}`,\n min: ({ min }) => `Must be at least ${min}`,\n multipleOf: ({ step }) => `Must be a multiple of ${step}`,\n negative: () => 'Must be negative',\n nonNegative: () => 'Must be non-negative',\n nonPositive: () => 'Must be non-positive',\n positive: () => 'Must be positive',\n safe: () => 'Must be a safe integer',\n type: () => 'Expected number',\n },\n object: {\n invalidKeys: ({ keys }) => `Unrecognized keys: ${keys.join(', ')}`,\n type: () => 'Expected object',\n },\n set: {\n max: ({ max }) => `Must contain at most ${max} items`,\n min: ({ min }) => `Must contain at least ${min} items`,\n nonEmpty: () => 'Cannot be empty',\n size: ({ exact }) => `Must contain exactly ${exact} items`,\n type: () => 'Expected set',\n },\n string: {\n base64: () => 'Invalid base64',\n base64url: () => 'Invalid base64url',\n cuid: () => 'Invalid CUID',\n cuid2: () => 'Invalid CUID2',\n date: () => 'Invalid date',\n dateTime: () => 'Invalid datetime',\n duration: () => 'Invalid ISO 8601 duration',\n email: () => 'Invalid email address',\n emoji: () => 'Invalid emoji sequence',\n endsWith: ({ suffix }) => `Must end with \"${suffix}\"`,\n hex: () => 'Invalid hex',\n hexColor: () => 'Invalid hex color',\n includes: ({ substr }) => `Must include \"${substr}\"`,\n ip: () => 'Invalid IP address',\n jwt: () => 'Invalid JWT',\n length: ({ exact }) => `Must be exactly ${exact} characters`,\n max: ({ max }) => `Must be at most ${max} characters`,\n min: ({ min }) => `Must be at least ${min} characters`,\n nanoid: () => 'Invalid NanoID',\n nonEmpty: () => 'Cannot be empty',\n numeric: () => 'Invalid numeric string',\n regex: () => 'Invalid format',\n semver: () => 'Invalid semver',\n slug: () => 'Invalid slug',\n startsWith: ({ prefix }) => `Must start with \"${prefix}\"`,\n time: () => 'Invalid time',\n type: () => 'Expected string',\n ulid: () => 'Invalid ULID',\n url: () => 'Invalid URL',\n uuid: () => 'Invalid UUID',\n },\n tuple: {\n length: ({ exact }) => `Expected tuple of length ${exact}`,\n min: ({ min }) => `Expected tuple with at least ${min} items`,\n type: () => 'Expected array',\n },\n union: {\n invalid: () => 'Does not match any of the expected types',\n },\n variant: {\n invalidDiscriminator: ({ discriminator, expected }) =>\n `Invalid discriminator value at \"${discriminator}\": expected ${expected.map((k) => JSON.stringify(k)).join(' | ')}`,\n type: () => 'Expected object',\n },\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction mergeMessages<T extends Record<string, unknown>>(base: T, patch: DeepPartial<T>): T {\n const out = cloneRecord(base) as Record<string, unknown>;\n\n for (const [key, value] of Object.entries(patch)) {\n if (value === undefined) continue;\n\n if (isUnsafeObjectKey(key)) {\n warn(`[spell] Ignoring unsafe message override key \"${key}\" to prevent prototype mutation.`);\n continue;\n }\n\n const baseValue = out[key];\n\n if (isRecord(baseValue) && isRecord(value)) {\n defineOwnProperty(out, key, mergeMessages(baseValue, value as DeepPartial<typeof baseValue>));\n } else {\n defineOwnProperty(out, key, value);\n }\n }\n\n return out as T;\n}\n\n/**\n * Creates an immutable parse context. Pass this context to parse methods when\n * validation messages vary by request, locale, or form. Spell never stores it globally.\n */\nexport function createParseContext(messages: DeepPartial<Messages> = {}): ParseContext {\n return { messages: mergeMessages(_builtinMessages, messages) };\n}\n\n/** @internal */\n","//#region src/guards/isPlainObject.ts\nfunction e(e) {\n\tif (typeof e != \"object\" || !e) return !1;\n\tlet t = Object.getPrototypeOf(e);\n\treturn t === Object.prototype || t === null;\n}\n//#endregion\nexport { e as isPlainObject };\n\n//# sourceMappingURL=isPlainObject.js.map","import { isPlainObject } from '@vielzeug/arsenal/guards';\n\nimport { SpellDefinitionError, SpellValidationError } from './errors';\nimport { createParseContext } from './messages';\nimport { defineOwnProperty } from './safe-object';\nimport {\n type AnySchema,\n type CheckContext,\n ErrorCode,\n type FlatError,\n type FlatErrorFirst,\n type Infer,\n type InferInput,\n type InferOutput,\n type InferSchemaMode,\n type Issue,\n type JsonSchema,\n type MergeSchemaModes,\n type MessageFn,\n type Messages,\n type ParseContext,\n type ParseResult,\n type SchemaDescriptor,\n type SchemaMode,\n type SchemaWalker,\n schemaInput,\n schemaMode,\n schemaOutput,\n type ValidateFn,\n type ValidateResult,\n} from './types';\n\nexport {\n fail,\n prependIssuePath,\n resolveMessage,\n SpellDefinitionError,\n SpellError,\n SpellValidationError,\n} from './errors';\nexport {\n type AnySchema,\n type CheckContext,\n ErrorCode,\n type FlatError,\n type FlatErrorFirst,\n type Infer,\n type InferInput,\n type InferOutput,\n type InferSchemaMode,\n type Issue,\n type JsonSchema,\n type MergeSchemaModes,\n type MessageFn,\n type Messages,\n type ParseContext,\n type ParseResult,\n type SchemaDescriptor,\n type SchemaMode,\n type SchemaWalker,\n schemaMode,\n type ValidateFn,\n type ValidateResult,\n};\n\nfunction deepFreeze<T>(value: T): T {\n if (value === null || typeof value !== 'object' || Object.isFrozen(value)) return value;\n\n for (const child of Object.values(value as Record<string, unknown>)) deepFreeze(child);\n\n return Object.freeze(value);\n}\n\nfunction materializeValue<T>(value: T): T {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => materializeValue(item)) as T;\n\n if (value instanceof Date) return new Date(value.getTime()) as T;\n\n if (value instanceof Map) {\n const out = new Map<unknown, unknown>();\n\n for (const [key, mapValue] of value.entries()) out.set(materializeValue(key), materializeValue(mapValue));\n\n return out as T;\n }\n\n if (value instanceof Set) return new Set([...value.values()].map((item) => materializeValue(item))) as T;\n\n if (isPlainObject(value)) {\n const out: Record<string, unknown> = {};\n\n for (const [key, entry] of Object.entries(value)) defineOwnProperty(out, key, materializeValue(entry));\n\n return out as T;\n }\n\n return value;\n}\n\n/* -------------------- Schema State -------------------- */\n\ntype Preprocessor = (value: unknown) => unknown;\ntype Postprocessor = (value: unknown) => unknown;\n\nexport interface SchemaState<Output = unknown> {\n catch?: () => Output;\n defaultValue?: () => Output;\n description?: string;\n hasAsyncChecks: boolean;\n hasRuntimeChecks: boolean;\n isNullable: boolean;\n isOptional: boolean;\n postprocessors: Postprocessor[];\n preprocessors: Preprocessor[];\n validators: ValidateFn[];\n}\n\nfunction defaultState<Output>(): SchemaState<Output> {\n return {\n hasAsyncChecks: false,\n hasRuntimeChecks: false,\n isNullable: false,\n isOptional: false,\n postprocessors: [],\n preprocessors: [],\n validators: [],\n };\n}\n\nfunction cloneState<Output>(state: SchemaState<Output>): SchemaState<Output> {\n return {\n catch: state.catch,\n defaultValue: state.defaultValue,\n description: state.description,\n hasAsyncChecks: state.hasAsyncChecks,\n hasRuntimeChecks: state.hasRuntimeChecks,\n isNullable: state.isNullable,\n isOptional: state.isOptional,\n postprocessors: [...state.postprocessors],\n preprocessors: [...state.preprocessors],\n validators: [...state.validators],\n };\n}\n\n/* -------------------- Internal parse-value return type -------------------- */\n\n/** @internal */\nexport type ParseValue = { data: unknown; issues: Issue[]; typeOk: boolean };\n\ntype MaybePromise<T> = T | Promise<T>;\n\n/* -------------------- ParseContext default -------------------- */\n\n/** @internal */\nexport function _makeCtx(messages?: Messages): ParseContext {\n return messages ? { messages } : createParseContext();\n}\n\n/* -------------------- ValidateResult normalizer -------------------- */\n\nfunction normalizeValidateResult(result: ValidateResult, ctxIssues: Issue[], ctx: ParseContext): Issue[] | null {\n const issues = [...ctxIssues];\n\n if (typeof result === 'string') {\n issues.push({ code: ErrorCode.custom, message: result, path: [] });\n } else if (result === false && issues.length === 0) {\n issues.push({ code: ErrorCode.custom, message: ctx.messages.check.default(), path: [] });\n }\n\n return issues.length ? issues : null;\n}\n\n/* -------------------- Base Schema -------------------- */\n\nexport class Schema<Output = unknown, Input = Output, Mode extends SchemaMode = 'sync'> {\n declare readonly [schemaInput]: Input;\n declare readonly [schemaMode]: Mode;\n declare readonly [schemaOutput]: Output;\n\n protected state: SchemaState<Output>;\n\n protected _annotations: Record<string, unknown> = {};\n\n private _typeValidator: ValidateFn | null = null;\n\n constructor(typeValidator?: ValidateFn) {\n this.state = defaultState<Output>();\n this._typeValidator = typeValidator ?? null;\n }\n\n /* -------------------- Parse -------------------- */\n\n parse(this: Schema<Output, Input, 'sync'>, value: unknown, ctx?: ParseContext): Output;\n parse(value: unknown, ctx?: ParseContext): Output {\n if (this.state.hasAsyncChecks) {\n throw new SpellValidationError([\n { code: ErrorCode.custom, message: 'parse() cannot evaluate async checks. Use parseAsync().', path: [] },\n ]);\n }\n\n const c = ctx ?? _makeCtx();\n\n return this._withCatch(() => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as Output;\n\n const coreOrPromise = this._parse(prepared.value, c);\n\n if (coreOrPromise instanceof Promise) {\n throw new SpellValidationError([\n {\n code: ErrorCode.custom,\n message: 'parse() received an async schema. Use parseAsync() instead.',\n path: [],\n },\n ]);\n }\n\n const core = coreOrPromise;\n const validationIssues = core.typeOk ? this._runValidatorsSync(core.data, c) : [];\n const allIssues = [...core.issues, ...validationIssues];\n\n if (allIssues.length) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(core.data) as Output;\n });\n }\n\n safeParse(this: Schema<Output, Input, 'sync'>, value: unknown, ctx?: ParseContext): ParseResult<Output>;\n safeParse(value: unknown, ctx?: ParseContext): ParseResult<Output> {\n try {\n return {\n data: (this.parse as unknown as (value: unknown, ctx?: ParseContext) => Output)(value, ctx),\n success: true,\n };\n } catch (error) {\n if (error instanceof SpellValidationError) return { error, success: false };\n\n throw error;\n }\n }\n\n async parseAsync(value: unknown, ctx?: ParseContext): Promise<Output> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as Output;\n\n const core = await this._parse(prepared.value, c);\n const validationIssues = core.typeOk ? await this._runValidatorsAsync(core.data, c) : [];\n const allIssues = [...core.issues, ...validationIssues];\n\n if (allIssues.length) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(core.data) as Output;\n });\n }\n\n async safeParseAsync(value: unknown, ctx?: ParseContext): Promise<ParseResult<Output>> {\n try {\n return { data: await this.parseAsync(value, ctx), success: true };\n } catch (error) {\n if (error instanceof SpellValidationError) return { error, success: false };\n\n throw error;\n }\n }\n\n /**\n * Internal full parse without throwing. Returns { data, issues }.\n * Used by composite schemas (array, object, union, etc.) to avoid\n * the try/catch + object allocation overhead of safeParse().\n * @internal\n */\n _parseFullSync(value: unknown, ctx?: ParseContext): { data: unknown; issues: Issue[] } {\n if (this.state.hasAsyncChecks) {\n throw new SpellValidationError([\n { code: ErrorCode.custom, message: 'Sync parsing cannot evaluate async checks. Use parseAsync().', path: [] },\n ]);\n }\n\n const c = ctx ?? _makeCtx();\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return { data: prepared.value, issues: [] };\n\n const coreOrPromise = this._parse(prepared.value, c);\n\n if (coreOrPromise instanceof Promise) {\n throw new SpellValidationError([\n {\n code: ErrorCode.custom,\n message: 'Sync parse path received an async schema. Use parseAsync() instead.',\n path: [],\n },\n ]);\n }\n\n const core = coreOrPromise;\n const validationIssues = core.typeOk ? this._runValidatorsSync(core.data, c) : [];\n const allIssues = [...core.issues, ...validationIssues];\n\n if (allIssues.length > 0) {\n if (this.state.catch) return { data: this.state.catch(), issues: [] };\n\n return { data: core.data, issues: allIssues };\n }\n\n return { data: this._runPostprocessors(core.data), issues: [] };\n }\n\n /**\n * Async version of _parseFullSync.\n * @internal\n */\n async _parseFullAsync(value: unknown, ctx?: ParseContext): Promise<{ data: unknown; issues: Issue[] }> {\n const c = ctx ?? _makeCtx();\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return { data: prepared.value, issues: [] };\n\n const core = await this._parse(prepared.value, c);\n const validationIssues = core.typeOk ? await this._runValidatorsAsync(core.data, c) : [];\n const allIssues = [...core.issues, ...validationIssues];\n\n if (allIssues.length > 0) {\n if (this.state.catch) return { data: this.state.catch(), issues: [] };\n\n return { data: core.data, issues: allIssues };\n }\n\n return { data: this._runPostprocessors(core.data), issues: [] };\n }\n\n /* -------------------- Validators -------------------- */\n\n /**\n * Add a synchronous domain rule. For asynchronous work, use `checkAsync()`;\n * making execution mode explicit prevents unchecked Promise-returning callbacks.\n */\n check<F extends (value: Output, ctx: CheckContext) => ValidateResult | Promise<ValidateResult>>(\n fn: ReturnType<F> extends PromiseLike<unknown> ? never : F,\n ): this {\n return this._addCheck(fn as (value: Output, ctx: CheckContext) => ValidateResult, false);\n }\n\n checkAsync(\n this: Schema<Output, Input, 'sync'>,\n fn: (value: Output, ctx: CheckContext) => Promise<ValidateResult>,\n ): Schema<Output, Input, 'async'> {\n return this._addCheck(fn, true) as unknown as Schema<Output, Input, 'async'>;\n }\n\n protected _addCheck(\n fn:\n | ((value: Output, ctx: CheckContext) => ValidateResult)\n | ((value: Output, ctx: CheckContext) => Promise<ValidateResult>),\n async: boolean,\n ): this {\n const validator: ValidateFn = (value, ctx) => {\n const ctxIssues: Issue[] = [];\n const checkCtx: CheckContext = {\n addIssue: (issue) => ctxIssues.push({ ...issue, path: issue.path ?? [] } as Issue),\n };\n const result = fn(value as Output, checkCtx);\n\n if (result instanceof Promise) {\n return result.then((r) => normalizeValidateResult(r, ctxIssues, ctx!));\n }\n\n return normalizeValidateResult(result, ctxIssues, ctx!);\n };\n\n const next = this._addConstraint(validator);\n\n next.state.hasRuntimeChecks = true;\n\n if (async) next.state.hasAsyncChecks = true;\n\n return next;\n }\n\n /* -------------------- Nullability / Optionality -------------------- */\n\n optional(): Schema<Output | undefined, Input | undefined, Mode> {\n const cloned = this._clone() as unknown as Schema<Output | undefined, Input | undefined, Mode>;\n\n cloned.state.isOptional = true;\n\n return cloned;\n }\n\n nullable(): Schema<Output | null, Input | null, Mode> {\n const cloned = this._clone() as unknown as Schema<Output | null, Input | null, Mode>;\n\n cloned.state.isNullable = true;\n\n return cloned;\n }\n\n nullish(): Schema<Output | null | undefined, Input | null | undefined, Mode> {\n const cloned = this._clone() as unknown as Schema<Output | null | undefined, Input | null | undefined, Mode>;\n\n cloned.state.isOptional = true;\n cloned.state.isNullable = true;\n\n return cloned;\n }\n\n required(): Schema<Exclude<Output, undefined>, Exclude<Input, undefined>, Mode> {\n const cloned = this._clone() as unknown as Schema<Exclude<Output, undefined>, Exclude<Input, undefined>, Mode>;\n\n cloned.state.isOptional = false;\n\n return cloned;\n }\n\n /* -------------------- Transforms -------------------- */\n\n default(defaultValue: Output | (() => Output)): this {\n const cloned = this._clone();\n\n cloned.state.defaultValue =\n typeof defaultValue === 'function' ? (defaultValue as () => Output) : () => materializeValue(defaultValue);\n\n return cloned;\n }\n\n catch(fallback: Output | (() => Output)): this {\n const cloned = this._clone();\n\n cloned.state.catch = typeof fallback === 'function' ? (fallback as () => Output) : () => materializeValue(fallback);\n\n return cloned;\n }\n\n transform<NewOutput>(fn: (value: Output) => NewOutput): Schema<NewOutput, Input, Mode> {\n const next = this._clone() as unknown as Schema<NewOutput, Input, Mode>;\n\n next.state.postprocessors.push(fn as (v: unknown) => unknown);\n\n return next;\n }\n\n preprocess(fn: (value: unknown) => unknown): this {\n const cloned = this._clone();\n\n cloned.state.preprocessors.push(fn);\n\n return cloned;\n }\n\n pipe<B extends AnySchema>(next: B): PipeSchema<B, this, MergeSchemaModes<Mode | InferSchemaMode<B>>> {\n return new PipeSchema(this, next);\n }\n\n /* -------------------- Introspection -------------------- */\n\n label(description: string): this {\n const cloned = this._clone();\n\n cloned.state.description = description;\n\n return cloned;\n }\n\n definition(): SchemaDescriptor {\n if (\n this.state.catch ||\n this.state.defaultValue ||\n this.state.postprocessors.length > 0 ||\n this.state.preprocessors.length > 0 ||\n this.state.hasRuntimeChecks\n ) {\n throw new SpellDefinitionError(\n 'Schemas with checks, transforms, defaults, catches, or preprocessors have no declarative definition.',\n );\n }\n\n return deepFreeze(this._toDescriptorImpl()) as SchemaDescriptor;\n }\n\n get description(): string | undefined {\n return this.state.description;\n }\n\n get isOptional(): boolean {\n return this.state.isOptional;\n }\n\n get isNullable(): boolean {\n return this.state.isNullable;\n }\n\n is(value: unknown): value is Output {\n return (this.safeParse as unknown as (value: unknown) => ParseResult<Output>)(value).success;\n }\n\n assert(value: unknown, label?: string): asserts value is Output {\n const result = this._parseFullSync(value);\n\n if (result.issues.length === 0) return;\n\n const issues = label\n ? result.issues.map((issue) => ({\n ...issue,\n message: issue.path.length === 0 ? `${label}: ${issue.message}` : issue.message,\n }))\n : result.issues;\n\n throw new SpellValidationError(issues);\n }\n\n walk<R>(visitor: SchemaWalker<R>): R | null {\n return this._walk(visitor);\n }\n\n get kind(): string {\n return this._kind;\n }\n\n protected get _kind(): string {\n return 'any';\n }\n\n /* -------------------- Protected helpers -------------------- */\n\n protected _describeBase(): { description?: string; isNullable?: true; isOptional?: true } {\n return {\n ...(this.state.description !== undefined ? { description: this.state.description } : {}),\n ...(this.state.isNullable ? { isNullable: true as const } : {}),\n ...(this.state.isOptional ? { isOptional: true as const } : {}),\n };\n }\n\n protected _addConstraint(\n validator: ValidateFn,\n mergeAnnotations?: (current: Record<string, unknown>) => Record<string, unknown>,\n ): this {\n const next = this._clone();\n\n next.state.validators.push(validator);\n\n if (mergeAnnotations) {\n next._annotations = mergeAnnotations({ ...next._annotations });\n }\n\n return next;\n }\n\n protected _construct(state: SchemaState<any>): this {\n const next = Object.assign(Object.create(Object.getPrototypeOf(this)), this, { state }) as this;\n\n next._annotations = { ...this._annotations };\n\n return next;\n }\n\n protected _clone(): this {\n return this._construct(cloneState(this.state));\n }\n\n protected _copyStateTo<T extends Schema<any, any>>(target: T): T {\n target.state = cloneState(this.state);\n\n return target;\n }\n\n protected _walk<R>(visitor: SchemaWalker<R>): R | null {\n if (visitor.unknown) return visitor.unknown(this);\n\n return null;\n }\n\n protected _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'any' };\n }\n\n /* -------------------- Private -------------------- */\n\n private _withCatch<T>(fn: () => T): T {\n if (!this.state.catch) return fn();\n\n try {\n return fn();\n } catch (error) {\n if (error instanceof SpellValidationError) return this.state.catch() as unknown as T;\n\n throw error;\n }\n }\n\n protected async _withCatchAsync<T>(fn: () => Promise<T>): Promise<T> {\n if (!this.state.catch) return fn();\n\n try {\n return await fn();\n } catch (error) {\n if (error instanceof SpellValidationError) return this.state.catch() as unknown as T;\n\n throw error;\n }\n }\n\n protected _prepareInput(value: unknown): { skip: true; value: null | undefined } | { skip: false; value: unknown } {\n const processed = this._runPreprocessors(value);\n const withDefault = processed === undefined && this.state.defaultValue ? this.state.defaultValue() : processed;\n\n if ((this.state.isOptional && withDefault === undefined) || (this.state.isNullable && withDefault === null)) {\n return { skip: true, value: withDefault };\n }\n\n return { skip: false, value: withDefault };\n }\n\n protected _runPreprocessors(value: unknown): unknown {\n let current = value;\n\n for (const preprocess of this.state.preprocessors) current = preprocess(current);\n\n return current;\n }\n\n protected _runPostprocessors(value: unknown): unknown {\n let current = value;\n\n for (const postprocess of this.state.postprocessors) current = postprocess(current);\n\n return current;\n }\n\n private _runValidatorsSync(value: unknown, ctx: ParseContext): Issue[] {\n if (this._typeValidator) {\n const typeResult = this._typeValidator(value, ctx);\n\n if (typeResult instanceof Promise) {\n throw new SpellValidationError([\n {\n code: ErrorCode.custom,\n message: 'Type validator returned a Promise. Use parseAsync() for async validation.',\n path: [],\n },\n ]);\n }\n\n if (typeResult && typeResult.length > 0) return typeResult;\n }\n\n const issues: Issue[] = [];\n\n for (const validate of this.state.validators) {\n const result = validate(value, ctx);\n\n if (result instanceof Promise) {\n throw new SpellValidationError([\n {\n code: ErrorCode.custom,\n message: 'Sync parsing received an async check. Use checkAsync() and parseAsync().',\n path: [],\n },\n ]);\n }\n\n if (result) issues.push(...result);\n }\n\n return issues;\n }\n\n protected async _runValidatorsAsync(value: unknown, ctx: ParseContext): Promise<Issue[]> {\n if (this._typeValidator) {\n const typeResult = await this._typeValidator(value, ctx);\n\n if (typeResult && typeResult.length > 0) return typeResult;\n }\n\n const issues: Issue[] = [];\n\n for (const validate of this.state.validators) {\n const result = await validate(value, ctx);\n\n if (result) issues.push(...result);\n }\n\n return issues;\n }\n\n protected _parse(_value: unknown, _ctx: ParseContext): MaybePromise<ParseValue> {\n return { data: _value, issues: [], typeOk: true };\n }\n}\n\n/* -------------------- PipeSchema -------------------- */\n\nexport class PipeSchema<\n To extends AnySchema,\n From extends AnySchema,\n Mode extends SchemaMode = MergeSchemaModes<InferSchemaMode<To | From>>,\n> extends Schema<InferOutput<To>, InferInput<From>, Mode> {\n readonly from: From;\n readonly to: To;\n\n protected override get _kind(): string {\n return 'pipe';\n }\n\n override checkAsync(\n this: PipeSchema<To, From, 'sync'>,\n fn: (value: InferOutput<To>, ctx: CheckContext) => Promise<ValidateResult>,\n ): PipeSchema<To, From, 'async'> {\n return this._addCheck(fn, true) as unknown as PipeSchema<To, From, 'async'>;\n }\n\n constructor(from: From, to: To) {\n super();\n this.from = from;\n this.to = to;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): MaybePromise<ParseValue> {\n const r1OrPromise = this.from._parseFullSync(value, ctx);\n\n if (r1OrPromise instanceof Promise) {\n return (r1OrPromise as Promise<{ data: unknown; issues: Issue[] }>).then((r1) => {\n if (r1.issues.length > 0) return { data: value, issues: r1.issues, typeOk: false };\n\n return this.to\n ._parseFullAsync(r1.data, ctx)\n .then((r2) =>\n r2.issues.length > 0\n ? { data: r1.data, issues: r2.issues, typeOk: false }\n : { data: r2.data, issues: [], typeOk: true },\n );\n });\n }\n\n if (r1OrPromise.issues.length > 0) return { data: value, issues: r1OrPromise.issues, typeOk: false };\n\n const r2OrPromise = this.to._parseFullSync(r1OrPromise.data, ctx);\n\n if (r2OrPromise instanceof Promise) {\n return r2OrPromise.then((r2) =>\n r2.issues.length > 0\n ? { data: r1OrPromise.data, issues: r2.issues, typeOk: false }\n : { data: r2.data, issues: [], typeOk: true },\n );\n }\n\n return r2OrPromise.issues.length > 0\n ? { data: r1OrPromise.data, issues: r2OrPromise.issues, typeOk: false }\n : { data: r2OrPromise.data, issues: [], typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<InferOutput<To>> {\n const c = ctx ?? _makeCtx();\n const first = await this.from._parseFullAsync(value, c);\n\n if (first.issues.length > 0) throw new SpellValidationError(first.issues);\n\n const second = await this.to._parseFullAsync(first.data, c);\n\n if (second.issues.length > 0) throw new SpellValidationError(second.issues);\n\n const issues = await this._runValidatorsAsync(second.data, c);\n\n if (issues.length > 0) throw new SpellValidationError(issues);\n\n return this._runPostprocessors(second.data) as InferOutput<To>;\n }\n\n protected override _walk<R>(visitor: SchemaWalker<R>): R | null {\n const fromR = this.from.walk(visitor);\n const toR = this.to.walk(visitor);\n\n if (visitor.pipe) return visitor.pipe(this, fromR, toR);\n\n return super._walk(visitor);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n from: this.from.definition(),\n kind: 'pipe',\n to: this.to.definition(),\n };\n }\n}\n","import type { AnySchema, InferOutput, Issue, MessageFn, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, ErrorCode, fail, prependIssuePath, resolveMessage, Schema, SpellValidationError } from '../core';\n\n/* -------------------- Typed annotations -------------------- */\n\ninterface ArrayAnnotations extends Record<string, unknown> {\n maxItems?: number;\n minItems?: number;\n}\n\nexport class ArraySchema<\n T extends AnySchema,\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<import('../core').InferSchemaMode<T>>,\n> extends Schema<InferOutput<T>[], unknown, Mode> {\n readonly itemSchema: T;\n\n protected override get _kind(): string {\n return 'array';\n }\n\n override checkAsync(\n this: ArraySchema<T, 'sync'>,\n fn: (value: InferOutput<T>[], ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): ArraySchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as ArraySchema<T, 'async'>;\n }\n\n constructor(itemSchema: T) {\n super();\n this.itemSchema = itemSchema;\n }\n\n private _parseItemsSync(items: unknown[], ctx: ParseContext): { data: InferOutput<T>[]; issues: Issue[] } {\n const issues: Issue[] = [];\n const parsed: InferOutput<T>[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const result = this.itemSchema._parseFullSync(items[i], ctx);\n\n if (result.issues.length === 0) {\n parsed.push(result.data as InferOutput<T>);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n parsed.push(items[i] as InferOutput<T>);\n }\n }\n\n return { data: parsed, issues };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!Array.isArray(value)) {\n return { data: value, issues: fail(ErrorCode.invalid_type, ctx.messages.array.type()), typeOk: false };\n }\n\n const { data: items, issues } = this._parseItemsSync(value, ctx);\n\n return { data: items, issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<InferOutput<T>[]> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync<InferOutput<T>[]>(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as unknown as InferOutput<T>[];\n\n const raw = prepared.value;\n\n if (!Array.isArray(raw)) {\n throw new SpellValidationError(fail(ErrorCode.invalid_type, c.messages.array.type()));\n }\n\n const settled = await Promise.all(raw.map((item) => this.itemSchema._parseFullAsync(item, c)));\n\n const issues: Issue[] = [];\n const parsed: InferOutput<T>[] = [];\n\n for (let i = 0; i < settled.length; i++) {\n const result = settled[i];\n\n if (result.issues.length === 0) {\n parsed.push(result.data as InferOutput<T>);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n parsed.push(raw[i] as InferOutput<T>);\n }\n }\n\n const validationIssues = await this._runValidatorsAsync(parsed, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(parsed) as InferOutput<T>[];\n });\n }\n\n min(length: number, message?: MessageFn<{ min: number; value: unknown[] }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as unknown[]).length >= length) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.array.min, { min: length, value: value as unknown[] }),\n {\n min: length,\n },\n );\n },\n (current) => {\n const ann = current as ArrayAnnotations;\n\n return {\n ...ann,\n minItems: ann.minItems === undefined ? length : Math.max(ann.minItems, length),\n };\n },\n );\n }\n\n max(length: number, message?: MessageFn<{ max: number; value: unknown[] }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as unknown[]).length <= length) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.array.max, { max: length, value: value as unknown[] }),\n {\n max: length,\n },\n );\n },\n (current) => {\n const ann = current as ArrayAnnotations;\n\n return {\n ...ann,\n maxItems: ann.maxItems === undefined ? length : Math.min(ann.maxItems, length),\n };\n },\n );\n }\n\n length(exact: number, message?: MessageFn<{ exact: number; value: unknown[] }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as unknown[]).length === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.array.length, { exact, value: value as unknown[] }),\n { exact },\n );\n },\n (ann) => ({ ...ann, maxItems: exact, minItems: exact }),\n );\n }\n\n nonEmpty(message?: MessageFn<{ min: number; value: unknown[] }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as unknown[];\n\n return typed.length > 0\n ? null\n : fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.array.nonEmpty, { min: 1, value: typed }), {\n min: 1,\n });\n });\n }\n\n /**\n * Validates that all array elements are unique.\n *\n * **Default behaviour:** Uniqueness is checked using JavaScript `Set` semantics, which means\n * **referential equality** for objects. Two structurally identical objects such as\n * `{ id: 1 }` and `{ id: 1 }` are considered different values and will not be\n * flagged as duplicates.\n *\n * **Custom equality:** Pass an `equalsFn` to use structural or domain-specific comparison\n * logic (e.g. compare by a specific field, or use deep equality).\n *\n * @example\n * s.array(s.object({ id: s.number() })).unique((a, b) => a.id === b.id)\n */\n unique(\n equalsFnOrMessage?: ((a: InferOutput<T>, b: InferOutput<T>) => boolean) | MessageFn<{ value: unknown[] }>,\n message?: MessageFn<{ value: unknown[] }>,\n ): this {\n const isCustomEqualsFn = typeof equalsFnOrMessage === 'function' && equalsFnOrMessage.length === 2;\n const equalsFn = isCustomEqualsFn ? (equalsFnOrMessage as (a: InferOutput<T>, b: InferOutput<T>) => boolean) : null;\n const resolvedMessage = isCustomEqualsFn\n ? message\n : typeof equalsFnOrMessage === 'function'\n ? (equalsFnOrMessage as MessageFn<{ value: unknown[] }>)\n : undefined;\n\n return this._addConstraint((value, ctx) => {\n const typed = value as InferOutput<T>[];\n let isUnique: boolean;\n\n if (equalsFn) {\n isUnique = typed.every((a, i) => typed.slice(0, i).every((b) => !equalsFn(a, b)));\n } else {\n isUnique = new Set(typed).size === typed.length;\n }\n\n if (isUnique) return null;\n\n return fail(\n ErrorCode.invalid_unique,\n resolveMessage(resolvedMessage ?? ctx!.messages.array.unique, { value: typed as unknown[] }),\n {\n unique: true,\n },\n );\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const ann = this._annotations as ArrayAnnotations;\n\n return {\n ...this._describeBase(),\n ...(ann.maxItems !== undefined ? { maxItems: ann.maxItems } : {}),\n ...(ann.minItems !== undefined ? { minItems: ann.minItems } : {}),\n items: this.itemSchema.definition(),\n kind: 'array',\n };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const item = this.itemSchema.walk(visitor);\n\n if (visitor.array) return visitor.array(this, item);\n\n return super._walk(visitor);\n }\n}\n","import { warn } from '../_dev';\nimport type { MessageFn, SchemaDescriptor } from '../core';\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\nexport class BigIntSchema<Input = bigint, Mode extends import('../core').SchemaMode = 'sync'> extends Schema<\n bigint,\n Input,\n Mode\n> {\n protected override get _kind(): string {\n return 'bigint';\n }\n\n override checkAsync(\n this: BigIntSchema<Input, 'sync'>,\n fn: (value: bigint, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): BigIntSchema<Input, 'async'> {\n return this._addCheck(fn, true) as unknown as BigIntSchema<Input, 'async'>;\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'bigint' ? null : fail(ErrorCode.invalid_type, ctx!.messages.bigint.type()),\n );\n }\n\n min(minimum: bigint, message?: MessageFn<{ min: bigint; value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed >= minimum) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.bigint.min, { min: minimum, value: typed }),\n { min: minimum },\n );\n });\n }\n\n max(maximum: bigint, message?: MessageFn<{ max: bigint; value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed <= maximum) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.bigint.max, { max: maximum, value: typed }),\n { max: maximum },\n );\n });\n }\n\n positive(message?: MessageFn<{ value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed > 0n) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.bigint.positive, { value: typed }), {\n exclusive: true,\n min: 0n,\n });\n });\n }\n\n negative(message?: MessageFn<{ value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed < 0n) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.bigint.negative, { value: typed }), {\n exclusive: true,\n max: 0n,\n });\n });\n }\n\n nonNegative(message?: MessageFn<{ value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed >= 0n) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.bigint.nonNegative, { value: typed }), {\n min: 0n,\n });\n });\n }\n\n nonPositive(message?: MessageFn<{ value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed <= 0n) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.bigint.nonPositive, { value: typed }), {\n max: 0n,\n });\n });\n }\n\n multipleOf(step: bigint, message?: MessageFn<{ step: bigint; value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed % step === 0n) return null;\n\n return fail(\n ErrorCode.invalid_multiple_of,\n resolveMessage(message ?? ctx!.messages.bigint.multipleOf, { step, value: typed }),\n { step },\n );\n });\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.bigint) return visitor.bigint(this);\n\n return super._walk(visitor);\n }\n\n /**\n * Returns a new schema that coerces the input to a bigint before validation.\n * Handles number, string (up to 1000 digits), and bigint inputs.\n *\n * Equivalent to `s.coerce.bigint()`.\n */\n coerce(): BigIntSchema<unknown> {\n return BigIntSchema.coerce();\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n if (this.state.validators.length > 0) {\n warn(\n 'definition(): this bigint schema has constraints (e.g. min(), max(), positive()). ' +\n 'BigInt constraints are not serializable and will not appear in the definition.',\n );\n }\n\n return { ...this._describeBase(), kind: 'bigint' };\n }\n\n static coerce(): BigIntSchema<unknown> {\n return new BigIntSchema().preprocess((value: unknown) => {\n if (typeof value === 'bigint') return value;\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value) || !Number.isInteger(value)) return value;\n\n try {\n return BigInt(value);\n } catch {\n return value;\n }\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n // Guard against DoS: BigInt() conversion is O(n²) in digit count.\n if (trimmed.length === 0 || trimmed.length > 1000) return value;\n\n try {\n return BigInt(trimmed);\n } catch {\n return value;\n }\n }\n\n return value;\n });\n }\n}\n","import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class BooleanSchema<Input = boolean, Mode extends import('../core').SchemaMode = 'sync'> extends Schema<\n boolean,\n Input,\n Mode\n> {\n protected override get _kind(): string {\n return 'boolean';\n }\n\n override checkAsync(\n this: BooleanSchema<Input, 'sync'>,\n fn: (value: boolean, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): BooleanSchema<Input, 'async'> {\n return this._addCheck(fn, true) as unknown as BooleanSchema<Input, 'async'>;\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'boolean'\n ? null\n : [{ code: ErrorCode.invalid_type, message: ctx!.messages.boolean.type(), path: [] }],\n );\n }\n\n /**\n * Returns a new schema that coerces the input to a boolean before validation.\n * Accepts `'true'`, `'1'`, `1` as `true`; `'false'`, `'0'`, `0` as `false`.\n *\n * Equivalent to `s.coerce.boolean()`.\n */\n coerce(): BooleanSchema<unknown> {\n return BooleanSchema.coerce();\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'boolean' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.boolean) return visitor.boolean(this);\n\n return super._walk(visitor);\n }\n\n static coerce(): BooleanSchema<unknown> {\n return new BooleanSchema().preprocess((v: unknown) => {\n if (typeof v === 'boolean') return v;\n\n if (v === 'true' || v === '1' || v === 1) return true;\n\n if (v === 'false' || v === '0' || v === 0) return false;\n\n return v;\n });\n }\n}\n","import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\nexport class DateSchema<Input = Date, Mode extends import('../core').SchemaMode = 'sync'> extends Schema<\n Date,\n Input,\n Mode\n> {\n protected override get _kind(): string {\n return 'date';\n }\n\n override checkAsync(\n this: DateSchema<Input, 'sync'>,\n fn: (value: Date, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): DateSchema<Input, 'async'> {\n return this._addCheck(fn, true) as unknown as DateSchema<Input, 'async'>;\n }\n\n constructor() {\n super((value, ctx) =>\n value instanceof Date && !Number.isNaN(value.getTime())\n ? null\n : fail(ErrorCode.invalid_date, ctx!.messages.date.type()),\n );\n }\n\n min(date: Date, message?: MessageFn<{ min: Date; value: Date }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Date;\n\n return typed >= date\n ? null\n : fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.date.min, { min: date, value: typed }), {\n min: date,\n });\n });\n }\n\n max(date: Date, message?: MessageFn<{ max: Date; value: Date }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Date;\n\n return typed <= date\n ? null\n : fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.date.max, { max: date, value: typed }), {\n max: date,\n });\n });\n }\n\n /**\n * Returns a new schema that coerces string or number input to a `Date` before validation.\n *\n * Equivalent to `s.coerce.date()`.\n */\n coerce(): DateSchema<unknown> {\n return DateSchema.coerce();\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'date' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.date) return visitor.date(this);\n\n return super._walk(visitor);\n }\n\n static coerce(): DateSchema<unknown> {\n return new DateSchema().preprocess((v: unknown) => {\n if (v instanceof Date) return v;\n\n if (typeof v === 'string' || typeof v === 'number') return new Date(v);\n\n return v;\n });\n }\n}\n","import type { SchemaDescriptor, ValidateFn } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport type EnumValues = readonly [string | number, ...(string | number)[]];\ntype EnumType<T extends EnumValues> = T[number];\n\nfunction buildEnumValidator(values: readonly unknown[]): ValidateFn {\n const set = new Set<unknown>(values);\n\n return (value, ctx) =>\n set.has(value)\n ? null\n : [\n {\n code: ErrorCode.invalid_enum,\n message: ctx!.messages.enum.invalid({ values }),\n params: { values },\n path: [],\n },\n ];\n}\n\nexport class EnumSchema<T extends EnumValues, Mode extends import('../core').SchemaMode = 'sync'> extends Schema<\n EnumType<T>,\n EnumType<T>,\n Mode\n> {\n readonly values: T;\n\n protected override get _kind(): string {\n return 'enum';\n }\n\n override checkAsync(\n this: EnumSchema<T, 'sync'>,\n fn: (value: EnumType<T>, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): EnumSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as EnumSchema<T, 'async'>;\n }\n\n constructor(values: T) {\n super(buildEnumValidator(values));\n this.values = values;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'enum', values: this.values };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.enum) return visitor.enum(this);\n\n return super._walk(visitor);\n }\n}\n","import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class InstanceOfSchema<T, Mode extends import('../core').SchemaMode = 'sync'> extends Schema<T, T, Mode> {\n readonly cls: new (\n ...args: any[]\n ) => T;\n\n protected override get _kind(): string {\n return 'instanceof';\n }\n\n override checkAsync(\n this: InstanceOfSchema<T, 'sync'>,\n fn: (value: T, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): InstanceOfSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as InstanceOfSchema<T, 'async'>;\n }\n\n constructor(cls: new (...args: any[]) => T) {\n super((value, ctx) =>\n value instanceof cls\n ? null\n : [\n {\n code: ErrorCode.invalid_type,\n message: ctx!.messages.instanceof.type({ className: cls.name }),\n path: [],\n },\n ],\n );\n this.cls = cls;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), className: this.cls.name, kind: 'instanceof' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.instanceof) return visitor.instanceof(this);\n\n return super._walk(visitor);\n }\n}\n","import { isPlainObject } from '@vielzeug/arsenal/guards';\n\nimport type { AnySchema, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, Schema, SpellValidationError } from '../core';\nimport { cloneRecord, defineOwnProperty } from '../safe-object';\n\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\n\n/**\n * Recursively merges `source` into `target`.\n * Plain objects are merged key-by-key; all other values take the `source` value.\n */\nfunction deepMerge(target: unknown, source: unknown): unknown {\n if (isPlainObject(target) && isPlainObject(source)) {\n const result = cloneRecord(target);\n\n for (const [key, val] of Object.entries(source)) {\n defineOwnProperty(result, key, deepMerge(target[key], val));\n }\n\n return result;\n }\n\n return source;\n}\n\n/** All schemas must pass — intersection semantics. */\nexport class IntersectSchema<\n T extends readonly AnySchema[],\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<\n import('../core').InferSchemaMode<T[number]>\n >,\n> extends Schema<UnionToIntersection<InferOutput<T[number]>>, unknown, Mode> {\n readonly schemas: T;\n\n protected override get _kind(): string {\n return 'intersect';\n }\n\n override checkAsync(\n this: IntersectSchema<T, 'sync'>,\n fn: (\n value: UnionToIntersection<InferOutput<T[number]>>,\n ctx: import('../core').CheckContext,\n ) => Promise<import('../core').ValidateResult>,\n ): IntersectSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as IntersectSchema<T, 'async'>;\n }\n\n constructor(schemas: T) {\n super();\n this.schemas = Object.freeze([...schemas]) as T;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = this.schemas[i]._parseFullSync(value, ctx);\n\n if (result.issues.length > 0) {\n state.issues.push(...result.issues);\n } else if (!state.hasOutput) {\n state.hasOutput = true;\n state.output = result.data;\n } else {\n state.output = deepMerge(state.output, result.data);\n }\n }\n\n return { data: state.output, issues: state.issues, typeOk: state.issues.length === 0 };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<UnionToIntersection<InferOutput<T[number]>>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as UnionToIntersection<InferOutput<T[number]>>;\n\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: prepared.value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = await this.schemas[i]._parseFullAsync(prepared.value, c);\n\n if (result.issues.length > 0) {\n state.issues.push(...result.issues);\n } else if (!state.hasOutput) {\n state.hasOutput = true;\n state.output = result.data;\n } else {\n state.output = deepMerge(state.output, result.data);\n }\n }\n\n if (state.issues.length > 0) throw new SpellValidationError(state.issues);\n\n const validationIssues = await this._runValidatorsAsync(state.output, c);\n\n if (validationIssues.length) throw new SpellValidationError(validationIssues);\n\n return this._runPostprocessors(state.output) as UnionToIntersection<InferOutput<T[number]>>;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((s) => s.definition()), kind: 'intersect' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const branches = this.schemas.map((s) => s.walk(visitor));\n\n if (visitor.intersect) return visitor.intersect(this, branches);\n\n return super._walk(visitor);\n }\n}\n","import type { ParseContext, ParseValue, SchemaDescriptor, SchemaState } from '../core';\n\nimport { _makeCtx, Schema, SpellValidationError } from '../core';\n\nexport class LazySchema<T, Input = T, Mode extends import('../core').SchemaMode = 'sync'> extends Schema<\n T,\n Input,\n Mode\n> {\n private readonly _getter: () => Schema<T, Input, Mode>;\n private _resolved?: Schema<T, Input, Mode>;\n\n protected override get _kind(): string {\n return 'lazy';\n }\n\n override checkAsync(\n this: LazySchema<T, Input, 'sync'>,\n fn: (value: T, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): LazySchema<T, Input, 'async'> {\n return this._addCheck(fn, true) as unknown as LazySchema<T, Input, 'async'>;\n }\n\n constructor(getter: () => Schema<T, Input, Mode>) {\n super();\n this._getter = getter;\n }\n\n private _resolve(): Schema<T, Input, Mode> {\n const resolved = (this._resolved ??= this._getter());\n\n return resolved;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const result = this._resolve()._parseFullSync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n return { data: value, issues: result.issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<T> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as T;\n\n const result = await this._resolve()._parseFullAsync(prepared.value, c);\n\n if (result.issues.length > 0) throw new SpellValidationError(result.issues);\n\n const validationIssues = await this._runValidatorsAsync(result.data, c);\n\n if (validationIssues.length > 0) throw new SpellValidationError(validationIssues);\n\n return this._runPostprocessors(result.data) as T;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'lazy' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.lazy) return visitor.lazy(this);\n\n return super._walk(visitor);\n }\n\n protected override _construct(state: SchemaState<any>): this {\n // Do not copy _resolved — each clone re-resolves from the getter on first use.\n const next = new LazySchema(this._getter) as this;\n\n next.state = state as any;\n\n return next;\n }\n}\n","import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class LiteralSchema<\n T extends string | number | boolean | null | undefined,\n Mode extends import('../core').SchemaMode = 'sync',\n> extends Schema<T, T, Mode> {\n readonly value: T;\n\n protected override get _kind(): string {\n return 'literal';\n }\n\n override checkAsync(\n this: LiteralSchema<T, 'sync'>,\n fn: (value: T, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): LiteralSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as LiteralSchema<T, 'async'>;\n }\n\n constructor(value: T) {\n super((val, ctx) =>\n val === value\n ? null\n : [\n {\n code: ErrorCode.invalid_literal,\n message: ctx!.messages.literal.expected({ expected: value }),\n params: { expected: value },\n path: [],\n },\n ],\n );\n this.value = value;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'literal', value: this.value };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.literal) return visitor.literal(this);\n\n return super._walk(visitor);\n }\n}\n","import type { AnySchema, InferOutput, Issue, MessageFn, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, ErrorCode, fail, prependIssuePath, resolveMessage, Schema, SpellValidationError } from '../core';\n\nexport class MapSchema<\n K extends AnySchema,\n V extends AnySchema,\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<\n import('../core').InferSchemaMode<K | V>\n >,\n> extends Schema<Map<InferOutput<K>, InferOutput<V>>, unknown, Mode> {\n readonly keySchema: K;\n readonly valueSchema: V;\n\n protected override get _kind(): string {\n return 'map';\n }\n\n override checkAsync(\n this: MapSchema<K, V, 'sync'>,\n fn: (\n value: Map<InferOutput<K>, InferOutput<V>>,\n ctx: import('../core').CheckContext,\n ) => Promise<import('../core').ValidateResult>,\n ): MapSchema<K, V, 'async'> {\n return this._addCheck(fn, true) as unknown as MapSchema<K, V, 'async'>;\n }\n\n constructor(keySchema: K, valueSchema: V) {\n super();\n this.keySchema = keySchema;\n this.valueSchema = valueSchema;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!(value instanceof Map)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.map.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const out = new Map<InferOutput<K>, InferOutput<V>>();\n const issues: Issue[] = [];\n let i = 0;\n\n for (const [key, val] of value) {\n const keyResult = this.keySchema._parseFullSync(key, ctx);\n const valResult = this.valueSchema._parseFullSync(val, ctx);\n\n if (keyResult.issues.length > 0) issues.push(...prependIssuePath(keyResult.issues, i));\n\n if (valResult.issues.length > 0) issues.push(...prependIssuePath(valResult.issues, i));\n\n if (keyResult.issues.length === 0 && valResult.issues.length === 0)\n out.set(keyResult.data as InferOutput<K>, valResult.data as InferOutput<V>);\n\n i += 1;\n }\n\n return { data: out, issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<Map<InferOutput<K>, InferOutput<V>>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as unknown as Map<InferOutput<K>, InferOutput<V>>;\n\n const raw = prepared.value;\n\n if (!(raw instanceof Map)) {\n throw new SpellValidationError([{ code: ErrorCode.invalid_type, message: c.messages.map.type(), path: [] }]);\n }\n\n const entries = [...raw];\n const settled = await Promise.all(\n entries.map(([key, val]) =>\n Promise.all([this.keySchema._parseFullAsync(key, c), this.valueSchema._parseFullAsync(val, c)]),\n ),\n );\n\n const issues: Issue[] = [];\n const out = new Map<InferOutput<K>, InferOutput<V>>();\n\n for (let i = 0; i < settled.length; i++) {\n const [keyResult, valResult] = settled[i];\n\n if (keyResult.issues.length > 0) issues.push(...prependIssuePath(keyResult.issues, i));\n\n if (valResult.issues.length > 0) issues.push(...prependIssuePath(valResult.issues, i));\n\n if (keyResult.issues.length === 0 && valResult.issues.length === 0)\n out.set(keyResult.data as InferOutput<K>, valResult.data as InferOutput<V>);\n }\n\n const validationIssues = await this._runValidatorsAsync(out, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(out) as Map<InferOutput<K>, InferOutput<V>>;\n });\n }\n\n min(size: number, message?: MessageFn<{ min: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size >= size) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.map.min, { min: size, value: typed }), {\n min: size,\n });\n });\n }\n\n max(size: number, message?: MessageFn<{ max: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size <= size) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.map.max, { max: size, value: typed }), {\n max: size,\n });\n });\n }\n\n size(exact: number, message?: MessageFn<{ exact: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.map.size, { exact, value: typed }),\n { exact },\n );\n });\n }\n\n nonEmpty(message?: MessageFn<{ min: number }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size > 0) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.map.nonEmpty, { min: 1 }), { min: 1 });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n key: this.keySchema.definition(),\n kind: 'map',\n value: this.valueSchema.definition(),\n };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const key = this.keySchema.walk(visitor);\n const value = this.valueSchema.walk(visitor);\n\n if (visitor.map) return visitor.map(this, key, value);\n\n return super._walk(visitor);\n }\n}\n","import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class NeverSchema<Mode extends import('../core').SchemaMode = 'sync'> extends Schema<never, never, Mode> {\n protected override get _kind(): string {\n return 'never';\n }\n\n override checkAsync(\n this: NeverSchema<'sync'>,\n fn: (value: never, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): NeverSchema<'async'> {\n return this._addCheck(fn, true) as unknown as NeverSchema<'async'>;\n }\n\n constructor() {\n super((_value, ctx) => [{ code: ErrorCode.invalid_type, message: ctx!.messages.never.invalid(), path: [] }]);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'never' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.never) return visitor.never(this);\n\n return super._walk(visitor);\n }\n}\n","import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\n/* -------------------- Typed annotations -------------------- */\n\ninterface NumberAnnotations extends Record<string, unknown> {\n exclusiveMaximum?: number;\n exclusiveMinimum?: number;\n maximum?: number;\n minimum?: number;\n multipleOf?: number;\n typeHint?: 'integer';\n}\n\nexport class NumberSchema<Input = number, Mode extends import('../core').SchemaMode = 'sync'> extends Schema<\n number,\n Input,\n Mode\n> {\n protected override get _kind(): string {\n return 'number';\n }\n\n override checkAsync(\n this: NumberSchema<Input, 'sync'>,\n fn: (value: number, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): NumberSchema<Input, 'async'> {\n return this._addCheck(fn, true) as unknown as NumberSchema<Input, 'async'>;\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'number' && !Number.isNaN(value)\n ? null\n : fail(ErrorCode.invalid_type, ctx!.messages.number.type()),\n );\n }\n\n min(minimum: number, message?: MessageFn<{ min: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) >= minimum) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.min, { min: minimum, value: value as number }),\n {\n min: minimum,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n minimum: ann.minimum === undefined ? minimum : Math.max(ann.minimum, minimum),\n };\n },\n );\n }\n\n max(maximum: number, message?: MessageFn<{ max: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) <= maximum) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.max, { max: maximum, value: value as number }),\n {\n max: maximum,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n maximum: ann.maximum === undefined ? maximum : Math.min(ann.maximum, maximum),\n };\n },\n );\n }\n\n int(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (Number.isInteger(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_integer,\n resolveMessage(message ?? ctx!.messages.number.int, { value: value as number }),\n );\n },\n (ann) => ({ ...ann, typeHint: 'integer' as const }),\n );\n }\n\n positive(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) > 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.positive, { value: value as number }),\n {\n exclusive: true,\n min: 0,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n exclusiveMinimum: ann.exclusiveMinimum === undefined ? 0 : Math.max(ann.exclusiveMinimum, 0),\n };\n },\n );\n }\n\n negative(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) < 0) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.negative, { value: value as number }),\n {\n exclusive: true,\n max: 0,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n exclusiveMaximum: ann.exclusiveMaximum === undefined ? 0 : Math.min(ann.exclusiveMaximum, 0),\n };\n },\n );\n }\n\n nonNegative(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) >= 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.nonNegative, { value: value as number }),\n { min: 0 },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return { ...ann, minimum: ann.minimum === undefined ? 0 : Math.max(ann.minimum, 0) };\n },\n );\n }\n\n nonPositive(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) <= 0) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.nonPositive, { value: value as number }),\n { max: 0 },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return { ...ann, maximum: ann.maximum === undefined ? 0 : Math.min(ann.maximum, 0) };\n },\n );\n }\n\n multipleOf(step: number, message?: MessageFn<{ step: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (Math.abs(Math.round((value as number) / step) - (value as number) / step) < 1e-9) return null;\n\n return fail(\n ErrorCode.invalid_multiple_of,\n resolveMessage(message ?? ctx!.messages.number.multipleOf, { step, value: value as number }),\n { step },\n );\n },\n (ann) => ({ ...ann, multipleOf: step }),\n );\n }\n\n safe(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint((value, ctx) => {\n if (Number.isSafeInteger(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_safe,\n resolveMessage(message ?? ctx!.messages.number.safe, { value: value as number }),\n );\n });\n }\n\n finite(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint((value, ctx) => {\n if (Number.isFinite(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_finite,\n resolveMessage(message ?? ctx!.messages.number.finite, { value: value as number }),\n );\n });\n }\n\n /**\n * Returns a new schema that coerces the input to a number via `Number(value)` before validation.\n *\n * Equivalent to `s.coerce.number()`.\n */\n coerce(): NumberSchema<unknown> {\n return NumberSchema.coerce();\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.number) return visitor.number(this);\n\n return super._walk(visitor);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const ann = this._annotations as NumberAnnotations;\n\n return {\n ...this._describeBase(),\n ...(ann.exclusiveMaximum !== undefined ? { exclusiveMaximum: ann.exclusiveMaximum } : {}),\n ...(ann.exclusiveMinimum !== undefined ? { exclusiveMinimum: ann.exclusiveMinimum } : {}),\n ...(ann.maximum !== undefined ? { maximum: ann.maximum } : {}),\n ...(ann.minimum !== undefined ? { minimum: ann.minimum } : {}),\n ...(ann.multipleOf !== undefined ? { multipleOf: ann.multipleOf } : {}),\n ...(ann.typeHint !== undefined ? { typeHint: ann.typeHint } : {}),\n kind: 'number',\n };\n }\n\n static coerce(): NumberSchema<unknown> {\n return new NumberSchema().preprocess((v: unknown) => {\n if (typeof v === 'number') return v;\n\n if (typeof v === 'string' || typeof v === 'boolean') {\n const n = Number(v);\n\n return Number.isNaN(n) ? v : n;\n }\n\n return v;\n });\n }\n}\n","import type { AnySchema, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, ErrorCode, Schema, SpellValidationError } from '../core';\n\nexport class UnionSchema<\n T extends readonly AnySchema[],\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<\n import('../core').InferSchemaMode<T[number]>\n >,\n> extends Schema<InferOutput<T[number]>, unknown, Mode> {\n readonly schemas: T;\n\n protected override get _kind(): string {\n return 'union';\n }\n\n override checkAsync(\n this: UnionSchema<T, 'sync'>,\n fn: (\n value: InferOutput<T[number]>,\n ctx: import('../core').CheckContext,\n ) => Promise<import('../core').ValidateResult>,\n ): UnionSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as UnionSchema<T, 'async'>;\n }\n\n constructor(schemas: T) {\n super();\n this.schemas = Object.freeze([...schemas]) as T;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue | Promise<ParseValue> {\n const branchErrors: Issue[][] = [];\n\n for (const schema of this.schemas) {\n const result = schema._parseFullSync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n branchErrors.push(result.issues);\n }\n\n return {\n data: value,\n issues: [\n {\n code: ErrorCode.invalid_union,\n message: ctx.messages.union.invalid(),\n params: { errors: branchErrors },\n path: [],\n },\n ],\n typeOk: false,\n };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<InferOutput<T[number]>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as InferOutput<T[number]>;\n\n const v = prepared.value;\n\n const branchErrors: Issue[][] = [];\n\n for (const schema of this.schemas) {\n const result = await schema._parseFullAsync(v, c);\n\n if (result.issues.length > 0) {\n branchErrors.push(result.issues);\n continue;\n }\n\n const validationIssues = await this._runValidatorsAsync(result.data, c);\n\n if (validationIssues.length > 0) throw new SpellValidationError(validationIssues);\n\n return this._runPostprocessors(result.data) as InferOutput<T[number]>;\n }\n\n throw new SpellValidationError([\n {\n code: ErrorCode.invalid_union,\n message: c.messages.union.invalid(),\n params: { errors: branchErrors },\n path: [],\n },\n ]);\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((s) => s.definition()), kind: 'union' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const branches = this.schemas.map((s) => s.walk(visitor));\n\n if (visitor.union) return visitor.union(this, branches);\n\n return super._walk(visitor);\n }\n}\n","import type { AnySchema, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, ErrorCode, prependIssuePath, Schema, SpellValidationError } from '../core';\nimport { defineOwnProperty, isUnsafeObjectKey, objectFromEntries } from '../safe-object';\nimport { LiteralSchema } from './literal';\nimport { UnionSchema } from './union';\n\nexport type ObjectShape = Record<string, AnySchema>;\nexport type InferObject<T extends ObjectShape> = { [K in keyof T]: InferOutput<T[K]> };\nexport type InferObjectInput<T extends ObjectShape> = { [K in keyof T]: import('../core').InferInput<T[K]> };\n\nexport class ObjectSchema<\n T extends ObjectShape,\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<\n import('../core').InferSchemaMode<T[keyof T]>\n >,\n> extends Schema<InferObject<T>, InferObjectInput<T>, Mode> {\n readonly shape: T;\n private readonly _isRelaxed: boolean;\n\n protected override get _kind(): string {\n return 'object';\n }\n\n override checkAsync(\n this: ObjectSchema<T, 'sync'>,\n fn: (value: InferObject<T>, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): ObjectSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as ObjectSchema<T, 'async'>;\n }\n\n constructor(shape: T, isRelaxed = false) {\n super();\n this.shape = Object.freeze(objectFromEntries(Object.entries(shape))) as T;\n this._isRelaxed = isRelaxed;\n }\n\n private _unknownKeys(obj: Record<string, unknown>): string[] {\n return Object.keys(obj).filter((k) => !Object.hasOwn(this.shape, k));\n }\n\n private _strictUnknownKeyIssues(obj: Record<string, unknown>, ctx: ParseContext): Issue[] {\n if (this._isRelaxed) return [];\n\n const unknownKeys = this._unknownKeys(obj);\n\n if (unknownKeys.length === 0) return [];\n\n return [\n {\n code: ErrorCode.invalid_keys,\n message: ctx.messages.object.invalidKeys({ keys: unknownKeys }),\n params: { keys: unknownKeys },\n path: [],\n },\n ];\n }\n\n private _copyRelaxedUnknownKeys(obj: Record<string, unknown>, output: Record<string, unknown>): void {\n if (!this._isRelaxed) return;\n\n for (const key of this._unknownKeys(obj)) {\n // Skip keys that trigger inherited setters (e.g. __proto__) to prevent\n // prototype mutation on the output object.\n if (isUnsafeObjectKey(key)) continue;\n\n Object.defineProperty(output, key, {\n configurable: true,\n enumerable: true,\n value: obj[key],\n writable: true,\n });\n }\n }\n\n private _guardObjectInput(\n value: unknown,\n ctx: ParseContext,\n ): { obj: Record<string, unknown>; ok: true } | { issues: Issue[]; ok: false } {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.object.type(), path: [] }],\n ok: false,\n };\n }\n\n return { obj: value as Record<string, unknown>, ok: true };\n }\n\n private _createObjectParseContext(\n obj: Record<string, unknown>,\n ctx: ParseContext,\n ): {\n issues: Issue[];\n output: Record<string, unknown>;\n } {\n return {\n issues: [...this._strictUnknownKeyIssues(obj, ctx)],\n output: {},\n };\n }\n\n private _rebuildWith<U extends ObjectShape, NewMode extends import('../core').SchemaMode = Mode>(\n shape: U,\n isRelaxed = this._isRelaxed,\n ): ObjectSchema<U, NewMode> {\n return this._copyStateTo(new ObjectSchema(shape, isRelaxed)) as unknown as ObjectSchema<U, NewMode>;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const guarded = this._guardObjectInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const { obj } = guarded;\n const { issues, output } = this._createObjectParseContext(obj, ctx);\n\n for (const key of Object.keys(this.shape)) {\n const fieldSchema = this.shape[key];\n const result = fieldSchema._parseFullSync(obj[key], ctx);\n\n if (result.issues.length === 0) {\n defineOwnProperty(output, key, result.data);\n } else {\n // Failed field keys are intentionally omitted from parsed output so\n // object-level checks can branch on key presence.\n issues.push(...prependIssuePath(result.issues, key));\n }\n }\n\n this._copyRelaxedUnknownKeys(obj, output);\n\n return { data: output, issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<InferObject<T>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as unknown as InferObject<T>;\n\n const guarded = this._guardObjectInput(prepared.value, c);\n\n if (!guarded.ok) throw new SpellValidationError(guarded.issues);\n\n const { obj } = guarded;\n const { issues, output } = this._createObjectParseContext(obj, c);\n\n const keys = Object.keys(this.shape);\n const results = await Promise.all(keys.map((key) => this.shape[key]._parseFullAsync(obj[key], c)));\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const result = results[i];\n\n if (result.issues.length === 0) {\n defineOwnProperty(output, key, result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, key));\n }\n }\n\n this._copyRelaxedUnknownKeys(obj, output);\n\n const validationIssues = await this._runValidatorsAsync(output, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(output) as InferObject<T>;\n });\n }\n\n partial(): ObjectSchema<\n { [K in keyof T]: Schema<InferOutput<T[K]> | undefined, InferOutput<T[K]> | undefined, Mode> },\n Mode\n >;\n partial<K extends keyof T>(\n ...keys: K[]\n ): ObjectSchema<\n Omit<T, K> & { [P in K]: Schema<InferOutput<T[P]> | undefined, InferOutput<T[P]> | undefined, Mode> },\n Mode\n >;\n partial<K extends keyof T>(...keys: K[]): ObjectSchema<any, Mode> {\n const targetKeys = keys.length > 0 ? new Set(keys as string[]) : null;\n\n return this._rebuildWith(\n objectFromEntries(\n Object.entries(this.shape).map(([k, s]) => [k, targetKeys === null || targetKeys.has(k) ? s.optional() : s]),\n ) as any,\n this._isRelaxed,\n );\n }\n\n override optional(): ObjectSchema<T, Mode> &\n Schema<InferObject<T> | undefined, InferObjectInput<T> | undefined, Mode> {\n return super.optional() as ObjectSchema<T, Mode> &\n Schema<InferObject<T> | undefined, InferObjectInput<T> | undefined, Mode>;\n }\n\n override nullable(): ObjectSchema<T, Mode> & Schema<InferObject<T> | null, InferObjectInput<T> | null, Mode> {\n return super.nullable() as ObjectSchema<T, Mode> & Schema<InferObject<T> | null, InferObjectInput<T> | null, Mode>;\n }\n\n override nullish(): ObjectSchema<T, Mode> &\n Schema<InferObject<T> | null | undefined, InferObjectInput<T> | null | undefined, Mode> {\n return super.nullish() as ObjectSchema<T, Mode> &\n Schema<InferObject<T> | null | undefined, InferObjectInput<T> | null | undefined, Mode>;\n }\n\n override required(): ObjectSchema<T, Mode> &\n Schema<Exclude<InferObject<T>, undefined>, Exclude<InferObjectInput<T>, undefined>, Mode> {\n return this._rebuildWith(\n objectFromEntries(Object.entries(this.shape).map(([k, s]) => [k, s.required()])) as any,\n this._isRelaxed,\n ) as ObjectSchema<T, Mode> &\n Schema<Exclude<InferObject<T>, undefined>, Exclude<InferObjectInput<T>, undefined>, Mode>;\n }\n\n extend<U extends ObjectShape>(\n extra: U,\n ): ObjectSchema<\n Omit<T, keyof U> & U,\n import('../core').MergeSchemaModes<Mode | import('../core').InferSchemaMode<U[keyof U]>>\n > {\n return this._rebuildWith(\n objectFromEntries([...Object.entries(this.shape), ...Object.entries(extra)]) as any,\n this._isRelaxed,\n );\n }\n\n pick<K extends keyof T>(...keys: K[]): ObjectSchema<Pick<T, K>, Mode> {\n const keySet = new Set(keys as string[]);\n\n return this._rebuildWith(objectFromEntries(Object.entries(this.shape).filter(([k]) => keySet.has(k))) as any);\n }\n\n omit<K extends keyof T>(...keys: K[]): ObjectSchema<Omit<T, K>, Mode> {\n const keySet = new Set(keys as string[]);\n\n return this._rebuildWith(objectFromEntries(Object.entries(this.shape).filter(([k]) => !keySet.has(k))) as any);\n }\n\n /**\n * Returns a fully default-filled object by parsing `{}` against this schema.\n * Every required field must have a `.default()` value set; if any required\n * field is missing a default, this method throws a `SpellValidationError`.\n *\n * @example\n * const Config = s.object({ host: s.string().default('localhost'), port: s.number().default(3000) });\n * Config.defaults(); // { host: 'localhost', port: 3000 }\n */\n defaults(this: ObjectSchema<T, 'sync'>): InferObject<T> {\n return this.parse({});\n }\n\n /**\n * Returns a partial object containing only the fields that have a default value set.\n * Fields without a `.default()` or `.catch()` are silently omitted rather than throwing.\n *\n * Useful for pre-filling forms where only some fields have defaults.\n *\n * @example\n * const Form = s.object({ name: s.string(), role: s.string().default('viewer') });\n * Form.partialDefaults(); // { role: 'viewer' } — name is omitted\n */\n partialDefaults(this: ObjectSchema<T, 'sync'>): Partial<InferObject<T>> {\n const result: Record<string, unknown> = {};\n\n for (const key of Object.keys(this.shape)) {\n const parsed = this.shape[key]._parseFullSync(undefined);\n\n if (parsed.issues.length === 0) {\n defineOwnProperty(result, key, parsed.data);\n }\n }\n\n return result as Partial<InferObject<T>>;\n }\n\n /**\n * Returns an array of field keys that are **required** (not optional and not nullish).\n *\n * @example\n * const User = s.object({ id: s.number(), name: s.string().optional() });\n * User.requiredFields(); // ['id']\n */\n requiredFields(): (keyof T & string)[] {\n return Object.keys(this.shape).filter((k) => !this.shape[k].isOptional) as (keyof T & string)[];\n }\n\n /**\n * Returns an array of field keys that are **optional** (accept `undefined`).\n *\n * @example\n * const User = s.object({ id: s.number(), name: s.string().optional() });\n * User.optionalFields(); // ['name']\n */\n optionalFields(): (keyof T & string)[] {\n return Object.keys(this.shape).filter((k) => this.shape[k].isOptional) as (keyof T & string)[];\n }\n\n /**\n * Allow additional unknown properties (relaxed mode).\n * Default is strict mode (rejects unknown keys).\n *\n * Returns `ObjectSchema<T>` so fluent methods like `.pick()`, `.omit()`,\n * `.extend()`, and `.partial()` remain usable after calling `.relaxed()`.\n */\n relaxed(): ObjectSchema<T, Mode> {\n return this._rebuildWith(this.shape, true);\n }\n\n /**\n * Alias for the default strict mode — rejects unknown keys.\n * Useful after calling `.relaxed()` to return a new strict schema.\n */\n strict(): ObjectSchema<T, Mode> {\n return this._rebuildWith(this.shape, false);\n }\n\n /**\n * Returns a union schema of the object's key names as literal schemas.\n *\n * @example\n * const User = s.object({ id: s.number(), name: s.string() });\n * User.keyof(); // UnionSchema — validates 'id' | 'name'\n */\n keyof(): UnionSchema<readonly [LiteralSchema<keyof T & string>, ...LiteralSchema<keyof T & string>[]]> {\n const keys = Object.keys(this.shape) as (keyof T & string)[];\n const schemas = keys.map((k) => new LiteralSchema(k)) as unknown as readonly [\n LiteralSchema<keyof T & string>,\n ...LiteralSchema<keyof T & string>[],\n ];\n\n return new UnionSchema(schemas);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const fields: Record<string, SchemaDescriptor> = {};\n\n for (const [key, schema] of Object.entries(this.shape)) {\n defineOwnProperty(fields, key, schema.definition());\n }\n\n return { ...this._describeBase(), fields, kind: 'object', strict: !this._isRelaxed };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const fields = objectFromEntries(Object.entries(this.shape).map(([k, s]) => [k, s.walk(visitor)]));\n\n if (visitor.object) return visitor.object(this, fields);\n\n return super._walk(visitor);\n }\n\n merge<U extends ObjectShape, OtherMode extends import('../core').SchemaMode>(\n other: ObjectSchema<U, OtherMode>,\n ): ObjectSchema<T & U, import('../core').MergeSchemaModes<Mode | OtherMode>> {\n return this._rebuildWith(\n objectFromEntries([...Object.entries(this.shape), ...Object.entries(other.shape)]) as any,\n other._isRelaxed,\n );\n }\n}\n","/**\n * Helpers for accepting raw literal values alongside schema instances in\n * sUnion() and sIntersect() arguments.\n *\n * Moved out of literal.ts — this infrastructure belongs to the combinator\n * entry points (s.ts), not to LiteralSchema.\n */\n\nimport type { AnySchema } from '../core';\n\nimport { Schema } from '../core';\nimport { LiteralSchema } from './literal';\n\nexport type LiteralValue = string | number | boolean | null | undefined;\nexport type RawOrSchema = AnySchema | LiteralValue;\nexport type NormalizeItem<T> = T extends AnySchema ? T : T extends LiteralValue ? LiteralSchema<T> : never;\nexport type NormalizeItems<T extends readonly RawOrSchema[]> = { readonly [K in keyof T]: NormalizeItem<T[K]> };\n\nexport function normalizeToSchemas<T extends readonly RawOrSchema[]>(items: T): NormalizeItems<T> {\n return items.map((item) =>\n item instanceof Schema ? item : new LiteralSchema(item as LiteralValue),\n ) as unknown as NormalizeItems<T>;\n}\n","import type { AnySchema, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, ErrorCode, prependIssuePath, Schema, SpellValidationError } from '../core';\nimport { isUnsafeObjectKey } from '../safe-object';\n\nexport class RecordSchema<\n K extends AnySchema,\n V extends AnySchema,\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<\n import('../core').InferSchemaMode<K | V>\n >,\n> extends Schema<Record<InferOutput<K> & string, InferOutput<V>>, unknown, Mode> {\n readonly keySchema: K;\n readonly valueSchema: V;\n\n protected override get _kind(): string {\n return 'record';\n }\n\n override checkAsync(\n this: RecordSchema<K, V, 'sync'>,\n fn: (\n value: Record<InferOutput<K> & string, InferOutput<V>>,\n ctx: import('../core').CheckContext,\n ) => Promise<import('../core').ValidateResult>,\n ): RecordSchema<K, V, 'async'> {\n return this._addCheck(fn, true) as unknown as RecordSchema<K, V, 'async'>;\n }\n\n constructor(keySchema: K, valueSchema: V) {\n super();\n this.keySchema = keySchema;\n this.valueSchema = valueSchema;\n }\n\n private _guardRecordInput(\n value: unknown,\n ctx: ParseContext,\n ): { ok: true; value: Record<string, unknown> } | { issues: Issue[]; ok: false } {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.object.type(), path: [] }],\n ok: false,\n };\n }\n\n return { ok: true, value: value as Record<string, unknown> };\n }\n\n private _parseRecordEntries(\n obj: Record<string, unknown>,\n ctx: ParseContext,\n ): { issues: Issue[]; output: Record<string, unknown> } {\n const issues: Issue[] = [];\n const output: Record<string, unknown> = {};\n\n for (const key of Object.keys(obj)) {\n const keyResult = this.keySchema._parseFullSync(key, ctx);\n\n if (keyResult.issues.length > 0) {\n issues.push(...prependIssuePath(keyResult.issues, key));\n continue;\n }\n\n const parsedKey = keyResult.data as string;\n\n // Skip keys that trigger inherited setters (e.g. __proto__) to prevent\n // prototype mutation on the output object.\n if (isUnsafeObjectKey(parsedKey)) continue;\n\n const valResult = this.valueSchema._parseFullSync(obj[key], ctx);\n\n if (valResult.issues.length === 0) {\n Object.defineProperty(output, parsedKey, {\n configurable: true,\n enumerable: true,\n value: valResult.data,\n writable: true,\n });\n } else {\n issues.push(...prependIssuePath(valResult.issues, key));\n }\n }\n\n return { issues, output };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const guarded = this._guardRecordInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const { issues, output } = this._parseRecordEntries(guarded.value, ctx);\n\n return { data: output, issues, typeOk: true };\n }\n\n override async parseAsync(\n value: unknown,\n ctx?: ParseContext,\n ): Promise<Record<InferOutput<K> & string, InferOutput<V>>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as unknown as Record<InferOutput<K> & string, InferOutput<V>>;\n\n const guarded = this._guardRecordInput(prepared.value, c);\n\n if (!guarded.ok) throw new SpellValidationError(guarded.issues);\n\n const obj = guarded.value;\n const keys = Object.keys(obj);\n const settled = await Promise.all(\n keys.map((key) =>\n Promise.all([this.keySchema._parseFullAsync(key, c), this.valueSchema._parseFullAsync(obj[key], c)]),\n ),\n );\n\n const issues: Issue[] = [];\n const output: Record<string, unknown> = {};\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const [keyResult, valResult] = settled[i];\n\n if (keyResult.issues.length > 0) {\n issues.push(...prependIssuePath(keyResult.issues, key));\n continue;\n }\n\n const parsedKey = keyResult.data as string;\n\n // Skip keys that trigger inherited setters (e.g. __proto__) to prevent\n // prototype mutation on the output object.\n if (isUnsafeObjectKey(parsedKey)) continue;\n\n if (valResult.issues.length === 0) {\n Object.defineProperty(output, parsedKey, {\n configurable: true,\n enumerable: true,\n value: valResult.data,\n writable: true,\n });\n } else {\n issues.push(...prependIssuePath(valResult.issues, key));\n }\n }\n\n const validationIssues = await this._runValidatorsAsync(output, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(output) as Record<InferOutput<K> & string, InferOutput<V>>;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n key: this.keySchema.definition(),\n kind: 'record',\n value: this.valueSchema.definition(),\n };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const key = this.keySchema.walk(visitor);\n const value = this.valueSchema.walk(visitor);\n\n if (visitor.record) return visitor.record(this, key, value);\n\n return super._walk(visitor);\n }\n}\n","import type { AnySchema, InferOutput, Issue, MessageFn, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, ErrorCode, fail, prependIssuePath, resolveMessage, Schema, SpellValidationError } from '../core';\n\nexport class SetSchema<\n T extends AnySchema,\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<import('../core').InferSchemaMode<T>>,\n> extends Schema<Set<InferOutput<T>>, unknown, Mode> {\n readonly itemSchema: T;\n\n protected override get _kind(): string {\n return 'set';\n }\n\n override checkAsync(\n this: SetSchema<T, 'sync'>,\n fn: (value: Set<InferOutput<T>>, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): SetSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as SetSchema<T, 'async'>;\n }\n\n constructor(itemSchema: T) {\n super();\n this.itemSchema = itemSchema;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!(value instanceof Set)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.set.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const issues: Issue[] = [];\n const parsed = new Set<InferOutput<T>>();\n let i = 0;\n\n for (const item of value) {\n const result = this.itemSchema._parseFullSync(item, ctx);\n\n if (result.issues.length === 0) {\n parsed.add(result.data as InferOutput<T>);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n }\n\n i += 1;\n }\n\n return { data: parsed, issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<Set<InferOutput<T>>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as unknown as Set<InferOutput<T>>;\n\n const raw = prepared.value;\n\n if (!(raw instanceof Set)) {\n throw new SpellValidationError([{ code: ErrorCode.invalid_type, message: c.messages.set.type(), path: [] }]);\n }\n\n const items = [...raw];\n const settled = await Promise.all(items.map((item) => this.itemSchema._parseFullAsync(item, c)));\n\n const issues: Issue[] = [];\n const parsed = new Set<InferOutput<T>>();\n\n for (let i = 0; i < settled.length; i++) {\n const result = settled[i];\n\n if (result.issues.length === 0) {\n parsed.add(result.data as InferOutput<T>);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n }\n }\n\n const validationIssues = await this._runValidatorsAsync(parsed, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(parsed) as Set<InferOutput<T>>;\n });\n }\n\n min(size: number, message?: MessageFn<{ min: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size >= size) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.set.min, { min: size, value: typed }), {\n min: size,\n });\n });\n }\n\n max(size: number, message?: MessageFn<{ max: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size <= size) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.set.max, { max: size, value: typed }), {\n max: size,\n });\n });\n }\n\n size(exact: number, message?: MessageFn<{ exact: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.set.size, { exact, value: typed }),\n { exact },\n );\n });\n }\n\n nonEmpty(message?: MessageFn<{ min: number }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size > 0) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.set.nonEmpty, { min: 1 }), { min: 1 });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), items: this.itemSchema.definition(), kind: 'set' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const item = this.itemSchema.walk(visitor);\n\n if (visitor.set) return visitor.set(this, item);\n\n return super._walk(visitor);\n }\n}\n","/**\n * Pure string format validators.\n *\n * All functions take a `string` and return `boolean`. They are exported as part of the\n * public API so callers can use them independently of any Schema.\n *\n * ```ts\n * import { isEmail, isUuid } from '@vielzeug/spell';\n * isEmail('foo@bar.com'); // true\n * ```\n */\n\nexport function isEmail(v: string): boolean {\n return /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/.test(v);\n}\n\nconst _DEFAULT_URL_PROTOCOLS = new Set(['http', 'https']);\n\nexport function isUrl(v: string, protocols?: readonly string[]): boolean {\n try {\n const parsed = new URL(v);\n const allowed = protocols ? new Set(protocols.map((p) => p.toLowerCase())) : _DEFAULT_URL_PROTOCOLS;\n\n return allowed.has(parsed.protocol.replace(':', '').toLowerCase());\n } catch {\n return false;\n }\n}\n\nexport function isUuid(v: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(v);\n}\n\nexport function isIsoDate(v: string): boolean {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(v)) return false;\n\n const d = new Date(v);\n\n return !Number.isNaN(d.getTime()) && d.toISOString().startsWith(v);\n}\n\nexport function isIsoDateTime(v: string): boolean {\n return (\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?(?:Z|[+-]\\d{2}:\\d{2})?$/.test(v) &&\n !Number.isNaN(new Date(v).getTime())\n );\n}\n\nexport function isIp(v: string): boolean {\n // IPv4\n if (/^(\\d{1,3}\\.){3}\\d{1,3}$/.test(v)) {\n return v.split('.').every((o) => {\n const n = parseInt(o, 10);\n\n return n >= 0 && n <= 255;\n });\n }\n\n // IPv6 — rely on URL parser\n try {\n new URL(`http://[${v}]/`);\n\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isCuid(v: string): boolean {\n return /^c[a-z0-9]{8,}$/.test(v);\n}\n\nexport function isCuid2(v: string): boolean {\n return /^[a-z][a-z0-9]{23}$/.test(v);\n}\n\nexport function isUlid(v: string): boolean {\n return /^[0-7][0-9A-HJKMNP-TV-Z]{25}$/.test(v);\n}\n\n/**\n * Validates a NanoID string. The default NanoID length is 21 characters; pass a\n * custom length to validate IDs generated with non-default sizes.\n */\nexport function isNanoid(v: string, length = 21): boolean {\n return v.length === length && /^[A-Za-z0-9_-]+$/.test(v);\n}\n\nexport function isBase64(v: string): boolean {\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(v);\n}\n\n/**\n * Validates a base64url-encoded string (RFC 4648 §5). Accepts unpadded and padded forms.\n * A string whose length % 4 === 1 is never valid base64url.\n */\nexport function isBase64url(v: string): boolean {\n if (v.length === 0 || v.length % 4 === 1) return false;\n\n return /^[A-Za-z0-9_-]*={0,2}$/.test(v);\n}\n\nexport function isHex(v: string): boolean {\n return /^[A-Fa-f0-9]+$/.test(v);\n}\n\nexport function isHexColor(v: string): boolean {\n return /^#(?:[A-Fa-f0-9]{3}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/.test(v);\n}\n\nexport function isEmoji(v: string): boolean {\n return /^\\p{Extended_Pictographic}+$/u.test(v);\n}\n\nexport function isJwt(v: string): boolean {\n return /^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$/.test(v);\n}\n\nexport function isTime(v: string): boolean {\n return /^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$/.test(v);\n}\n\nexport function isDuration(v: string): boolean {\n return /^P(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+(?:\\.\\d+)?S)?)?$/.test(v);\n}\n\nexport function isSemver(v: string): boolean {\n return /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$/.test(\n v,\n );\n}\n\nexport function isSlug(v: string): boolean {\n return /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(v);\n}\n\nexport function isNumeric(v: string): boolean {\n return /^[-+]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?$/i.test(v);\n}\n","import { warn } from '../_dev';\nimport type { MessageFn, SchemaDescriptor } from '../core';\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\nimport {\n isBase64,\n isBase64url,\n isCuid,\n isCuid2,\n isDuration,\n isEmail,\n isEmoji,\n isHex,\n isHexColor,\n isIp,\n isIsoDate,\n isIsoDateTime,\n isJwt,\n isNanoid,\n isNumeric,\n isSemver,\n isSlug,\n isTime,\n isUlid,\n isUrl,\n isUuid,\n} from '../formats';\n\n/* -------------------- Typed annotations -------------------- */\n\ninterface StringAnnotations extends Record<string, unknown> {\n contentEncoding?: string;\n format?: string;\n maxLength?: number;\n minLength?: number;\n pattern?: string | null;\n}\n\ntype UrlOptions = {\n message?: MessageFn<{ value: string }>;\n protocols?: readonly string[];\n};\n\nexport class StringSchema<Input = string, Mode extends import('../core').SchemaMode = 'sync'> extends Schema<\n string,\n Input,\n Mode\n> {\n protected override get _kind(): string {\n return 'string';\n }\n\n override checkAsync(\n this: StringSchema<Input, 'sync'>,\n fn: (value: string, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): StringSchema<Input, 'async'> {\n return this._addCheck(fn, true) as unknown as StringSchema<Input, 'async'>;\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'string' ? null : fail(ErrorCode.invalid_type, ctx!.messages.string.type()),\n );\n }\n\n min(length: number, message?: MessageFn<{ min: number; value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as string).length >= length) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.string.min, { min: length, value: value as string }),\n {\n min: length,\n },\n );\n },\n (current) => {\n const ann = current as StringAnnotations;\n\n return {\n ...ann,\n minLength: ann.minLength === undefined ? length : Math.max(ann.minLength, length),\n };\n },\n );\n }\n\n max(length: number, message?: MessageFn<{ max: number; value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as string).length <= length) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.string.max, { max: length, value: value as string }),\n {\n max: length,\n },\n );\n },\n (current) => {\n const ann = current as StringAnnotations;\n\n return {\n ...ann,\n maxLength: ann.maxLength === undefined ? length : Math.min(ann.maxLength, length),\n };\n },\n );\n }\n\n length(exact: number, message?: MessageFn<{ exact: number; value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as string).length === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.string.length, { exact, value: value as string }),\n { exact },\n );\n },\n (ann) => ({ ...ann, maxLength: exact, minLength: exact }),\n );\n }\n\n /**\n * Alias for `.nonEmpty()` — validates that the string is not empty.\n * Provided for discoverability alongside `ArraySchema.nonEmpty()`.\n */\n nonempty(message?: MessageFn<{ min: number; value: string }>): this {\n return this.nonEmpty(message);\n }\n\n nonEmpty(message?: MessageFn<{ min: number; value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as string).length > 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.string.nonEmpty, { min: 1, value: value as string }),\n { min: 1 },\n );\n },\n (current) => {\n const ann = current as StringAnnotations;\n\n return { ...ann, minLength: Math.max(ann.minLength ?? 0, 1) };\n },\n );\n }\n\n startsWith(prefix: string, message?: MessageFn<{ prefix: string; value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if ((value as string).startsWith(prefix)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.startsWith, { prefix, value: value as string }),\n { prefix },\n );\n });\n }\n\n endsWith(suffix: string, message?: MessageFn<{ suffix: string; value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if ((value as string).endsWith(suffix)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.endsWith, { suffix, value: value as string }),\n { suffix },\n );\n });\n }\n\n includes(substr: string, message?: MessageFn<{ substr: string; value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if ((value as string).includes(substr)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.includes, { substr, value: value as string }),\n {\n includes: substr,\n },\n );\n });\n }\n\n /**\n * Validates that the string matches the given regular expression.\n *\n * **Security note:** Stateful `/g` and `/y` flags are stripped automatically to prevent\n * `lastIndex`-based bugs. However, caller-supplied patterns with catastrophic backtracking\n * (e.g. `/(a+)+$/`) are a ReDoS risk when validating untrusted input in server-side contexts.\n * Prefer well-tested, bounded patterns for user-facing validation.\n *\n */\n regex(pattern: RegExp, message?: MessageFn<{ value: string }>): this {\n const safePattern = new RegExp(pattern.source, pattern.flags.replace(/[gy]/g, ''));\n\n return this._addConstraint(\n (value, ctx) => {\n // Caller-supplied regexes still run against untrusted strings; spell can\n // neutralize stateful /g and /y flags but cannot make arbitrary patterns\n // immune to catastrophic backtracking without breaking the API.\n if (safePattern.test(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.regex, { value: value as string }),\n {\n pattern: safePattern.source,\n },\n );\n },\n (current) => {\n const ann = current as StringAnnotations;\n\n if (ann.pattern === null) return ann; // already ambiguous\n\n if (ann.pattern === undefined) return { ...ann, pattern: safePattern.source };\n\n if (ann.pattern !== safePattern.source) {\n warn(\n '[spell] Multiple .regex() constraints detected on a single string schema. ' +\n 'JSON Schema `pattern` cannot represent multiple patterns and will be omitted from definition output.',\n );\n\n return { ...ann, pattern: null };\n }\n\n return ann;\n },\n );\n }\n\n email(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isEmail(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.email, { value: value as string }),\n { format: 'email' },\n );\n },\n (ann) => ({ ...ann, format: 'email' }),\n );\n }\n\n url(options: UrlOptions = {}): this {\n const { message, protocols = ['http', 'https'] } = options;\n\n return this._addConstraint(\n (value, ctx) => {\n if (isUrl(value as string, protocols)) return null;\n\n return fail(\n ErrorCode.invalid_url,\n resolveMessage(message ?? ctx!.messages.string.url, { value: value as string }),\n { format: 'url' },\n );\n },\n (ann) => ({ ...ann, format: 'uri' }),\n );\n }\n\n uuid(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isUuid(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.uuid, { value: value as string }),\n { format: 'uuid' },\n );\n },\n (ann) => ({ ...ann, format: 'uuid' }),\n );\n }\n\n isoDate(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isIsoDate(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.date, { value: value as string }),\n {\n format: 'iso-date',\n },\n );\n },\n (ann) => ({ ...ann, format: 'date' }),\n );\n }\n\n isoDateTime(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isIsoDateTime(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.dateTime, { value: value as string }),\n {\n format: 'iso-datetime',\n },\n );\n },\n (ann) => ({ ...ann, format: 'date-time' }),\n );\n }\n\n ip(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isIp(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.ip, { value: value as string }),\n { format: 'ip' },\n );\n });\n }\n\n cuid(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isCuid(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.cuid, { value: value as string }),\n { format: 'cuid' },\n );\n });\n }\n\n cuid2(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isCuid2(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.cuid2, { value: value as string }),\n { format: 'cuid2' },\n );\n });\n }\n\n ulid(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isUlid(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.ulid, { value: value as string }),\n { format: 'ulid' },\n );\n });\n }\n\n nanoid(length?: number, message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isNanoid(value as string, length)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.nanoid, { value: value as string }),\n { format: 'nanoid' },\n );\n });\n }\n\n base64(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isBase64(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_base64,\n resolveMessage(message ?? ctx!.messages.string.base64, { value: value as string }),\n {\n format: 'base64',\n },\n );\n },\n (ann) => ({ ...ann, contentEncoding: 'base64' }),\n );\n }\n\n base64url(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isBase64url(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_base64,\n resolveMessage(message ?? ctx!.messages.string.base64url, { value: value as string }),\n {\n format: 'base64url',\n },\n );\n });\n }\n\n hex(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isHex(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.hex, { value: value as string }),\n { format: 'hex' },\n );\n });\n }\n\n hexColor(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isHexColor(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.hexColor, { value: value as string }),\n {\n format: 'hex-color',\n },\n );\n });\n }\n\n emoji(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isEmoji(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.emoji, { value: value as string }),\n { format: 'emoji' },\n );\n });\n }\n\n jwt(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isJwt(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.jwt, { value: value as string }),\n { format: 'jwt' },\n );\n });\n }\n\n time(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isTime(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.time, { value: value as string }),\n { format: 'time' },\n );\n });\n }\n\n duration(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isDuration(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_duration,\n resolveMessage(message ?? ctx!.messages.string.duration, { value: value as string }),\n {\n format: 'duration',\n },\n );\n },\n (ann) => ({ ...ann, format: 'duration' }),\n );\n }\n\n semver(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isSemver(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.semver, { value: value as string }),\n { format: 'semver' },\n );\n });\n }\n\n slug(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isSlug(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.slug, { value: value as string }),\n { format: 'slug' },\n );\n });\n }\n\n numeric(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isNumeric(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.numeric, { value: value as string }),\n { format: 'numeric' },\n );\n });\n }\n\n /**\n * Returns a new schema that coerces the input to a string via `String(value)` before validation.\n * `null` and `undefined` are passed through unchanged.\n *\n * Equivalent to `s.coerce.string()`.\n */\n coerce(): StringSchema<unknown> {\n return StringSchema.coerce();\n }\n\n /**\n * **Note:** `trim()` adds a preprocessor. Preprocessors are not serializable —\n * `definition()` throws because preprocessors are not serializable.\n */\n trim(): this {\n return this.preprocess((v: unknown) => (typeof v === 'string' ? v.trim() : v));\n }\n\n /**\n * **Note:** `lowercase()` adds a preprocessor. Preprocessors are not serializable —\n * `definition()` throws because preprocessors are not serializable.\n */\n lowercase(): this {\n return this.preprocess((v: unknown) => (typeof v === 'string' ? v.toLowerCase() : v));\n }\n\n /**\n * **Note:** `uppercase()` adds a preprocessor. Preprocessors are not serializable —\n * `definition()` throws because preprocessors are not serializable.\n */\n uppercase(): this {\n return this.preprocess((v: unknown) => (typeof v === 'string' ? v.toUpperCase() : v));\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.string) return visitor.string(this);\n\n return super._walk(visitor);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const ann = this._annotations as StringAnnotations;\n\n return {\n ...this._describeBase(),\n ...(ann.contentEncoding !== undefined ? { contentEncoding: ann.contentEncoding } : {}),\n ...(ann.format !== undefined ? { format: ann.format } : {}),\n ...(ann.maxLength !== undefined ? { maxLength: ann.maxLength } : {}),\n ...(ann.minLength !== undefined ? { minLength: ann.minLength } : {}),\n ...(ann.pattern !== undefined ? { pattern: ann.pattern } : {}),\n kind: 'string',\n };\n }\n\n static coerce(): StringSchema<unknown> {\n return new StringSchema().preprocess((v: unknown) => (v == null ? v : String(v)));\n }\n}\n","import type { AnySchema, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, ErrorCode, prependIssuePath, Schema, SpellValidationError } from '../core';\n\nexport type TupleSchemas = readonly [AnySchema, ...AnySchema[]];\nexport type InferTuple<T extends TupleSchemas, R extends AnySchema | null = null> =\n R extends Schema<infer O>\n ? readonly [...{ [K in keyof T]: T[K] extends Schema<infer V> ? V : never }, ...O[]]\n : { readonly [K in keyof T]: T[K] extends Schema<infer V> ? V : never };\n\nexport class TupleSchema<\n T extends TupleSchemas,\n R extends AnySchema | null = null,\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<\n import('../core').InferSchemaMode<T[number] | Exclude<R, null>>\n >,\n> extends Schema<InferTuple<T, R>, unknown, Mode> {\n readonly items: T;\n readonly restSchema: R;\n\n protected override get _kind(): string {\n return 'tuple';\n }\n\n override checkAsync(\n this: TupleSchema<T, R, 'sync'>,\n fn: (value: InferTuple<T, R>, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): TupleSchema<T, R, 'async'> {\n return this._addCheck(fn, true) as unknown as TupleSchema<T, R, 'async'>;\n }\n\n constructor(items: T, restSchema: R = null as R) {\n super();\n this.items = items;\n this.restSchema = restSchema;\n }\n\n rest<U extends AnySchema>(\n schema: U,\n ): TupleSchema<T, U, import('../core').MergeSchemaModes<Mode | import('../core').InferSchemaMode<U>>> {\n return this._copyStateTo(new TupleSchema(this.items, schema)) as unknown as TupleSchema<\n T,\n U,\n import('../core').MergeSchemaModes<Mode | import('../core').InferSchemaMode<U>>\n >;\n }\n\n private _guardTupleInput(\n value: unknown[],\n ctx: ParseContext,\n ): { ok: true; value: unknown[] } | { issues: Issue[]; ok: false } {\n if (this.restSchema === null && value.length !== this.items.length) {\n return {\n issues: [\n {\n code: ErrorCode.invalid_length,\n message: ctx.messages.tuple.length({ exact: this.items.length }),\n params: { exact: this.items.length },\n path: [],\n },\n ],\n ok: false,\n };\n }\n\n if (this.restSchema !== null && value.length < this.items.length) {\n return {\n issues: [\n {\n code: ErrorCode.too_small,\n message: ctx.messages.tuple.min({ min: this.items.length }),\n params: { min: this.items.length },\n path: [],\n },\n ],\n ok: false,\n };\n }\n\n return { ok: true, value };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!Array.isArray(value)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.tuple.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const guarded = this._guardTupleInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const issues: Issue[] = [];\n const output: unknown[] = [];\n const tupleValue = guarded.value;\n\n for (let i = 0; i < this.items.length; i++) {\n const result = this.items[i]._parseFullSync(tupleValue[i], ctx);\n\n if (result.issues.length === 0) {\n output.push(result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n output.push(tupleValue[i]);\n }\n }\n\n if (this.restSchema !== null) {\n for (let i = this.items.length; i < tupleValue.length; i++) {\n const result = this.restSchema._parseFullSync(tupleValue[i], ctx);\n\n if (result.issues.length === 0) {\n output.push(result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n output.push(tupleValue[i]);\n }\n }\n }\n\n return { data: output, issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<InferTuple<T, R>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as unknown as InferTuple<T, R>;\n\n const raw = prepared.value;\n\n if (!Array.isArray(raw)) {\n throw new SpellValidationError([{ code: ErrorCode.invalid_type, message: c.messages.tuple.type(), path: [] }]);\n }\n\n const guarded = this._guardTupleInput(raw, c);\n\n if (!guarded.ok) throw new SpellValidationError(guarded.issues);\n\n const tupleValue = guarded.value;\n const issues: Issue[] = [];\n const output: unknown[] = [];\n\n const fixedResults = await Promise.all(this.items.map((schema, i) => schema._parseFullAsync(tupleValue[i], c)));\n\n for (let i = 0; i < fixedResults.length; i++) {\n const result = fixedResults[i];\n\n if (result.issues.length === 0) {\n output.push(result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n output.push(tupleValue[i]);\n }\n }\n\n const rest = this.restSchema;\n\n if (rest !== null) {\n const restItems = tupleValue.slice(this.items.length);\n const restResults = await Promise.all(restItems.map((item) => rest._parseFullAsync(item, c)));\n\n for (let i = 0; i < restResults.length; i++) {\n const result = restResults[i];\n const idx = this.items.length + i;\n\n if (result.issues.length === 0) {\n output.push(result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, idx));\n output.push(tupleValue[idx]);\n }\n }\n }\n\n const validationIssues = await this._runValidatorsAsync(output, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(output) as InferTuple<T, R>;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n items: this.items.map((s) => s.definition()),\n kind: 'tuple',\n rest: this.restSchema !== null ? this.restSchema.definition() : null,\n };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const items = this.items.map((s) => s.walk(visitor));\n const rest = this.restSchema !== null ? this.restSchema.walk(visitor) : null;\n\n if (visitor.tuple) return visitor.tuple(this, items, rest);\n\n return super._walk(visitor);\n }\n}\n","import type { AnySchema, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, ErrorCode, Schema, SpellValidationError } from '../core';\nimport { SpellError } from '../errors';\nimport { defineOwnProperty, objectFromEntries } from '../safe-object';\nimport { LiteralSchema } from './literal';\nimport type { InferObject, ObjectSchema, ObjectShape } from './object';\n\ntype VariantMap = Record<string, ObjectSchema<any, any>>;\ntype InferVariantMap<K extends string, M extends VariantMap> = {\n [Tag in keyof M & string]: M[Tag] extends { shape: infer S extends ObjectShape }\n ? InferObject<S> & { [P in K]: Tag }\n : never;\n}[keyof M & string];\n\nexport class VariantSchema<\n K extends string,\n M extends VariantMap,\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<\n import('../core').InferSchemaMode<M[keyof M]>\n >,\n> extends Schema<InferVariantMap<K, M>, unknown, Mode> {\n private readonly _map: Map<string, VariantMap[string]>;\n private readonly _discriminator: K;\n\n protected override get _kind(): string {\n return 'variant';\n }\n\n override checkAsync(\n this: VariantSchema<K, M, 'sync'>,\n fn: (\n value: InferVariantMap<K, M>,\n ctx: import('../core').CheckContext,\n ) => Promise<import('../core').ValidateResult>,\n ): VariantSchema<K, M, 'async'> {\n return this._addCheck(fn, true) as unknown as VariantSchema<K, M, 'async'>;\n }\n\n constructor(discriminator: K, variantMap: M) {\n const map = new Map<string, VariantMap[string]>();\n\n for (const [tag, schema] of Object.entries(variantMap)) {\n const discriminatorSchema = new LiteralSchema(tag);\n const existingDiscriminator = schema.shape[discriminator];\n\n if (\n existingDiscriminator &&\n (!(existingDiscriminator instanceof LiteralSchema) || existingDiscriminator.value !== tag)\n ) {\n throw new SpellError(\n `s.discriminatedUnion(): branch \"${tag}\" defines a conflicting discriminator schema for \"${discriminator}\".`,\n );\n }\n\n const discriminatorShape = {\n [discriminator]: discriminatorSchema,\n } as unknown as Record<K, AnySchema>;\n\n map.set(tag, existingDiscriminator ? schema : schema.extend(discriminatorShape));\n }\n\n super();\n this._discriminator = discriminator;\n this._map = map;\n }\n\n /** The discriminator field key used to select the matching variant. */\n get discriminator(): K {\n return this._discriminator;\n }\n\n /** Map from discriminator tag value to the extended ObjectSchema for that variant. */\n get variantMap(): ReadonlyMap<string, VariantMap[string]> {\n return new Map(this._map);\n }\n\n private _resolveVariant(\n value: unknown,\n ctx: ParseContext,\n ): { matched: VariantMap[string]; obj: Record<string, unknown> } | { issues: Issue[] } {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.variant.type(), path: [] }],\n };\n }\n\n const obj = value as Record<string, unknown>;\n const discValue = obj[this._discriminator] as string;\n const matched = this._map.get(discValue);\n\n if (!matched) {\n const expected = [...this._map.keys()];\n\n return {\n issues: [\n {\n code: ErrorCode.invalid_variant,\n message: ctx.messages.variant.invalidDiscriminator({\n discriminator: this._discriminator,\n expected,\n }),\n params: { discriminator: this._discriminator, expected },\n path: [],\n },\n ],\n };\n }\n\n return { matched, obj };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const resolved = this._resolveVariant(value, ctx);\n\n if ('issues' in resolved) return { data: value, issues: resolved.issues, typeOk: false };\n\n const result = resolved.matched._parseFullSync(value, ctx);\n\n return result.issues.length === 0\n ? { data: result.data, issues: [], typeOk: true }\n : { data: value, issues: result.issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<InferVariantMap<K, M>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as unknown as InferVariantMap<K, M>;\n\n const resolved = this._resolveVariant(prepared.value, c);\n\n if ('issues' in resolved) throw new SpellValidationError(resolved.issues);\n\n const branch = await resolved.matched.safeParseAsync(prepared.value, c);\n\n if (!branch.success) throw branch.error;\n\n const validationIssues = await this._runValidatorsAsync(branch.data, c);\n\n if (validationIssues.length > 0) throw new SpellValidationError(validationIssues);\n\n return this._runPostprocessors(branch.data) as InferVariantMap<K, M>;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const branches: Record<string, SchemaDescriptor> = {};\n\n for (const [key, schema] of this._map.entries()) {\n defineOwnProperty(branches, key, schema.definition());\n }\n\n return { ...this._describeBase(), branches, discriminator: this._discriminator, kind: 'variant' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const branches = objectFromEntries([...this._map.entries()].map(([k, s]) => [k, s.walk(visitor)]));\n\n if (visitor.variant) return visitor.variant(this, branches);\n\n return super._walk(visitor);\n }\n}\n","import { type AnySchema, type InferOutput, type InferSchemaMode, Schema } from './core';\nimport { ArraySchema } from './schemas/array';\nimport { BigIntSchema } from './schemas/bigint';\nimport { BooleanSchema } from './schemas/boolean';\nimport { DateSchema } from './schemas/date';\nimport { EnumSchema, type EnumValues } from './schemas/enum';\nimport { InstanceOfSchema } from './schemas/instanceof';\nimport { IntersectSchema } from './schemas/intersect';\nimport { LazySchema } from './schemas/lazy';\nimport { LiteralSchema } from './schemas/literal';\nimport { MapSchema } from './schemas/map';\nimport { NeverSchema } from './schemas/never';\nimport { NumberSchema } from './schemas/number';\nimport { ObjectSchema, type ObjectShape } from './schemas/object';\nimport { type NormalizeItems, normalizeToSchemas, type RawOrSchema } from './schemas/raw-or';\nimport { RecordSchema } from './schemas/record';\nimport { SetSchema } from './schemas/set';\nimport { StringSchema } from './schemas/string';\nimport { TupleSchema, type TupleSchemas } from './schemas/tuple';\nimport { UnionSchema } from './schemas/union';\nimport { VariantSchema } from './schemas/variant';\n\n/* -------------------- Internal factory functions -------------------- */\n\nconst sAny = (): Schema<any> => new Schema();\nconst sArray = <T extends AnySchema>(schema: T): ArraySchema<T> => new ArraySchema(schema);\nconst sBigint = (): BigIntSchema => new BigIntSchema();\nconst sBoolean = (): BooleanSchema => new BooleanSchema();\nconst sDate = (): DateSchema => new DateSchema();\nconst sEnum = <const T extends EnumValues>(values: T): EnumSchema<T> => new EnumSchema(values);\nconst sInstanceof = <T>(cls: new (...args: any[]) => T): InstanceOfSchema<T> => new InstanceOfSchema(cls);\nconst sIntersect = <T extends readonly [RawOrSchema, RawOrSchema, ...RawOrSchema[]]>(\n ...items: T\n): IntersectSchema<NormalizeItems<T> & readonly AnySchema[]> =>\n new IntersectSchema(normalizeToSchemas(items) as NormalizeItems<T> & readonly AnySchema[]);\nconst sLazy = <T extends AnySchema>(getter: () => T): LazySchema<InferOutput<T>, unknown, InferSchemaMode<T>> =>\n new LazySchema(getter as unknown as () => Schema<InferOutput<T>, unknown, InferSchemaMode<T>>);\nconst sLiteral = <T extends string | number | boolean | null | undefined>(value: T): LiteralSchema<T> =>\n new LiteralSchema(value);\nconst sMap = <K extends AnySchema, V extends AnySchema>(keySchema: K, valueSchema: V): MapSchema<K, V> =>\n new MapSchema(keySchema, valueSchema);\nconst sNever = (): NeverSchema => new NeverSchema();\nconst sNull = (): LiteralSchema<null> => new LiteralSchema(null);\nconst sNumber = (): NumberSchema => new NumberSchema();\nconst sObject = <T extends ObjectShape>(shape: T): ObjectSchema<T> => new ObjectSchema(shape);\nconst sRecord = <K extends AnySchema, V extends AnySchema>(keySchema: K, valueSchema: V): RecordSchema<K, V> =>\n new RecordSchema(keySchema, valueSchema);\nconst sSet = <T extends AnySchema>(schema: T): SetSchema<T> => new SetSchema(schema);\nconst sString = (): StringSchema => new StringSchema();\nconst sTuple = <const T extends TupleSchemas>(items: T): TupleSchema<T> => new TupleSchema(items);\nconst sUndefined = (): LiteralSchema<undefined> => new LiteralSchema(undefined);\nconst sUnion = <T extends readonly [RawOrSchema, RawOrSchema, ...RawOrSchema[]]>(\n ...items: T\n): UnionSchema<NormalizeItems<T> & readonly AnySchema[]> =>\n new UnionSchema(normalizeToSchemas(items) as NormalizeItems<T> & readonly AnySchema[]);\nconst sUnknown = (): Schema<unknown> => new Schema();\nconst sVariant = <K extends string, M extends Record<string, ObjectSchema<any, any>>>(\n discriminator: K,\n map: M,\n): VariantSchema<K, M> => new VariantSchema(discriminator, map);\nconst sCoerce = {\n bigint: (): BigIntSchema<unknown> => BigIntSchema.coerce(),\n boolean: (): BooleanSchema<unknown> => BooleanSchema.coerce(),\n date: (): DateSchema<unknown> => DateSchema.coerce(),\n number: (): NumberSchema<unknown> => NumberSchema.coerce(),\n string: (): StringSchema<unknown> => StringSchema.coerce(),\n};\n\n/* -------------------- `s` namespace — the public API -------------------- */\n\n/**\n * Namespace of all schema factories. Use `s.string()`, `s.object()`, etc.\n *\n * @example\n * import { s, type Infer } from '@vielzeug/spell';\n *\n * const User = s.object({ name: s.string(), age: s.number().int().positive() });\n * type User = Infer<typeof User>;\n */\nexport const s = {\n any: sAny,\n array: sArray,\n bigint: sBigint,\n boolean: sBoolean,\n coerce: sCoerce,\n date: sDate,\n discriminatedUnion: sVariant,\n enum: sEnum,\n instanceof: sInstanceof,\n intersect: sIntersect,\n lazy: sLazy,\n literal: sLiteral,\n map: sMap,\n never: sNever,\n null: sNull,\n number: sNumber,\n object: sObject,\n record: sRecord,\n set: sSet,\n string: sString,\n tuple: sTuple,\n undefined: sUndefined,\n union: sUnion,\n unknown: sUnknown,\n};\n","import { fail, prependIssuePath } from './errors';\nimport { createParseContext } from './messages';\n\nexport type {\n AnySchema,\n CheckContext,\n FlatError,\n FlatErrorFirst,\n Infer,\n InferInput,\n InferOutput,\n InferSchemaMode,\n Issue,\n JsonSchema,\n MergeSchemaModes,\n MessageFn,\n Messages,\n ParseContext,\n ParseResult,\n SchemaDescriptor,\n SchemaMode,\n SchemaWalker,\n ValidateFn,\n ValidateResult,\n} from './core';\nexport {\n ErrorCode,\n PipeSchema,\n Schema,\n SpellDefinitionError,\n SpellError,\n SpellValidationError,\n schemaMode,\n} from './core';\nexport type { DeepPartial } from './messages';\nexport { s } from './s';\n\n/** Error helpers and immutable parse-context creation are secondary operations. */\nexport const diagnostics = {\n createParseContext,\n fail,\n prependIssuePath,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"spell.cjs","names":[],"sources":["../src/types.ts","../src/errors.ts","../src/_dev.ts","../src/safe-object.ts","../src/messages.ts","../../arsenal/dist/guards/isPlainObject.js","../src/core.ts","../src/schemas/array.ts","../src/schemas/bigint.ts","../src/schemas/boolean.ts","../src/schemas/date.ts","../src/schemas/enum.ts","../src/schemas/instanceof.ts","../src/schemas/intersect.ts","../src/schemas/lazy.ts","../src/schemas/literal.ts","../src/schemas/map.ts","../src/schemas/never.ts","../src/schemas/number.ts","../src/schemas/union.ts","../src/schemas/object.ts","../src/schemas/raw-or.ts","../src/schemas/record.ts","../src/schemas/set.ts","../src/formats.ts","../src/schemas/string.ts","../src/schemas/tuple.ts","../src/schemas/variant.ts","../src/s.ts","../src/index.ts"],"sourcesContent":["/* -------------------- Error Codes -------------------- */\n\nexport const ErrorCode = {\n custom: 'custom',\n invalid_base64: 'invalid_base64',\n invalid_date: 'invalid_date',\n invalid_duration: 'invalid_duration',\n invalid_enum: 'invalid_enum',\n invalid_finite: 'invalid_finite',\n invalid_integer: 'invalid_integer',\n invalid_keys: 'invalid_keys',\n invalid_length: 'invalid_length',\n invalid_literal: 'invalid_literal',\n invalid_multiple_of: 'invalid_multiple_of',\n invalid_safe: 'invalid_safe',\n invalid_string: 'invalid_string',\n invalid_type: 'invalid_type',\n invalid_union: 'invalid_union',\n invalid_unique: 'invalid_unique',\n invalid_url: 'invalid_url',\n invalid_variant: 'invalid_variant',\n too_big: 'too_big',\n too_small: 'too_small',\n} as const;\n\nexport type ErrorCode = (typeof ErrorCode)[keyof typeof ErrorCode];\n\n/* -------------------- Messages -------------------- */\n\n/**\n * A validation message — either a static string or a function that receives context and returns a string.\n * **Note:** Static string values are used verbatim with no interpolation. Use the function form\n * for context-dependent messages (e.g. `(ctx) => \\`Must be at least ${ctx.min}\\``).\n */\nexport type MessageFn<Ctx extends Record<string, unknown> = Record<string, unknown>> = string | ((ctx: Ctx) => string);\n\n/* -------------------- JSON Schema -------------------- */\n\n/** Plain JSON Schema object (targeting JSON Schema 2020-12). */\nexport type JsonSchema = Record<string, unknown>;\n\n/* -------------------- Issues -------------------- */\n\n/**\n * A typed discriminated union of all issues emitted by built-in validators.\n *\n * Narrowing on `code` gives precise access to `params`:\n * ```ts\n * if (error.code === 'too_small') {\n * const min = error.params.min; // number | bigint | Date\n * }\n * ```\n */\nexport type Issue =\n | { code: 'custom'; message: string; params?: Record<string, unknown>; path: (string | number)[] }\n | { code: 'invalid_base64'; message: string; params: { format: string }; path: (string | number)[] }\n | { code: 'invalid_date'; message: string; params?: undefined; path: (string | number)[] }\n | { code: 'invalid_duration'; message: string; params: { format: string }; path: (string | number)[] }\n | { code: 'invalid_enum'; message: string; params: { values: readonly unknown[] }; path: (string | number)[] }\n | { code: 'invalid_finite'; message: string; params?: undefined; path: (string | number)[] }\n | { code: 'invalid_integer'; message: string; params?: undefined; path: (string | number)[] }\n | { code: 'invalid_keys'; message: string; params: { keys: string[] }; path: (string | number)[] }\n | { code: 'invalid_length'; message: string; params: { exact: number }; path: (string | number)[] }\n | { code: 'invalid_literal'; message: string; params: { expected: unknown }; path: (string | number)[] }\n | { code: 'invalid_multiple_of'; message: string; params: { step: number | bigint }; path: (string | number)[] }\n | { code: 'invalid_safe'; message: string; params?: undefined; path: (string | number)[] }\n | {\n code: 'invalid_string';\n message: string;\n params: { format?: string; includes?: string; pattern?: string; prefix?: string; suffix?: string };\n path: (string | number)[];\n }\n | { code: 'invalid_type'; message: string; params?: undefined; path: (string | number)[] }\n | { code: 'invalid_union'; message: string; params: { errors: Issue[][] }; path: (string | number)[] }\n | { code: 'invalid_unique'; message: string; params: { unique: true }; path: (string | number)[] }\n | { code: 'invalid_url'; message: string; params: { format: string }; path: (string | number)[] }\n | {\n code: 'invalid_variant';\n message: string;\n params: { discriminator: string; expected: string[] };\n path: (string | number)[];\n }\n | {\n code: 'too_big';\n message: string;\n params: { exclusive?: boolean; max: number | bigint | Date };\n path: (string | number)[];\n }\n | {\n code: 'too_small';\n message: string;\n params: { exclusive?: boolean; min: number | bigint | Date };\n path: (string | number)[];\n }\n | { code: string & {}; message: string; params?: Record<string, unknown>; path: (string | number)[] };\n\n/** ParseContext carries the active message set through the parse pipeline. */\nexport type ParseContext = {\n messages: import('./messages').Messages;\n};\n\n/**\n * Validator function. Receives the value after type-checking and the active ParseContext.\n * Returns an Issue array on failure, null on success, or a Promise for async validators.\n */\nexport type ValidateFn = (value: unknown, ctx?: ParseContext) => Issue[] | null | Promise<Issue[] | null>;\n\nexport type CheckContext = {\n addIssue: (issue: {\n code: string;\n message: string;\n params?: Record<string, unknown>;\n path?: (string | number)[];\n }) => void;\n};\n\n/**\n * Return type of a `check()` callback.\n * - `string` — validation failed; the string becomes the error message.\n * - `false` — validation failed with no message (use `addIssue` for a message).\n * - `true` / `null` / `void` — validation passed.\n *\n * The shorthand `condition || 'message'` works naturally:\n * ```ts\n * s.string().check((value) => value.length > 0 || 'Cannot be empty')\n * ```\n */\nexport type ValidateResult = boolean | null | undefined | string;\n\n/** Re-exported from errors for convenience — defined there. */\nexport type { FlatError, FlatErrorFirst } from './errors';\n\n/* -------------------- Schema Introspection -------------------- */\n\n/**\n * Visitor map for schema.walk(). Container handlers receive already-walked children (type R).\n * All handlers are optional — unmatched kinds return `null` unless an `unknown` fallback is provided.\n *\n * Each handler receives the concrete schema type for that kind, enabling access to\n * schema-specific properties (e.g. `ArraySchema.itemSchema`) without casting.\n */\nexport type SchemaWalker<R> = {\n array?: <T extends AnySchema, Mode extends SchemaMode>(\n schema: import('./schemas/array').ArraySchema<T, Mode>,\n item: R | null,\n ) => R;\n bigint?: <Input, Mode extends SchemaMode>(schema: import('./schemas/bigint').BigIntSchema<Input, Mode>) => R;\n boolean?: <Input, Mode extends SchemaMode>(schema: import('./schemas/boolean').BooleanSchema<Input, Mode>) => R;\n date?: <Input, Mode extends SchemaMode>(schema: import('./schemas/date').DateSchema<Input, Mode>) => R;\n enum?: <T extends import('./schemas/enum').EnumValues, Mode extends SchemaMode>(\n schema: import('./schemas/enum').EnumSchema<T, Mode>,\n ) => R;\n instanceof?: <T, Mode extends SchemaMode>(schema: import('./schemas/instanceof').InstanceOfSchema<T, Mode>) => R;\n intersect?: <T extends readonly AnySchema[], Mode extends SchemaMode>(\n schema: import('./schemas/intersect').IntersectSchema<T, Mode>,\n branches: (R | null)[],\n ) => R;\n lazy?: <T, Input, Mode extends SchemaMode>(schema: import('./schemas/lazy').LazySchema<T, Input, Mode>) => R;\n literal?: <T extends string | number | boolean | null | undefined, Mode extends SchemaMode>(\n schema: import('./schemas/literal').LiteralSchema<T, Mode>,\n ) => R;\n map?: <K extends AnySchema, V extends AnySchema, Mode extends SchemaMode>(\n schema: import('./schemas/map').MapSchema<K, V, Mode>,\n key: R | null,\n value: R | null,\n ) => R;\n never?: <Mode extends SchemaMode>(schema: import('./schemas/never').NeverSchema<Mode>) => R;\n number?: <Input, Mode extends SchemaMode>(schema: import('./schemas/number').NumberSchema<Input, Mode>) => R;\n object?: <T extends import('./schemas/object').ObjectShape, Mode extends SchemaMode>(\n schema: import('./schemas/object').ObjectSchema<T, Mode>,\n fields: Record<string, R | null>,\n ) => R;\n pipe?: <To extends AnySchema, From extends AnySchema, Mode extends SchemaMode>(\n schema: import('./core').PipeSchema<To, From, Mode>,\n from: R | null,\n to: R | null,\n ) => R;\n record?: <K extends AnySchema, V extends AnySchema, Mode extends SchemaMode>(\n schema: import('./schemas/record').RecordSchema<K, V, Mode>,\n key: R | null,\n value: R | null,\n ) => R;\n set?: <T extends AnySchema, Mode extends SchemaMode>(\n schema: import('./schemas/set').SetSchema<T, Mode>,\n item: R | null,\n ) => R;\n string?: <Input, Mode extends SchemaMode>(schema: import('./schemas/string').StringSchema<Input, Mode>) => R;\n tuple?: <T extends import('./schemas/tuple').TupleSchemas, Rest extends AnySchema | null, Mode extends SchemaMode>(\n schema: import('./schemas/tuple').TupleSchema<T, Rest, Mode>,\n items: (R | null)[],\n rest: R | null,\n ) => R;\n union?: <T extends readonly AnySchema[], Mode extends SchemaMode>(\n schema: import('./schemas/union').UnionSchema<T, Mode>,\n branches: (R | null)[],\n ) => R;\n unknown?: (schema: AnySchema) => R;\n variant?: <\n K extends string,\n M extends Record<string, import('./schemas/object').ObjectSchema<any, any>>,\n Mode extends SchemaMode,\n >(\n schema: import('./schemas/variant').VariantSchema<K, M, Mode>,\n branches: Record<string, R | null>,\n ) => R;\n};\n\ntype BaseDescriptor = {\n description?: string;\n isNullable?: boolean;\n isOptional?: boolean;\n};\n\nexport type SchemaDescriptor = BaseDescriptor &\n (\n | { kind: 'any' | 'unknown' | 'never' | 'boolean' | 'bigint' | 'date' | 'lazy' }\n | { className: string; kind: 'instanceof' }\n | {\n contentEncoding?: string;\n format?: string;\n kind: 'string';\n maxLength?: number;\n minLength?: number;\n pattern?: string | null;\n }\n | {\n exclusiveMaximum?: number;\n exclusiveMinimum?: number;\n kind: 'number';\n maximum?: number;\n minimum?: number;\n multipleOf?: number;\n typeHint?: 'integer';\n }\n | { kind: 'literal'; value: string | number | boolean | null | undefined }\n | { kind: 'enum'; values: readonly (string | number)[] }\n | { items: SchemaDescriptor; kind: 'array'; maxItems?: number; minItems?: number }\n | { items: SchemaDescriptor[]; kind: 'tuple'; rest: SchemaDescriptor | null }\n | { fields: Record<string, SchemaDescriptor>; kind: 'object'; strict: boolean }\n | { key: SchemaDescriptor; kind: 'record'; value: SchemaDescriptor }\n | { items: SchemaDescriptor; kind: 'set' }\n | { key: SchemaDescriptor; kind: 'map'; value: SchemaDescriptor }\n | { branches: SchemaDescriptor[]; kind: 'union' | 'intersect' }\n | { branches: Record<string, SchemaDescriptor>; discriminator: string; kind: 'variant' }\n | { from: SchemaDescriptor; kind: 'pipe'; to: SchemaDescriptor }\n );\n\n/* -------------------- ParseResult (forward-references SpellValidationError) -------------------- */\n\nimport type { Schema } from './core';\n// Import only the type to avoid circular dependencies\nimport type { SpellValidationError } from './errors';\n\nexport type ParseResult<T> = { data: T; success: true } | { error: SpellValidationError; success: false };\n\n/* -------------------- Schema execution mode / Infer (forward-references Schema) -------------------- */\n\n/** @internal */\nexport const schemaInput = Symbol('spell.schemaInput');\n/** Public structural marker for a schema's parsing capability. */\nexport const schemaMode = Symbol('spell.schemaMode');\n/** @internal */\nexport const schemaOutput = Symbol('spell.schemaOutput');\n\n/** Whether a schema can be parsed synchronously or requires asynchronous parsing. */\nexport type SchemaMode = 'async' | 'sync';\n\n/** A structural schema surface accepted by composition helpers. */\nexport type SchemaSurface<Output = unknown, Input = Output, Mode extends SchemaMode = SchemaMode> = {\n /** @internal */\n _parseFullAsync(value: unknown, ctx?: ParseContext): Promise<{ data: unknown; issues: Issue[] }>;\n /** @internal */\n _parseFullSync(value: unknown, ctx?: ParseContext): { data: unknown; issues: Issue[] };\n safeParseAsync(value: unknown, ctx?: ParseContext): Promise<ParseResult<Output>>;\n definition(): SchemaDescriptor;\n isOptional: boolean;\n optional(): SchemaSurface<Output | undefined, Input | undefined, Mode>;\n required(): SchemaSurface<Exclude<Output, undefined>, Exclude<Input, undefined>, Mode>;\n readonly [schemaInput]: Input;\n readonly [schemaMode]: Mode;\n readonly [schemaOutput]: Output;\n walk<R>(visitor: SchemaWalker<R>): R | null;\n};\n\nexport type AnySchema<Output = unknown, Input = Output, Mode extends SchemaMode = SchemaMode> = SchemaSurface<\n Output,\n Input,\n Mode\n>;\n\n/** Extracts a schema's parsing capability. */\nexport type InferSchemaMode<T> = T extends { readonly [schemaMode]: infer Mode extends SchemaMode } ? Mode : never;\n\n/** Selects async mode when any member of a schema collection is async. */\nexport type MergeSchemaModes<Modes extends SchemaMode> = 'async' extends Modes ? 'async' : 'sync';\n\nexport type InferOutput<T> =\n T extends Schema<infer Output, unknown, SchemaMode>\n ? Output\n : T extends { readonly [schemaOutput]: infer Output }\n ? Output\n : never;\nexport type InferInput<T> = T extends { readonly [schemaInput]: infer Input } ? Input : unknown;\nexport type Infer<T> = InferOutput<T>;\n\n/** Re-exported for convenience — defined in messages.ts. */\nexport type { Messages } from './messages';\n","import { ErrorCode, type Issue, type MessageFn } from './types';\n\n/* -------------------- Helpers -------------------- */\n\ntype IssueParams<C extends string> = Extract<Issue, { code: C }> extends { params: infer P } ? P : undefined;\n\n/**\n * Creates a single-error failure array. Use in validator functions instead of building the array manually.\n * Typed overloads ensure params match the given error code.\n */\nexport function fail<C extends ErrorCode>(code: C, message: string, params: IssueParams<C>): Issue[];\nexport function fail(code: string, message: string, params?: Record<string, unknown>): Issue[];\nexport function fail(code: string, message: string, params?: Record<string, unknown>): Issue[] {\n return [{ code, message, params, path: [] } as Issue];\n}\n\n/** @internal */\nexport function resolveMessage<Ctx extends Record<string, unknown>>(msg: MessageFn<Ctx>, ctx: Ctx): string {\n return typeof msg === 'function' ? msg(ctx) : msg;\n}\n\nexport function prependIssuePath(issues: Issue[], prefix: string | number): Issue[] {\n return issues.map((issue) => ({ ...issue, path: [prefix, ...issue.path] }));\n}\n\n/* -------------------- SpellError -------------------- */\n\n/** Base class for all spell errors. Use `instanceof SpellError` to catch any spell-originated error. */\nexport class SpellError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static is(err: unknown): err is SpellError {\n return err instanceof SpellError;\n }\n}\n\n/* -------------------- SpellValidationError -------------------- */\n\nfunction formatIssues(issues: Issue[]): string {\n return issues\n .map(({ code, message, path }) => {\n const pathStr = path.length ? path.join('.') : 'value';\n\n return `${pathStr}: ${message} [${code}]`;\n })\n .join('\\n');\n}\n\nfunction pathsEqual(left: readonly (string | number)[], right: readonly (string | number)[]): boolean {\n return left.length === right.length && left.every((segment, index) => segment === right[index]);\n}\n\nexport type FlatError = { messages: string[]; path: (string | number)[] };\nexport type FlatErrorFirst = { message: string; path: (string | number)[] };\n\nexport class SpellDefinitionError extends SpellError {}\n\nexport class SpellValidationError extends SpellError {\n readonly issues: Issue[];\n\n constructor(issues: Issue[], cause?: unknown) {\n super(formatIssues(issues), { cause });\n this.issues = issues;\n }\n\n /**\n * Returns the most-specific branch errors for `issue`, or the first union issue when omitted.\n * Surfaces the branch with the fewest issues at the deepest path — the one that \"came closest\" to matching.\n */\n bestMatch(issue?: Extract<Issue, { code: 'invalid_union' }>): Issue[] | null {\n const unionIssue =\n issue ??\n this.issues.find(\n (entry): entry is Extract<Issue, { code: 'invalid_union' }> => entry.code === ErrorCode.invalid_union,\n );\n\n if (!unionIssue) return null;\n\n const branches = unionIssue.params.errors;\n\n if (branches.length === 0) return null;\n\n const scored = branches.map((branchIssues) => {\n const maxDepth = branchIssues.reduce((d, i) => Math.max(d, i.path.length), 0);\n\n return { issues: branchIssues, score: maxDepth * 1000 - branchIssues.length };\n });\n\n scored.sort((a, b) => b.score - a.score);\n\n return scored[0]?.issues;\n }\n\n flatten(): { fieldErrors: FlatError[]; formErrors: string[] } {\n const fieldErrors: FlatError[] = [];\n const formErrors: string[] = [];\n const pathMap = new Map<string, number>();\n\n for (const issue of this.issues) {\n if (issue.path.length === 0) {\n formErrors.push(issue.message);\n } else {\n const key = JSON.stringify(issue.path);\n const existing = pathMap.get(key);\n\n if (existing !== undefined) {\n fieldErrors[existing]?.messages.push(issue.message);\n } else {\n pathMap.set(key, fieldErrors.length);\n fieldErrors.push({ messages: [issue.message], path: [...issue.path] });\n }\n }\n }\n\n return { fieldErrors, formErrors };\n }\n\n flattenFirst(): { fieldErrors: FlatErrorFirst[]; formErrors: string[] } {\n const { fieldErrors, formErrors } = this.flatten();\n\n return {\n fieldErrors: fieldErrors.map((fe) => ({ message: fe.messages[0]!, path: fe.path })),\n formErrors,\n };\n }\n\n /** Returns every message attached to exactly `path`, in issue order. */\n messagesAt(...path: (string | number)[]): string[] {\n return this.issues.filter((issue) => pathsEqual(issue.path, path)).map((issue) => issue.message);\n }\n}\n","const isDev = !(globalThis as { __SPELL_PROD__?: boolean }).__SPELL_PROD__;\n\n/** @internal */\nexport function warn(msg: string): void {\n if (isDev) console.warn(`[@vielzeug/spell] ${msg}`);\n}\n\n/** @internal — Run fn only in dev builds. Use when dev-only logic goes beyond a single warn() / error() call. */\nexport function devOnly(fn: () => void): void {\n if (isDev) fn();\n}\n","export const UNSAFE_OBJECT_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\nexport function isUnsafeObjectKey(key: string): boolean {\n return UNSAFE_OBJECT_KEYS.has(key);\n}\n\nexport function defineOwnProperty<T>(target: Record<string, T>, key: string, value: T): void {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true,\n });\n}\n\nexport function objectFromEntries<T>(entries: Iterable<readonly [string, T]>): Record<string, T> {\n const out: Record<string, T> = {};\n\n for (const [key, value] of entries) defineOwnProperty(out, key, value);\n\n return out;\n}\n\nexport function cloneRecord<T>(source: Record<string, T>): Record<string, T> {\n return objectFromEntries(Object.entries(source));\n}\n","import { warn } from './_dev';\nimport { cloneRecord, defineOwnProperty, isUnsafeObjectKey } from './safe-object';\nimport type { ParseContext } from './types';\n\nexport type Messages = {\n array: {\n length: (ctx: { exact: number; value: unknown[] }) => string;\n max: (ctx: { max: number; value: unknown[] }) => string;\n min: (ctx: { min: number; value: unknown[] }) => string;\n nonEmpty: () => string;\n type: () => string;\n unique: () => string;\n };\n bigint: {\n max: (ctx: { max: bigint; value: bigint }) => string;\n min: (ctx: { min: bigint; value: bigint }) => string;\n multipleOf: (ctx: { step: bigint; value: bigint }) => string;\n negative: () => string;\n nonNegative: () => string;\n nonPositive: () => string;\n positive: () => string;\n type: () => string;\n };\n boolean: {\n type: () => string;\n };\n check: {\n default: () => string;\n };\n date: {\n max: (ctx: { max: Date; value: Date }) => string;\n min: (ctx: { min: Date; value: Date }) => string;\n type: () => string;\n };\n enum: {\n invalid: (ctx: { values: readonly unknown[] }) => string;\n };\n instanceof: {\n type: (ctx: { className: string }) => string;\n };\n literal: {\n expected: (ctx: { expected: unknown }) => string;\n };\n map: {\n max: (ctx: { max: number; value: Map<unknown, unknown> }) => string;\n min: (ctx: { min: number; value: Map<unknown, unknown> }) => string;\n nonEmpty: () => string;\n size: (ctx: { exact: number; value: Map<unknown, unknown> }) => string;\n type: () => string;\n };\n never: {\n invalid: () => string;\n };\n number: {\n finite: () => string;\n int: () => string;\n max: (ctx: { max: number; value: number }) => string;\n min: (ctx: { min: number; value: number }) => string;\n multipleOf: (ctx: { step: number; value: number }) => string;\n negative: () => string;\n nonNegative: () => string;\n nonPositive: () => string;\n positive: () => string;\n safe: () => string;\n type: () => string;\n };\n object: {\n invalidKeys: (ctx: { keys: string[] }) => string;\n type: () => string;\n };\n set: {\n max: (ctx: { max: number; value: Set<unknown> }) => string;\n min: (ctx: { min: number; value: Set<unknown> }) => string;\n nonEmpty: () => string;\n size: (ctx: { exact: number; value: Set<unknown> }) => string;\n type: () => string;\n };\n string: {\n base64: () => string;\n base64url: () => string;\n cuid: () => string;\n cuid2: () => string;\n date: () => string;\n dateTime: () => string;\n duration: () => string;\n email: () => string;\n emoji: () => string;\n endsWith: (ctx: { suffix: string; value: string }) => string;\n hex: () => string;\n hexColor: () => string;\n includes: (ctx: { substr: string; value: string }) => string;\n ip: () => string;\n jwt: () => string;\n length: (ctx: { exact: number; value: string }) => string;\n max: (ctx: { max: number; value: string }) => string;\n min: (ctx: { min: number; value: string }) => string;\n nanoid: () => string;\n nonEmpty: () => string;\n numeric: () => string;\n regex: (ctx: { value: string }) => string;\n semver: () => string;\n slug: () => string;\n startsWith: (ctx: { prefix: string; value: string }) => string;\n time: () => string;\n type: () => string;\n ulid: () => string;\n url: () => string;\n uuid: () => string;\n };\n tuple: {\n length: (ctx: { exact: number }) => string;\n min: (ctx: { min: number }) => string;\n type: () => string;\n };\n union: {\n invalid: () => string;\n };\n variant: {\n invalidDiscriminator: (ctx: { discriminator: string; expected: string[] }) => string;\n type: () => string;\n };\n};\n\nexport type DeepPartial<T> = {\n [K in keyof T]?: T[K] extends Record<string, unknown> ? DeepPartial<T[K]> : T[K];\n};\n\nconst _builtinMessages: Messages = {\n array: {\n length: ({ exact }) => `Must have exactly ${exact} items`,\n max: ({ max }) => `Must have at most ${max} items`,\n min: ({ min }) => `Must have at least ${min} items`,\n nonEmpty: () => 'Cannot be empty',\n type: () => 'Expected array',\n unique: () => 'All items must be unique',\n },\n bigint: {\n max: ({ max }) => `Must be at most ${max}`,\n min: ({ min }) => `Must be at least ${min}`,\n multipleOf: ({ step }) => `Must be a multiple of ${step}`,\n negative: () => 'Must be negative',\n nonNegative: () => 'Must be non-negative',\n nonPositive: () => 'Must be non-positive',\n positive: () => 'Must be positive',\n type: () => 'Expected bigint',\n },\n boolean: {\n type: () => 'Expected boolean',\n },\n check: {\n default: () => 'Invalid value',\n },\n date: {\n max: ({ max }) => `Must be before ${max.toISOString()}`,\n min: ({ min }) => `Must be after ${min.toISOString()}`,\n type: () => 'Expected valid date',\n },\n enum: {\n invalid: ({ values }) => `Expected one of: ${values.map((v) => JSON.stringify(v)).join(', ')}`,\n },\n instanceof: {\n type: ({ className }) => `Expected instance of ${className}`,\n },\n literal: {\n expected: ({ expected }) => `Expected ${JSON.stringify(expected)}`,\n },\n map: {\n max: ({ max }) => `Must contain at most ${max} entries`,\n min: ({ min }) => `Must contain at least ${min} entries`,\n nonEmpty: () => 'Cannot be empty',\n size: ({ exact }) => `Must contain exactly ${exact} entries`,\n type: () => 'Expected map',\n },\n never: {\n invalid: () => 'Value is not allowed',\n },\n number: {\n finite: () => 'Must be finite',\n int: () => 'Must be an integer',\n max: ({ max }) => `Must be at most ${max}`,\n min: ({ min }) => `Must be at least ${min}`,\n multipleOf: ({ step }) => `Must be a multiple of ${step}`,\n negative: () => 'Must be negative',\n nonNegative: () => 'Must be non-negative',\n nonPositive: () => 'Must be non-positive',\n positive: () => 'Must be positive',\n safe: () => 'Must be a safe integer',\n type: () => 'Expected number',\n },\n object: {\n invalidKeys: ({ keys }) => `Unrecognized keys: ${keys.join(', ')}`,\n type: () => 'Expected object',\n },\n set: {\n max: ({ max }) => `Must contain at most ${max} items`,\n min: ({ min }) => `Must contain at least ${min} items`,\n nonEmpty: () => 'Cannot be empty',\n size: ({ exact }) => `Must contain exactly ${exact} items`,\n type: () => 'Expected set',\n },\n string: {\n base64: () => 'Invalid base64',\n base64url: () => 'Invalid base64url',\n cuid: () => 'Invalid CUID',\n cuid2: () => 'Invalid CUID2',\n date: () => 'Invalid date',\n dateTime: () => 'Invalid datetime',\n duration: () => 'Invalid ISO 8601 duration',\n email: () => 'Invalid email address',\n emoji: () => 'Invalid emoji sequence',\n endsWith: ({ suffix }) => `Must end with \"${suffix}\"`,\n hex: () => 'Invalid hex',\n hexColor: () => 'Invalid hex color',\n includes: ({ substr }) => `Must include \"${substr}\"`,\n ip: () => 'Invalid IP address',\n jwt: () => 'Invalid JWT',\n length: ({ exact }) => `Must be exactly ${exact} characters`,\n max: ({ max }) => `Must be at most ${max} characters`,\n min: ({ min }) => `Must be at least ${min} characters`,\n nanoid: () => 'Invalid NanoID',\n nonEmpty: () => 'Cannot be empty',\n numeric: () => 'Invalid numeric string',\n regex: () => 'Invalid format',\n semver: () => 'Invalid semver',\n slug: () => 'Invalid slug',\n startsWith: ({ prefix }) => `Must start with \"${prefix}\"`,\n time: () => 'Invalid time',\n type: () => 'Expected string',\n ulid: () => 'Invalid ULID',\n url: () => 'Invalid URL',\n uuid: () => 'Invalid UUID',\n },\n tuple: {\n length: ({ exact }) => `Expected tuple of length ${exact}`,\n min: ({ min }) => `Expected tuple with at least ${min} items`,\n type: () => 'Expected array',\n },\n union: {\n invalid: () => 'Does not match any of the expected types',\n },\n variant: {\n invalidDiscriminator: ({ discriminator, expected }) =>\n `Invalid discriminator value at \"${discriminator}\": expected ${expected.map((k) => JSON.stringify(k)).join(' | ')}`,\n type: () => 'Expected object',\n },\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction mergeMessages<T extends Record<string, unknown>>(base: T, patch: DeepPartial<T>): T {\n const out = cloneRecord(base) as Record<string, unknown>;\n\n for (const [key, value] of Object.entries(patch)) {\n if (value === undefined) continue;\n\n if (isUnsafeObjectKey(key)) {\n warn(`[spell] Ignoring unsafe message override key \"${key}\" to prevent prototype mutation.`);\n continue;\n }\n\n const baseValue = out[key];\n\n if (isRecord(baseValue) && isRecord(value)) {\n defineOwnProperty(out, key, mergeMessages(baseValue, value as DeepPartial<typeof baseValue>));\n } else {\n defineOwnProperty(out, key, value);\n }\n }\n\n return out as T;\n}\n\n/**\n * Creates an immutable parse context. Pass this context to parse methods when\n * validation messages vary by request, locale, or form. Spell never stores it globally.\n */\nexport function createParseContext(messages: DeepPartial<Messages> = {}): ParseContext {\n return { messages: mergeMessages(_builtinMessages, messages) };\n}\n\n/** @internal */\n","//#region src/guards/isPlainObject.ts\nfunction e(e) {\n\tif (typeof e != \"object\" || !e) return !1;\n\tlet t = Object.getPrototypeOf(e);\n\treturn t === Object.prototype || t === null;\n}\n//#endregion\nexport { e as isPlainObject };\n\n//# sourceMappingURL=isPlainObject.js.map","import { isPlainObject } from '@vielzeug/arsenal/guards';\n\nimport { SpellDefinitionError, SpellValidationError } from './errors';\nimport { createParseContext } from './messages';\nimport { defineOwnProperty } from './safe-object';\nimport {\n type AnySchema,\n type CheckContext,\n ErrorCode,\n type FlatError,\n type FlatErrorFirst,\n type Infer,\n type InferInput,\n type InferOutput,\n type InferSchemaMode,\n type Issue,\n type JsonSchema,\n type MergeSchemaModes,\n type MessageFn,\n type Messages,\n type ParseContext,\n type ParseResult,\n type SchemaDescriptor,\n type SchemaMode,\n type SchemaWalker,\n schemaInput,\n schemaMode,\n schemaOutput,\n type ValidateFn,\n type ValidateResult,\n} from './types';\n\nexport {\n fail,\n prependIssuePath,\n resolveMessage,\n SpellDefinitionError,\n SpellError,\n SpellValidationError,\n} from './errors';\nexport {\n type AnySchema,\n type CheckContext,\n ErrorCode,\n type FlatError,\n type FlatErrorFirst,\n type Infer,\n type InferInput,\n type InferOutput,\n type InferSchemaMode,\n type Issue,\n type JsonSchema,\n type MergeSchemaModes,\n type MessageFn,\n type Messages,\n type ParseContext,\n type ParseResult,\n type SchemaDescriptor,\n type SchemaMode,\n type SchemaWalker,\n schemaMode,\n type ValidateFn,\n type ValidateResult,\n};\n\nfunction deepFreeze<T>(value: T): T {\n if (value === null || typeof value !== 'object' || Object.isFrozen(value)) return value;\n\n for (const child of Object.values(value as Record<string, unknown>)) deepFreeze(child);\n\n return Object.freeze(value);\n}\n\nfunction materializeValue<T>(value: T): T {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => materializeValue(item)) as T;\n\n if (value instanceof Date) return new Date(value.getTime()) as T;\n\n if (value instanceof Map) {\n const out = new Map<unknown, unknown>();\n\n for (const [key, mapValue] of value.entries()) out.set(materializeValue(key), materializeValue(mapValue));\n\n return out as T;\n }\n\n if (value instanceof Set) return new Set([...value.values()].map((item) => materializeValue(item))) as T;\n\n if (isPlainObject(value)) {\n const out: Record<string, unknown> = {};\n\n for (const [key, entry] of Object.entries(value)) defineOwnProperty(out, key, materializeValue(entry));\n\n return out as T;\n }\n\n return value;\n}\n\n/* -------------------- Schema State -------------------- */\n\ntype Preprocessor = (value: unknown) => unknown;\ntype Postprocessor = (value: unknown) => unknown;\n\nexport interface SchemaState<Output = unknown> {\n catch?: () => Output;\n defaultValue?: () => Output;\n description?: string;\n hasAsyncChecks: boolean;\n hasRuntimeChecks: boolean;\n isNullable: boolean;\n isOptional: boolean;\n postprocessors: Postprocessor[];\n preprocessors: Preprocessor[];\n validators: ValidateFn[];\n}\n\nfunction defaultState<Output>(): SchemaState<Output> {\n return {\n hasAsyncChecks: false,\n hasRuntimeChecks: false,\n isNullable: false,\n isOptional: false,\n postprocessors: [],\n preprocessors: [],\n validators: [],\n };\n}\n\nfunction cloneState<Output>(state: SchemaState<Output>): SchemaState<Output> {\n return {\n catch: state.catch,\n defaultValue: state.defaultValue,\n description: state.description,\n hasAsyncChecks: state.hasAsyncChecks,\n hasRuntimeChecks: state.hasRuntimeChecks,\n isNullable: state.isNullable,\n isOptional: state.isOptional,\n postprocessors: [...state.postprocessors],\n preprocessors: [...state.preprocessors],\n validators: [...state.validators],\n };\n}\n\n/* -------------------- Internal parse-value return type -------------------- */\n\n/** @internal */\nexport type ParseValue = { data: unknown; issues: Issue[]; typeOk: boolean };\n\ntype MaybePromise<T> = T | Promise<T>;\n\n/* -------------------- ParseContext default -------------------- */\n\n/** @internal */\nexport function _makeCtx(messages?: Messages): ParseContext {\n return messages ? { messages } : createParseContext();\n}\n\n/* -------------------- ValidateResult normalizer -------------------- */\n\nfunction normalizeValidateResult(result: ValidateResult, ctxIssues: Issue[], ctx: ParseContext): Issue[] | null {\n const issues = [...ctxIssues];\n\n if (typeof result === 'string') {\n issues.push({ code: ErrorCode.custom, message: result, path: [] });\n } else if (result === false && issues.length === 0) {\n issues.push({ code: ErrorCode.custom, message: ctx.messages.check.default(), path: [] });\n }\n\n return issues.length ? issues : null;\n}\n\n/* -------------------- Base Schema -------------------- */\n\nexport class Schema<Output = unknown, Input = Output, Mode extends SchemaMode = 'sync'> {\n declare readonly [schemaInput]: Input;\n declare readonly [schemaMode]: Mode;\n declare readonly [schemaOutput]: Output;\n\n protected state: SchemaState<Output>;\n\n protected _annotations: Record<string, unknown> = {};\n\n private _typeValidator: ValidateFn | null = null;\n\n constructor(typeValidator?: ValidateFn) {\n this.state = defaultState<Output>();\n this._typeValidator = typeValidator ?? null;\n }\n\n /* -------------------- Parse -------------------- */\n\n parse(this: Schema<Output, Input, 'sync'>, value: unknown, ctx?: ParseContext): Output;\n parse(value: unknown, ctx?: ParseContext): Output {\n if (this.state.hasAsyncChecks) {\n throw new SpellValidationError([\n { code: ErrorCode.custom, message: 'parse() cannot evaluate async checks. Use parseAsync().', path: [] },\n ]);\n }\n\n const c = ctx ?? _makeCtx();\n\n return this._withCatch(() => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as Output;\n\n const coreOrPromise = this._parse(prepared.value, c);\n\n if (coreOrPromise instanceof Promise) {\n throw new SpellValidationError([\n {\n code: ErrorCode.custom,\n message: 'parse() received an async schema. Use parseAsync() instead.',\n path: [],\n },\n ]);\n }\n\n const core = coreOrPromise;\n const validationIssues = core.typeOk ? this._runValidatorsSync(core.data, c) : [];\n const allIssues = [...core.issues, ...validationIssues];\n\n if (allIssues.length) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(core.data) as Output;\n });\n }\n\n safeParse(this: Schema<Output, Input, 'sync'>, value: unknown, ctx?: ParseContext): ParseResult<Output>;\n safeParse(value: unknown, ctx?: ParseContext): ParseResult<Output> {\n try {\n return {\n data: (this.parse as unknown as (value: unknown, ctx?: ParseContext) => Output)(value, ctx),\n success: true,\n };\n } catch (error) {\n if (error instanceof SpellValidationError) return { error, success: false };\n\n throw error;\n }\n }\n\n async parseAsync(value: unknown, ctx?: ParseContext): Promise<Output> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as Output;\n\n const core = await this._parse(prepared.value, c);\n const validationIssues = core.typeOk ? await this._runValidatorsAsync(core.data, c) : [];\n const allIssues = [...core.issues, ...validationIssues];\n\n if (allIssues.length) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(core.data) as Output;\n });\n }\n\n async safeParseAsync(value: unknown, ctx?: ParseContext): Promise<ParseResult<Output>> {\n try {\n return { data: await this.parseAsync(value, ctx), success: true };\n } catch (error) {\n if (error instanceof SpellValidationError) return { error, success: false };\n\n throw error;\n }\n }\n\n /**\n * Internal full parse without throwing. Returns { data, issues }.\n * Used by composite schemas (array, object, union, etc.) to avoid\n * the try/catch + object allocation overhead of safeParse().\n * @internal\n */\n _parseFullSync(value: unknown, ctx?: ParseContext): { data: unknown; issues: Issue[] } {\n if (this.state.hasAsyncChecks) {\n throw new SpellValidationError([\n { code: ErrorCode.custom, message: 'Sync parsing cannot evaluate async checks. Use parseAsync().', path: [] },\n ]);\n }\n\n const c = ctx ?? _makeCtx();\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return { data: prepared.value, issues: [] };\n\n const coreOrPromise = this._parse(prepared.value, c);\n\n if (coreOrPromise instanceof Promise) {\n throw new SpellValidationError([\n {\n code: ErrorCode.custom,\n message: 'Sync parse path received an async schema. Use parseAsync() instead.',\n path: [],\n },\n ]);\n }\n\n const core = coreOrPromise;\n const validationIssues = core.typeOk ? this._runValidatorsSync(core.data, c) : [];\n const allIssues = [...core.issues, ...validationIssues];\n\n if (allIssues.length > 0) {\n if (this.state.catch) return { data: this.state.catch(), issues: [] };\n\n return { data: core.data, issues: allIssues };\n }\n\n return { data: this._runPostprocessors(core.data), issues: [] };\n }\n\n /**\n * Async version of _parseFullSync.\n * @internal\n */\n async _parseFullAsync(value: unknown, ctx?: ParseContext): Promise<{ data: unknown; issues: Issue[] }> {\n const c = ctx ?? _makeCtx();\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return { data: prepared.value, issues: [] };\n\n const core = await this._parse(prepared.value, c);\n const validationIssues = core.typeOk ? await this._runValidatorsAsync(core.data, c) : [];\n const allIssues = [...core.issues, ...validationIssues];\n\n if (allIssues.length > 0) {\n if (this.state.catch) return { data: this.state.catch(), issues: [] };\n\n return { data: core.data, issues: allIssues };\n }\n\n return { data: this._runPostprocessors(core.data), issues: [] };\n }\n\n /* -------------------- Validators -------------------- */\n\n /**\n * Add a synchronous domain rule. For asynchronous work, use `checkAsync()`;\n * making execution mode explicit prevents unchecked Promise-returning callbacks.\n */\n check<F extends (value: Output, ctx: CheckContext) => ValidateResult | Promise<ValidateResult>>(\n fn: ReturnType<F> extends PromiseLike<unknown> ? never : F,\n ): this {\n return this._addCheck(fn as (value: Output, ctx: CheckContext) => ValidateResult, false);\n }\n\n checkAsync(\n this: Schema<Output, Input, 'sync'>,\n fn: (value: Output, ctx: CheckContext) => Promise<ValidateResult>,\n ): Schema<Output, Input, 'async'> {\n return this._addCheck(fn, true) as unknown as Schema<Output, Input, 'async'>;\n }\n\n protected _addCheck(\n fn:\n | ((value: Output, ctx: CheckContext) => ValidateResult)\n | ((value: Output, ctx: CheckContext) => Promise<ValidateResult>),\n async: boolean,\n ): this {\n const validator: ValidateFn = (value, ctx) => {\n const ctxIssues: Issue[] = [];\n const checkCtx: CheckContext = {\n addIssue: (issue) => ctxIssues.push({ ...issue, path: issue.path ?? [] } as Issue),\n };\n const result = fn(value as Output, checkCtx);\n\n if (result instanceof Promise) {\n return result.then((r) => normalizeValidateResult(r, ctxIssues, ctx!));\n }\n\n return normalizeValidateResult(result, ctxIssues, ctx!);\n };\n\n const next = this._addConstraint(validator);\n\n next.state.hasRuntimeChecks = true;\n\n if (async) next.state.hasAsyncChecks = true;\n\n return next;\n }\n\n /* -------------------- Nullability / Optionality -------------------- */\n\n optional(): Schema<Output | undefined, Input | undefined, Mode> {\n const cloned = this._clone() as unknown as Schema<Output | undefined, Input | undefined, Mode>;\n\n cloned.state.isOptional = true;\n\n return cloned;\n }\n\n nullable(): Schema<Output | null, Input | null, Mode> {\n const cloned = this._clone() as unknown as Schema<Output | null, Input | null, Mode>;\n\n cloned.state.isNullable = true;\n\n return cloned;\n }\n\n nullish(): Schema<Output | null | undefined, Input | null | undefined, Mode> {\n const cloned = this._clone() as unknown as Schema<Output | null | undefined, Input | null | undefined, Mode>;\n\n cloned.state.isOptional = true;\n cloned.state.isNullable = true;\n\n return cloned;\n }\n\n required(): Schema<Exclude<Output, undefined>, Exclude<Input, undefined>, Mode> {\n const cloned = this._clone() as unknown as Schema<Exclude<Output, undefined>, Exclude<Input, undefined>, Mode>;\n\n cloned.state.isOptional = false;\n\n return cloned;\n }\n\n /* -------------------- Transforms -------------------- */\n\n default(defaultValue: Output | (() => Output)): this {\n const cloned = this._clone();\n\n cloned.state.defaultValue =\n typeof defaultValue === 'function' ? (defaultValue as () => Output) : () => materializeValue(defaultValue);\n\n return cloned;\n }\n\n catch(fallback: Output | (() => Output)): this {\n const cloned = this._clone();\n\n cloned.state.catch = typeof fallback === 'function' ? (fallback as () => Output) : () => materializeValue(fallback);\n\n return cloned;\n }\n\n transform<NewOutput>(fn: (value: Output) => NewOutput): Schema<NewOutput, Input, Mode> {\n const next = this._clone() as unknown as Schema<NewOutput, Input, Mode>;\n\n next.state.postprocessors.push(fn as (v: unknown) => unknown);\n\n return next;\n }\n\n preprocess(fn: (value: unknown) => unknown): this {\n const cloned = this._clone();\n\n cloned.state.preprocessors.push(fn);\n\n return cloned;\n }\n\n pipe<B extends AnySchema>(next: B): PipeSchema<B, this, MergeSchemaModes<Mode | InferSchemaMode<B>>> {\n return new PipeSchema(this, next);\n }\n\n /* -------------------- Introspection -------------------- */\n\n label(description: string): this {\n const cloned = this._clone();\n\n cloned.state.description = description;\n\n return cloned;\n }\n\n definition(): SchemaDescriptor {\n if (\n this.state.catch ||\n this.state.defaultValue ||\n this.state.postprocessors.length > 0 ||\n this.state.preprocessors.length > 0 ||\n this.state.hasRuntimeChecks\n ) {\n throw new SpellDefinitionError(\n 'Schemas with checks, transforms, defaults, catches, or preprocessors have no declarative definition.',\n );\n }\n\n return deepFreeze(this._toDescriptorImpl()) as SchemaDescriptor;\n }\n\n get description(): string | undefined {\n return this.state.description;\n }\n\n get isOptional(): boolean {\n return this.state.isOptional;\n }\n\n get isNullable(): boolean {\n return this.state.isNullable;\n }\n\n is(value: unknown): value is Output {\n return (this.safeParse as unknown as (value: unknown) => ParseResult<Output>)(value).success;\n }\n\n assert(value: unknown, label?: string): asserts value is Output {\n const result = this._parseFullSync(value);\n\n if (result.issues.length === 0) return;\n\n const issues = label\n ? result.issues.map((issue) => ({\n ...issue,\n message: issue.path.length === 0 ? `${label}: ${issue.message}` : issue.message,\n }))\n : result.issues;\n\n throw new SpellValidationError(issues);\n }\n\n walk<R>(visitor: SchemaWalker<R>): R | null {\n return this._walk(visitor);\n }\n\n get kind(): string {\n return this._kind;\n }\n\n protected get _kind(): string {\n return 'any';\n }\n\n /* -------------------- Protected helpers -------------------- */\n\n protected _describeBase(): { description?: string; isNullable?: true; isOptional?: true } {\n return {\n ...(this.state.description !== undefined ? { description: this.state.description } : {}),\n ...(this.state.isNullable ? { isNullable: true as const } : {}),\n ...(this.state.isOptional ? { isOptional: true as const } : {}),\n };\n }\n\n protected _addConstraint(\n validator: ValidateFn,\n mergeAnnotations?: (current: Record<string, unknown>) => Record<string, unknown>,\n ): this {\n const next = this._clone();\n\n next.state.validators.push(validator);\n\n if (mergeAnnotations) {\n next._annotations = mergeAnnotations({ ...next._annotations });\n }\n\n return next;\n }\n\n protected _construct(state: SchemaState<any>): this {\n const next = Object.assign(Object.create(Object.getPrototypeOf(this)), this, { state }) as this;\n\n next._annotations = { ...this._annotations };\n\n return next;\n }\n\n protected _clone(): this {\n return this._construct(cloneState(this.state));\n }\n\n protected _copyStateTo<T extends Schema<any, any>>(target: T): T {\n target.state = cloneState(this.state);\n\n return target;\n }\n\n protected _walk<R>(visitor: SchemaWalker<R>): R | null {\n if (visitor.unknown) return visitor.unknown(this);\n\n return null;\n }\n\n protected _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'any' };\n }\n\n /* -------------------- Private -------------------- */\n\n private _withCatch<T>(fn: () => T): T {\n if (!this.state.catch) return fn();\n\n try {\n return fn();\n } catch (error) {\n if (error instanceof SpellValidationError) return this.state.catch() as unknown as T;\n\n throw error;\n }\n }\n\n protected async _withCatchAsync<T>(fn: () => Promise<T>): Promise<T> {\n if (!this.state.catch) return fn();\n\n try {\n return await fn();\n } catch (error) {\n if (error instanceof SpellValidationError) return this.state.catch() as unknown as T;\n\n throw error;\n }\n }\n\n protected _prepareInput(value: unknown): { skip: true; value: null | undefined } | { skip: false; value: unknown } {\n const processed = this._runPreprocessors(value);\n const withDefault = processed === undefined && this.state.defaultValue ? this.state.defaultValue() : processed;\n\n if ((this.state.isOptional && withDefault === undefined) || (this.state.isNullable && withDefault === null)) {\n return { skip: true, value: withDefault };\n }\n\n return { skip: false, value: withDefault };\n }\n\n protected _runPreprocessors(value: unknown): unknown {\n let current = value;\n\n for (const preprocess of this.state.preprocessors) current = preprocess(current);\n\n return current;\n }\n\n protected _runPostprocessors(value: unknown): unknown {\n let current = value;\n\n for (const postprocess of this.state.postprocessors) current = postprocess(current);\n\n return current;\n }\n\n private _runValidatorsSync(value: unknown, ctx: ParseContext): Issue[] {\n if (this._typeValidator) {\n const typeResult = this._typeValidator(value, ctx);\n\n if (typeResult instanceof Promise) {\n throw new SpellValidationError([\n {\n code: ErrorCode.custom,\n message: 'Type validator returned a Promise. Use parseAsync() for async validation.',\n path: [],\n },\n ]);\n }\n\n if (typeResult && typeResult.length > 0) return typeResult;\n }\n\n const issues: Issue[] = [];\n\n for (const validate of this.state.validators) {\n const result = validate(value, ctx);\n\n if (result instanceof Promise) {\n throw new SpellValidationError([\n {\n code: ErrorCode.custom,\n message: 'Sync parsing received an async check. Use checkAsync() and parseAsync().',\n path: [],\n },\n ]);\n }\n\n if (result) issues.push(...result);\n }\n\n return issues;\n }\n\n protected async _runValidatorsAsync(value: unknown, ctx: ParseContext): Promise<Issue[]> {\n if (this._typeValidator) {\n const typeResult = await this._typeValidator(value, ctx);\n\n if (typeResult && typeResult.length > 0) return typeResult;\n }\n\n const issues: Issue[] = [];\n\n for (const validate of this.state.validators) {\n const result = await validate(value, ctx);\n\n if (result) issues.push(...result);\n }\n\n return issues;\n }\n\n protected _parse(_value: unknown, _ctx: ParseContext): MaybePromise<ParseValue> {\n return { data: _value, issues: [], typeOk: true };\n }\n}\n\n/* -------------------- PipeSchema -------------------- */\n\nexport class PipeSchema<\n To extends AnySchema,\n From extends AnySchema,\n Mode extends SchemaMode = MergeSchemaModes<InferSchemaMode<To | From>>,\n> extends Schema<InferOutput<To>, InferInput<From>, Mode> {\n readonly from: From;\n readonly to: To;\n\n protected override get _kind(): string {\n return 'pipe';\n }\n\n override checkAsync(\n this: PipeSchema<To, From, 'sync'>,\n fn: (value: InferOutput<To>, ctx: CheckContext) => Promise<ValidateResult>,\n ): PipeSchema<To, From, 'async'> {\n return this._addCheck(fn, true) as unknown as PipeSchema<To, From, 'async'>;\n }\n\n constructor(from: From, to: To) {\n super();\n this.from = from;\n this.to = to;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): MaybePromise<ParseValue> {\n const r1OrPromise = this.from._parseFullSync(value, ctx);\n\n if (r1OrPromise instanceof Promise) {\n return (r1OrPromise as Promise<{ data: unknown; issues: Issue[] }>).then((r1) => {\n if (r1.issues.length > 0) return { data: value, issues: r1.issues, typeOk: false };\n\n return this.to\n ._parseFullAsync(r1.data, ctx)\n .then((r2) =>\n r2.issues.length > 0\n ? { data: r1.data, issues: r2.issues, typeOk: false }\n : { data: r2.data, issues: [], typeOk: true },\n );\n });\n }\n\n if (r1OrPromise.issues.length > 0) return { data: value, issues: r1OrPromise.issues, typeOk: false };\n\n const r2OrPromise = this.to._parseFullSync(r1OrPromise.data, ctx);\n\n if (r2OrPromise instanceof Promise) {\n return r2OrPromise.then((r2) =>\n r2.issues.length > 0\n ? { data: r1OrPromise.data, issues: r2.issues, typeOk: false }\n : { data: r2.data, issues: [], typeOk: true },\n );\n }\n\n return r2OrPromise.issues.length > 0\n ? { data: r1OrPromise.data, issues: r2OrPromise.issues, typeOk: false }\n : { data: r2OrPromise.data, issues: [], typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<InferOutput<To>> {\n const c = ctx ?? _makeCtx();\n const first = await this.from._parseFullAsync(value, c);\n\n if (first.issues.length > 0) throw new SpellValidationError(first.issues);\n\n const second = await this.to._parseFullAsync(first.data, c);\n\n if (second.issues.length > 0) throw new SpellValidationError(second.issues);\n\n const issues = await this._runValidatorsAsync(second.data, c);\n\n if (issues.length > 0) throw new SpellValidationError(issues);\n\n return this._runPostprocessors(second.data) as InferOutput<To>;\n }\n\n protected override _walk<R>(visitor: SchemaWalker<R>): R | null {\n const fromR = this.from.walk(visitor);\n const toR = this.to.walk(visitor);\n\n if (visitor.pipe) return visitor.pipe(this, fromR, toR);\n\n return super._walk(visitor);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n from: this.from.definition(),\n kind: 'pipe',\n to: this.to.definition(),\n };\n }\n}\n","import type { AnySchema, InferOutput, Issue, MessageFn, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, ErrorCode, fail, prependIssuePath, resolveMessage, Schema, SpellValidationError } from '../core';\n\n/* -------------------- Typed annotations -------------------- */\n\ninterface ArrayAnnotations extends Record<string, unknown> {\n maxItems?: number;\n minItems?: number;\n}\n\nexport class ArraySchema<\n T extends AnySchema,\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<import('../core').InferSchemaMode<T>>,\n> extends Schema<InferOutput<T>[], unknown, Mode> {\n readonly itemSchema: T;\n\n protected override get _kind(): string {\n return 'array';\n }\n\n override checkAsync(\n this: ArraySchema<T, 'sync'>,\n fn: (value: InferOutput<T>[], ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): ArraySchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as ArraySchema<T, 'async'>;\n }\n\n constructor(itemSchema: T) {\n super();\n this.itemSchema = itemSchema;\n }\n\n private _parseItemsSync(items: unknown[], ctx: ParseContext): { data: InferOutput<T>[]; issues: Issue[] } {\n const issues: Issue[] = [];\n const parsed: InferOutput<T>[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const result = this.itemSchema._parseFullSync(items[i], ctx);\n\n if (result.issues.length === 0) {\n parsed.push(result.data as InferOutput<T>);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n parsed.push(items[i] as InferOutput<T>);\n }\n }\n\n return { data: parsed, issues };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!Array.isArray(value)) {\n return { data: value, issues: fail(ErrorCode.invalid_type, ctx.messages.array.type()), typeOk: false };\n }\n\n const { data: items, issues } = this._parseItemsSync(value, ctx);\n\n return { data: items, issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<InferOutput<T>[]> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync<InferOutput<T>[]>(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as unknown as InferOutput<T>[];\n\n const raw = prepared.value;\n\n if (!Array.isArray(raw)) {\n throw new SpellValidationError(fail(ErrorCode.invalid_type, c.messages.array.type()));\n }\n\n const settled = await Promise.all(raw.map((item) => this.itemSchema._parseFullAsync(item, c)));\n\n const issues: Issue[] = [];\n const parsed: InferOutput<T>[] = [];\n\n for (let i = 0; i < settled.length; i++) {\n const result = settled[i];\n\n if (result.issues.length === 0) {\n parsed.push(result.data as InferOutput<T>);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n parsed.push(raw[i] as InferOutput<T>);\n }\n }\n\n const validationIssues = await this._runValidatorsAsync(parsed, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(parsed) as InferOutput<T>[];\n });\n }\n\n min(length: number, message?: MessageFn<{ min: number; value: unknown[] }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as unknown[]).length >= length) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.array.min, { min: length, value: value as unknown[] }),\n {\n min: length,\n },\n );\n },\n (current) => {\n const ann = current as ArrayAnnotations;\n\n return {\n ...ann,\n minItems: ann.minItems === undefined ? length : Math.max(ann.minItems, length),\n };\n },\n );\n }\n\n max(length: number, message?: MessageFn<{ max: number; value: unknown[] }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as unknown[]).length <= length) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.array.max, { max: length, value: value as unknown[] }),\n {\n max: length,\n },\n );\n },\n (current) => {\n const ann = current as ArrayAnnotations;\n\n return {\n ...ann,\n maxItems: ann.maxItems === undefined ? length : Math.min(ann.maxItems, length),\n };\n },\n );\n }\n\n length(exact: number, message?: MessageFn<{ exact: number; value: unknown[] }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as unknown[]).length === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.array.length, { exact, value: value as unknown[] }),\n { exact },\n );\n },\n (ann) => ({ ...ann, maxItems: exact, minItems: exact }),\n );\n }\n\n nonEmpty(message?: MessageFn<{ min: number; value: unknown[] }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as unknown[];\n\n return typed.length > 0\n ? null\n : fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.array.nonEmpty, { min: 1, value: typed }), {\n min: 1,\n });\n });\n }\n\n /**\n * Validates that all array elements are unique.\n *\n * **Default behaviour:** Uniqueness is checked using JavaScript `Set` semantics, which means\n * **referential equality** for objects. Two structurally identical objects such as\n * `{ id: 1 }` and `{ id: 1 }` are considered different values and will not be\n * flagged as duplicates.\n *\n * **Custom equality:** Pass an `equalsFn` to use structural or domain-specific comparison\n * logic (e.g. compare by a specific field, or use deep equality).\n *\n * @example\n * s.array(s.object({ id: s.number() })).unique((a, b) => a.id === b.id)\n */\n unique(\n equalsFnOrMessage?: ((a: InferOutput<T>, b: InferOutput<T>) => boolean) | MessageFn<{ value: unknown[] }>,\n message?: MessageFn<{ value: unknown[] }>,\n ): this {\n const isCustomEqualsFn = typeof equalsFnOrMessage === 'function' && equalsFnOrMessage.length === 2;\n const equalsFn = isCustomEqualsFn ? (equalsFnOrMessage as (a: InferOutput<T>, b: InferOutput<T>) => boolean) : null;\n const resolvedMessage = isCustomEqualsFn\n ? message\n : typeof equalsFnOrMessage === 'function'\n ? (equalsFnOrMessage as MessageFn<{ value: unknown[] }>)\n : undefined;\n\n return this._addConstraint((value, ctx) => {\n const typed = value as InferOutput<T>[];\n let isUnique: boolean;\n\n if (equalsFn) {\n isUnique = typed.every((a, i) => typed.slice(0, i).every((b) => !equalsFn(a, b)));\n } else {\n isUnique = new Set(typed).size === typed.length;\n }\n\n if (isUnique) return null;\n\n return fail(\n ErrorCode.invalid_unique,\n resolveMessage(resolvedMessage ?? ctx!.messages.array.unique, { value: typed as unknown[] }),\n {\n unique: true,\n },\n );\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const ann = this._annotations as ArrayAnnotations;\n\n return {\n ...this._describeBase(),\n ...(ann.maxItems !== undefined ? { maxItems: ann.maxItems } : {}),\n ...(ann.minItems !== undefined ? { minItems: ann.minItems } : {}),\n items: this.itemSchema.definition(),\n kind: 'array',\n };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const item = this.itemSchema.walk(visitor);\n\n if (visitor.array) return visitor.array(this, item);\n\n return super._walk(visitor);\n }\n}\n","import { warn } from '../_dev';\nimport type { MessageFn, SchemaDescriptor } from '../core';\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\nexport class BigIntSchema<Input = bigint, Mode extends import('../core').SchemaMode = 'sync'> extends Schema<\n bigint,\n Input,\n Mode\n> {\n protected override get _kind(): string {\n return 'bigint';\n }\n\n override checkAsync(\n this: BigIntSchema<Input, 'sync'>,\n fn: (value: bigint, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): BigIntSchema<Input, 'async'> {\n return this._addCheck(fn, true) as unknown as BigIntSchema<Input, 'async'>;\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'bigint' ? null : fail(ErrorCode.invalid_type, ctx!.messages.bigint.type()),\n );\n }\n\n min(minimum: bigint, message?: MessageFn<{ min: bigint; value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed >= minimum) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.bigint.min, { min: minimum, value: typed }),\n { min: minimum },\n );\n });\n }\n\n max(maximum: bigint, message?: MessageFn<{ max: bigint; value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed <= maximum) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.bigint.max, { max: maximum, value: typed }),\n { max: maximum },\n );\n });\n }\n\n positive(message?: MessageFn<{ value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed > 0n) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.bigint.positive, { value: typed }), {\n exclusive: true,\n min: 0n,\n });\n });\n }\n\n negative(message?: MessageFn<{ value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed < 0n) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.bigint.negative, { value: typed }), {\n exclusive: true,\n max: 0n,\n });\n });\n }\n\n nonNegative(message?: MessageFn<{ value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed >= 0n) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.bigint.nonNegative, { value: typed }), {\n min: 0n,\n });\n });\n }\n\n nonPositive(message?: MessageFn<{ value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed <= 0n) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.bigint.nonPositive, { value: typed }), {\n max: 0n,\n });\n });\n }\n\n multipleOf(step: bigint, message?: MessageFn<{ step: bigint; value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed % step === 0n) return null;\n\n return fail(\n ErrorCode.invalid_multiple_of,\n resolveMessage(message ?? ctx!.messages.bigint.multipleOf, { step, value: typed }),\n { step },\n );\n });\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.bigint) return visitor.bigint(this);\n\n return super._walk(visitor);\n }\n\n /**\n * Returns a new schema that coerces the input to a bigint before validation.\n * Handles number, string (up to 1000 digits), and bigint inputs.\n *\n * Equivalent to `s.coerce.bigint()`.\n */\n coerce(): BigIntSchema<unknown> {\n return BigIntSchema.coerce();\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n if (this.state.validators.length > 0) {\n warn(\n 'definition(): this bigint schema has constraints (e.g. min(), max(), positive()). ' +\n 'BigInt constraints are not serializable and will not appear in the definition.',\n );\n }\n\n return { ...this._describeBase(), kind: 'bigint' };\n }\n\n static coerce(): BigIntSchema<unknown> {\n return new BigIntSchema().preprocess((value: unknown) => {\n if (typeof value === 'bigint') return value;\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value) || !Number.isInteger(value)) return value;\n\n try {\n return BigInt(value);\n } catch {\n return value;\n }\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n // Guard against DoS: BigInt() conversion is O(n²) in digit count.\n if (trimmed.length === 0 || trimmed.length > 1000) return value;\n\n try {\n return BigInt(trimmed);\n } catch {\n return value;\n }\n }\n\n return value;\n });\n }\n}\n","import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class BooleanSchema<Input = boolean, Mode extends import('../core').SchemaMode = 'sync'> extends Schema<\n boolean,\n Input,\n Mode\n> {\n protected override get _kind(): string {\n return 'boolean';\n }\n\n override checkAsync(\n this: BooleanSchema<Input, 'sync'>,\n fn: (value: boolean, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): BooleanSchema<Input, 'async'> {\n return this._addCheck(fn, true) as unknown as BooleanSchema<Input, 'async'>;\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'boolean'\n ? null\n : [{ code: ErrorCode.invalid_type, message: ctx!.messages.boolean.type(), path: [] }],\n );\n }\n\n /**\n * Returns a new schema that coerces the input to a boolean before validation.\n * Accepts `'true'`, `'1'`, `1` as `true`; `'false'`, `'0'`, `0` as `false`.\n *\n * Equivalent to `s.coerce.boolean()`.\n */\n coerce(): BooleanSchema<unknown> {\n return BooleanSchema.coerce();\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'boolean' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.boolean) return visitor.boolean(this);\n\n return super._walk(visitor);\n }\n\n static coerce(): BooleanSchema<unknown> {\n return new BooleanSchema().preprocess((v: unknown) => {\n if (typeof v === 'boolean') return v;\n\n if (v === 'true' || v === '1' || v === 1) return true;\n\n if (v === 'false' || v === '0' || v === 0) return false;\n\n return v;\n });\n }\n}\n","import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\nexport class DateSchema<Input = Date, Mode extends import('../core').SchemaMode = 'sync'> extends Schema<\n Date,\n Input,\n Mode\n> {\n protected override get _kind(): string {\n return 'date';\n }\n\n override checkAsync(\n this: DateSchema<Input, 'sync'>,\n fn: (value: Date, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): DateSchema<Input, 'async'> {\n return this._addCheck(fn, true) as unknown as DateSchema<Input, 'async'>;\n }\n\n constructor() {\n super((value, ctx) =>\n value instanceof Date && !Number.isNaN(value.getTime())\n ? null\n : fail(ErrorCode.invalid_date, ctx!.messages.date.type()),\n );\n }\n\n min(date: Date, message?: MessageFn<{ min: Date; value: Date }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Date;\n\n return typed >= date\n ? null\n : fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.date.min, { min: date, value: typed }), {\n min: date,\n });\n });\n }\n\n max(date: Date, message?: MessageFn<{ max: Date; value: Date }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Date;\n\n return typed <= date\n ? null\n : fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.date.max, { max: date, value: typed }), {\n max: date,\n });\n });\n }\n\n /**\n * Returns a new schema that coerces string or number input to a `Date` before validation.\n *\n * Equivalent to `s.coerce.date()`.\n */\n coerce(): DateSchema<unknown> {\n return DateSchema.coerce();\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'date' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.date) return visitor.date(this);\n\n return super._walk(visitor);\n }\n\n static coerce(): DateSchema<unknown> {\n return new DateSchema().preprocess((v: unknown) => {\n if (v instanceof Date) return v;\n\n if (typeof v === 'string' || typeof v === 'number') return new Date(v);\n\n return v;\n });\n }\n}\n","import type { SchemaDescriptor, ValidateFn } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport type EnumValues = readonly [string | number, ...(string | number)[]];\ntype EnumType<T extends EnumValues> = T[number];\n\nfunction buildEnumValidator(values: readonly unknown[]): ValidateFn {\n const set = new Set<unknown>(values);\n\n return (value, ctx) =>\n set.has(value)\n ? null\n : [\n {\n code: ErrorCode.invalid_enum,\n message: ctx!.messages.enum.invalid({ values }),\n params: { values },\n path: [],\n },\n ];\n}\n\nexport class EnumSchema<T extends EnumValues, Mode extends import('../core').SchemaMode = 'sync'> extends Schema<\n EnumType<T>,\n EnumType<T>,\n Mode\n> {\n readonly values: T;\n\n protected override get _kind(): string {\n return 'enum';\n }\n\n override checkAsync(\n this: EnumSchema<T, 'sync'>,\n fn: (value: EnumType<T>, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): EnumSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as EnumSchema<T, 'async'>;\n }\n\n constructor(values: T) {\n super(buildEnumValidator(values));\n this.values = values;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'enum', values: this.values };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.enum) return visitor.enum(this);\n\n return super._walk(visitor);\n }\n}\n","import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class InstanceOfSchema<T, Mode extends import('../core').SchemaMode = 'sync'> extends Schema<T, T, Mode> {\n readonly cls: new (\n ...args: any[]\n ) => T;\n\n protected override get _kind(): string {\n return 'instanceof';\n }\n\n override checkAsync(\n this: InstanceOfSchema<T, 'sync'>,\n fn: (value: T, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): InstanceOfSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as InstanceOfSchema<T, 'async'>;\n }\n\n constructor(cls: new (...args: any[]) => T) {\n super((value, ctx) =>\n value instanceof cls\n ? null\n : [\n {\n code: ErrorCode.invalid_type,\n message: ctx!.messages.instanceof.type({ className: cls.name }),\n path: [],\n },\n ],\n );\n this.cls = cls;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), className: this.cls.name, kind: 'instanceof' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.instanceof) return visitor.instanceof(this);\n\n return super._walk(visitor);\n }\n}\n","import { isPlainObject } from '@vielzeug/arsenal/guards';\n\nimport type { AnySchema, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, Schema, SpellValidationError } from '../core';\nimport { cloneRecord, defineOwnProperty } from '../safe-object';\n\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\n\n/**\n * Recursively merges `source` into `target`.\n * Plain objects are merged key-by-key; all other values take the `source` value.\n */\nfunction deepMerge(target: unknown, source: unknown): unknown {\n if (isPlainObject(target) && isPlainObject(source)) {\n const result = cloneRecord(target);\n\n for (const [key, val] of Object.entries(source)) {\n defineOwnProperty(result, key, deepMerge(target[key], val));\n }\n\n return result;\n }\n\n return source;\n}\n\n/** All schemas must pass — intersection semantics. */\nexport class IntersectSchema<\n T extends readonly AnySchema[],\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<\n import('../core').InferSchemaMode<T[number]>\n >,\n> extends Schema<UnionToIntersection<InferOutput<T[number]>>, unknown, Mode> {\n readonly schemas: T;\n\n protected override get _kind(): string {\n return 'intersect';\n }\n\n override checkAsync(\n this: IntersectSchema<T, 'sync'>,\n fn: (\n value: UnionToIntersection<InferOutput<T[number]>>,\n ctx: import('../core').CheckContext,\n ) => Promise<import('../core').ValidateResult>,\n ): IntersectSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as IntersectSchema<T, 'async'>;\n }\n\n constructor(schemas: T) {\n super();\n this.schemas = Object.freeze([...schemas]) as T;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = this.schemas[i]._parseFullSync(value, ctx);\n\n if (result.issues.length > 0) {\n state.issues.push(...result.issues);\n } else if (!state.hasOutput) {\n state.hasOutput = true;\n state.output = result.data;\n } else {\n state.output = deepMerge(state.output, result.data);\n }\n }\n\n return { data: state.output, issues: state.issues, typeOk: state.issues.length === 0 };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<UnionToIntersection<InferOutput<T[number]>>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as UnionToIntersection<InferOutput<T[number]>>;\n\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: prepared.value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = await this.schemas[i]._parseFullAsync(prepared.value, c);\n\n if (result.issues.length > 0) {\n state.issues.push(...result.issues);\n } else if (!state.hasOutput) {\n state.hasOutput = true;\n state.output = result.data;\n } else {\n state.output = deepMerge(state.output, result.data);\n }\n }\n\n if (state.issues.length > 0) throw new SpellValidationError(state.issues);\n\n const validationIssues = await this._runValidatorsAsync(state.output, c);\n\n if (validationIssues.length) throw new SpellValidationError(validationIssues);\n\n return this._runPostprocessors(state.output) as UnionToIntersection<InferOutput<T[number]>>;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((s) => s.definition()), kind: 'intersect' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const branches = this.schemas.map((s) => s.walk(visitor));\n\n if (visitor.intersect) return visitor.intersect(this, branches);\n\n return super._walk(visitor);\n }\n}\n","import type { ParseContext, ParseValue, SchemaDescriptor, SchemaState } from '../core';\n\nimport { _makeCtx, Schema, SpellValidationError } from '../core';\n\nexport class LazySchema<T, Input = T, Mode extends import('../core').SchemaMode = 'sync'> extends Schema<\n T,\n Input,\n Mode\n> {\n private readonly _getter: () => Schema<T, Input, Mode>;\n private _resolved?: Schema<T, Input, Mode>;\n\n protected override get _kind(): string {\n return 'lazy';\n }\n\n override checkAsync(\n this: LazySchema<T, Input, 'sync'>,\n fn: (value: T, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): LazySchema<T, Input, 'async'> {\n return this._addCheck(fn, true) as unknown as LazySchema<T, Input, 'async'>;\n }\n\n constructor(getter: () => Schema<T, Input, Mode>) {\n super();\n this._getter = getter;\n }\n\n private _resolve(): Schema<T, Input, Mode> {\n const resolved = (this._resolved ??= this._getter());\n\n return resolved;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const result = this._resolve()._parseFullSync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n return { data: value, issues: result.issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<T> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as T;\n\n const result = await this._resolve()._parseFullAsync(prepared.value, c);\n\n if (result.issues.length > 0) throw new SpellValidationError(result.issues);\n\n const validationIssues = await this._runValidatorsAsync(result.data, c);\n\n if (validationIssues.length > 0) throw new SpellValidationError(validationIssues);\n\n return this._runPostprocessors(result.data) as T;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'lazy' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.lazy) return visitor.lazy(this);\n\n return super._walk(visitor);\n }\n\n protected override _construct(state: SchemaState<any>): this {\n // Do not copy _resolved — each clone re-resolves from the getter on first use.\n const next = new LazySchema(this._getter) as this;\n\n next.state = state as any;\n\n return next;\n }\n}\n","import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class LiteralSchema<\n T extends string | number | boolean | null | undefined,\n Mode extends import('../core').SchemaMode = 'sync',\n> extends Schema<T, T, Mode> {\n readonly value: T;\n\n protected override get _kind(): string {\n return 'literal';\n }\n\n override checkAsync(\n this: LiteralSchema<T, 'sync'>,\n fn: (value: T, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): LiteralSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as LiteralSchema<T, 'async'>;\n }\n\n constructor(value: T) {\n super((val, ctx) =>\n val === value\n ? null\n : [\n {\n code: ErrorCode.invalid_literal,\n message: ctx!.messages.literal.expected({ expected: value }),\n params: { expected: value },\n path: [],\n },\n ],\n );\n this.value = value;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'literal', value: this.value };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.literal) return visitor.literal(this);\n\n return super._walk(visitor);\n }\n}\n","import type { AnySchema, InferOutput, Issue, MessageFn, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, ErrorCode, fail, prependIssuePath, resolveMessage, Schema, SpellValidationError } from '../core';\n\nexport class MapSchema<\n K extends AnySchema,\n V extends AnySchema,\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<\n import('../core').InferSchemaMode<K | V>\n >,\n> extends Schema<Map<InferOutput<K>, InferOutput<V>>, unknown, Mode> {\n readonly keySchema: K;\n readonly valueSchema: V;\n\n protected override get _kind(): string {\n return 'map';\n }\n\n override checkAsync(\n this: MapSchema<K, V, 'sync'>,\n fn: (\n value: Map<InferOutput<K>, InferOutput<V>>,\n ctx: import('../core').CheckContext,\n ) => Promise<import('../core').ValidateResult>,\n ): MapSchema<K, V, 'async'> {\n return this._addCheck(fn, true) as unknown as MapSchema<K, V, 'async'>;\n }\n\n constructor(keySchema: K, valueSchema: V) {\n super();\n this.keySchema = keySchema;\n this.valueSchema = valueSchema;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!(value instanceof Map)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.map.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const out = new Map<InferOutput<K>, InferOutput<V>>();\n const issues: Issue[] = [];\n let i = 0;\n\n for (const [key, val] of value) {\n const keyResult = this.keySchema._parseFullSync(key, ctx);\n const valResult = this.valueSchema._parseFullSync(val, ctx);\n\n if (keyResult.issues.length > 0) issues.push(...prependIssuePath(keyResult.issues, i));\n\n if (valResult.issues.length > 0) issues.push(...prependIssuePath(valResult.issues, i));\n\n if (keyResult.issues.length === 0 && valResult.issues.length === 0)\n out.set(keyResult.data as InferOutput<K>, valResult.data as InferOutput<V>);\n\n i += 1;\n }\n\n return { data: out, issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<Map<InferOutput<K>, InferOutput<V>>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as unknown as Map<InferOutput<K>, InferOutput<V>>;\n\n const raw = prepared.value;\n\n if (!(raw instanceof Map)) {\n throw new SpellValidationError([{ code: ErrorCode.invalid_type, message: c.messages.map.type(), path: [] }]);\n }\n\n const entries = [...raw];\n const settled = await Promise.all(\n entries.map(([key, val]) =>\n Promise.all([this.keySchema._parseFullAsync(key, c), this.valueSchema._parseFullAsync(val, c)]),\n ),\n );\n\n const issues: Issue[] = [];\n const out = new Map<InferOutput<K>, InferOutput<V>>();\n\n for (let i = 0; i < settled.length; i++) {\n const [keyResult, valResult] = settled[i];\n\n if (keyResult.issues.length > 0) issues.push(...prependIssuePath(keyResult.issues, i));\n\n if (valResult.issues.length > 0) issues.push(...prependIssuePath(valResult.issues, i));\n\n if (keyResult.issues.length === 0 && valResult.issues.length === 0)\n out.set(keyResult.data as InferOutput<K>, valResult.data as InferOutput<V>);\n }\n\n const validationIssues = await this._runValidatorsAsync(out, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(out) as Map<InferOutput<K>, InferOutput<V>>;\n });\n }\n\n min(size: number, message?: MessageFn<{ min: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size >= size) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.map.min, { min: size, value: typed }), {\n min: size,\n });\n });\n }\n\n max(size: number, message?: MessageFn<{ max: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size <= size) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.map.max, { max: size, value: typed }), {\n max: size,\n });\n });\n }\n\n size(exact: number, message?: MessageFn<{ exact: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.map.size, { exact, value: typed }),\n { exact },\n );\n });\n }\n\n nonEmpty(message?: MessageFn<{ min: number }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size > 0) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.map.nonEmpty, { min: 1 }), { min: 1 });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n key: this.keySchema.definition(),\n kind: 'map',\n value: this.valueSchema.definition(),\n };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const key = this.keySchema.walk(visitor);\n const value = this.valueSchema.walk(visitor);\n\n if (visitor.map) return visitor.map(this, key, value);\n\n return super._walk(visitor);\n }\n}\n","import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class NeverSchema<Mode extends import('../core').SchemaMode = 'sync'> extends Schema<never, never, Mode> {\n protected override get _kind(): string {\n return 'never';\n }\n\n override checkAsync(\n this: NeverSchema<'sync'>,\n fn: (value: never, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): NeverSchema<'async'> {\n return this._addCheck(fn, true) as unknown as NeverSchema<'async'>;\n }\n\n constructor() {\n super((_value, ctx) => [{ code: ErrorCode.invalid_type, message: ctx!.messages.never.invalid(), path: [] }]);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'never' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.never) return visitor.never(this);\n\n return super._walk(visitor);\n }\n}\n","import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\n/* -------------------- Typed annotations -------------------- */\n\ninterface NumberAnnotations extends Record<string, unknown> {\n exclusiveMaximum?: number;\n exclusiveMinimum?: number;\n maximum?: number;\n minimum?: number;\n multipleOf?: number;\n typeHint?: 'integer';\n}\n\nexport class NumberSchema<Input = number, Mode extends import('../core').SchemaMode = 'sync'> extends Schema<\n number,\n Input,\n Mode\n> {\n protected override get _kind(): string {\n return 'number';\n }\n\n override checkAsync(\n this: NumberSchema<Input, 'sync'>,\n fn: (value: number, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): NumberSchema<Input, 'async'> {\n return this._addCheck(fn, true) as unknown as NumberSchema<Input, 'async'>;\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'number' && !Number.isNaN(value)\n ? null\n : fail(ErrorCode.invalid_type, ctx!.messages.number.type()),\n );\n }\n\n min(minimum: number, message?: MessageFn<{ min: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) >= minimum) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.min, { min: minimum, value: value as number }),\n {\n min: minimum,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n minimum: ann.minimum === undefined ? minimum : Math.max(ann.minimum, minimum),\n };\n },\n );\n }\n\n max(maximum: number, message?: MessageFn<{ max: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) <= maximum) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.max, { max: maximum, value: value as number }),\n {\n max: maximum,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n maximum: ann.maximum === undefined ? maximum : Math.min(ann.maximum, maximum),\n };\n },\n );\n }\n\n int(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (Number.isInteger(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_integer,\n resolveMessage(message ?? ctx!.messages.number.int, { value: value as number }),\n );\n },\n (ann) => ({ ...ann, typeHint: 'integer' as const }),\n );\n }\n\n positive(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) > 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.positive, { value: value as number }),\n {\n exclusive: true,\n min: 0,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n exclusiveMinimum: ann.exclusiveMinimum === undefined ? 0 : Math.max(ann.exclusiveMinimum, 0),\n };\n },\n );\n }\n\n negative(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) < 0) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.negative, { value: value as number }),\n {\n exclusive: true,\n max: 0,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n exclusiveMaximum: ann.exclusiveMaximum === undefined ? 0 : Math.min(ann.exclusiveMaximum, 0),\n };\n },\n );\n }\n\n nonNegative(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) >= 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.nonNegative, { value: value as number }),\n { min: 0 },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return { ...ann, minimum: ann.minimum === undefined ? 0 : Math.max(ann.minimum, 0) };\n },\n );\n }\n\n nonPositive(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) <= 0) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.nonPositive, { value: value as number }),\n { max: 0 },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return { ...ann, maximum: ann.maximum === undefined ? 0 : Math.min(ann.maximum, 0) };\n },\n );\n }\n\n multipleOf(step: number, message?: MessageFn<{ step: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (Math.abs(Math.round((value as number) / step) - (value as number) / step) < 1e-9) return null;\n\n return fail(\n ErrorCode.invalid_multiple_of,\n resolveMessage(message ?? ctx!.messages.number.multipleOf, { step, value: value as number }),\n { step },\n );\n },\n (ann) => ({ ...ann, multipleOf: step }),\n );\n }\n\n safe(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint((value, ctx) => {\n if (Number.isSafeInteger(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_safe,\n resolveMessage(message ?? ctx!.messages.number.safe, { value: value as number }),\n );\n });\n }\n\n finite(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint((value, ctx) => {\n if (Number.isFinite(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_finite,\n resolveMessage(message ?? ctx!.messages.number.finite, { value: value as number }),\n );\n });\n }\n\n /**\n * Returns a new schema that coerces the input to a number via `Number(value)` before validation.\n *\n * Equivalent to `s.coerce.number()`.\n */\n coerce(): NumberSchema<unknown> {\n return NumberSchema.coerce();\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.number) return visitor.number(this);\n\n return super._walk(visitor);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const ann = this._annotations as NumberAnnotations;\n\n return {\n ...this._describeBase(),\n ...(ann.exclusiveMaximum !== undefined ? { exclusiveMaximum: ann.exclusiveMaximum } : {}),\n ...(ann.exclusiveMinimum !== undefined ? { exclusiveMinimum: ann.exclusiveMinimum } : {}),\n ...(ann.maximum !== undefined ? { maximum: ann.maximum } : {}),\n ...(ann.minimum !== undefined ? { minimum: ann.minimum } : {}),\n ...(ann.multipleOf !== undefined ? { multipleOf: ann.multipleOf } : {}),\n ...(ann.typeHint !== undefined ? { typeHint: ann.typeHint } : {}),\n kind: 'number',\n };\n }\n\n static coerce(): NumberSchema<unknown> {\n return new NumberSchema().preprocess((v: unknown) => {\n if (typeof v === 'number') return v;\n\n if (typeof v === 'string' || typeof v === 'boolean') {\n const n = Number(v);\n\n return Number.isNaN(n) ? v : n;\n }\n\n return v;\n });\n }\n}\n","import type { AnySchema, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, ErrorCode, Schema, SpellValidationError } from '../core';\n\nexport class UnionSchema<\n T extends readonly AnySchema[],\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<\n import('../core').InferSchemaMode<T[number]>\n >,\n> extends Schema<InferOutput<T[number]>, unknown, Mode> {\n readonly schemas: T;\n\n protected override get _kind(): string {\n return 'union';\n }\n\n override checkAsync(\n this: UnionSchema<T, 'sync'>,\n fn: (\n value: InferOutput<T[number]>,\n ctx: import('../core').CheckContext,\n ) => Promise<import('../core').ValidateResult>,\n ): UnionSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as UnionSchema<T, 'async'>;\n }\n\n constructor(schemas: T) {\n super();\n this.schemas = Object.freeze([...schemas]) as T;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue | Promise<ParseValue> {\n const branchErrors: Issue[][] = [];\n\n for (const schema of this.schemas) {\n const result = schema._parseFullSync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n branchErrors.push(result.issues);\n }\n\n return {\n data: value,\n issues: [\n {\n code: ErrorCode.invalid_union,\n message: ctx.messages.union.invalid(),\n params: { errors: branchErrors },\n path: [],\n },\n ],\n typeOk: false,\n };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<InferOutput<T[number]>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as InferOutput<T[number]>;\n\n const v = prepared.value;\n\n const branchErrors: Issue[][] = [];\n\n for (const schema of this.schemas) {\n const result = await schema._parseFullAsync(v, c);\n\n if (result.issues.length > 0) {\n branchErrors.push(result.issues);\n continue;\n }\n\n const validationIssues = await this._runValidatorsAsync(result.data, c);\n\n if (validationIssues.length > 0) throw new SpellValidationError(validationIssues);\n\n return this._runPostprocessors(result.data) as InferOutput<T[number]>;\n }\n\n throw new SpellValidationError([\n {\n code: ErrorCode.invalid_union,\n message: c.messages.union.invalid(),\n params: { errors: branchErrors },\n path: [],\n },\n ]);\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((s) => s.definition()), kind: 'union' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const branches = this.schemas.map((s) => s.walk(visitor));\n\n if (visitor.union) return visitor.union(this, branches);\n\n return super._walk(visitor);\n }\n}\n","import type { AnySchema, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, ErrorCode, prependIssuePath, Schema, SpellValidationError } from '../core';\nimport { defineOwnProperty, isUnsafeObjectKey, objectFromEntries } from '../safe-object';\nimport { LiteralSchema } from './literal';\nimport { UnionSchema } from './union';\n\nexport type ObjectShape = Record<string, AnySchema>;\nexport type InferObject<T extends ObjectShape> = { [K in keyof T]: InferOutput<T[K]> };\nexport type InferObjectInput<T extends ObjectShape> = { [K in keyof T]: import('../core').InferInput<T[K]> };\n\nexport class ObjectSchema<\n T extends ObjectShape,\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<\n import('../core').InferSchemaMode<T[keyof T]>\n >,\n> extends Schema<InferObject<T>, InferObjectInput<T>, Mode> {\n readonly shape: T;\n private readonly _isRelaxed: boolean;\n\n protected override get _kind(): string {\n return 'object';\n }\n\n override checkAsync(\n this: ObjectSchema<T, 'sync'>,\n fn: (value: InferObject<T>, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): ObjectSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as ObjectSchema<T, 'async'>;\n }\n\n constructor(shape: T, isRelaxed = false) {\n super();\n this.shape = Object.freeze(objectFromEntries(Object.entries(shape))) as T;\n this._isRelaxed = isRelaxed;\n }\n\n private _unknownKeys(obj: Record<string, unknown>): string[] {\n return Object.keys(obj).filter((k) => !Object.hasOwn(this.shape, k));\n }\n\n private _strictUnknownKeyIssues(obj: Record<string, unknown>, ctx: ParseContext): Issue[] {\n if (this._isRelaxed) return [];\n\n const unknownKeys = this._unknownKeys(obj);\n\n if (unknownKeys.length === 0) return [];\n\n return [\n {\n code: ErrorCode.invalid_keys,\n message: ctx.messages.object.invalidKeys({ keys: unknownKeys }),\n params: { keys: unknownKeys },\n path: [],\n },\n ];\n }\n\n private _copyRelaxedUnknownKeys(obj: Record<string, unknown>, output: Record<string, unknown>): void {\n if (!this._isRelaxed) return;\n\n for (const key of this._unknownKeys(obj)) {\n // Skip keys that trigger inherited setters (e.g. __proto__) to prevent\n // prototype mutation on the output object.\n if (isUnsafeObjectKey(key)) continue;\n\n Object.defineProperty(output, key, {\n configurable: true,\n enumerable: true,\n value: obj[key],\n writable: true,\n });\n }\n }\n\n private _guardObjectInput(\n value: unknown,\n ctx: ParseContext,\n ): { obj: Record<string, unknown>; ok: true } | { issues: Issue[]; ok: false } {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.object.type(), path: [] }],\n ok: false,\n };\n }\n\n return { obj: value as Record<string, unknown>, ok: true };\n }\n\n private _createObjectParseContext(\n obj: Record<string, unknown>,\n ctx: ParseContext,\n ): {\n issues: Issue[];\n output: Record<string, unknown>;\n } {\n return {\n issues: [...this._strictUnknownKeyIssues(obj, ctx)],\n output: {},\n };\n }\n\n private _rebuildWith<U extends ObjectShape, NewMode extends import('../core').SchemaMode = Mode>(\n shape: U,\n isRelaxed = this._isRelaxed,\n ): ObjectSchema<U, NewMode> {\n return this._copyStateTo(new ObjectSchema(shape, isRelaxed)) as unknown as ObjectSchema<U, NewMode>;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const guarded = this._guardObjectInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const { obj } = guarded;\n const { issues, output } = this._createObjectParseContext(obj, ctx);\n\n for (const key of Object.keys(this.shape)) {\n const fieldSchema = this.shape[key];\n const result = fieldSchema._parseFullSync(obj[key], ctx);\n\n if (result.issues.length === 0) {\n defineOwnProperty(output, key, result.data);\n } else {\n // Failed field keys are intentionally omitted from parsed output so\n // object-level checks can branch on key presence.\n issues.push(...prependIssuePath(result.issues, key));\n }\n }\n\n this._copyRelaxedUnknownKeys(obj, output);\n\n return { data: output, issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<InferObject<T>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as unknown as InferObject<T>;\n\n const guarded = this._guardObjectInput(prepared.value, c);\n\n if (!guarded.ok) throw new SpellValidationError(guarded.issues);\n\n const { obj } = guarded;\n const { issues, output } = this._createObjectParseContext(obj, c);\n\n const keys = Object.keys(this.shape);\n const results = await Promise.all(keys.map((key) => this.shape[key]._parseFullAsync(obj[key], c)));\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const result = results[i];\n\n if (result.issues.length === 0) {\n defineOwnProperty(output, key, result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, key));\n }\n }\n\n this._copyRelaxedUnknownKeys(obj, output);\n\n const validationIssues = await this._runValidatorsAsync(output, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(output) as InferObject<T>;\n });\n }\n\n partial(): ObjectSchema<\n { [K in keyof T]: Schema<InferOutput<T[K]> | undefined, InferOutput<T[K]> | undefined, Mode> },\n Mode\n >;\n partial<K extends keyof T>(\n ...keys: K[]\n ): ObjectSchema<\n Omit<T, K> & { [P in K]: Schema<InferOutput<T[P]> | undefined, InferOutput<T[P]> | undefined, Mode> },\n Mode\n >;\n partial<K extends keyof T>(...keys: K[]): ObjectSchema<any, Mode> {\n const targetKeys = keys.length > 0 ? new Set(keys as string[]) : null;\n\n return this._rebuildWith(\n objectFromEntries(\n Object.entries(this.shape).map(([k, s]) => [k, targetKeys === null || targetKeys.has(k) ? s.optional() : s]),\n ) as any,\n this._isRelaxed,\n );\n }\n\n override optional(): ObjectSchema<T, Mode> &\n Schema<InferObject<T> | undefined, InferObjectInput<T> | undefined, Mode> {\n return super.optional() as ObjectSchema<T, Mode> &\n Schema<InferObject<T> | undefined, InferObjectInput<T> | undefined, Mode>;\n }\n\n override nullable(): ObjectSchema<T, Mode> & Schema<InferObject<T> | null, InferObjectInput<T> | null, Mode> {\n return super.nullable() as ObjectSchema<T, Mode> & Schema<InferObject<T> | null, InferObjectInput<T> | null, Mode>;\n }\n\n override nullish(): ObjectSchema<T, Mode> &\n Schema<InferObject<T> | null | undefined, InferObjectInput<T> | null | undefined, Mode> {\n return super.nullish() as ObjectSchema<T, Mode> &\n Schema<InferObject<T> | null | undefined, InferObjectInput<T> | null | undefined, Mode>;\n }\n\n override required(): ObjectSchema<T, Mode> &\n Schema<Exclude<InferObject<T>, undefined>, Exclude<InferObjectInput<T>, undefined>, Mode> {\n return this._rebuildWith(\n objectFromEntries(Object.entries(this.shape).map(([k, s]) => [k, s.required()])) as any,\n this._isRelaxed,\n ) as ObjectSchema<T, Mode> &\n Schema<Exclude<InferObject<T>, undefined>, Exclude<InferObjectInput<T>, undefined>, Mode>;\n }\n\n extend<U extends ObjectShape>(\n extra: U,\n ): ObjectSchema<\n Omit<T, keyof U> & U,\n import('../core').MergeSchemaModes<Mode | import('../core').InferSchemaMode<U[keyof U]>>\n > {\n return this._rebuildWith(\n objectFromEntries([...Object.entries(this.shape), ...Object.entries(extra)]) as any,\n this._isRelaxed,\n );\n }\n\n pick<K extends keyof T>(...keys: K[]): ObjectSchema<Pick<T, K>, Mode> {\n const keySet = new Set(keys as string[]);\n\n return this._rebuildWith(objectFromEntries(Object.entries(this.shape).filter(([k]) => keySet.has(k))) as any);\n }\n\n omit<K extends keyof T>(...keys: K[]): ObjectSchema<Omit<T, K>, Mode> {\n const keySet = new Set(keys as string[]);\n\n return this._rebuildWith(objectFromEntries(Object.entries(this.shape).filter(([k]) => !keySet.has(k))) as any);\n }\n\n /**\n * Returns a fully default-filled object by parsing `{}` against this schema.\n * Every required field must have a `.default()` value set; if any required\n * field is missing a default, this method throws a `SpellValidationError`.\n *\n * @example\n * const Config = s.object({ host: s.string().default('localhost'), port: s.number().default(3000) });\n * Config.defaults(); // { host: 'localhost', port: 3000 }\n */\n defaults(this: ObjectSchema<T, 'sync'>): InferObject<T> {\n return this.parse({});\n }\n\n /**\n * Returns a partial object containing only the fields that have a default value set.\n * Fields without a `.default()` or `.catch()` are silently omitted rather than throwing.\n *\n * Useful for pre-filling forms where only some fields have defaults.\n *\n * @example\n * const Form = s.object({ name: s.string(), role: s.string().default('viewer') });\n * Form.partialDefaults(); // { role: 'viewer' } — name is omitted\n */\n partialDefaults(this: ObjectSchema<T, 'sync'>): Partial<InferObject<T>> {\n const result: Record<string, unknown> = {};\n\n for (const key of Object.keys(this.shape)) {\n const parsed = this.shape[key]._parseFullSync(undefined);\n\n if (parsed.issues.length === 0) {\n defineOwnProperty(result, key, parsed.data);\n }\n }\n\n return result as Partial<InferObject<T>>;\n }\n\n /**\n * Returns an array of field keys that are **required** (not optional and not nullish).\n *\n * @example\n * const User = s.object({ id: s.number(), name: s.string().optional() });\n * User.requiredFields(); // ['id']\n */\n requiredFields(): (keyof T & string)[] {\n return Object.keys(this.shape).filter((k) => !this.shape[k].isOptional) as (keyof T & string)[];\n }\n\n /**\n * Returns an array of field keys that are **optional** (accept `undefined`).\n *\n * @example\n * const User = s.object({ id: s.number(), name: s.string().optional() });\n * User.optionalFields(); // ['name']\n */\n optionalFields(): (keyof T & string)[] {\n return Object.keys(this.shape).filter((k) => this.shape[k].isOptional) as (keyof T & string)[];\n }\n\n /**\n * Allow additional unknown properties (relaxed mode).\n * Default is strict mode (rejects unknown keys).\n *\n * Returns `ObjectSchema<T>` so fluent methods like `.pick()`, `.omit()`,\n * `.extend()`, and `.partial()` remain usable after calling `.relaxed()`.\n */\n relaxed(): ObjectSchema<T, Mode> {\n return this._rebuildWith(this.shape, true);\n }\n\n /**\n * Alias for the default strict mode — rejects unknown keys.\n * Useful after calling `.relaxed()` to return a new strict schema.\n */\n strict(): ObjectSchema<T, Mode> {\n return this._rebuildWith(this.shape, false);\n }\n\n /**\n * Returns a union schema of the object's key names as literal schemas.\n *\n * @example\n * const User = s.object({ id: s.number(), name: s.string() });\n * User.keyof(); // UnionSchema — validates 'id' | 'name'\n */\n keyof(): UnionSchema<readonly [LiteralSchema<keyof T & string>, ...LiteralSchema<keyof T & string>[]]> {\n const keys = Object.keys(this.shape) as (keyof T & string)[];\n const schemas = keys.map((k) => new LiteralSchema(k)) as unknown as readonly [\n LiteralSchema<keyof T & string>,\n ...LiteralSchema<keyof T & string>[],\n ];\n\n return new UnionSchema(schemas);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const fields: Record<string, SchemaDescriptor> = {};\n\n for (const [key, schema] of Object.entries(this.shape)) {\n defineOwnProperty(fields, key, schema.definition());\n }\n\n return { ...this._describeBase(), fields, kind: 'object', strict: !this._isRelaxed };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const fields = objectFromEntries(Object.entries(this.shape).map(([k, s]) => [k, s.walk(visitor)]));\n\n if (visitor.object) return visitor.object(this, fields);\n\n return super._walk(visitor);\n }\n\n merge<U extends ObjectShape, OtherMode extends import('../core').SchemaMode>(\n other: ObjectSchema<U, OtherMode>,\n ): ObjectSchema<T & U, import('../core').MergeSchemaModes<Mode | OtherMode>> {\n return this._rebuildWith(\n objectFromEntries([...Object.entries(this.shape), ...Object.entries(other.shape)]) as any,\n other._isRelaxed,\n );\n }\n}\n","/**\n * Helpers for accepting raw literal values alongside schema instances in\n * sUnion() and sIntersect() arguments.\n *\n * Moved out of literal.ts — this infrastructure belongs to the combinator\n * entry points (s.ts), not to LiteralSchema.\n */\n\nimport type { AnySchema } from '../core';\n\nimport { Schema } from '../core';\nimport { LiteralSchema } from './literal';\n\nexport type LiteralValue = string | number | boolean | null | undefined;\nexport type RawOrSchema = AnySchema | LiteralValue;\nexport type NormalizeItem<T> = T extends AnySchema ? T : T extends LiteralValue ? LiteralSchema<T> : never;\nexport type NormalizeItems<T extends readonly RawOrSchema[]> = { readonly [K in keyof T]: NormalizeItem<T[K]> };\n\nexport function normalizeToSchemas<T extends readonly RawOrSchema[]>(items: T): NormalizeItems<T> {\n return items.map((item) =>\n item instanceof Schema ? item : new LiteralSchema(item as LiteralValue),\n ) as unknown as NormalizeItems<T>;\n}\n","import type { AnySchema, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, ErrorCode, prependIssuePath, Schema, SpellValidationError } from '../core';\nimport { isUnsafeObjectKey } from '../safe-object';\n\nexport class RecordSchema<\n K extends AnySchema,\n V extends AnySchema,\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<\n import('../core').InferSchemaMode<K | V>\n >,\n> extends Schema<Record<InferOutput<K> & string, InferOutput<V>>, unknown, Mode> {\n readonly keySchema: K;\n readonly valueSchema: V;\n\n protected override get _kind(): string {\n return 'record';\n }\n\n override checkAsync(\n this: RecordSchema<K, V, 'sync'>,\n fn: (\n value: Record<InferOutput<K> & string, InferOutput<V>>,\n ctx: import('../core').CheckContext,\n ) => Promise<import('../core').ValidateResult>,\n ): RecordSchema<K, V, 'async'> {\n return this._addCheck(fn, true) as unknown as RecordSchema<K, V, 'async'>;\n }\n\n constructor(keySchema: K, valueSchema: V) {\n super();\n this.keySchema = keySchema;\n this.valueSchema = valueSchema;\n }\n\n private _guardRecordInput(\n value: unknown,\n ctx: ParseContext,\n ): { ok: true; value: Record<string, unknown> } | { issues: Issue[]; ok: false } {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.object.type(), path: [] }],\n ok: false,\n };\n }\n\n return { ok: true, value: value as Record<string, unknown> };\n }\n\n private _parseRecordEntries(\n obj: Record<string, unknown>,\n ctx: ParseContext,\n ): { issues: Issue[]; output: Record<string, unknown> } {\n const issues: Issue[] = [];\n const output: Record<string, unknown> = {};\n\n for (const key of Object.keys(obj)) {\n const keyResult = this.keySchema._parseFullSync(key, ctx);\n\n if (keyResult.issues.length > 0) {\n issues.push(...prependIssuePath(keyResult.issues, key));\n continue;\n }\n\n const parsedKey = keyResult.data as string;\n\n // Skip keys that trigger inherited setters (e.g. __proto__) to prevent\n // prototype mutation on the output object.\n if (isUnsafeObjectKey(parsedKey)) continue;\n\n const valResult = this.valueSchema._parseFullSync(obj[key], ctx);\n\n if (valResult.issues.length === 0) {\n Object.defineProperty(output, parsedKey, {\n configurable: true,\n enumerable: true,\n value: valResult.data,\n writable: true,\n });\n } else {\n issues.push(...prependIssuePath(valResult.issues, key));\n }\n }\n\n return { issues, output };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const guarded = this._guardRecordInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const { issues, output } = this._parseRecordEntries(guarded.value, ctx);\n\n return { data: output, issues, typeOk: true };\n }\n\n override async parseAsync(\n value: unknown,\n ctx?: ParseContext,\n ): Promise<Record<InferOutput<K> & string, InferOutput<V>>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as unknown as Record<InferOutput<K> & string, InferOutput<V>>;\n\n const guarded = this._guardRecordInput(prepared.value, c);\n\n if (!guarded.ok) throw new SpellValidationError(guarded.issues);\n\n const obj = guarded.value;\n const keys = Object.keys(obj);\n const settled = await Promise.all(\n keys.map((key) =>\n Promise.all([this.keySchema._parseFullAsync(key, c), this.valueSchema._parseFullAsync(obj[key], c)]),\n ),\n );\n\n const issues: Issue[] = [];\n const output: Record<string, unknown> = {};\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const [keyResult, valResult] = settled[i];\n\n if (keyResult.issues.length > 0) {\n issues.push(...prependIssuePath(keyResult.issues, key));\n continue;\n }\n\n const parsedKey = keyResult.data as string;\n\n // Skip keys that trigger inherited setters (e.g. __proto__) to prevent\n // prototype mutation on the output object.\n if (isUnsafeObjectKey(parsedKey)) continue;\n\n if (valResult.issues.length === 0) {\n Object.defineProperty(output, parsedKey, {\n configurable: true,\n enumerable: true,\n value: valResult.data,\n writable: true,\n });\n } else {\n issues.push(...prependIssuePath(valResult.issues, key));\n }\n }\n\n const validationIssues = await this._runValidatorsAsync(output, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(output) as Record<InferOutput<K> & string, InferOutput<V>>;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n key: this.keySchema.definition(),\n kind: 'record',\n value: this.valueSchema.definition(),\n };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const key = this.keySchema.walk(visitor);\n const value = this.valueSchema.walk(visitor);\n\n if (visitor.record) return visitor.record(this, key, value);\n\n return super._walk(visitor);\n }\n}\n","import type { AnySchema, InferOutput, Issue, MessageFn, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, ErrorCode, fail, prependIssuePath, resolveMessage, Schema, SpellValidationError } from '../core';\n\nexport class SetSchema<\n T extends AnySchema,\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<import('../core').InferSchemaMode<T>>,\n> extends Schema<Set<InferOutput<T>>, unknown, Mode> {\n readonly itemSchema: T;\n\n protected override get _kind(): string {\n return 'set';\n }\n\n override checkAsync(\n this: SetSchema<T, 'sync'>,\n fn: (value: Set<InferOutput<T>>, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): SetSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as SetSchema<T, 'async'>;\n }\n\n constructor(itemSchema: T) {\n super();\n this.itemSchema = itemSchema;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!(value instanceof Set)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.set.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const issues: Issue[] = [];\n const parsed = new Set<InferOutput<T>>();\n let i = 0;\n\n for (const item of value) {\n const result = this.itemSchema._parseFullSync(item, ctx);\n\n if (result.issues.length === 0) {\n parsed.add(result.data as InferOutput<T>);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n }\n\n i += 1;\n }\n\n return { data: parsed, issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<Set<InferOutput<T>>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as unknown as Set<InferOutput<T>>;\n\n const raw = prepared.value;\n\n if (!(raw instanceof Set)) {\n throw new SpellValidationError([{ code: ErrorCode.invalid_type, message: c.messages.set.type(), path: [] }]);\n }\n\n const items = [...raw];\n const settled = await Promise.all(items.map((item) => this.itemSchema._parseFullAsync(item, c)));\n\n const issues: Issue[] = [];\n const parsed = new Set<InferOutput<T>>();\n\n for (let i = 0; i < settled.length; i++) {\n const result = settled[i];\n\n if (result.issues.length === 0) {\n parsed.add(result.data as InferOutput<T>);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n }\n }\n\n const validationIssues = await this._runValidatorsAsync(parsed, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(parsed) as Set<InferOutput<T>>;\n });\n }\n\n min(size: number, message?: MessageFn<{ min: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size >= size) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.set.min, { min: size, value: typed }), {\n min: size,\n });\n });\n }\n\n max(size: number, message?: MessageFn<{ max: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size <= size) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.set.max, { max: size, value: typed }), {\n max: size,\n });\n });\n }\n\n size(exact: number, message?: MessageFn<{ exact: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.set.size, { exact, value: typed }),\n { exact },\n );\n });\n }\n\n nonEmpty(message?: MessageFn<{ min: number }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size > 0) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.set.nonEmpty, { min: 1 }), { min: 1 });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), items: this.itemSchema.definition(), kind: 'set' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const item = this.itemSchema.walk(visitor);\n\n if (visitor.set) return visitor.set(this, item);\n\n return super._walk(visitor);\n }\n}\n","/**\n * Pure string format validators.\n *\n * All functions take a `string` and return `boolean`. They are exported as part of the\n * public API so callers can use them independently of any Schema.\n *\n * ```ts\n * import { isEmail, isUuid } from '@vielzeug/spell';\n * isEmail('foo@bar.com'); // true\n * ```\n */\n\nexport function isEmail(v: string): boolean {\n return /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/.test(v);\n}\n\nconst _DEFAULT_URL_PROTOCOLS = new Set(['http', 'https']);\n\nexport function isUrl(v: string, protocols?: readonly string[]): boolean {\n try {\n const parsed = new URL(v);\n const allowed = protocols ? new Set(protocols.map((p) => p.toLowerCase())) : _DEFAULT_URL_PROTOCOLS;\n\n return allowed.has(parsed.protocol.replace(':', '').toLowerCase());\n } catch {\n return false;\n }\n}\n\nexport function isUuid(v: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(v);\n}\n\nexport function isIsoDate(v: string): boolean {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(v)) return false;\n\n const d = new Date(v);\n\n return !Number.isNaN(d.getTime()) && d.toISOString().startsWith(v);\n}\n\nexport function isIsoDateTime(v: string): boolean {\n return (\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?(?:Z|[+-]\\d{2}:\\d{2})?$/.test(v) &&\n !Number.isNaN(new Date(v).getTime())\n );\n}\n\nexport function isIp(v: string): boolean {\n // IPv4\n if (/^(\\d{1,3}\\.){3}\\d{1,3}$/.test(v)) {\n return v.split('.').every((o) => {\n const n = parseInt(o, 10);\n\n return n >= 0 && n <= 255;\n });\n }\n\n // IPv6 — rely on URL parser\n try {\n new URL(`http://[${v}]/`);\n\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isCuid(v: string): boolean {\n return /^c[a-z0-9]{8,}$/.test(v);\n}\n\nexport function isCuid2(v: string): boolean {\n return /^[a-z][a-z0-9]{23}$/.test(v);\n}\n\nexport function isUlid(v: string): boolean {\n return /^[0-7][0-9A-HJKMNP-TV-Z]{25}$/.test(v);\n}\n\n/**\n * Validates a NanoID string. The default NanoID length is 21 characters; pass a\n * custom length to validate IDs generated with non-default sizes.\n */\nexport function isNanoid(v: string, length = 21): boolean {\n return v.length === length && /^[A-Za-z0-9_-]+$/.test(v);\n}\n\nexport function isBase64(v: string): boolean {\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(v);\n}\n\n/**\n * Validates a base64url-encoded string (RFC 4648 §5). Accepts unpadded and padded forms.\n * A string whose length % 4 === 1 is never valid base64url.\n */\nexport function isBase64url(v: string): boolean {\n if (v.length === 0 || v.length % 4 === 1) return false;\n\n return /^[A-Za-z0-9_-]*={0,2}$/.test(v);\n}\n\nexport function isHex(v: string): boolean {\n return /^[A-Fa-f0-9]+$/.test(v);\n}\n\nexport function isHexColor(v: string): boolean {\n return /^#(?:[A-Fa-f0-9]{3}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/.test(v);\n}\n\nexport function isEmoji(v: string): boolean {\n return /^\\p{Extended_Pictographic}+$/u.test(v);\n}\n\nexport function isJwt(v: string): boolean {\n return /^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$/.test(v);\n}\n\nexport function isTime(v: string): boolean {\n return /^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$/.test(v);\n}\n\nexport function isDuration(v: string): boolean {\n return /^P(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+(?:\\.\\d+)?S)?)?$/.test(v);\n}\n\nexport function isSemver(v: string): boolean {\n return /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$/.test(\n v,\n );\n}\n\nexport function isSlug(v: string): boolean {\n return /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(v);\n}\n\nexport function isNumeric(v: string): boolean {\n return /^[-+]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?$/i.test(v);\n}\n","import { warn } from '../_dev';\nimport type { MessageFn, SchemaDescriptor } from '../core';\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\nimport {\n isBase64,\n isBase64url,\n isCuid,\n isCuid2,\n isDuration,\n isEmail,\n isEmoji,\n isHex,\n isHexColor,\n isIp,\n isIsoDate,\n isIsoDateTime,\n isJwt,\n isNanoid,\n isNumeric,\n isSemver,\n isSlug,\n isTime,\n isUlid,\n isUrl,\n isUuid,\n} from '../formats';\n\n/* -------------------- Typed annotations -------------------- */\n\ninterface StringAnnotations extends Record<string, unknown> {\n contentEncoding?: string;\n format?: string;\n maxLength?: number;\n minLength?: number;\n pattern?: string | null;\n}\n\ntype UrlOptions = {\n message?: MessageFn<{ value: string }>;\n protocols?: readonly string[];\n};\n\nexport class StringSchema<Input = string, Mode extends import('../core').SchemaMode = 'sync'> extends Schema<\n string,\n Input,\n Mode\n> {\n protected override get _kind(): string {\n return 'string';\n }\n\n override checkAsync(\n this: StringSchema<Input, 'sync'>,\n fn: (value: string, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): StringSchema<Input, 'async'> {\n return this._addCheck(fn, true) as unknown as StringSchema<Input, 'async'>;\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'string' ? null : fail(ErrorCode.invalid_type, ctx!.messages.string.type()),\n );\n }\n\n min(length: number, message?: MessageFn<{ min: number; value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as string).length >= length) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.string.min, { min: length, value: value as string }),\n {\n min: length,\n },\n );\n },\n (current) => {\n const ann = current as StringAnnotations;\n\n return {\n ...ann,\n minLength: ann.minLength === undefined ? length : Math.max(ann.minLength, length),\n };\n },\n );\n }\n\n max(length: number, message?: MessageFn<{ max: number; value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as string).length <= length) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.string.max, { max: length, value: value as string }),\n {\n max: length,\n },\n );\n },\n (current) => {\n const ann = current as StringAnnotations;\n\n return {\n ...ann,\n maxLength: ann.maxLength === undefined ? length : Math.min(ann.maxLength, length),\n };\n },\n );\n }\n\n length(exact: number, message?: MessageFn<{ exact: number; value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as string).length === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.string.length, { exact, value: value as string }),\n { exact },\n );\n },\n (ann) => ({ ...ann, maxLength: exact, minLength: exact }),\n );\n }\n\n /**\n * Alias for `.nonEmpty()` — validates that the string is not empty.\n * Provided for discoverability alongside `ArraySchema.nonEmpty()`.\n */\n nonempty(message?: MessageFn<{ min: number; value: string }>): this {\n return this.nonEmpty(message);\n }\n\n nonEmpty(message?: MessageFn<{ min: number; value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as string).length > 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.string.nonEmpty, { min: 1, value: value as string }),\n { min: 1 },\n );\n },\n (current) => {\n const ann = current as StringAnnotations;\n\n return { ...ann, minLength: Math.max(ann.minLength ?? 0, 1) };\n },\n );\n }\n\n startsWith(prefix: string, message?: MessageFn<{ prefix: string; value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if ((value as string).startsWith(prefix)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.startsWith, { prefix, value: value as string }),\n { prefix },\n );\n });\n }\n\n endsWith(suffix: string, message?: MessageFn<{ suffix: string; value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if ((value as string).endsWith(suffix)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.endsWith, { suffix, value: value as string }),\n { suffix },\n );\n });\n }\n\n includes(substr: string, message?: MessageFn<{ substr: string; value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if ((value as string).includes(substr)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.includes, { substr, value: value as string }),\n {\n includes: substr,\n },\n );\n });\n }\n\n /**\n * Validates that the string matches the given regular expression.\n *\n * **Security note:** Stateful `/g` and `/y` flags are stripped automatically to prevent\n * `lastIndex`-based bugs. However, caller-supplied patterns with catastrophic backtracking\n * (e.g. `/(a+)+$/`) are a ReDoS risk when validating untrusted input in server-side contexts.\n * Prefer well-tested, bounded patterns for user-facing validation.\n *\n */\n regex(pattern: RegExp, message?: MessageFn<{ value: string }>): this {\n const safePattern = new RegExp(pattern.source, pattern.flags.replace(/[gy]/g, ''));\n\n return this._addConstraint(\n (value, ctx) => {\n // Caller-supplied regexes still run against untrusted strings; spell can\n // neutralize stateful /g and /y flags but cannot make arbitrary patterns\n // immune to catastrophic backtracking without breaking the API.\n if (safePattern.test(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.regex, { value: value as string }),\n {\n pattern: safePattern.source,\n },\n );\n },\n (current) => {\n const ann = current as StringAnnotations;\n\n if (ann.pattern === null) return ann; // already ambiguous\n\n if (ann.pattern === undefined) return { ...ann, pattern: safePattern.source };\n\n if (ann.pattern !== safePattern.source) {\n warn(\n '[spell] Multiple .regex() constraints detected on a single string schema. ' +\n 'JSON Schema `pattern` cannot represent multiple patterns and will be omitted from definition output.',\n );\n\n return { ...ann, pattern: null };\n }\n\n return ann;\n },\n );\n }\n\n email(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isEmail(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.email, { value: value as string }),\n { format: 'email' },\n );\n },\n (ann) => ({ ...ann, format: 'email' }),\n );\n }\n\n url(options: UrlOptions = {}): this {\n const { message, protocols = ['http', 'https'] } = options;\n\n return this._addConstraint(\n (value, ctx) => {\n if (isUrl(value as string, protocols)) return null;\n\n return fail(\n ErrorCode.invalid_url,\n resolveMessage(message ?? ctx!.messages.string.url, { value: value as string }),\n { format: 'url' },\n );\n },\n (ann) => ({ ...ann, format: 'uri' }),\n );\n }\n\n uuid(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isUuid(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.uuid, { value: value as string }),\n { format: 'uuid' },\n );\n },\n (ann) => ({ ...ann, format: 'uuid' }),\n );\n }\n\n isoDate(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isIsoDate(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.date, { value: value as string }),\n {\n format: 'iso-date',\n },\n );\n },\n (ann) => ({ ...ann, format: 'date' }),\n );\n }\n\n isoDateTime(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isIsoDateTime(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.dateTime, { value: value as string }),\n {\n format: 'iso-datetime',\n },\n );\n },\n (ann) => ({ ...ann, format: 'date-time' }),\n );\n }\n\n ip(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isIp(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.ip, { value: value as string }),\n { format: 'ip' },\n );\n });\n }\n\n cuid(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isCuid(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.cuid, { value: value as string }),\n { format: 'cuid' },\n );\n });\n }\n\n cuid2(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isCuid2(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.cuid2, { value: value as string }),\n { format: 'cuid2' },\n );\n });\n }\n\n ulid(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isUlid(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.ulid, { value: value as string }),\n { format: 'ulid' },\n );\n });\n }\n\n nanoid(length?: number, message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isNanoid(value as string, length)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.nanoid, { value: value as string }),\n { format: 'nanoid' },\n );\n });\n }\n\n base64(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isBase64(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_base64,\n resolveMessage(message ?? ctx!.messages.string.base64, { value: value as string }),\n {\n format: 'base64',\n },\n );\n },\n (ann) => ({ ...ann, contentEncoding: 'base64' }),\n );\n }\n\n base64url(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isBase64url(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_base64,\n resolveMessage(message ?? ctx!.messages.string.base64url, { value: value as string }),\n {\n format: 'base64url',\n },\n );\n });\n }\n\n hex(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isHex(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.hex, { value: value as string }),\n { format: 'hex' },\n );\n });\n }\n\n hexColor(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isHexColor(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.hexColor, { value: value as string }),\n {\n format: 'hex-color',\n },\n );\n });\n }\n\n emoji(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isEmoji(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.emoji, { value: value as string }),\n { format: 'emoji' },\n );\n });\n }\n\n jwt(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isJwt(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.jwt, { value: value as string }),\n { format: 'jwt' },\n );\n });\n }\n\n time(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isTime(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.time, { value: value as string }),\n { format: 'time' },\n );\n });\n }\n\n duration(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isDuration(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_duration,\n resolveMessage(message ?? ctx!.messages.string.duration, { value: value as string }),\n {\n format: 'duration',\n },\n );\n },\n (ann) => ({ ...ann, format: 'duration' }),\n );\n }\n\n semver(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isSemver(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.semver, { value: value as string }),\n { format: 'semver' },\n );\n });\n }\n\n slug(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isSlug(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.slug, { value: value as string }),\n { format: 'slug' },\n );\n });\n }\n\n numeric(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isNumeric(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.numeric, { value: value as string }),\n { format: 'numeric' },\n );\n });\n }\n\n /**\n * Returns a new schema that coerces the input to a string via `String(value)` before validation.\n * `null` and `undefined` are passed through unchanged.\n *\n * Equivalent to `s.coerce.string()`.\n */\n coerce(): StringSchema<unknown> {\n return StringSchema.coerce();\n }\n\n /**\n * **Note:** `trim()` adds a preprocessor. Preprocessors are not serializable —\n * `definition()` throws because preprocessors are not serializable.\n */\n trim(): this {\n return this.preprocess((v: unknown) => (typeof v === 'string' ? v.trim() : v));\n }\n\n /**\n * **Note:** `lowercase()` adds a preprocessor. Preprocessors are not serializable —\n * `definition()` throws because preprocessors are not serializable.\n */\n lowercase(): this {\n return this.preprocess((v: unknown) => (typeof v === 'string' ? v.toLowerCase() : v));\n }\n\n /**\n * **Note:** `uppercase()` adds a preprocessor. Preprocessors are not serializable —\n * `definition()` throws because preprocessors are not serializable.\n */\n uppercase(): this {\n return this.preprocess((v: unknown) => (typeof v === 'string' ? v.toUpperCase() : v));\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.string) return visitor.string(this);\n\n return super._walk(visitor);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const ann = this._annotations as StringAnnotations;\n\n return {\n ...this._describeBase(),\n ...(ann.contentEncoding !== undefined ? { contentEncoding: ann.contentEncoding } : {}),\n ...(ann.format !== undefined ? { format: ann.format } : {}),\n ...(ann.maxLength !== undefined ? { maxLength: ann.maxLength } : {}),\n ...(ann.minLength !== undefined ? { minLength: ann.minLength } : {}),\n ...(ann.pattern !== undefined ? { pattern: ann.pattern } : {}),\n kind: 'string',\n };\n }\n\n static coerce(): StringSchema<unknown> {\n return new StringSchema().preprocess((v: unknown) => (v == null ? v : String(v)));\n }\n}\n","import type { AnySchema, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, ErrorCode, prependIssuePath, Schema, SpellValidationError } from '../core';\n\nexport type TupleSchemas = readonly [AnySchema, ...AnySchema[]];\nexport type InferTuple<T extends TupleSchemas, R extends AnySchema | null = null> =\n R extends Schema<infer O>\n ? readonly [...{ [K in keyof T]: T[K] extends Schema<infer V> ? V : never }, ...O[]]\n : { readonly [K in keyof T]: T[K] extends Schema<infer V> ? V : never };\n\nexport class TupleSchema<\n T extends TupleSchemas,\n R extends AnySchema | null = null,\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<\n import('../core').InferSchemaMode<T[number] | Exclude<R, null>>\n >,\n> extends Schema<InferTuple<T, R>, unknown, Mode> {\n readonly items: T;\n readonly restSchema: R;\n\n protected override get _kind(): string {\n return 'tuple';\n }\n\n override checkAsync(\n this: TupleSchema<T, R, 'sync'>,\n fn: (value: InferTuple<T, R>, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>,\n ): TupleSchema<T, R, 'async'> {\n return this._addCheck(fn, true) as unknown as TupleSchema<T, R, 'async'>;\n }\n\n constructor(items: T, restSchema: R = null as R) {\n super();\n this.items = items;\n this.restSchema = restSchema;\n }\n\n rest<U extends AnySchema>(\n schema: U,\n ): TupleSchema<T, U, import('../core').MergeSchemaModes<Mode | import('../core').InferSchemaMode<U>>> {\n return this._copyStateTo(new TupleSchema(this.items, schema)) as unknown as TupleSchema<\n T,\n U,\n import('../core').MergeSchemaModes<Mode | import('../core').InferSchemaMode<U>>\n >;\n }\n\n private _guardTupleInput(\n value: unknown[],\n ctx: ParseContext,\n ): { ok: true; value: unknown[] } | { issues: Issue[]; ok: false } {\n if (this.restSchema === null && value.length !== this.items.length) {\n return {\n issues: [\n {\n code: ErrorCode.invalid_length,\n message: ctx.messages.tuple.length({ exact: this.items.length }),\n params: { exact: this.items.length },\n path: [],\n },\n ],\n ok: false,\n };\n }\n\n if (this.restSchema !== null && value.length < this.items.length) {\n return {\n issues: [\n {\n code: ErrorCode.too_small,\n message: ctx.messages.tuple.min({ min: this.items.length }),\n params: { min: this.items.length },\n path: [],\n },\n ],\n ok: false,\n };\n }\n\n return { ok: true, value };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!Array.isArray(value)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.tuple.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const guarded = this._guardTupleInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const issues: Issue[] = [];\n const output: unknown[] = [];\n const tupleValue = guarded.value;\n\n for (let i = 0; i < this.items.length; i++) {\n const result = this.items[i]._parseFullSync(tupleValue[i], ctx);\n\n if (result.issues.length === 0) {\n output.push(result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n output.push(tupleValue[i]);\n }\n }\n\n if (this.restSchema !== null) {\n for (let i = this.items.length; i < tupleValue.length; i++) {\n const result = this.restSchema._parseFullSync(tupleValue[i], ctx);\n\n if (result.issues.length === 0) {\n output.push(result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n output.push(tupleValue[i]);\n }\n }\n }\n\n return { data: output, issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<InferTuple<T, R>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as unknown as InferTuple<T, R>;\n\n const raw = prepared.value;\n\n if (!Array.isArray(raw)) {\n throw new SpellValidationError([{ code: ErrorCode.invalid_type, message: c.messages.tuple.type(), path: [] }]);\n }\n\n const guarded = this._guardTupleInput(raw, c);\n\n if (!guarded.ok) throw new SpellValidationError(guarded.issues);\n\n const tupleValue = guarded.value;\n const issues: Issue[] = [];\n const output: unknown[] = [];\n\n const fixedResults = await Promise.all(this.items.map((schema, i) => schema._parseFullAsync(tupleValue[i], c)));\n\n for (let i = 0; i < fixedResults.length; i++) {\n const result = fixedResults[i];\n\n if (result.issues.length === 0) {\n output.push(result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n output.push(tupleValue[i]);\n }\n }\n\n const rest = this.restSchema;\n\n if (rest !== null) {\n const restItems = tupleValue.slice(this.items.length);\n const restResults = await Promise.all(restItems.map((item) => rest._parseFullAsync(item, c)));\n\n for (let i = 0; i < restResults.length; i++) {\n const result = restResults[i];\n const idx = this.items.length + i;\n\n if (result.issues.length === 0) {\n output.push(result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, idx));\n output.push(tupleValue[idx]);\n }\n }\n }\n\n const validationIssues = await this._runValidatorsAsync(output, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(output) as InferTuple<T, R>;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n items: this.items.map((s) => s.definition()),\n kind: 'tuple',\n rest: this.restSchema !== null ? this.restSchema.definition() : null,\n };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const items = this.items.map((s) => s.walk(visitor));\n const rest = this.restSchema !== null ? this.restSchema.walk(visitor) : null;\n\n if (visitor.tuple) return visitor.tuple(this, items, rest);\n\n return super._walk(visitor);\n }\n}\n","import type { AnySchema, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { _makeCtx, ErrorCode, Schema, SpellValidationError } from '../core';\nimport { SpellError } from '../errors';\nimport { defineOwnProperty, objectFromEntries } from '../safe-object';\nimport { LiteralSchema } from './literal';\nimport type { InferObject, ObjectSchema, ObjectShape } from './object';\n\ntype VariantMap = Record<string, ObjectSchema<any, any>>;\ntype InferVariantMap<K extends string, M extends VariantMap> = {\n [Tag in keyof M & string]: M[Tag] extends { shape: infer S extends ObjectShape }\n ? InferObject<S> & { [P in K]: Tag }\n : never;\n}[keyof M & string];\n\nexport class VariantSchema<\n K extends string,\n M extends VariantMap,\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<\n import('../core').InferSchemaMode<M[keyof M]>\n >,\n> extends Schema<InferVariantMap<K, M>, unknown, Mode> {\n private readonly _map: Map<string, VariantMap[string]>;\n private readonly _discriminator: K;\n\n protected override get _kind(): string {\n return 'variant';\n }\n\n override checkAsync(\n this: VariantSchema<K, M, 'sync'>,\n fn: (\n value: InferVariantMap<K, M>,\n ctx: import('../core').CheckContext,\n ) => Promise<import('../core').ValidateResult>,\n ): VariantSchema<K, M, 'async'> {\n return this._addCheck(fn, true) as unknown as VariantSchema<K, M, 'async'>;\n }\n\n constructor(discriminator: K, variantMap: M) {\n const map = new Map<string, VariantMap[string]>();\n\n for (const [tag, schema] of Object.entries(variantMap)) {\n const discriminatorSchema = new LiteralSchema(tag);\n const existingDiscriminator = schema.shape[discriminator];\n\n if (\n existingDiscriminator &&\n (!(existingDiscriminator instanceof LiteralSchema) || existingDiscriminator.value !== tag)\n ) {\n throw new SpellError(\n `s.discriminatedUnion(): branch \"${tag}\" defines a conflicting discriminator schema for \"${discriminator}\".`,\n );\n }\n\n const discriminatorShape = {\n [discriminator]: discriminatorSchema,\n } as unknown as Record<K, AnySchema>;\n\n map.set(tag, existingDiscriminator ? schema : schema.extend(discriminatorShape));\n }\n\n super();\n this._discriminator = discriminator;\n this._map = map;\n }\n\n /** The discriminator field key used to select the matching variant. */\n get discriminator(): K {\n return this._discriminator;\n }\n\n /** Map from discriminator tag value to the extended ObjectSchema for that variant. */\n get variantMap(): ReadonlyMap<string, VariantMap[string]> {\n return new Map(this._map);\n }\n\n private _resolveVariant(\n value: unknown,\n ctx: ParseContext,\n ): { matched: VariantMap[string]; obj: Record<string, unknown> } | { issues: Issue[] } {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.variant.type(), path: [] }],\n };\n }\n\n const obj = value as Record<string, unknown>;\n const discValue = obj[this._discriminator] as string;\n const matched = this._map.get(discValue);\n\n if (!matched) {\n const expected = [...this._map.keys()];\n\n return {\n issues: [\n {\n code: ErrorCode.invalid_variant,\n message: ctx.messages.variant.invalidDiscriminator({\n discriminator: this._discriminator,\n expected,\n }),\n params: { discriminator: this._discriminator, expected },\n path: [],\n },\n ],\n };\n }\n\n return { matched, obj };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const resolved = this._resolveVariant(value, ctx);\n\n if ('issues' in resolved) return { data: value, issues: resolved.issues, typeOk: false };\n\n const result = resolved.matched._parseFullSync(value, ctx);\n\n return result.issues.length === 0\n ? { data: result.data, issues: [], typeOk: true }\n : { data: value, issues: result.issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<InferVariantMap<K, M>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as unknown as InferVariantMap<K, M>;\n\n const resolved = this._resolveVariant(prepared.value, c);\n\n if ('issues' in resolved) throw new SpellValidationError(resolved.issues);\n\n const branch = await resolved.matched.safeParseAsync(prepared.value, c);\n\n if (!branch.success) throw branch.error;\n\n const validationIssues = await this._runValidatorsAsync(branch.data, c);\n\n if (validationIssues.length > 0) throw new SpellValidationError(validationIssues);\n\n return this._runPostprocessors(branch.data) as InferVariantMap<K, M>;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const branches: Record<string, SchemaDescriptor> = {};\n\n for (const [key, schema] of this._map.entries()) {\n defineOwnProperty(branches, key, schema.definition());\n }\n\n return { ...this._describeBase(), branches, discriminator: this._discriminator, kind: 'variant' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const branches = objectFromEntries([...this._map.entries()].map(([k, s]) => [k, s.walk(visitor)]));\n\n if (visitor.variant) return visitor.variant(this, branches);\n\n return super._walk(visitor);\n }\n}\n","import { type AnySchema, type InferOutput, type InferSchemaMode, Schema } from './core';\nimport { ArraySchema } from './schemas/array';\nimport { BigIntSchema } from './schemas/bigint';\nimport { BooleanSchema } from './schemas/boolean';\nimport { DateSchema } from './schemas/date';\nimport { EnumSchema, type EnumValues } from './schemas/enum';\nimport { InstanceOfSchema } from './schemas/instanceof';\nimport { IntersectSchema } from './schemas/intersect';\nimport { LazySchema } from './schemas/lazy';\nimport { LiteralSchema } from './schemas/literal';\nimport { MapSchema } from './schemas/map';\nimport { NeverSchema } from './schemas/never';\nimport { NumberSchema } from './schemas/number';\nimport { ObjectSchema, type ObjectShape } from './schemas/object';\nimport { type NormalizeItems, normalizeToSchemas, type RawOrSchema } from './schemas/raw-or';\nimport { RecordSchema } from './schemas/record';\nimport { SetSchema } from './schemas/set';\nimport { StringSchema } from './schemas/string';\nimport { TupleSchema, type TupleSchemas } from './schemas/tuple';\nimport { UnionSchema } from './schemas/union';\nimport { VariantSchema } from './schemas/variant';\n\n/* -------------------- Internal factory functions -------------------- */\n\nconst sAny = (): Schema<any> => new Schema();\nconst sArray = <T extends AnySchema>(schema: T): ArraySchema<T> => new ArraySchema(schema);\nconst sBigint = (): BigIntSchema => new BigIntSchema();\nconst sBoolean = (): BooleanSchema => new BooleanSchema();\nconst sDate = (): DateSchema => new DateSchema();\nconst sEnum = <const T extends EnumValues>(values: T): EnumSchema<T> => new EnumSchema(values);\nconst sInstanceof = <T>(cls: new (...args: any[]) => T): InstanceOfSchema<T> => new InstanceOfSchema(cls);\nconst sIntersect = <T extends readonly [RawOrSchema, RawOrSchema, ...RawOrSchema[]]>(\n ...items: T\n): IntersectSchema<NormalizeItems<T> & readonly AnySchema[]> =>\n new IntersectSchema(normalizeToSchemas(items) as NormalizeItems<T> & readonly AnySchema[]);\nconst sLazy = <T extends AnySchema>(getter: () => T): LazySchema<InferOutput<T>, unknown, InferSchemaMode<T>> =>\n new LazySchema(getter as unknown as () => Schema<InferOutput<T>, unknown, InferSchemaMode<T>>);\nconst sLiteral = <T extends string | number | boolean | null | undefined>(value: T): LiteralSchema<T> =>\n new LiteralSchema(value);\nconst sMap = <K extends AnySchema, V extends AnySchema>(keySchema: K, valueSchema: V): MapSchema<K, V> =>\n new MapSchema(keySchema, valueSchema);\nconst sNever = (): NeverSchema => new NeverSchema();\nconst sNull = (): LiteralSchema<null> => new LiteralSchema(null);\nconst sNumber = (): NumberSchema => new NumberSchema();\nconst sObject = <T extends ObjectShape>(shape: T): ObjectSchema<T> => new ObjectSchema(shape);\nconst sRecord = <K extends AnySchema, V extends AnySchema>(keySchema: K, valueSchema: V): RecordSchema<K, V> =>\n new RecordSchema(keySchema, valueSchema);\nconst sSet = <T extends AnySchema>(schema: T): SetSchema<T> => new SetSchema(schema);\nconst sString = (): StringSchema => new StringSchema();\nconst sTuple = <const T extends TupleSchemas>(items: T): TupleSchema<T> => new TupleSchema(items);\nconst sUndefined = (): LiteralSchema<undefined> => new LiteralSchema(undefined);\nconst sUnion = <T extends readonly [RawOrSchema, RawOrSchema, ...RawOrSchema[]]>(\n ...items: T\n): UnionSchema<NormalizeItems<T> & readonly AnySchema[]> =>\n new UnionSchema(normalizeToSchemas(items) as NormalizeItems<T> & readonly AnySchema[]);\nconst sUnknown = (): Schema<unknown> => new Schema();\nconst sVariant = <K extends string, M extends Record<string, ObjectSchema<any, any>>>(\n discriminator: K,\n map: M,\n): VariantSchema<K, M> => new VariantSchema(discriminator, map);\nconst sCoerce = {\n bigint: (): BigIntSchema<unknown> => BigIntSchema.coerce(),\n boolean: (): BooleanSchema<unknown> => BooleanSchema.coerce(),\n date: (): DateSchema<unknown> => DateSchema.coerce(),\n number: (): NumberSchema<unknown> => NumberSchema.coerce(),\n string: (): StringSchema<unknown> => StringSchema.coerce(),\n};\n\n/* -------------------- `s` namespace — the public API -------------------- */\n\n/**\n * Namespace of all schema factories. Use `s.string()`, `s.object()`, etc.\n *\n * @example\n * import { s, type Infer } from '@vielzeug/spell';\n *\n * const User = s.object({ name: s.string(), age: s.number().int().positive() });\n * type User = Infer<typeof User>;\n */\nexport const s = {\n any: sAny,\n array: sArray,\n bigint: sBigint,\n boolean: sBoolean,\n coerce: sCoerce,\n date: sDate,\n discriminatedUnion: sVariant,\n enum: sEnum,\n instanceof: sInstanceof,\n intersect: sIntersect,\n lazy: sLazy,\n literal: sLiteral,\n map: sMap,\n never: sNever,\n null: sNull,\n number: sNumber,\n object: sObject,\n record: sRecord,\n set: sSet,\n string: sString,\n tuple: sTuple,\n undefined: sUndefined,\n union: sUnion,\n unknown: sUnknown,\n};\n","import { fail, prependIssuePath } from './errors';\nimport { createParseContext } from './messages';\n\nexport type {\n AnySchema,\n CheckContext,\n FlatError,\n FlatErrorFirst,\n Infer,\n InferInput,\n InferOutput,\n InferSchemaMode,\n Issue,\n JsonSchema,\n MergeSchemaModes,\n MessageFn,\n Messages,\n ParseContext,\n ParseResult,\n SchemaDescriptor,\n SchemaMode,\n SchemaWalker,\n ValidateFn,\n ValidateResult,\n} from './core';\nexport {\n ErrorCode,\n PipeSchema,\n Schema,\n SpellDefinitionError,\n SpellError,\n SpellValidationError,\n schemaMode,\n} from './core';\nexport type { DeepPartial } from './messages';\nexport { s } from './s';\n\n/** Error helpers and immutable parse-context creation are secondary operations. */\nexport const diagnostics = {\n createParseContext,\n fail,\n prependIssuePath,\n};\n"],"mappings":"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"}