{"version":3,"file":"schema-validator.mjs","sources":["../../../../src/lib/data/validation/schema-validator.ts"],"sourcesContent":["/**\n * @file Schema Validator\n * @description Production-grade schema validation library with Zod-style API,\n * full TypeScript inference, composable validators, and async support.\n *\n * Features:\n * - Type-safe schema definitions with TypeScript inference\n * - Chainable API for schema composition\n * - Custom error messages with path tracking\n * - Async validation support\n * - Schema coercion and transformation\n * - Tree-shakeable exports\n *\n * @example\n * ```typescript\n * import { v, infer as Infer } from '@/lib/data/validation';\n *\n * const UserSchema = v.object({\n *   id: v.string().uuid(),\n *   email: v.string().email(),\n *   age: v.number().min(0).optional(),\n * });\n *\n * type User = Infer<typeof UserSchema>;\n *\n * const result = UserSchema.safeParse(data);\n * ```\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Validation issue structure\n */\nexport interface ValidationIssue {\n  /** Error code for programmatic handling */\n  code: string;\n  /** Human-readable error message */\n  message: string;\n  /** Path to the invalid field */\n  path: (string | number)[];\n  /** Expected value/type */\n  expected?: string;\n  /** Received value/type */\n  received?: string;\n  /** Additional context */\n  context?: Record<string, unknown>;\n}\n\n/**\n * Validation result for safeParse\n */\nexport type ValidationResult<T> =\n  | { success: true; data: T; issues: never[] }\n  | { success: false; data: undefined; issues: ValidationIssue[] };\n\n/**\n * Async validation result\n */\nexport type AsyncValidationResult<T> = Promise<ValidationResult<T>>;\n\n/**\n * Schema parse options\n */\nexport interface ParseOptions {\n  /** Path prefix for error messages */\n  path?: (string | number)[];\n  /** Enable coercion (string to number, etc.) */\n  coerce?: boolean;\n  /** Collect all errors instead of failing fast */\n  abortEarly?: boolean;\n  /** Custom context passed to validators */\n  context?: Record<string, unknown>;\n}\n\n/**\n * Base schema type for inference\n */\nexport type SchemaOutput<T extends BaseSchema<unknown>> = T['_output'];\n\n/**\n * Infer TypeScript type from schema\n */\nexport type Infer<T extends BaseSchema<unknown>> = SchemaOutput<T>;\n\n// =============================================================================\n// BASE SCHEMA\n// =============================================================================\n\n/**\n * Abstract base class for all schema types\n */\nexport abstract class BaseSchema<TOutput> {\n  /** Type marker for inference */\n  readonly _output!: TOutput;\n\n  /** Whether the schema is optional */\n  protected _optional = false;\n\n  /** Whether the schema is nullable */\n  protected _nullable = false;\n\n  /** Default value when undefined */\n  protected _default?: TOutput;\n\n  /** Transform function applied after validation */\n  protected _transform?: (value: TOutput) => TOutput;\n\n  /** Custom error message */\n  protected _message?: string;\n\n  /** Schema description for documentation */\n  protected _description?: string;\n\n  /**\n   * Parse and validate input, throwing on error\n   */\n  parse(value: unknown, options?: ParseOptions): TOutput {\n    const result = this.safeParse(value, options);\n    if (!result.success) {\n      throw new SchemaValidationError(result.issues);\n    }\n    return result.data;\n  }\n\n  /**\n   * Parse and validate input, returning result object\n   */\n  safeParse(value: unknown, options: ParseOptions = {}): ValidationResult<TOutput> {\n    const opts = { path: [], coerce: false, abortEarly: true, ...options };\n\n    // Handle undefined\n    if (value === undefined) {\n      if (this._default !== undefined) {\n        return { success: true, data: this._default, issues: [] };\n      }\n      if (this._optional) {\n        return { success: true, data: undefined as TOutput, issues: [] };\n      }\n      return {\n        success: false,\n        data: undefined,\n        issues: [this._createIssue('required', 'Required field is missing', opts.path)],\n      };\n    }\n\n    // Handle null\n    if (value === null) {\n      if (this._nullable) {\n        return { success: true, data: null as TOutput, issues: [] };\n      }\n      return {\n        success: false,\n        data: undefined,\n        issues: [this._createIssue('invalid_type', 'Expected non-null value', opts.path)],\n      };\n    }\n\n    // Run core validation\n    const result = this._validate(value, opts);\n\n    // Apply transform if validation succeeded\n    if (result.success && this._transform) {\n      try {\n        const transformed = this._transform(result.data);\n        return { success: true, data: transformed, issues: [] };\n      } catch (error) {\n        return {\n          success: false,\n          data: undefined,\n          issues: [\n            this._createIssue(\n              'transform_error',\n              error instanceof Error ? error.message : 'Transform failed',\n              opts.path\n            ),\n          ],\n        };\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Async parse and validate\n   */\n  async parseAsync(value: unknown, options?: ParseOptions): Promise<TOutput> {\n    return Promise.resolve(this.parse(value, options));\n  }\n\n  /**\n   * Async safeParse\n   */\n  async safeParseAsync(\n    value: unknown,\n    options?: ParseOptions\n  ): AsyncValidationResult<TOutput> {\n    return Promise.resolve(this.safeParse(value, options));\n  }\n\n  /**\n   * Mark schema as optional\n   */\n  optional(): BaseSchema<TOutput | undefined> {\n    const clone = this._clone();\n    clone._optional = true;\n    return clone as unknown as BaseSchema<TOutput | undefined>;\n  }\n\n  /**\n   * Mark schema as nullable\n   */\n  nullable(): BaseSchema<TOutput | null> {\n    const clone = this._clone();\n    clone._nullable = true;\n    return clone as unknown as BaseSchema<TOutput | null>;\n  }\n\n  /**\n   * Set default value\n   */\n  default(value: TOutput): BaseSchema<TOutput> {\n    const clone = this._clone();\n    clone._default = value;\n    return clone;\n  }\n\n  /**\n   * Add transform function\n   */\n  transform<TNew>(fn: (value: TOutput) => TNew): BaseSchema<TNew> {\n    const clone = this._clone();\n    clone._transform = fn as unknown as (value: TOutput) => TOutput;\n    return clone as unknown as BaseSchema<TNew>;\n  }\n\n  /**\n   * Add description\n   */\n  describe(description: string): this {\n    const clone = this._clone();\n    clone._description = description;\n    return clone;\n  }\n\n  /**\n   * Core validation logic to be implemented by subclasses\n   */\n  protected abstract _validate(\n    value: unknown,\n    options: ParseOptions\n  ): ValidationResult<TOutput>;\n\n  /**\n   * Create a validation issue\n   */\n  protected _createIssue(\n    code: string,\n    message: string,\n    path: (string | number)[],\n    context?: Record<string, unknown>\n  ): ValidationIssue {\n    return {\n      code,\n      message: this._message ?? message,\n      path,\n      ...context,\n    };\n  }\n\n  /**\n   * Clone the schema for immutable modifications\n   */\n  protected abstract _clone(): this;\n}\n\n// =============================================================================\n// STRING SCHEMA\n// =============================================================================\n\n/**\n * String validation schema\n */\nexport class StringSchema extends BaseSchema<string> {\n  private _minLength?: number;\n  private _maxLength?: number;\n  private _pattern?: RegExp;\n  private _format?: 'email' | 'url' | 'uuid' | 'date' | 'datetime' | 'iso8601';\n  private _trim = false;\n  private _lowercase = false;\n  private _uppercase = false;\n\n  min(length: number, message?: string): this {\n    const clone = this._clone();\n    clone._minLength = length;\n    if (message != null && message !== '') clone._message = message;\n    return clone;\n  }\n\n  max(length: number, message?: string): this {\n    const clone = this._clone();\n    clone._maxLength = length;\n    if (message != null && message !== '') clone._message = message;\n    return clone;\n  }\n\n  length(length: number, message?: string): this {\n    return this.min(length, message).max(length, message);\n  }\n\n  regex(pattern: RegExp, message?: string): this {\n    const clone = this._clone();\n    clone._pattern = pattern;\n    if (message !== undefined && message !== '') clone._message = message;\n    return clone;\n  }\n\n  email(message?: string): this {\n    const clone = this._clone();\n    clone._format = 'email';\n    if (message !== undefined && message !== '') clone._message = message;\n    return clone;\n  }\n\n  url(message?: string): this {\n    const clone = this._clone();\n    clone._format = 'url';\n    if (message !== undefined && message !== '') clone._message = message;\n    return clone;\n  }\n\n  uuid(message?: string): this {\n    const clone = this._clone();\n    clone._format = 'uuid';\n    if (message !== undefined && message !== '') clone._message = message;\n    return clone;\n  }\n\n  datetime(message?: string): this {\n    const clone = this._clone();\n    clone._format = 'datetime';\n    if (message !== undefined && message !== '') clone._message = message;\n    return clone;\n  }\n\n  trim(): this {\n    const clone = this._clone();\n    clone._trim = true;\n    return clone;\n  }\n\n  toLowerCase(): this {\n    const clone = this._clone();\n    clone._lowercase = true;\n    return clone;\n  }\n\n  toUpperCase(): this {\n    const clone = this._clone();\n    clone._uppercase = true;\n    return clone;\n  }\n\n  nonempty(message?: string): this {\n    return this.min(1, message ?? 'String cannot be empty');\n  }\n\n  protected _validate(value: unknown, options: ParseOptions): ValidationResult<string> {\n    // Coercion\n    let str = value;\n    if (options.coerce === true && typeof value !== 'string') {\n      str = String(value);\n    }\n\n    if (typeof str !== 'string') {\n      return {\n        success: false,\n        data: undefined,\n        issues: [\n          this._createIssue('invalid_type', `Expected string, received ${typeof value}`, options.path ?? [], {\n            expected: 'string',\n            received: typeof value,\n          }),\n        ],\n      };\n    }\n\n    // Apply string transformations\n    let result = str;\n    if (this._trim) result = result.trim();\n    if (this._lowercase) result = result.toLowerCase();\n    if (this._uppercase) result = result.toUpperCase();\n\n    const issues: ValidationIssue[] = [];\n\n    // Length checks\n    if (this._minLength !== undefined && result.length < this._minLength) {\n      issues.push(\n        this._createIssue(\n          'too_small',\n          `String must be at least ${this._minLength} characters`,\n          options.path ?? [],\n          { minimum: this._minLength, actual: result.length }\n        )\n      );\n    }\n\n    if (this._maxLength !== undefined && result.length > this._maxLength) {\n      issues.push(\n        this._createIssue(\n          'too_big',\n          `String must be at most ${this._maxLength} characters`,\n          options.path ?? [],\n          { maximum: this._maxLength, actual: result.length }\n        )\n      );\n    }\n\n    // Pattern check\n    if (this._pattern && !this._pattern.test(result)) {\n      issues.push(\n        this._createIssue('invalid_pattern', 'String does not match required pattern', options.path ?? [], {\n          pattern: this._pattern.toString(),\n        })\n      );\n    }\n\n    // Format checks\n    if (this._format && issues.length === 0) {\n      const formatIssue = this._validateFormat(result, this._format, options.path ?? []);\n      if (formatIssue) issues.push(formatIssue);\n    }\n\n    if (issues.length > 0) {\n      return { success: false, data: undefined, issues };\n    }\n\n    return { success: true, data: result, issues: [] };\n  }\n\n  protected _clone(): this {\n    const clone = new StringSchema() as this;\n    clone._optional = this._optional;\n    clone._nullable = this._nullable;\n    clone._default = this._default as string;\n    clone._transform = this._transform;\n    clone._message = this._message;\n    clone._minLength = this._minLength;\n    clone._maxLength = this._maxLength;\n    clone._pattern = this._pattern;\n    clone._format = this._format;\n    clone._trim = this._trim;\n    clone._lowercase = this._lowercase;\n    clone._uppercase = this._uppercase;\n    return clone;\n  }\n\n  private _validateFormat(\n    value: string,\n    format: string,\n    path: (string | number)[]\n  ): ValidationIssue | null {\n    switch (format) {\n      case 'email':\n        if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n          return this._createIssue('invalid_email', 'Invalid email address', path);\n        }\n        break;\n      case 'url':\n        try {\n          new URL(value);\n        } catch {\n          return this._createIssue('invalid_url', 'Invalid URL', path);\n        }\n        break;\n      case 'uuid':\n        if (\n          !/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n            value\n          )\n        ) {\n          return this._createIssue('invalid_uuid', 'Invalid UUID', path);\n        }\n        break;\n      case 'date':\n        if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(value) || isNaN(Date.parse(value))) {\n          return this._createIssue('invalid_date', 'Invalid date format (YYYY-MM-DD)', path);\n        }\n        break;\n      case 'datetime':\n      case 'iso8601':\n        if (isNaN(Date.parse(value))) {\n          return this._createIssue('invalid_datetime', 'Invalid datetime format', path);\n        }\n        break;\n    }\n    return null;\n  }\n}\n\n// =============================================================================\n// NUMBER SCHEMA\n// =============================================================================\n\n/**\n * Number validation schema\n */\nexport class NumberSchema extends BaseSchema<number> {\n  private _min?: number;\n  private _max?: number;\n  private _integer = false;\n  private _positive = false;\n  private _negative = false;\n  private _finite = true;\n\n  min(value: number, message?: string): this {\n    const clone = this._clone();\n    clone._min = value;\n    if (message !== undefined && message !== '') clone._message = message;\n    return clone;\n  }\n\n  max(value: number, message?: string): this {\n    const clone = this._clone();\n    clone._max = value;\n    if (message !== undefined && message !== '') clone._message = message;\n    return clone;\n  }\n\n  int(message?: string): this {\n    const clone = this._clone();\n    clone._integer = true;\n    if (message !== undefined && message !== '') clone._message = message;\n    return clone;\n  }\n\n  positive(message?: string): this {\n    const clone = this._clone();\n    clone._positive = true;\n    if (message !== undefined && message !== '') clone._message = message;\n    return clone;\n  }\n\n  negative(message?: string): this {\n    const clone = this._clone();\n    clone._negative = true;\n    if (message !== undefined && message !== '') clone._message = message;\n    return clone;\n  }\n\n  nonnegative(message?: string): this {\n    return this.min(0, message ?? 'Number must be non-negative');\n  }\n\n  finite(message?: string): this {\n    const clone = this._clone();\n    clone._finite = true;\n    if (message !== undefined && message !== '') clone._message = message;\n    return clone;\n  }\n\n  protected _validate(value: unknown, options: ParseOptions): ValidationResult<number> {\n    // Coercion\n    let num = value;\n    if (options.coerce === true && typeof value === 'string') {\n      num = Number(value);\n    }\n\n    if (typeof num !== 'number' || isNaN(num)) {\n      return {\n        success: false,\n        data: undefined,\n        issues: [\n          this._createIssue('invalid_type', `Expected number, received ${typeof value}`, options.path ?? [], {\n            expected: 'number',\n            received: typeof value,\n          }),\n        ],\n      };\n    }\n\n    const issues: ValidationIssue[] = [];\n\n    if (this._finite && !Number.isFinite(num)) {\n      issues.push(this._createIssue('not_finite', 'Number must be finite', options.path ?? []));\n    }\n\n    if (this._integer && !Number.isInteger(num)) {\n      issues.push(this._createIssue('not_integer', 'Number must be an integer', options.path ?? []));\n    }\n\n    if (this._positive && num <= 0) {\n      issues.push(this._createIssue('not_positive', 'Number must be positive', options.path ?? []));\n    }\n\n    if (this._negative && num >= 0) {\n      issues.push(this._createIssue('not_negative', 'Number must be negative', options.path ?? []));\n    }\n\n    if (this._min !== undefined && num < this._min) {\n      issues.push(\n        this._createIssue('too_small', `Number must be at least ${this._min}`, options.path ?? [], {\n          minimum: this._min,\n          actual: num,\n        })\n      );\n    }\n\n    if (this._max !== undefined && num > this._max) {\n      issues.push(\n        this._createIssue('too_big', `Number must be at most ${this._max}`, options.path ?? [], {\n          maximum: this._max,\n          actual: num,\n        })\n      );\n    }\n\n    if (issues.length > 0) {\n      return { success: false, data: undefined, issues };\n    }\n\n    return { success: true, data: num, issues: [] };\n  }\n\n  protected _clone(): this {\n    const clone = new NumberSchema() as this;\n    clone._optional = this._optional;\n    clone._nullable = this._nullable;\n    clone._default = this._default as number;\n    clone._transform = this._transform;\n    clone._message = this._message;\n    clone._min = this._min;\n    clone._max = this._max;\n    clone._integer = this._integer;\n    clone._positive = this._positive;\n    clone._negative = this._negative;\n    clone._finite = this._finite;\n    return clone;\n  }\n}\n\n// =============================================================================\n// BOOLEAN SCHEMA\n// =============================================================================\n\n/**\n * Boolean validation schema\n */\nexport class BooleanSchema extends BaseSchema<boolean> {\n  protected _validate(value: unknown, options: ParseOptions): ValidationResult<boolean> {\n    // Coercion\n    let bool = value;\n    if (options.coerce === true) {\n      if (value === 'true' || value === '1' || value === 1) bool = true;\n      else if (value === 'false' || value === '0' || value === 0) bool = false;\n    }\n\n    if (typeof bool !== 'boolean') {\n      return {\n        success: false,\n        data: undefined,\n        issues: [\n          this._createIssue('invalid_type', `Expected boolean, received ${typeof value}`, options.path ?? [], {\n            expected: 'boolean',\n            received: typeof value,\n          }),\n        ],\n      };\n    }\n\n    return { success: true, data: bool, issues: [] };\n  }\n\n  protected _clone(): this {\n    const clone = new BooleanSchema() as this;\n    clone._optional = this._optional;\n    clone._nullable = this._nullable;\n    clone._default = this._default as boolean;\n    clone._transform = this._transform;\n    clone._message = this._message;\n    return clone;\n  }\n}\n\n// =============================================================================\n// DATE SCHEMA\n// =============================================================================\n\n/**\n * Date validation schema\n */\nexport class DateSchema extends BaseSchema<Date> {\n  private _min?: Date;\n  private _max?: Date;\n\n  min(date: Date, message?: string): this {\n    const clone = this._clone();\n    clone._min = date;\n    if (message !== undefined && message !== '') clone._message = message;\n    return clone;\n  }\n\n  max(date: Date, message?: string): this {\n    const clone = this._clone();\n    clone._max = date;\n    if (message !== undefined && message !== '') clone._message = message;\n    return clone;\n  }\n\n  protected _validate(value: unknown, options: ParseOptions): ValidationResult<Date> {\n    // Coercion\n    let date: Date;\n    if (value instanceof Date) {\n      date = value;\n    } else if (options.coerce === true && (typeof value === 'string' || typeof value === 'number')) {\n      date = new Date(value);\n    } else {\n      return {\n        success: false,\n        data: undefined,\n        issues: [\n          this._createIssue('invalid_type', `Expected Date, received ${typeof value}`, options.path ?? [], {\n            expected: 'Date',\n            received: typeof value,\n          }),\n        ],\n      };\n    }\n\n    if (isNaN(date.getTime())) {\n      return {\n        success: false,\n        data: undefined,\n        issues: [this._createIssue('invalid_date', 'Invalid date value', options.path ?? [])],\n      };\n    }\n\n    const issues: ValidationIssue[] = [];\n\n    if (this._min && date < this._min) {\n      issues.push(\n        this._createIssue('too_small', `Date must be after ${this._min.toISOString()}`, options.path ?? [])\n      );\n    }\n\n    if (this._max && date > this._max) {\n      issues.push(\n        this._createIssue('too_big', `Date must be before ${this._max.toISOString()}`, options.path ?? [])\n      );\n    }\n\n    if (issues.length > 0) {\n      return { success: false, data: undefined, issues };\n    }\n\n    return { success: true, data: date, issues: [] };\n  }\n\n  protected _clone(): this {\n    const clone = new DateSchema() as this;\n    clone._optional = this._optional;\n    clone._nullable = this._nullable;\n    clone._default = this._default as Date;\n    clone._transform = this._transform;\n    clone._message = this._message;\n    clone._min = this._min;\n    clone._max = this._max;\n    return clone;\n  }\n}\n\n// =============================================================================\n// ARRAY SCHEMA\n// =============================================================================\n\n/**\n * Array validation schema\n */\nexport class ArraySchema<TElement extends BaseSchema<unknown>> extends BaseSchema<\n  SchemaOutput<TElement>[]\n> {\n  private readonly _element: TElement;\n  private _minLength?: number;\n  private _maxLength?: number;\n\n  constructor(element: TElement) {\n    super();\n    this._element = element;\n  }\n\n  min(length: number, message?: string): this {\n    const clone = this._clone();\n    clone._minLength = length;\n    if (message !== undefined && message !== '') clone._message = message;\n    return clone;\n  }\n\n  max(length: number, message?: string): this {\n    const clone = this._clone();\n    clone._maxLength = length;\n    if (message !== undefined && message !== '') clone._message = message;\n    return clone;\n  }\n\n  length(length: number, message?: string): this {\n    return this.min(length, message).max(length, message);\n  }\n\n  nonempty(message?: string): this {\n    return this.min(1, message ?? 'Array cannot be empty');\n  }\n\n  protected _validate(\n    value: unknown,\n    options: ParseOptions\n  ): ValidationResult<SchemaOutput<TElement>[]> {\n    if (!Array.isArray(value)) {\n      return {\n        success: false,\n        data: undefined,\n        issues: [\n          this._createIssue('invalid_type', `Expected array, received ${typeof value}`, options.path ?? [], {\n            expected: 'array',\n            received: typeof value,\n          }),\n        ],\n      };\n    }\n\n    const issues: ValidationIssue[] = [];\n    const results: SchemaOutput<TElement>[] = [];\n\n    // Length checks\n    if (this._minLength !== undefined && value.length < this._minLength) {\n      issues.push(\n        this._createIssue('too_small', `Array must have at least ${this._minLength} items`, options.path ?? [])\n      );\n    }\n\n    if (this._maxLength !== undefined && value.length > this._maxLength) {\n      issues.push(\n        this._createIssue('too_big', `Array must have at most ${this._maxLength} items`, options.path ?? [])\n      );\n    }\n\n    // Validate each element\n    for (let i = 0; i < value.length; i++) {\n      const elementResult = this._element.safeParse(value[i], {\n        ...options,\n        path: [...(options.path ?? []), i],\n      });\n\n      if (!elementResult.success) {\n        issues.push(...elementResult.issues);\n        if (options.abortEarly === true) break;\n      } else {\n        results.push(elementResult.data);\n      }\n    }\n\n    if (issues.length > 0) {\n      return { success: false, data: undefined, issues };\n    }\n\n    return { success: true, data: results, issues: [] };\n  }\n\n  protected _clone(): this {\n    const clone = new ArraySchema(this._element) as this;\n    clone._optional = this._optional;\n    clone._nullable = this._nullable;\n    clone._default = this._default;\n    clone._transform = this._transform;\n    clone._message = this._message;\n    clone._minLength = this._minLength;\n    clone._maxLength = this._maxLength;\n    return clone;\n  }\n}\n\n// =============================================================================\n// OBJECT SCHEMA\n// =============================================================================\n\n/**\n * Type helper for object schema shape\n */\ntype ObjectShape = Record<string, BaseSchema<unknown>>;\n\n/**\n * Infer object type from shape\n */\ntype InferObjectShape<T extends ObjectShape> = {\n  [K in keyof T]: SchemaOutput<T[K]>;\n};\n\n/**\n * Object validation schema\n */\nexport class ObjectSchema<TShape extends ObjectShape> extends BaseSchema<\n  InferObjectShape<TShape>\n> {\n  private readonly _shape: TShape;\n  private _strict = false;\n  private _catchall?: BaseSchema<unknown>;\n  private _passthrough = false;\n\n  constructor(shape: TShape) {\n    super();\n    this._shape = shape;\n  }\n\n  /**\n   * Get the shape\n   */\n  get shape(): TShape {\n    return this._shape;\n  }\n\n  /**\n   * Reject unknown keys\n   */\n  strict(): this {\n    const clone = this._clone();\n    clone._strict = true;\n    return clone;\n  }\n\n  /**\n   * Pass through unknown keys\n   */\n  passthrough(): this {\n    const clone = this._clone();\n    clone._passthrough = true;\n    return clone;\n  }\n\n  /**\n   * Validate unknown keys with a schema\n   */\n  catchall<T extends BaseSchema<unknown>>(schema: T): this {\n    const clone = this._clone();\n    clone._catchall = schema;\n    return clone;\n  }\n\n  /**\n   * Pick specific keys\n   */\n  pick<K extends keyof TShape>(keys: K[]): ObjectSchema<Pick<TShape, K>> {\n    const newShape = {} as Pick<TShape, K>;\n    for (const key of keys) {\n      newShape[key] = this._shape[key];\n    }\n    return new ObjectSchema(newShape);\n  }\n\n  /**\n   * Omit specific keys\n   */\n  omit<K extends keyof TShape>(keys: K[]): ObjectSchema<Omit<TShape, K>> {\n    const newShape = { ...this._shape };\n    for (const key of keys) {\n      delete newShape[key];\n    }\n    return new ObjectSchema(newShape as Omit<TShape, K>);\n  }\n\n  /**\n   * Extend with additional fields\n   */\n  extend<TExtension extends ObjectShape>(\n    extension: TExtension\n  ): ObjectSchema<TShape & TExtension> {\n    return new ObjectSchema({ ...this._shape, ...extension });\n  }\n\n  /**\n   * Merge with another object schema\n   */\n  merge<TOther extends ObjectShape>(\n    other: ObjectSchema<TOther>\n  ): ObjectSchema<TShape & TOther> {\n    return this.extend(other._shape);\n  }\n\n  /**\n   * Make all fields partial\n   */\n  partial(): ObjectSchema<{ [K in keyof TShape]: ReturnType<TShape[K]['optional']> }> {\n    const newShape = {} as Record<string, BaseSchema<unknown>>;\n    for (const [key, schema] of Object.entries(this._shape)) {\n      newShape[key] = schema.optional();\n    }\n    return new ObjectSchema(newShape) as ObjectSchema<{\n      [K in keyof TShape]: ReturnType<TShape[K]['optional']>;\n    }>;\n  }\n\n  protected _validate(\n    value: unknown,\n    options: ParseOptions\n  ): ValidationResult<InferObjectShape<TShape>> {\n    if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n      return {\n        success: false,\n        data: undefined,\n        issues: [\n          this._createIssue('invalid_type', `Expected object, received ${typeof value}`, options.path ?? [], {\n            expected: 'object',\n            received: Array.isArray(value) ? 'array' : typeof value,\n          }),\n        ],\n      };\n    }\n\n    const obj = value as Record<string, unknown>;\n    const issues: ValidationIssue[] = [];\n    const result: Record<string, unknown> = {};\n\n    // Validate defined shape\n    for (const [key, schema] of Object.entries(this._shape)) {\n      const fieldResult = schema.safeParse(obj[key], {\n        ...options,\n        path: [...(options.path ?? []), key],\n      });\n\n      if (!fieldResult.success) {\n        issues.push(...fieldResult.issues);\n        if (options.abortEarly === true) break;\n      } else {\n        result[key] = fieldResult.data;\n      }\n    }\n\n    // Handle unknown keys\n    const knownKeys = new Set(Object.keys(this._shape));\n    for (const key of Object.keys(obj)) {\n      if (!knownKeys.has(key)) {\n        if (this._strict) {\n          issues.push(\n            this._createIssue('unrecognized_key', `Unrecognized key: ${key}`, [...(options.path ?? []), key])\n          );\n        } else if (this._catchall) {\n          const catchResult = this._catchall.safeParse(obj[key], {\n            ...options,\n            path: [...(options.path ?? []), key],\n          });\n          if (!catchResult.success) {\n            issues.push(...catchResult.issues);\n          } else {\n            result[key] = catchResult.data;\n          }\n        } else if (this._passthrough) {\n          result[key] = obj[key];\n        }\n        // Default: strip unknown keys\n      }\n    }\n\n    if (issues.length > 0) {\n      return { success: false, data: undefined, issues };\n    }\n\n    return { success: true, data: result as InferObjectShape<TShape>, issues: [] };\n  }\n\n  protected _clone(): this {\n    const clone = new ObjectSchema(this._shape) as this;\n    clone._optional = this._optional;\n    clone._nullable = this._nullable;\n    clone._default = this._default;\n    clone._transform = this._transform;\n    clone._message = this._message;\n    clone._strict = this._strict;\n    clone._catchall = this._catchall;\n    clone._passthrough = this._passthrough;\n    return clone;\n  }\n}\n\n// =============================================================================\n// ENUM SCHEMA\n// =============================================================================\n\n/**\n * Enum validation schema\n */\nexport class EnumSchema<T extends readonly [string, ...string[]]> extends BaseSchema<\n  T[number]\n> {\n  private readonly _values: T;\n\n  constructor(values: T) {\n    super();\n    this._values = values;\n  }\n\n  get values(): T {\n    return this._values;\n  }\n\n  protected _validate(value: unknown, options: ParseOptions): ValidationResult<T[number]> {\n    if (!this._values.includes(value as string)) {\n      return {\n        success: false,\n        data: undefined,\n        issues: [\n          this._createIssue(\n            'invalid_enum_value',\n            `Expected one of: ${this._values.join(', ')}`,\n            options.path ?? [],\n            {\n              expected: this._values.join(' | '),\n              received: String(value),\n            }\n          ),\n        ],\n      };\n    }\n\n    return { success: true, data: value as T[number], issues: [] };\n  }\n\n  protected _clone(): this {\n    const clone = new EnumSchema(this._values) as this;\n    clone._optional = this._optional;\n    clone._nullable = this._nullable;\n    clone._default = this._default;\n    clone._transform = this._transform;\n    clone._message = this._message;\n    return clone;\n  }\n}\n\n// =============================================================================\n// LITERAL SCHEMA\n// =============================================================================\n\n/**\n * Literal validation schema\n */\nexport class LiteralSchema<T extends string | number | boolean> extends BaseSchema<T> {\n  private readonly _value: T;\n\n  constructor(value: T) {\n    super();\n    this._value = value;\n  }\n\n  get value(): T {\n    return this._value;\n  }\n\n  protected _validate(value: unknown, options: ParseOptions): ValidationResult<T> {\n    if (value !== this._value) {\n      return {\n        success: false,\n        data: undefined,\n        issues: [\n          this._createIssue(\n            'invalid_literal',\n            `Expected ${JSON.stringify(this._value)}, received ${JSON.stringify(value)}`,\n            options.path ?? []\n          ),\n        ],\n      };\n    }\n\n    return { success: true, data: value as T, issues: [] };\n  }\n\n  protected _clone(): this {\n    const clone = new LiteralSchema(this._value) as this;\n    clone._optional = this._optional;\n    clone._nullable = this._nullable;\n    clone._default = this._default;\n    clone._transform = this._transform;\n    clone._message = this._message;\n    return clone;\n  }\n}\n\n// =============================================================================\n// UNION SCHEMA\n// =============================================================================\n\n/**\n * Union validation schema\n */\nexport class UnionSchema<T extends BaseSchema<unknown>[]> extends BaseSchema<\n  SchemaOutput<T[number]>\n> {\n  private readonly _schemas: T;\n\n  constructor(schemas: T) {\n    super();\n    this._schemas = schemas;\n  }\n\n  protected _validate(\n    value: unknown,\n    options: ParseOptions\n  ): ValidationResult<SchemaOutput<T[number]>> {\n    const allIssues: ValidationIssue[] = [];\n\n    for (const schema of this._schemas) {\n      const result = schema.safeParse(value, options);\n      if (result.success) {\n        return { success: true, data: result.data as SchemaOutput<T[number]>, issues: [] };\n      }\n      allIssues.push(...result.issues);\n    }\n\n    return {\n      success: false,\n      data: undefined,\n      issues: [\n        this._createIssue(\n          'invalid_union',\n          'Input does not match any schema in the union',\n          options.path ?? [],\n          { unionErrors: allIssues }\n        ),\n      ],\n    };\n  }\n\n  protected _clone(): this {\n    const clone = new UnionSchema(this._schemas) as this;\n    clone._optional = this._optional;\n    clone._nullable = this._nullable;\n    clone._default = this._default;\n    clone._transform = this._transform;\n    clone._message = this._message;\n    return clone;\n  }\n}\n\n// =============================================================================\n// RECORD SCHEMA\n// =============================================================================\n\n/**\n * Record validation schema\n */\nexport class RecordSchema<\n  TKey extends BaseSchema<string>,\n  TValue extends BaseSchema<unknown>,\n> extends BaseSchema<Record<string, SchemaOutput<TValue>>> {\n  private readonly _keySchema: TKey;\n  private readonly _valueSchema: TValue;\n\n  constructor(keySchema: TKey, valueSchema: TValue) {\n    super();\n    this._keySchema = keySchema;\n    this._valueSchema = valueSchema;\n  }\n\n  protected _validate(\n    value: unknown,\n    options: ParseOptions\n  ): ValidationResult<Record<string, SchemaOutput<TValue>>> {\n    if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n      return {\n        success: false,\n        data: undefined,\n        issues: [\n          this._createIssue('invalid_type', `Expected object, received ${typeof value}`, options.path ?? []),\n        ],\n      };\n    }\n\n    const obj = value as Record<string, unknown>;\n    const issues: ValidationIssue[] = [];\n    const result: Record<string, SchemaOutput<TValue>> = {};\n\n    for (const [key, val] of Object.entries(obj)) {\n      const keyResult = this._keySchema.safeParse(key, {\n        ...options,\n        path: [...(options.path ?? []), key],\n      });\n\n      if (!keyResult.success) {\n        issues.push(...keyResult.issues);\n        if (options.abortEarly === true) break;\n        continue;\n      }\n\n      const valueResult = this._valueSchema.safeParse(val, {\n        ...options,\n        path: [...(options.path ?? []), key],\n      });\n\n      if (!valueResult.success) {\n        issues.push(...valueResult.issues);\n        if (options.abortEarly === true) break;\n      } else {\n        result[key] = valueResult.data as SchemaOutput<TValue>;\n      }\n    }\n\n    if (issues.length > 0) {\n      return { success: false, data: undefined, issues };\n    }\n\n    return { success: true, data: result, issues: [] };\n  }\n\n  protected _clone(): this {\n    const clone = new RecordSchema(this._keySchema, this._valueSchema) as this;\n    clone._optional = this._optional;\n    clone._nullable = this._nullable;\n    clone._default = this._default;\n    clone._transform = this._transform;\n    clone._message = this._message;\n    return clone;\n  }\n}\n\n// =============================================================================\n// UNKNOWN / ANY SCHEMA\n// =============================================================================\n\n/**\n * Unknown validation schema (accepts anything)\n */\nexport class UnknownSchema extends BaseSchema<unknown> {\n  protected _validate(value: unknown, _options: ParseOptions): ValidationResult<unknown> {\n    return { success: true, data: value, issues: [] };\n  }\n\n  protected _clone(): this {\n    const clone = new UnknownSchema() as this;\n    clone._optional = this._optional;\n    clone._nullable = this._nullable;\n    clone._default = this._default;\n    clone._transform = this._transform;\n    clone._message = this._message;\n    return clone;\n  }\n}\n\n// =============================================================================\n// VALIDATION ERROR\n// =============================================================================\n\n/**\n * Schema validation error\n */\nexport class SchemaValidationError extends Error {\n  readonly issues: ValidationIssue[];\n\n  constructor(issues: ValidationIssue[]) {\n    const message = issues\n      .map((i) => `${i.path.length > 0 ? `${i.path.join('.')}: ` : ''}${i.message}`)\n      .join('; ');\n    super(message);\n    this.name = 'SchemaValidationError';\n    this.issues = issues;\n  }\n\n  /**\n   * Get flat error map\n   */\n  flatten(): Record<string, string[]> {\n    const result: Record<string, string[]> = {};\n    for (const issue of this.issues) {\n      const path = issue.path.join('.') || '_root';\n      result[path] ??= [];\n      result[path].push(issue.message);\n    }\n    return result;\n  }\n\n  /**\n   * Format errors for display\n   */\n  format(): Record<string, { _errors: string[] }> {\n    const result: Record<string, { _errors: string[] }> = {};\n    for (const issue of this.issues) {\n      const path = issue.path.join('.') || '_root';\n      result[path] ??= { _errors: [] };\n      result[path]._errors.push(issue.message);\n    }\n    return result;\n  }\n}\n\n// =============================================================================\n// SCHEMA FACTORY (v namespace)\n// =============================================================================\n\n/**\n * Schema factory functions\n */\nexport const v = {\n  string: (): StringSchema => new StringSchema(),\n  number: (): NumberSchema => new NumberSchema(),\n  boolean: (): BooleanSchema => new BooleanSchema(),\n  date: (): DateSchema => new DateSchema(),\n  array: <T extends BaseSchema<unknown>>(element: T): ArraySchema<T> => new ArraySchema(element),\n  object: <T extends ObjectShape>(shape: T): ObjectSchema<T> => new ObjectSchema(shape),\n  enum: <T extends readonly [string, ...string[]]>(values: T): EnumSchema<T> => new EnumSchema(values),\n  literal: <T extends string | number | boolean>(value: T): LiteralSchema<T> => new LiteralSchema(value),\n  union: <T extends BaseSchema<unknown>[]>(...schemas: T): UnionSchema<T> => new UnionSchema(schemas),\n  record: <TKey extends BaseSchema<string>, TValue extends BaseSchema<unknown>>(\n    keySchema: TKey,\n    valueSchema: TValue\n  ): RecordSchema<TKey, TValue> => new RecordSchema(keySchema, valueSchema),\n  unknown: (): UnknownSchema => new UnknownSchema(),\n  any: (): UnknownSchema => new UnknownSchema(),\n\n  // Convenience methods\n  optional: <T extends BaseSchema<unknown>>(schema: T): BaseSchema<SchemaOutput<T> | undefined> =>\n    schema.optional() as BaseSchema<SchemaOutput<T> | undefined>,\n  nullable: <T extends BaseSchema<unknown>>(schema: T): BaseSchema<SchemaOutput<T> | null> =>\n    schema.nullable() as BaseSchema<SchemaOutput<T> | null>,\n};\n\n// =============================================================================\n// UTILITY TYPES EXPORT\n// =============================================================================\n\nexport { type InferObjectShape as InferObject };\n\nexport type Schema<T = unknown> = BaseSchema<T>;\n\nexport class ValidationError extends Error {\n  constructor(public issues: ValidationIssue[]) {\n    super(issues[0]?.message ?? 'Validation failed');\n    this.name = 'ValidationError';\n  }\n}\n"],"names":["BaseSchema","value","options","result","SchemaValidationError","opts","error","clone","fn","description","code","message","path","context","StringSchema","length","pattern","str","issues","formatIssue","format","NumberSchema","num","BooleanSchema","bool","DateSchema","date","ArraySchema","element","results","i","elementResult","ObjectSchema","shape","schema","keys","newShape","key","extension","other","obj","fieldResult","knownKeys","catchResult","EnumSchema","values","LiteralSchema","UnionSchema","schemas","allIssues","RecordSchema","keySchema","valueSchema","val","keyResult","valueResult","UnknownSchema","_options","issue","v"],"mappings":"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"}