{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Symbol for validating object keys against a schema.\n */\nexport const $keys = Symbol.for('@@keys');\n/**\n * Symbol for validating object values against a schema.\n */\nexport const $values = Symbol.for('@@values');\n/**\n * Symbol for enforcing strict object validation (no extra properties allowed).\n */\nexport const $strict = Symbol.for('@@strict');\n\nconst $op = Symbol.for('@@op');\n\nconst OR = Symbol.for('@@or');\nconst AND = Symbol.for('@@and');\nconst OPTIONAL = Symbol.for('@@optional');\nconst TUPLE = Symbol.for('@@tuple');\nconst DISCRIMINATED = Symbol.for('@@discriminated');\nconst CHECK = Symbol.for('@@check');\nconst ERR = Symbol.for('@@err');\n\ninterface ErrShape {\n  readonly message: string;\n  readonly [ERR]: true;\n}\nfunction ErrCtor(this: ErrShape, message: string): void {\n  (this as { message: string }).message = message;\n}\n(ErrCtor.prototype as { [ERR]: true })[ERR] = true;\n\ntype Mutable<T> = { -readonly [K in keyof T]: T[K] };\n\ninterface OrShape<T> {\n  readonly schemas: Schema<T>[];\n  readonly [$op]: typeof OR;\n}\ninterface AndShape<T> {\n  readonly schemas: Schema<T>[];\n  readonly [$op]: typeof AND;\n}\ninterface OptionalShape<T> {\n  readonly schemas: Schema<T>[];\n  readonly [$op]: typeof OPTIONAL;\n}\ninterface TupleShape<T> {\n  readonly schemas: Schema<T>[];\n  readonly [$op]: typeof TUPLE;\n}\ninterface DiscriminatedShape<T> {\n  readonly schemas: Schema<T>[];\n  readonly [$op]: typeof DISCRIMINATED;\n  readonly key: string;\n}\nexport interface CheckContext {\n  ref(value: unknown): string;\n}\ninterface CheckShape {\n  readonly [$op]: typeof CHECK;\n  readonly compile: (value: string, ctx: CheckContext) => { check: string; message: string };\n}\n\ntype Tagged<T> = OrShape<T> | AndShape<T> | OptionalShape<T> | TupleShape<T> | DiscriminatedShape<T> | CheckShape;\n\nconst OrCtor = function <T>(this: OrShape<T>, schemas: Schema<T>[]) {\n  (this as Mutable<OrShape<T>>).schemas = schemas;\n} as unknown as { new <T>(schemas: Schema<T>[]): OrShape<T>; prototype: { [$op]: typeof OR } };\nOrCtor.prototype[$op] = OR;\n\nconst AndCtor = function <T>(this: AndShape<T>, schemas: Schema<T>[]) {\n  (this as Mutable<AndShape<T>>).schemas = schemas;\n} as unknown as { new <T>(schemas: Schema<T>[]): AndShape<T>; prototype: { [$op]: typeof AND } };\nAndCtor.prototype[$op] = AND;\n\nconst OptionalCtor = function <T>(this: OptionalShape<T>, schema: Schema<T>) {\n  (this as Mutable<OptionalShape<T>>).schemas = [schema];\n} as unknown as { new <T>(schema: Schema<T>): OptionalShape<T>; prototype: { [$op]: typeof OPTIONAL } };\nOptionalCtor.prototype[$op] = OPTIONAL;\n\nconst TupleCtor = function <T>(this: TupleShape<T>, schemas: Schema<T>[]) {\n  (this as Mutable<TupleShape<T>>).schemas = schemas;\n} as unknown as { new <T>(schemas: Schema<T>[]): TupleShape<T>; prototype: { [$op]: typeof TUPLE } };\nTupleCtor.prototype[$op] = TUPLE;\n\nconst DiscriminatedCtor = function <T>(this: DiscriminatedShape<T>, schemas: Schema<T>[], key: string) {\n  (this as Mutable<DiscriminatedShape<T>>).schemas = schemas;\n  (this as Mutable<DiscriminatedShape<T>>).key = key;\n} as unknown as { new <T>(schemas: Schema<T>[], key: string): DiscriminatedShape<T>; prototype: { [$op]: typeof DISCRIMINATED } };\nDiscriminatedCtor.prototype[$op] = DISCRIMINATED;\n\nconst CheckCtor = function (this: CheckShape, compileFn: CheckShape['compile']) {\n  (this as Mutable<CheckShape>).compile = compileFn;\n} as unknown as { new (compileFn: CheckShape['compile']): CheckShape; prototype: { [$op]: typeof CHECK } };\nCheckCtor.prototype[$op] = CHECK;\n\n/**\n * Represents a schema for validating data.\n *\n * Schemas can be defined for various data types, including objects, arrays, and primitives.\n *\n * @template T - The type of data the schema validates.\n */\nexport type Schema<T> =\n  T extends Record<string | number | symbol, unknown>\n    ? { [K in keyof T]?: Schema<T[K]> | unknown } & { [$keys]?: Schema<keyof T> } & { [$values]?: Schema<T[keyof T]> } & { [$strict]?: boolean }\n    : T extends Array<infer A>\n      ? Schema<A>[] | unknown\n      : unknown;\n\n/**\n * Operator for validating data against any of the provided schemas (logical OR).\n */\nexport const or = <T>(...schemas: Schema<T>[]): OrShape<T> => {\n  if (schemas.length === 0) throw new TypeError('Operator requires at least one schema');\n  return new OrCtor(schemas);\n};\n\n/**\n * Operator for validating data against all provided schemas (logical AND).\n */\nexport const and = <T>(...schemas: Schema<T>[]): AndShape<T> => {\n  if (schemas.length === 0) throw new TypeError('Operator requires at least one schema');\n  return new AndCtor(schemas);\n};\n\n/**\n * Operator for making a schema optional (nullable).\n */\nexport const optional = <T>(schema: Schema<T>): OptionalShape<T> => new OptionalCtor(schema);\n\n/**\n * Operator for validating data against a fixed-length tuple of schemas.\n */\nexport const tuple = <T>(...schemas: Schema<T>[]): TupleShape<T> => {\n  if (schemas.length === 0) throw new TypeError('Operator requires at least one schema');\n  return new TupleCtor(schemas);\n};\n\n/**\n * Operator for validating data against a discriminated union.\n *\n * Optimizes validation by checking the discriminant field first and only\n * validating the matching variant. More efficient than `or()` for unions\n * where each variant has a common field with a unique literal value.\n *\n * @param schemas - Array of object schemas, each with a discriminant field containing a literal value.\n * @param key - The name of the discriminant field present in all variants.\n *\n * @example\n * ```typescript\n * const messageSchema = discriminated([\n *   { type: 'email', address: String },\n *   { type: 'sms', phone: String },\n *   { type: 'push', token: String },\n * ], 'type');\n * ```\n */\nexport const discriminated = <T>(schemas: Schema<T>[], key: string): DiscriminatedShape<T> => {\n  if (schemas.length === 0) throw new TypeError('discriminated requires at least one schema');\n  return new DiscriminatedCtor(schemas, key);\n};\n\n/**\n * Creates a custom validation check.\n * Accepts a predicate function or an object with a compile method for inlined checks.\n *\n * @param fnOrOpts - A predicate function `(value) => boolean` or an object with a `compile` method for code-generating checks.\n * @param message - Optional custom error message.\n */\nexport const check = (\n  fnOrOpts: ((v: unknown) => boolean) | { compile: (value: string, ctx: CheckContext) => { check: string; message: string } },\n  message?: string,\n): CheckShape => {\n  if (typeof fnOrOpts === 'function') {\n    return new CheckCtor((v, ctx) => {\n      const fnRef = ctx.ref(fnOrOpts);\n      return {\n        check: `!${fnRef}(${v})`,\n        message: message ? JSON.stringify(message) : `\\`check failed for value \\${${v}}\\``,\n      };\n    });\n  }\n  return new CheckCtor(fnOrOpts.compile);\n};\n\n/**\n * Validates that a numeric value is greater than or equal to `n`.\n *\n * @param n - The minimum allowed value (inclusive).\n * @param message - Optional custom error message.\n */\nexport const min = (n: number, message?: string): CheckShape =>\n  new CheckCtor((v) => ({\n    check: `${v} < ${n}`,\n    message: message ? JSON.stringify(message) : `\\`must be >= ${n}, got \\${${v}}\\``,\n  }));\n\n/**\n * Validates that a numeric value is less than or equal to `n`.\n *\n * @param n - The maximum allowed value (inclusive).\n * @param message - Optional custom error message.\n */\nexport const max = (n: number, message?: string): CheckShape =>\n  new CheckCtor((v) => ({\n    check: `${v} > ${n}`,\n    message: message ? JSON.stringify(message) : `\\`must be <= ${n}, got \\${${v}}\\``,\n  }));\n\n/**\n * Validates that a value is an integer.\n *\n * @param message - Optional custom error message.\n */\nexport const integer = (message?: string): CheckShape =>\n  new CheckCtor((v) => ({\n    check: `!Number.isInteger(${v})`,\n    message: message ? JSON.stringify(message) : `\\`must be an integer, got \\${${v}}\\``,\n  }));\n\n/**\n * Validates that a value's length is greater than or equal to `n`.\n *\n * @param n - The minimum allowed length (inclusive).\n * @param message - Optional custom error message.\n */\nexport const minLength = (n: number, message?: string): CheckShape =>\n  new CheckCtor((v) => ({\n    check: `${v}.length < ${n}`,\n    message: message ? JSON.stringify(message) : `\\`length must be >= ${n}, got \\${${v}.length}\\``,\n  }));\n\n/**\n * Validates that a value's length is less than or equal to `n`.\n *\n * @param n - The maximum allowed length (inclusive).\n * @param message - Optional custom error message.\n */\nexport const maxLength = (n: number, message?: string): CheckShape =>\n  new CheckCtor((v) => ({\n    check: `${v}.length > ${n}`,\n    message: message ? JSON.stringify(message) : `\\`length must be <= ${n}, got \\${${v}.length}\\``,\n  }));\n\n/**\n * Validates that a numeric value is strictly greater than `n`.\n *\n * @param n - The exclusive lower bound.\n * @param message - Optional custom error message.\n */\nexport const gt = (n: number, message?: string): CheckShape =>\n  new CheckCtor((v) => ({\n    check: `${v} <= ${n}`,\n    message: message ? JSON.stringify(message) : `\\`must be > ${n}, got \\${${v}}\\``,\n  }));\n\n/**\n * Validates that a numeric value is strictly less than `n`.\n *\n * @param n - The exclusive upper bound.\n * @param message - Optional custom error message.\n */\nexport const lt = (n: number, message?: string): CheckShape =>\n  new CheckCtor((v) => ({\n    check: `${v} >= ${n}`,\n    message: message ? JSON.stringify(message) : `\\`must be < ${n}, got \\${${v}}\\``,\n  }));\n\n/**\n * Validates that a numeric value is a multiple of `n`.\n *\n * @param n - The divisor to check against.\n * @param message - Optional custom error message.\n */\nexport const multipleOf = (n: number, message?: string): CheckShape =>\n  new CheckCtor((v) => ({\n    check: `${v} % ${n} !== 0`,\n    message: message ? JSON.stringify(message) : `\\`must be a multiple of ${n}, got \\${${v}}\\``,\n  }));\n\n/**\n * Validates that an array contains only unique items.\n *\n * @param message - Optional custom error message.\n */\nexport const uniqueItems = (message?: string): CheckShape =>\n  new CheckCtor((v) => ({\n    check: `new Set(${v}).size !== ${v}.length`,\n    message: message ? JSON.stringify(message) : `\\`must have unique items\\``,\n  }));\n\ntype EnumLike = { [k: string]: string | number; [n: number]: string };\n\n/**\n * Validates that a value is one of the allowed values. Accepts an array or an enum-like object.\n *\n * @param values - Array of allowed values or an enum-like object.\n * @param message - Optional custom error message.\n */\nexport const oneOf = <T extends EnumLike>(values: (string | number)[] | T, message?: string): CheckShape => {\n  const set = new Set(Array.isArray(values) ? values : Object.values(values));\n  return new CheckCtor((v, ctx) => ({\n    check: `!${ctx.ref(set)}.has(${v})`,\n    message: message ? JSON.stringify(message) : `\\`must be one of [${[...set].map(toLiteral).join(', ')}], got \\${${v}}\\``,\n  }));\n};\n\n/**\n * Decodes a base64-encoded string to UTF-8.\n *\n * Uses `Buffer` in Node.js environments and `atob` in browsers.\n *\n * @param value - The base64-encoded string to decode.\n * @returns The decoded UTF-8 string.\n */\nconst utf8Encoder = new TextEncoder();\nconst utf8Decoder = new TextDecoder('utf-8');\n\nconst fromBase64Bytes = (value: string): Uint8Array => {\n  const bin = atob(value);\n  const out = new Uint8Array(bin.length);\n  for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n  return out;\n};\n\nexport const fromBase64 = (value: string): string => utf8Decoder.decode(fromBase64Bytes(value));\n\nconst HEX_LUT = (() => {\n  const t = new Int8Array(256).fill(-1);\n  for (let i = 0; i < 10; i++) t[48 + i] = i;\n  for (let i = 0; i < 6; i++) {\n    t[97 + i] = 10 + i;\n    t[65 + i] = 10 + i;\n  }\n  return t;\n})();\n\nconst fromHex = (value: string): Uint8Array => {\n  let start = 0;\n  if (value.length >= 2 && value.charCodeAt(0) === 48 && (value.charCodeAt(1) | 32) === 120) {\n    start = 2;\n  }\n  const digits = value.length - start;\n  if (digits === 0 || digits % 2 !== 0) throw new TypeError('invalid hex length');\n  const out = new Uint8Array(digits / 2);\n  for (let i = 0; i < out.length; i++) {\n    const byte = (HEX_LUT[value.charCodeAt(start + i * 2)] << 4) | HEX_LUT[value.charCodeAt(start + i * 2 + 1)];\n    if (byte < 0) throw new TypeError('invalid hex digit');\n    out[i] = byte;\n  }\n  return out;\n};\n\nconst MULTIPLIERS = {\n  ms: 1,\n  s: 1000,\n  m: 60000,\n  h: 3600000,\n  d: 86400000,\n  w: 604800000,\n};\n\nconst TIME_REGEX = /^(\\d*\\.?\\d*)(ms|s|m|h|d|w)?$/;\n\n/**\n * Creates a TypeError with the given message, typed as T for deferred error handling.\n *\n * Used by `as.*` conversion utilities to return errors that can be caught\n * during schema validation rather than throwing immediately.\n *\n * @template T - The expected return type (for type compatibility with conversion functions).\n * @param message - The error message.\n * @returns A TypeError instance typed as T.\n */\nexport const asError = <T>(message: string) => new (ErrCtor as unknown as new (m: string) => { message: string; [ERR]: true })(message) as unknown as T;\n\n/**\n * Type casting utilities for parsing strings into typed values.\n * Useful for environment variables, query parameters, and other string inputs.\n * Returns a TypeError for invalid values, enabling deferred validation with `ascertain()`.\n */\nexport const as = {\n  /**\n   * Attempts to convert a value to a string.\n   *\n   * @param value - The value to convert.\n   * @returns The value as a string, or a TypeError if not a string.\n   */\n  string: (value: string | undefined): string => {\n    return typeof value === 'string' ? value : asError(`Invalid value \"${value}\", expected a string`);\n  },\n  /**\n   * Attempts to convert a value to a number.\n   *\n   * Supports integers, floats, scientific notation (1e10), and prefixed formats:\n   * - Hexadecimal: `0x` or `0X` (e.g., `'0xFF'` → 255)\n   * - Octal: `0o` or `0O` (e.g., `'0o77'` → 63)\n   * - Binary: `0b` or `0B` (e.g., `'0b1010'` → 10)\n   *\n   * All formats support optional leading sign (`+` or `-`).\n   *\n   * @param value - The value to convert (expected to be a string representation of a number).\n   * @returns The value as a number, or a TypeError if not a valid number.\n   */\n  number: (value: string | undefined): number => {\n    if (typeof value !== 'string') {\n      return asError(`Invalid value ${value}, expected a valid number`);\n    }\n    const start = value[0] === '-' || value[0] === '+' ? 1 : 0;\n    const c0 = value.charCodeAt(start);\n    const c1 = value.charCodeAt(start + 1) | 32;\n\n    if (c0 === 48 && (c1 === 120 || c1 === 111 || c1 === 98)) {\n      // '0' followed by 'x', 'o', or 'b'\n      const result = Number(start ? value.slice(1) : value);\n      if (Number.isNaN(result)) return asError(`Invalid value ${value}, expected a valid number`);\n      return value[0] === '-' ? -result : result;\n    }\n\n    const result = value.trim() ? Number(value) : NaN;\n    return Number.isNaN(result) ? asError(`Invalid value ${value}, expected a valid number`) : result;\n  },\n  /**\n   * Attempts to convert a value to a Date object.\n   *\n   * @param value - The value to convert (expected to be a string representation of a date).\n   * @returns The value as a Date object, or a TypeError if not a valid date.\n   */\n  date: (value: string | undefined): Date => {\n    const result = Date.parse(value as string);\n    const date = new Date(result);\n    return Number.isNaN(date.valueOf()) ? asError(`Invalid value \"${value}\", expected a valid date format`) : date;\n  },\n  /**\n   * Attempts to convert a value to a time duration in milliseconds.\n   *\n   * @param value - The value to convert (e.g., \"5s\" for 5 seconds).\n   * @param conversionFactor - Optional factor to divide the result by (default is 1).\n   * @returns The time duration in milliseconds, or a TypeError if the format is invalid.\n   */\n  time: (value: string | undefined, conversionFactor = 1): number => {\n    if (!value) return asError(`Invalid value ${value}, expected a valid time format`);\n\n    const matches = value.match(TIME_REGEX);\n    if (!matches) return asError(`Invalid value ${value}, expected a valid time format`);\n\n    const [, amount, unit = 'ms'] = matches;\n    const multiplier = MULTIPLIERS[unit as keyof typeof MULTIPLIERS];\n    const parsed = parseFloat(amount);\n\n    if (!multiplier || Number.isNaN(parsed)) {\n      return asError(`Invalid value ${value}, expected a valid time format`);\n    }\n\n    return Math.floor((parsed * multiplier) / conversionFactor);\n  },\n  /**\n   * Attempts to convert a value to a boolean.\n   *\n   * @param value - The boolean like value to convert (e.g., \"true\", \"1\", \"enabled\").\n   * @returns The value as a boolean, or a TypeError if it could not be converted to a boolean.\n   */\n  boolean: (value: string | undefined): boolean =>\n    /^(0|1|true|false|enabled|disabled)$/i.test(value as string)\n      ? /^(1|true|enabled)$/i.test(value as string)\n      : asError(`Invalid value ${value}, expected a boolean like`),\n  /**\n   * Attempts to convert a string into an array of strings by splitting it using the given delimiter.\n   *\n   * @param value - The string value to attempt to split into an array.\n   * @param delimiter - The character or string used to separate elements in the input string.\n   * @returns An array of strings if the conversion is successful, or a TypeError if the value is not a string.\n   */\n  array: (value: string | undefined, delimiter: string): string[] => value?.split?.(delimiter) ?? asError(`Invalid value ${value}, expected an array`),\n  /**\n   * Attempts to parse a JSON string into a JavaScript object.\n   *\n   * @template T - The expected type of the parsed JSON object.\n   * @param value - The JSON string to attempt to parse.\n   * @returns The parsed JSON object if successful, or a TypeError if the value is not valid JSON.\n   */\n  json: <T = object>(value: string | undefined): T => {\n    try {\n      return JSON.parse(value as string);\n    } catch {\n      return asError(`Invalid value ${value}, expected a valid JSON string`);\n    }\n  },\n  /**\n   * Attempts to decode a base64-encoded string.\n   *\n   * @param value - The base64-encoded string to attempt to decode.\n   * @returns The decoded string if successful, or a TypeError if the value is not valid base64.\n   */\n  base64: (value: string | undefined): string => {\n    try {\n      return fromBase64(value as string);\n    } catch {\n      return asError(`Invalid value ${value}, expected a valid base64 string`);\n    }\n  },\n\n  data: (value: string | undefined, type: 'utf-8' | 'hex' | 'base64' = 'utf-8'): Uint8Array => {\n    if (typeof value !== 'string') return asError(`Invalid value ${value}, expected a string`);\n    try {\n      if (type === 'hex') return fromHex(value);\n      if (type === 'base64') return fromBase64Bytes(value);\n      return utf8Encoder.encode(value);\n    } catch {\n      return asError(`Invalid value ${value}, expected a valid ${type} string`);\n    }\n  },\n};\n\nconst DATETIME_RE = /^\\d{4}-[01]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d{2}(?::?\\d{2})?)$/i;\nconst TIME_FMT_RE = /^(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d{2}(?::?\\d{2})?)$/i;\nconst DURATION_RE = /^P(?!$)(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?$/;\nconst EMAIL_RE = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;\nconst IDN_EMAIL_RE =\n  /^[a-z0-9!#$%&'*+/=?^_`{|}~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF-]+)*@(?:[a-z0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF](?:[a-z0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF-]*[a-z0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])?\\.)+[a-z0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF](?:[a-z0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF-]*[a-z0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])?$/i;\nconst HOSTNAME_RE = /^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\.?$/i;\nconst IDN_HOSTNAME_RE =\n  /^(?=.{1,253}\\.?$)[a-z0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF](?:[a-z0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF-]{0,61}[a-z0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])?(?:\\.[a-z0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF](?:[a-z0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF-]{0,61}[a-z0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])?)*\\.?$/i;\nconst IPV4_RE = /^(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)$/;\nconst IPV6_RE =\n  /^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?$/i;\nconst URI_RE =\n  /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;\nconst isUriRef = (s: string): boolean => URI_RE.test(s) || /^[a-z0-9\\-._~:/?#\\[\\]@!$&'()*+,;=%]*$/i.test(s);\nconst IRI_RE =\n  /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|%[0-9a-f]{2})*)?$/i;\nconst isIriRef = (s: string): boolean => IRI_RE.test(s) || /^[a-z0-9\\-._~:/?#\\[\\]@!$&'()*+,;=\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF%]*$/i.test(s);\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\nconst URI_TEMPLATE_RE =\n  /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i;\nconst JSON_POINTER_RE = /^(?:\\/(?:[^~/]|~0|~1)*)*$/;\nconst REL_JSON_POINTER_RE = /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/;\n\nconst DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst isValidDate = (s: string): boolean => {\n  const m = /^\\d{4}-(\\d{2})-(\\d{2})$/.exec(s);\n  if (!m) return false;\n  const month = +m[1],\n    day = +m[2];\n  if (month < 1 || month > 12 || day < 1) return false;\n  if (month === 2) {\n    const y = +s.slice(0, 4);\n    return day <= (y % 4 === 0 && (y % 100 !== 0 || y % 400 === 0) ? 29 : 28);\n  }\n  return day <= DAYS[month];\n};\n\nconst isValidRegex = (s: string): boolean => {\n  try {\n    new RegExp(s);\n    return true;\n  } catch {\n    return false;\n  }\n};\n\nconst regexFormat = (re: RegExp, name: string, message?: string): CheckShape =>\n  new CheckCtor((v, ctx) => ({\n    check: `!${ctx.ref(re)}.test(${v})`,\n    message: message ? JSON.stringify(message) : `\\`must be a valid ${name}, got \\${${v}}\\``,\n  }));\n\nconst fnFormat = (fn: (s: string) => boolean, name: string, message?: string): CheckShape =>\n  new CheckCtor((v, ctx) => ({\n    check: `!${ctx.ref(fn)}(${v})`,\n    message: message ? JSON.stringify(message) : `\\`must be a valid ${name}, got \\${${v}}\\``,\n  }));\n\n/**\n * String format validators for common patterns (RFC 3339 date-time, email, URI, UUID, etc.).\n * Each method returns a CheckShape that can be composed with `and()` for schema validation.\n */\nexport const format = {\n  dateTime: (message?: string): CheckShape => regexFormat(DATETIME_RE, 'date-time', message),\n  date: (message?: string): CheckShape => fnFormat(isValidDate, 'date', message),\n  time: (message?: string): CheckShape => regexFormat(TIME_FMT_RE, 'time', message),\n  duration: (message?: string): CheckShape => regexFormat(DURATION_RE, 'duration', message),\n  email: (message?: string): CheckShape => regexFormat(EMAIL_RE, 'email', message),\n  idnEmail: (message?: string): CheckShape => regexFormat(IDN_EMAIL_RE, 'idn-email', message),\n  hostname: (message?: string): CheckShape => regexFormat(HOSTNAME_RE, 'hostname', message),\n  idnHostname: (message?: string): CheckShape => regexFormat(IDN_HOSTNAME_RE, 'idn-hostname', message),\n  ipv4: (message?: string): CheckShape => regexFormat(IPV4_RE, 'ipv4', message),\n  ipv6: (message?: string): CheckShape => regexFormat(IPV6_RE, 'ipv6', message),\n  uri: (message?: string): CheckShape => regexFormat(URI_RE, 'uri', message),\n  uriReference: (message?: string): CheckShape => fnFormat(isUriRef, 'uri-reference', message),\n  iri: (message?: string): CheckShape => regexFormat(IRI_RE, 'iri', message),\n  iriReference: (message?: string): CheckShape => fnFormat(isIriRef, 'iri-reference', message),\n  uuid: (message?: string): CheckShape => regexFormat(UUID_RE, 'uuid', message),\n  uriTemplate: (message?: string): CheckShape => regexFormat(URI_TEMPLATE_RE, 'uri-template', message),\n  jsonPointer: (message?: string): CheckShape => regexFormat(JSON_POINTER_RE, 'json-pointer', message),\n  relativeJsonPointer: (message?: string): CheckShape => regexFormat(REL_JSON_POINTER_RE, 'relative-json-pointer', message),\n  regex: (message?: string): CheckShape => fnFormat(isValidRegex, 'regex', message),\n};\n\n/**\n * A class representing the context for schema validation.\n *\n * Stores a registry of values encountered during validation and provides methods for managing it.\n * @internal\n */\nclass Context {\n  public readonly registry: unknown[] = [];\n  private readonly lookupMap: Map<unknown, number> = new Map();\n  private varIndex = 0;\n  public pure = false;\n\n  register(value: unknown): number {\n    const index = this.lookupMap.get(value);\n    if (index !== undefined) {\n      return index;\n    }\n    {\n      const index = this.registry.push(value) - 1;\n      this.lookupMap.set(value, index);\n      return index;\n    }\n  }\n\n  unique(prefix: string) {\n    return `${prefix}$$${this.varIndex++}`;\n  }\n}\n\ntype Mode =\n  | { fast: true; onFail?: string; indexed?: boolean }\n  | { fast: false; firstError: true; issues: string; path: PropertyKey[]; pathExpr: string; startVar?: string; dynamicParts?: string[] }\n  | {\n      fast: false;\n      firstError: false;\n      issues: string;\n      path: PropertyKey[];\n      pathExpr: string;\n      startVar?: string;\n      issuesReady?: boolean;\n      dynamicParts?: string[];\n    };\n\nconst isTagged = (schema: unknown): schema is Tagged<unknown> => (schema as Tagged<unknown>)?.[$op] !== undefined;\n\nconst buildDynamicPathExpr = (staticPath: PropertyKey[], dynamicParts: string[]): string =>\n  `[${[...staticPath.map((k) => JSON.stringify(k)), ...dynamicParts].join(',')}]`;\n\nconst childMode = (mode: Exclude<Mode, { fast: true }>, key: PropertyKey | { dynamic: string }, ctx: Context): Mode => {\n  const carryReady = !mode.firstError && mode.issuesReady;\n  if (typeof key === 'object' && 'dynamic' in key) {\n    const dynamicParts = [...(mode.dynamicParts ?? []), key.dynamic];\n    const m: Mode = {\n      fast: false,\n      firstError: mode.firstError,\n      issues: mode.issues,\n      path: mode.path,\n      pathExpr: buildDynamicPathExpr(mode.path, dynamicParts),\n      dynamicParts,\n    };\n    if (carryReady) (m as { issuesReady: boolean }).issuesReady = true;\n    return m;\n  }\n  if (mode.dynamicParts) {\n    const dynamicParts = [...mode.dynamicParts, JSON.stringify(key)];\n    const m: Mode = {\n      fast: false,\n      firstError: mode.firstError,\n      issues: mode.issues,\n      path: mode.path,\n      pathExpr: buildDynamicPathExpr(mode.path, dynamicParts),\n      dynamicParts,\n    };\n    if (carryReady) (m as { issuesReady: boolean }).issuesReady = true;\n    return m;\n  }\n  const newPath = [...mode.path, key];\n  const pathExpr = `reg[${ctx.register(Object.freeze(newPath))}]`;\n  const m: Mode = { fast: false, firstError: mode.firstError, issues: mode.issues, path: newPath, pathExpr };\n  if (carryReady) (m as { issuesReady: boolean }).issuesReady = true;\n  return m;\n};\n\nconst toLiteral = (value: unknown): string => (typeof value === 'bigint' ? `${value}n` : JSON.stringify(value));\n\nconst collapsibleTypeOf = (s: unknown): string | null =>\n  s === String\n    ? 'string'\n    : s === Number\n      ? 'number'\n      : s === Boolean\n        ? 'boolean'\n        : s === BigInt\n          ? 'bigint'\n          : s === Symbol\n            ? 'symbol'\n            : typeof s === 'function' && (s as { name?: string })?.name === 'Function'\n              ? 'function'\n              : null;\n\nconst buildCollapsedOr = (schemas: unknown[], v: string): string => {\n  let hasNull = false;\n  let hasUndefined = false;\n  const groups = new Map<string, { ctor: boolean; literals: unknown[] }>();\n  for (const s of schemas) {\n    if (s === null) {\n      hasNull = true;\n      continue;\n    }\n    if (s === undefined) {\n      hasUndefined = true;\n      continue;\n    }\n    const ct = collapsibleTypeOf(s);\n    if (ct) {\n      let g = groups.get(ct);\n      if (!g) {\n        g = { ctor: false, literals: [] };\n        groups.set(ct, g);\n      }\n      g.ctor = true;\n      continue;\n    }\n    const t = typeof s;\n    let g = groups.get(t);\n    if (!g) {\n      g = { ctor: false, literals: [] };\n      groups.set(t, g);\n    }\n    g.literals.push(s);\n  }\n  const clauses: string[] = [];\n  if (hasNull) clauses.push(`${v} === null`);\n  if (hasUndefined) clauses.push(`${v} === undefined`);\n  for (const [type, { ctor, literals }] of groups) {\n    if (ctor) {\n      clauses.push(type === 'number' ? `(typeof ${v} === 'number' && ${v} === ${v})` : `typeof ${v} === '${type}'`);\n    } else if (literals.length === 1) {\n      clauses.push(`${v} === ${toLiteral(literals[0])}`);\n    } else {\n      clauses.push(`(typeof ${v} === '${type}' && (${literals.map((l) => `${v} === ${toLiteral(l)}`).join(' || ')}))`);\n    }\n  }\n  return clauses.join(' || ');\n};\n\nconst buildExpectedDesc = (schemas: unknown[]): string => {\n  const parts: string[] = [];\n  for (const s of schemas) {\n    if (s === null) parts.push('null');\n    else if (s === undefined) parts.push('undefined');\n    else if (collapsibleTypeOf(s) !== null) parts.push((s as { name: string }).name);\n    else parts.push(toLiteral(s) as string);\n  }\n  return parts.join(', ');\n};\n\nconst isCollapsible = (s: unknown): boolean =>\n  s === null || s === undefined || (typeof s !== 'object' && typeof s !== 'function' && typeof s !== 'symbol') || collapsibleTypeOf(s) !== null;\n\nconst codeGen = <T>(schema: Schema<T>, context: Context, valuePath: string, mode: Mode): string => {\n  const emit = mode.fast\n    ? null\n    : mode.firstError\n      ? (msg: string) => `${mode.issues} = [{ message: ${msg}, path: ${mode.pathExpr} }]; return ${mode.issues};`\n      : !mode.firstError && mode.issuesReady\n        ? (msg: string) => `${mode.issues}.push({ message: ${msg}, path: ${mode.pathExpr} });`\n        : (msg: string) => `(${mode.issues} || (${mode.issues} = [])).push({ message: ${msg}, path: ${mode.pathExpr} });`;\n  const fail = mode.fast ? (mode.onFail ?? 'return false;') : '';\n  const errChk = (v: string) => (context.pure ? '' : ` || (typeof ${v} === 'object' && ${v} !== null && ${v}[err] === true)`);\n  const errBranch = (v: string) =>\n    context.pure ? '' : `else if (typeof ${v} === 'object' && ${v} !== null && ${v}[err] === true) { ${emit!(`\\`\\${${v}.message}\\``)} }`;\n\n  if (isTagged(schema)) {\n    const tag = schema[$op];\n    if (tag === AND) {\n      const valueAlias = context.unique('v');\n      const code = schema.schemas.map((s) => codeGen(s, context, valueAlias, mode)).join('\\n');\n      return `const ${valueAlias} = ${valuePath};\\n${code}`;\n    } else if (tag === OR) {\n      const valueAlias = context.unique('v');\n      const foundValid = context.unique('valid');\n      if (mode.fast) {\n        const collapsible: unknown[] = [];\n        const complex: Schema<T>[] = [];\n        for (const s of schema.schemas) {\n          if (isCollapsible(s)) collapsible.push(s);\n          else complex.push(s as Schema<T>);\n        }\n        if (collapsible.length > 0 && complex.length === 0) {\n          return `const ${valueAlias} = ${valuePath};\\nif (!(${buildCollapsedOr(collapsible, valueAlias)})) { ${fail} }`;\n        }\n        if (collapsible.length > 0) {\n          const condition = buildCollapsedOr(collapsible, valueAlias);\n          const branches = complex.map((s) => {\n            const branchValid = context.unique('valid');\n            const branchCode = codeGen(s, context, valueAlias, { ...mode, onFail: `${branchValid} = false;` });\n            return `if (!${foundValid}) { let ${branchValid} = true; ${branchCode} if (${branchValid}) { ${foundValid} = true; } }`;\n          });\n          return `const ${valueAlias} = ${valuePath};\\nlet ${foundValid} = ${condition};\\n${branches.join('\\n')}\\nif (!${foundValid}) { ${fail} }`;\n        }\n        const branches = schema.schemas.map((s) => {\n          const branchValid = context.unique('valid');\n          const branchCode = codeGen(s, context, valueAlias, { ...mode, onFail: `${branchValid} = false;` });\n          return `if (!${foundValid}) { let ${branchValid} = true; ${branchCode} if (${branchValid}) { ${foundValid} = true; } }`;\n        });\n        return `const ${valueAlias} = ${valuePath};\\nlet ${foundValid} = false;\\n${branches.join('\\n')}\\nif (!${foundValid}) { ${fail} }`;\n      } else if (mode.firstError) {\n        if (schema.schemas.every(isCollapsible)) {\n          const condition = buildCollapsedOr(schema.schemas, valueAlias);\n          const expected = buildExpectedDesc(schema.schemas);\n          return `const ${valueAlias} = ${valuePath};\\nif (!(${condition})) { ${mode.issues} = [{ message: \\`Invalid value \\${${valueAlias}}, expected one of: ${expected}\\`, path: ${mode.pathExpr} }]; return ${mode.issues}; }`;\n        }\n        const firstBranchIssues = context.unique('iss');\n        const branches = schema.schemas.map((s, idx) => {\n          const branchIssues = context.unique('iss');\n          const branchCode = codeGen(s, context, valueAlias, {\n            fast: false,\n            firstError: true,\n            issues: branchIssues,\n            path: mode.path,\n            pathExpr: mode.pathExpr,\n          }).replace(new RegExp(`; return ${branchIssues};`, 'g'), ';');\n          if (idx === 0) {\n            return `if (!${foundValid}) { let ${branchIssues}; ${branchCode} if (!${branchIssues}) { ${foundValid} = true; } else { ${firstBranchIssues} = ${branchIssues}; } }`;\n          }\n          return `if (!${foundValid}) { let ${branchIssues}; ${branchCode} if (!${branchIssues}) { ${foundValid} = true; } }`;\n        });\n        return `const ${valueAlias} = ${valuePath};\\nlet ${firstBranchIssues};\\nlet ${foundValid} = false;\\n${branches.join('\\n')}\\nif (!${foundValid}) { return ${firstBranchIssues}; }`;\n      } else {\n        if (schema.schemas.every(isCollapsible)) {\n          const condition = buildCollapsedOr(schema.schemas, valueAlias);\n          const expected = buildExpectedDesc(schema.schemas);\n          const push = mode.issuesReady\n            ? `${mode.issues}.push({ message: \\`Invalid value \\${${valueAlias}}, expected one of: ${expected}\\`, path: ${mode.pathExpr} });`\n            : `(${mode.issues} || (${mode.issues} = [])).push({ message: \\`Invalid value \\${${valueAlias}}, expected one of: ${expected}\\`, path: ${mode.pathExpr} });`;\n          return `const ${valueAlias} = ${valuePath};\\nif (!(${condition})) { ${push} }`;\n        }\n        const localIssues = context.unique('iss');\n        const branches = schema.schemas.map((s) => {\n          const branchIssues = context.unique('iss');\n          const branchCode = codeGen(s, context, valueAlias, {\n            fast: false,\n            firstError: false,\n            issues: branchIssues,\n            path: mode.path,\n            pathExpr: mode.pathExpr,\n          });\n          return `if (!${foundValid}) { let ${branchIssues}; ${branchCode} if (!${branchIssues}) { ${foundValid} = true; } else { ${localIssues}.push(...${branchIssues}); } }`;\n        });\n        const pushExpr =\n          !mode.fast && !mode.firstError && mode.issuesReady\n            ? `${mode.issues}.push(...${localIssues})`\n            : `(${mode.issues} || (${mode.issues} = [])).push(...${localIssues})`;\n        return `const ${valueAlias} = ${valuePath};\\nconst ${localIssues} = [];\\nlet ${foundValid} = false;\\n${branches.join('\\n')}\\nif (!${foundValid}) { ${pushExpr}; }`;\n      }\n    } else if (tag === OPTIONAL) {\n      const valueAlias = context.unique('v');\n      const inner = (schema as OptionalShape<T>).schemas[0];\n      if (!mode.fast && typeof inner === 'function') {\n        const iname = (inner as { name?: string })?.name;\n        const is = inner as unknown;\n        const pt =\n          is === String ? 'string' : is === Number ? 'number' : is === Boolean ? 'boolean' : is === BigInt ? 'bigint' : is === Symbol ? 'symbol' : null;\n        if (pt) {\n          const typeMsgs = Object.fromEntries(\n            ['string', 'number', 'boolean', 'bigint', 'symbol', 'undefined', 'object', 'function'].map((t) => [t, `Invalid type ${t}, expected type ${iname}`]),\n          );\n          const typeMsgIdx = context.register(typeMsgs);\n          const lines = [`const ${valueAlias} = ${valuePath};`, `if (${valueAlias} !== undefined && ${valueAlias} !== null) {`];\n          lines.push(`if (typeof ${valueAlias} !== '${pt}') { ${emit!(`reg[${typeMsgIdx}][typeof ${valueAlias}]`)} }`);\n          if (pt === 'number') lines.push(`else if (${valueAlias} !== ${valueAlias}) { ${emit!(`\"Invalid value NaN, expected a valid ${iname}\"`)} }`);\n          lines.push(`}`);\n          return lines.join('\\n');\n        }\n      }\n      return `const ${valueAlias} = ${valuePath};\\nif (${valueAlias} !== undefined && ${valueAlias} !== null) { ${codeGen(inner, context, valueAlias, mode)} }`;\n    } else if (tag === TUPLE) {\n      const valueAlias = context.unique('v');\n      if (mode.fast) {\n        return `const ${valueAlias} = ${valuePath};\\nif (${valueAlias} === null || typeof ${valueAlias} !== 'object' || !Array.isArray(${valueAlias}) || ${valueAlias}.length !== ${schema.schemas.length}) { ${fail} }\\n${schema.schemas.map((s, idx) => codeGen(s, context, `${valueAlias}[${idx}]`, mode)).join('\\n')}`;\n      } else {\n        return [\n          `const ${valueAlias} = ${valuePath};`,\n          `if (${valueAlias} === null || ${valueAlias} === undefined) { ${emit!(`\\`Invalid value \\${${valueAlias}}, expected non-nullable\\``)} }`,\n          `else if (typeof ${valueAlias} !== 'object') { ${emit!(`\\`Invalid type \\${typeof ${valueAlias}}, expected an instance of Array\\``)} }`,\n          `else if (!Array.isArray(${valueAlias})) { ${emit!(`\\`Invalid instance of \\${${valueAlias}.constructor?.name}, expected an instance of Array\\``)} }`,\n          `else if (${valueAlias}.length !== ${schema.schemas.length}) { ${emit!(`\\`Invalid tuple length \\${${valueAlias}.length}, expected ${schema.schemas.length}\\``)} }`,\n          `else { ${schema.schemas.map((s, idx) => codeGen(s, context, `${valueAlias}[${idx}]`, childMode(mode, idx, context))).join('\\n')} }`,\n        ].join('\\n');\n      }\n    } else if (tag === CHECK) {\n      const valueAlias = context.unique('v');\n      const ref = (v: unknown) => `reg[${context.register(v)}]`;\n      const { check: cond, message } = (schema as CheckShape).compile(valueAlias, { ref });\n      if (mode.fast) {\n        return `const ${valueAlias} = ${valuePath};\\nif (${cond}) { ${fail} }`;\n      }\n      return `const ${valueAlias} = ${valuePath};\\nif (${cond}) { ${emit!(message)} }`;\n    } else {\n      const { key, schemas } = schema as DiscriminatedShape<T>;\n      const valueAlias = context.unique('v');\n      const discriminantAlias = context.unique('d');\n      const keyStr = JSON.stringify(key);\n\n      const variants: { value: unknown; schema: Schema<T> }[] = [];\n      for (const s of schemas) {\n        if (typeof s !== 'object' || s === null || !(key in s)) {\n          throw new TypeError(`discriminated: each schema must have the discriminant key \"${key}\"`);\n        }\n        const discriminantValue = (s as Record<string, unknown>)[key];\n        if (typeof discriminantValue !== 'string' && typeof discriminantValue !== 'number' && typeof discriminantValue !== 'boolean') {\n          throw new TypeError(`discriminated: discriminant value must be a string, number, or boolean literal`);\n        }\n        variants.push({ value: discriminantValue, schema: s });\n      }\n\n      const genVariantProps = (s: Schema<T>, variantMode: Mode) => {\n        const obj = s as Record<string, unknown>;\n        return Object.entries(obj)\n          .filter(([k]) => k !== key)\n          .map(([k, ps]) =>\n            codeGen(ps as Schema<T>, context, `${valueAlias}[${JSON.stringify(k)}]`, variantMode.fast ? variantMode : childMode(variantMode, k, context)),\n          )\n          .join('\\n');\n      };\n\n      if (mode.fast) {\n        const branches = variants.map(({ value, schema: s }) => {\n          return `if (${discriminantAlias} === ${JSON.stringify(value)}) { ${genVariantProps(s, mode)} }`;\n        });\n        return [\n          `const ${valueAlias} = ${valuePath};`,\n          `if (${valueAlias} === null || ${valueAlias} === undefined || typeof ${valueAlias} !== 'object'${errChk(valueAlias)}) { ${fail} }`,\n          `const ${discriminantAlias} = ${valueAlias}[${keyStr}];`,\n          branches.join(' else ') + ` else { ${fail} }`,\n        ].join('\\n');\n      } else {\n        const validValues = variants.map((v) => JSON.stringify(v.value)).join(', ');\n        const branches = variants.map(({ value, schema: s }) => {\n          return `if (${discriminantAlias} === ${JSON.stringify(value)}) { ${genVariantProps(s, mode)} }`;\n        });\n        return [\n          `const ${valueAlias} = ${valuePath};`,\n          `if (${valueAlias} === null || ${valueAlias} === undefined) { ${emit!(`\\`Invalid value \\${${valueAlias}}, expected non-nullable\\``)} }`,\n          `else if (typeof ${valueAlias} !== 'object') { ${emit!(`\\`Invalid type \\${typeof ${valueAlias}}, expected an object\\``)} }`,\n          `${errBranch(valueAlias)}`,\n          `else {`,\n          `  const ${discriminantAlias} = ${valueAlias}[${keyStr}];`,\n          `  ${branches.join(' else ')} else { ${emit!(`\"Invalid discriminant value \" + String(${discriminantAlias}) + \", expected one of: ${validValues.replace(/\"/g, \"'\")}\"`)} }`,\n          `}`,\n        ].join('\\n');\n      }\n    }\n  }\n\n  if (typeof schema === 'function') {\n    const valueAlias = context.unique('v');\n    const name = (schema as { name?: string })?.name;\n    const s = schema as unknown;\n    const primitiveType =\n      s === String ? 'string' : s === Number ? 'number' : s === Boolean ? 'boolean' : s === BigInt ? 'bigint' : s === Symbol ? 'symbol' : null;\n\n    if (mode.fast) {\n      if (primitiveType) {\n        const checks = [`typeof ${valueAlias} !== '${primitiveType}'`];\n        if (primitiveType === 'number') checks.push(`${valueAlias} !== ${valueAlias}`);\n        return `const ${valueAlias} = ${valuePath};\\nif (${checks.join(' || ')}) { ${fail} }`;\n      } else if (name === 'Function') {\n        return `const ${valueAlias} = ${valuePath};\\nif (typeof ${valueAlias} !== 'function') { ${fail} }`;\n      } else {\n        const isError = (schema as unknown) === Error || schema?.prototype instanceof Error;\n        const index = context.register(schema);\n        const registryAlias = context.unique('r');\n        return `const ${valueAlias} = ${valuePath};\\nconst ${registryAlias} = reg[${index}];\\nif (${valueAlias} === null || ${valueAlias} === undefined${isError || context.pure ? '' : ` || (typeof ${valueAlias} === 'object' && ${valueAlias}[err] === true)`} || (typeof ${valueAlias} === 'object' && !(${valueAlias} instanceof ${registryAlias})) || (typeof ${valueAlias} !== 'object' && ${valueAlias}?.constructor !== ${registryAlias}) || Number.isNaN(${valueAlias}?.valueOf?.())) { ${fail} }`;\n      }\n    } else {\n      const code: string[] = [`const ${valueAlias} = ${valuePath};`];\n      if (primitiveType) {\n        const typeMsgs = Object.fromEntries(\n          ['string', 'number', 'boolean', 'bigint', 'symbol', 'undefined', 'object', 'function'].map((t) => [t, `Invalid type ${t}, expected type ${name}`]),\n        );\n        const typeMsgIdx = context.register(typeMsgs);\n        code.push(\n          `if (${valueAlias} === null || ${valueAlias} === undefined) { ${emit!(`${valueAlias} === null ? \"Invalid value null, expected non-nullable\" : \"Invalid value undefined, expected non-nullable\"`)} }`,\n        );\n        code.push(`${errBranch(valueAlias)}`);\n        code.push(`else if (typeof ${valueAlias} !== '${primitiveType}') { ${emit!(`reg[${typeMsgIdx}][typeof ${valueAlias}]`)} }`);\n        if (primitiveType === 'number') code.push(`else if (${valueAlias} !== ${valueAlias}) { ${emit!(`\"Invalid value NaN, expected a valid ${name}\"`)} }`);\n      } else if (name === 'Function') {\n        code.push(`if (${valueAlias} === null || ${valueAlias} === undefined) { ${emit!(`\\`Invalid value \\${${valueAlias}}, expected non-nullable\\``)} }`);\n        code.push(`${errBranch(valueAlias)}`);\n        code.push(`else if (typeof ${valueAlias} !== 'function') { ${emit!(`\\`Invalid type \\${typeof ${valueAlias}}, expected type Function\\``)} }`);\n      } else {\n        const isError = (schema as unknown) === Error || schema?.prototype instanceof Error;\n        const index = context.register(schema);\n        const registryAlias = context.unique('r');\n        code.push(`const ${registryAlias} = reg[${index}];`);\n        code.push(`if (${valueAlias} === null || ${valueAlias} === undefined) { ${emit!(`\\`Invalid value \\${${valueAlias}}, expected non-nullable\\``)} }`);\n        if (!isError) code.push(`${errBranch(valueAlias)}`);\n        code.push(\n          `else if (typeof ${valueAlias} === 'object' && !(${valueAlias} instanceof ${registryAlias})) { ${emit!(`\\`Invalid instance of \\${${valueAlias}?.constructor?.name}, expected an instance of ${name}\\``)} }`,\n        );\n        code.push(\n          `else if (typeof ${valueAlias} !== 'object' && ${valueAlias}?.constructor !== ${registryAlias}) { ${emit!(`\\`Invalid type \\${${valueAlias}?.constructor?.name}, expected type ${name}\\``)} }`,\n        );\n        code.push(`else if (Number.isNaN(${valueAlias}?.valueOf?.())) { ${emit!(`\\`Invalid value \\${${valueAlias}}, expected a valid ${name}\\``)} }`);\n      }\n      return code.join('\\n');\n    }\n  }\n\n  if (Array.isArray(schema)) {\n    const valueAlias = context.unique('v');\n    if (mode.fast) {\n      let code = `const ${valueAlias} = ${valuePath};\\nif (!Array.isArray(${valueAlias})) { ${fail} }`;\n      if (schema.length === 1) {\n        const value = context.unique('val');\n        const key = context.unique('key');\n        code += `\\nfor (let ${key} = 0; ${key} < ${valueAlias}.length; ${key}++) { const ${value} = ${valueAlias}[${key}]; ${codeGen(schema[0], context, value, mode)} }`;\n      } else if (schema.length > 1) {\n        code += `\\nif (${valueAlias}.length > ${schema.length}) { ${fail} }`;\n        code += '\\n' + schema.map((s, idx) => codeGen(s, context, `${valueAlias}[${idx}]`, mode)).join('\\n');\n      }\n      return code;\n    } else {\n      const arrTypeMsgs = Object.fromEntries(\n        ['string', 'number', 'boolean', 'bigint', 'symbol', 'undefined', 'function'].map((t) => [t, `Invalid type ${t}, expected an instance of Array`]),\n      );\n      const arrTypeMsgIdx = context.register(arrTypeMsgs);\n      const code: string[] = [\n        `const ${valueAlias} = ${valuePath};`,\n        `if (${valueAlias} === null || ${valueAlias} === undefined) { ${emit!(`${valueAlias} === null ? \"Invalid value null, expected non-nullable\" : \"Invalid value undefined, expected non-nullable\"`)} }`,\n        `${errBranch(valueAlias)}`,\n        `else if (typeof ${valueAlias} !== 'object') { ${emit!(`reg[${arrTypeMsgIdx}][typeof ${valueAlias}]`)} }`,\n        `else if (!Array.isArray(${valueAlias})) { ${emit!(`\\`Invalid instance of \\${${valueAlias}.constructor?.name}, expected an instance of Array\\``)} }`,\n      ];\n      if (schema.length > 0) {\n        const value = context.unique('val');\n        const key = context.unique('key');\n        if (schema.length === 1) {\n          // Dynamic key - use runtime concat\n          code.push(\n            `else { for (let ${key} = 0; ${key} < ${valueAlias}.length; ${key}++) { const ${value} = ${valueAlias}[${key}]; ${codeGen(schema[0], context, value, childMode(mode, { dynamic: key }, context))} } }`,\n          );\n        } else {\n          code.push(\n            `else if (${valueAlias}.length > ${schema.length}) { ${emit!(`\\`Invalid tuple length \\${${valueAlias}.length}, expected ${schema.length}\\``)} }`,\n          );\n          code.push(`else { ${schema.map((s, idx) => codeGen(s, context, `${valueAlias}[${idx}]`, childMode(mode, idx, context))).join('\\n')} }`);\n        }\n      }\n      return code.join('\\n');\n    }\n  }\n\n  if (typeof schema === 'object' && schema !== null) {\n    if (schema instanceof RegExp) {\n      const valueAlias = context.unique('v');\n      if (mode.fast) {\n        return `const ${valueAlias} = ${valuePath};\\nif (${valueAlias} === null || ${valueAlias} === undefined${errChk(valueAlias)} || !${schema.toString()}.test(String(${valueAlias}))) { ${fail} }`;\n      } else {\n        return `const ${valueAlias} = ${valuePath};\\nif (${valueAlias} === null || ${valueAlias} === undefined) { ${emit!(`\\`Invalid value \\${${valueAlias}}, expected non-nullable\\``)} }\\n${errBranch(valueAlias)}\\n${context.pure ? '' : 'else '}if (!${schema.toString()}.test(String(${valueAlias}))) { ${emit!(`\\`Invalid value \\${${valueAlias}}, expected to match ${schema.toString()}\\``)} }`;\n      }\n    } else {\n      const valueAlias = context.unique('v');\n      if (mode.fast) {\n        const indexed = mode.indexed && !mode.onFail;\n        const rootFail = indexed ? 'return 0;' : fail;\n        let code = `const ${valueAlias} = ${valuePath};\\nif (${valueAlias} === null || typeof ${valueAlias} !== 'object'${errChk(valueAlias)}) { ${rootFail} }`;\n        if ($keys in schema) {\n          const kAlias = context.unique('k');\n          code += `\\nfor (const ${kAlias} in ${valueAlias}) { ${codeGen(schema[$keys], context, kAlias, indexed ? { fast: true, onFail: 'return 0;' } : mode)} }`;\n        }\n        if ($values in schema) {\n          const kAlias = context.unique('k');\n          code += `\\nfor (const ${kAlias} in ${valueAlias}) { ${codeGen(schema[$values], context, `${valueAlias}[${kAlias}]`, indexed ? { fast: true, onFail: 'return 0;' } : mode)} }`;\n        }\n        if ($strict in schema && schema[$strict]) {\n          const allowedRef = `reg[${context.register(Object.fromEntries(Object.keys(schema).map((k) => [k, 1])))}]`;\n          const kAlias = context.unique('k');\n          code += `\\nfor (const ${kAlias} in ${valueAlias}) { if (!Object.hasOwn(${allowedRef}, ${kAlias})) { ${rootFail} } }`;\n        }\n        const entries = Object.entries(schema);\n        code +=\n          '\\n' +\n          entries\n            .map(([key, s], idx) => {\n              const propMode: Mode = indexed ? { fast: true, onFail: `return ${idx + 1};` } : mode;\n              return codeGen(s, context, `${valueAlias}[${JSON.stringify(key)}]`, propMode);\n            })\n            .join('\\n');\n        if (indexed) code += `\\nreturn -1;`;\n        return code;\n      } else {\n        const sv = !mode.fast && mode.startVar;\n        const code: string[] = [`const ${valueAlias} = ${valuePath};`];\n\n        if (sv) {\n          const rootCase: string[] = [];\n          if (mode.firstError) {\n            rootCase.push(\n              `if (${valueAlias} === null || ${valueAlias} === undefined) { ${emit!(`\\`Invalid value \\${${valueAlias}}, expected non-nullable\\``)} }`,\n            );\n            rootCase.push(\n              `else if (typeof ${valueAlias} !== 'object') { ${emit!(`\\`Invalid type \\${typeof ${valueAlias}}, expected an instance of Object\\``)} }`,\n            );\n            rootCase.push(`${errBranch(valueAlias)}`);\n          } else {\n            rootCase.push(\n              `if (${valueAlias} === null || ${valueAlias} === undefined) { ${emit!(`\\`Invalid value \\${${valueAlias}}, expected non-nullable\\``)} break; }`,\n            );\n            rootCase.push(\n              `else if (typeof ${valueAlias} !== 'object') { ${emit!(`\\`Invalid type \\${typeof ${valueAlias}}, expected an instance of Object\\``)} break; }`,\n            );\n            if (!context.pure)\n              rootCase.push(`else if (typeof ${valueAlias} === 'object' && ${valueAlias}[err] === true) { ${emit!(`\\`\\${${valueAlias}.message}\\``)} break; }`);\n          }\n          if ($keys in schema) {\n            const kAlias = context.unique('k');\n            rootCase.push(\n              `for (const ${kAlias} in ${valueAlias}) { ${codeGen(schema[$keys], context, kAlias, childMode(mode, { dynamic: kAlias }, context))} }`,\n            );\n          }\n          if ($values in schema) {\n            const kAlias = context.unique('k');\n            rootCase.push(\n              `for (const ${kAlias} in ${valueAlias}) { ${codeGen(schema[$values], context, `${valueAlias}[${kAlias}]`, childMode(mode, { dynamic: kAlias }, context))} }`,\n            );\n          }\n          if ($strict in schema && schema[$strict]) {\n            const allowedRef = `reg[${context.register(Object.fromEntries(Object.keys(schema).map((k) => [k, 1])))}]`;\n            const kAlias = context.unique('k');\n            const extraAlias = context.unique('ex');\n            rootCase.push(`const ${extraAlias} = [];`);\n            rootCase.push(`for (const ${kAlias} in ${valueAlias}) { if (!Object.hasOwn(${allowedRef}, ${kAlias})) ${extraAlias}.push(${kAlias}); }`);\n            rootCase.push(`if (${extraAlias}.length !== 0) { ${emit!(`\\`Extra properties: \\${${extraAlias}}, are not allowed\\``)} }`);\n          }\n          code.push(`switch (${sv}) {`);\n          code.push(`case 0: { ${rootCase.join('\\n')} }`);\n          const entries = Object.entries(schema);\n          entries.forEach(([key, s], idx) => {\n            const propCode = codeGen(s, context, `${valueAlias}[${JSON.stringify(key)}]`, childMode(mode, key, context));\n            code.push(`case ${idx + 1}: { ${propCode} }`);\n          });\n          code.push(`}`);\n          return code.join('\\n');\n        }\n\n        code.push(`if (${valueAlias} === null || ${valueAlias} === undefined) { ${emit!(`\\`Invalid value \\${${valueAlias}}, expected non-nullable\\``)} }`);\n        code.push(`else if (typeof ${valueAlias} !== 'object') { ${emit!(`\\`Invalid type \\${typeof ${valueAlias}}, expected an instance of Object\\``)} }`);\n        code.push(`${errBranch(valueAlias)}`);\n        code.push('else {');\n        const innerCode: string[] = [];\n        if ($keys in schema) {\n          const kAlias = context.unique('k');\n          innerCode.push(\n            `for (const ${kAlias} in ${valueAlias}) { ${codeGen(schema[$keys], context, kAlias, childMode(mode, { dynamic: kAlias }, context))} }`,\n          );\n        }\n        if ($values in schema) {\n          const kAlias = context.unique('k');\n          innerCode.push(\n            `for (const ${kAlias} in ${valueAlias}) { ${codeGen(schema[$values], context, `${valueAlias}[${kAlias}]`, childMode(mode, { dynamic: kAlias }, context))} }`,\n          );\n        }\n        if ($strict in schema && schema[$strict]) {\n          const allowedRef = `reg[${context.register(Object.fromEntries(Object.keys(schema).map((k) => [k, 1])))}]`;\n          const kAlias = context.unique('k');\n          const extraAlias = context.unique('ex');\n          innerCode.push(`const ${extraAlias} = [];`);\n          innerCode.push(`for (const ${kAlias} in ${valueAlias}) { if (!Object.hasOwn(${allowedRef}, ${kAlias})) ${extraAlias}.push(${kAlias}); }`);\n          innerCode.push(`if (${extraAlias}.length !== 0) { ${emit!(`\\`Extra properties: \\${${extraAlias}}, are not allowed\\``)} }`);\n        }\n        const entries = Object.entries(schema);\n        innerCode.push(...entries.map(([key, s]) => codeGen(s, context, `${valueAlias}[${JSON.stringify(key)}]`, childMode(mode, key, context))));\n        code.push(innerCode.join('\\n'), '}');\n        return code.join('\\n');\n      }\n    }\n  }\n\n  if (typeof schema === 'symbol') {\n    const index = context.register(schema);\n    const valueAlias = context.unique('v');\n    const registryAlias = context.unique('r');\n    if (mode.fast) {\n      return `const ${valueAlias} = ${valuePath};\\nconst ${registryAlias} = reg[${index}];\\nif (typeof ${valueAlias} !== 'symbol' || ${valueAlias} !== ${registryAlias}) { ${fail} }`;\n    } else {\n      return `const ${valueAlias} = ${valuePath};\\nconst ${registryAlias} = reg[${index}];\\nif (typeof ${valueAlias} !== 'symbol') { ${emit!(`\\`Invalid type \\${typeof ${valueAlias}}, expected symbol\\``)} }\\nelse if (${valueAlias} !== ${registryAlias}) { ${emit!(`\\`Invalid value \\${${valueAlias}.toString()}, expected ${schema.toString()}\\``)} }`;\n    }\n  }\n\n  if (schema === null || schema === undefined) {\n    const valueAlias = context.unique('v');\n    if (mode.fast) {\n      return `const ${valueAlias} = ${valuePath};\\nif (${valueAlias} !== null && ${valueAlias} !== undefined) { ${fail} }`;\n    } else {\n      return `const ${valueAlias} = ${valuePath};\\nif (${valueAlias} !== null && ${valueAlias} !== undefined) { ${emit!(`\\`Invalid value \\${String(${valueAlias})}, expected nullable\\``)} }`;\n    }\n  }\n\n  const valueAlias = context.unique('v');\n  if (mode.fast) {\n    return `const ${valueAlias} = ${valuePath};\\nif (typeof ${valueAlias} !== '${typeof schema}' || ${valueAlias} !== ${toLiteral(schema)}) { ${fail} }`;\n  } else {\n    const value = context.unique('val');\n    return context.pure\n      ? `const ${valueAlias} = ${valuePath};\\nconst ${value} = ${toLiteral(schema)};\\nif (typeof ${valueAlias} !== '${typeof schema}') { ${emit!(`\\`Invalid type \\${typeof ${valueAlias}}, expected ${typeof schema}\\``)} }\\nelse if (${valueAlias} !== ${value}) { ${emit!(`\\`Invalid value \\${String(${valueAlias})}, expected ${toLiteral(schema)}\\``)} }`\n      : `const ${valueAlias} = ${valuePath};\\nconst ${value} = ${toLiteral(schema)};\\nif (typeof ${valueAlias} === 'object' && ${valueAlias} !== null && ${valueAlias}[err] === true) { ${emit!(`\\`\\${${valueAlias}.message}\\``)} }\\nelse if (typeof ${valueAlias} !== '${typeof schema}') { ${emit!(`\\`Invalid type \\${typeof ${valueAlias}}, expected ${typeof schema}\\``)} }\\nelse if (${valueAlias} !== ${value}) { ${emit!(`\\`Invalid value \\${String(${valueAlias})}, expected ${toLiteral(schema)}\\``)} }`;\n  }\n};\n\nconst emptyIssues: StandardSchemaV1.Issue[] = [];\n\n/**\n * Validator function returned by compile().\n * Returns true if valid, false if invalid.\n * Access `.issues` property after validation to get error details.\n */\nexport interface Validator<T> {\n  (data: T): boolean;\n  issues: ReadonlyArray<StandardSchemaV1.Issue>;\n}\n\n/**\n * Options for the compile function.\n */\nexport interface CompileOptions {\n  /**\n   * When true, collects all validation errors instead of stopping at the first.\n   * Default is false (first-error mode) for optimal performance.\n   */\n  allErrors?: boolean;\n  /**\n   * When true, skips `instanceof Error` checks in the fast validator.\n   * Enable this when the data does not come from `as.*` converters for maximum performance.\n   * Error messages in the issue validator are unaffected.\n   */\n  pure?: boolean;\n}\n\n/**\n * Compiles a schema into a high-performance validation function.\n *\n * By default uses first-error mode which stops at the first validation failure\n * and returns immediately. This provides optimal performance for invalid data.\n *\n * Set `allErrors: true` to collect all validation errors (slower but more informative).\n *\n * @template T - The type of data the schema validates.\n * @param schema - The schema to compile.\n * @param options - Optional configuration (allErrors: boolean).\n * @returns A validator function that returns boolean. Access `.issues` for error details.\n *\n * @example\n * ```typescript\n * import { compile, optional, or } from 'ascertain';\n *\n * const userSchema = {\n *   name: String,\n *   age: Number,\n *   email: optional(String),\n *   role: or('admin', 'user', 'guest')\n * };\n *\n * // First-error mode (default) - fastest for invalid data\n * const validate = compile(userSchema);\n *\n * // All-errors mode - collects all validation issues\n * const validateAll = compile(userSchema, { allErrors: true });\n *\n * // Valid data\n * if (validate({ name: 'John', age: 30, role: 'user' })) {\n *   console.log('Valid!');\n * }\n *\n * // Invalid data - check .issues for details\n * if (!validate({ name: 123, age: 'thirty' })) {\n *   console.log(validate.issues); // Array with first validation issue\n * }\n * ```\n */\nexport const compile = <T>(schema: Schema<T>, options?: CompileOptions): Validator<T> => {\n  const allErrors = options?.allErrors ?? false;\n  const pure = options?.pure ?? false;\n  const canIndex = typeof schema === 'object' && schema !== null && !isTagged(schema) && !Array.isArray(schema) && !(schema instanceof RegExp);\n\n  if (allErrors) {\n    if (canIndex) {\n      const fastContext = new Context();\n      fastContext.pure = pure;\n      const fastCode = codeGen(schema, fastContext, 'data', { fast: true, indexed: true });\n      const indexedFast = new Function('reg', 'err', `return (data) => {\\n${fastCode}\\n};`)(fastContext.registry, ERR) as (data: T) => number;\n\n      const issueContext = new Context();\n      issueContext.pure = pure;\n      const rootPath = `reg[${issueContext.register(Object.freeze([]))}]`;\n      const issueCode = `let issues = [];\\n${codeGen(schema, issueContext, 'data', { fast: false, firstError: false, issues: 'issues', path: [], pathExpr: rootPath, startVar: 'start', issuesReady: true })}\\nreturn issues;`;\n      const issueValidator = new Function('reg', 'err', `return (data, start) => {\\n${issueCode}\\n};`)(issueContext.registry, ERR) as (\n        data: T,\n        start: number,\n      ) => StandardSchemaV1.Issue[];\n\n      const validator = ((data: T): boolean => {\n        const idx = indexedFast(data);\n        if (idx === -1) return true;\n        validator.issues = issueValidator(data, idx);\n        return false;\n      }) as Validator<T>;\n      validator.issues = emptyIssues;\n      return validator;\n    }\n\n    const fastContext = new Context();\n    fastContext.pure = pure;\n    const fastCode = `${codeGen(schema, fastContext, 'data', { fast: true })}\\nreturn true;`;\n    const fastValidator = new Function('reg', 'err', `return (data) => {\\n${fastCode}\\n};`)(fastContext.registry, ERR) as (data: T) => boolean;\n\n    const issueContext = new Context();\n    issueContext.pure = pure;\n    const rootPath2 = `reg[${issueContext.register(Object.freeze([]))}]`;\n    const issueCode = `let issues = [];\\n${codeGen(schema, issueContext, 'data', { fast: false, firstError: false, issues: 'issues', path: [], pathExpr: rootPath2, issuesReady: true })}\\nreturn issues;`;\n    const issueValidator = new Function('reg', 'err', `return (data) => {\\n${issueCode}\\n};`)(issueContext.registry, ERR) as (\n      data: T,\n    ) => StandardSchemaV1.Issue[];\n\n    const validator = ((data: T): boolean => {\n      if (fastValidator(data)) {\n        return true;\n      }\n      validator.issues = issueValidator(data);\n      return false;\n    }) as Validator<T>;\n    validator.issues = emptyIssues;\n    return validator;\n  }\n\n  if (canIndex) {\n    const fastContext = new Context();\n    fastContext.pure = pure;\n    const fastCode = codeGen(schema, fastContext, 'data', { fast: true, indexed: true });\n    const indexedFast = new Function('reg', 'err', `return (data) => {\\n${fastCode}\\n};`)(fastContext.registry, ERR) as (data: T) => number;\n\n    const context = new Context();\n    context.pure = pure;\n    const rootPath = `reg[${context.register(Object.freeze([]))}]`;\n    const code = codeGen(schema, context, 'data', { fast: false, firstError: true, issues: 'issues', path: [], pathExpr: rootPath, startVar: 'start' });\n    const firstErrorValidator = new Function('reg', 'err', `return (data, start) => {\\nlet issues;\\n${code}\\nreturn issues;\\n};`)(context.registry, ERR) as (\n      data: T,\n      start: number,\n    ) => StandardSchemaV1.Issue[] | undefined;\n\n    const validator = ((data: T): boolean => {\n      const idx = indexedFast(data);\n      if (idx === -1) {\n        return true;\n      }\n      validator.issues = firstErrorValidator(data, idx)!;\n      return false;\n    }) as Validator<T>;\n    validator.issues = emptyIssues;\n    return validator;\n  }\n\n  const fastContext = new Context();\n  fastContext.pure = pure;\n  const fastCode = `${codeGen(schema, fastContext, 'data', { fast: true })}\\nreturn true;`;\n  const fastValidator = new Function('reg', 'err', `return (data) => {\\n${fastCode}\\n};`)(fastContext.registry, ERR) as (data: T) => boolean;\n\n  const context = new Context();\n  context.pure = pure;\n  const rootPath3 = `reg[${context.register(Object.freeze([]))}]`;\n  const code = codeGen(schema, context, 'data', { fast: false, firstError: true, issues: 'issues', path: [], pathExpr: rootPath3 });\n  const firstErrorValidator = new Function('reg', 'err', `return (data) => {\\nlet issues;\\n${code}\\nreturn issues;\\n};`)(context.registry, ERR) as (\n    data: T,\n  ) => StandardSchemaV1.Issue[] | undefined;\n\n  const validator = ((data: T): boolean => {\n    if (fastValidator(data)) {\n      return true;\n    }\n    validator.issues = firstErrorValidator(data)!;\n    return false;\n  }) as Validator<T>;\n  validator.issues = emptyIssues;\n  return validator;\n};\n\n/**\n * Asserts that data conforms to a given schema.\n *\n * This function is a convenient wrapper around `compile`. It compiles the schema\n * and immediately validates the provided data against it.\n *\n * @template T - The type of data the schema validates.\n * @param schema - The schema to validate against.\n * @param data - The data to validate.\n * @throws `{TypeError}` If the data does not conform to the schema.\n *\n * @example\n * ```typescript\n * import { ascertain, optional, and, or } from 'ascertain';\n *\n * const userSchema = {\n *   name: String,\n *   age: Number,\n *   email: optional(String),\n *   active: Boolean\n * };\n *\n * const userData = {\n *   name: 'Alice',\n *   age: 25,\n *   email: 'alice@example.com',\n *   active: true\n * };\n *\n * // Validate data - throws if invalid, otherwise continues silently\n * ascertain(userSchema, userData);\n * console.log('User data is valid!');\n *\n * // Example with invalid data\n * try {\n *   ascertain(userSchema, {\n *     name: 'Bob',\n *     age: 'twenty-five', // Invalid: should be number\n *     active: true\n *   });\n * } catch (error) {\n *   console.error('Validation failed:', error.message);\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Array validation\n * const numbersSchema = [Number];\n * const numbers = [1, 2, 3, 4, 5];\n *\n * ascertain(numbersSchema, numbers);\n *\n * // Tuple validation\n * const coordinateSchema = tuple(Number, Number);\n * const point = [10, 20];\n *\n * ascertain(coordinateSchema, point);\n * ```\n */\nexport const ascertain = <T>(schema: Schema<T>, data: T) => {\n  const validator = compile(schema);\n  if (!validator(data)) {\n    throw new TypeError(validator.issues[0].message, { cause: { issues: validator.issues } });\n  }\n};\n\n/**\n * Extracts the shape of a config object based on the schema keys.\n * Recursively picks only the properties defined in the schema.\n */\nexport type ExtractShape<C, S> = {\n  [K in keyof S & keyof C]: S[K] extends object ? (C[K] extends object ? ExtractShape<C[K], S[K]> : C[K]) : C[K];\n};\n\n/**\n * Creates a typed validator function for a config object.\n *\n * Returns a function that validates a schema against the config and returns\n * the same config reference with a narrowed type containing only the validated fields.\n *\n * @template C - The type of the config object.\n * @param config - The config object to validate against.\n * @returns A validator function that takes a schema and returns the typed config subset.\n *\n * @example\n * ```typescript\n * import { createValidator, as } from 'ascertain';\n *\n * const config = {\n *   app: { name: as.string(process.env.APP_NAME) },\n *   kafka: { brokers: as.array(process.env.BROKERS, ',') },\n *   redis: { host: as.string(process.env.REDIS_HOST) },\n * };\n *\n * const validate = createValidator(config);\n *\n * // Consumer only validates what it needs\n * const { app, kafka } = validate({\n *   app: { name: String },\n *   kafka: { brokers: [String] },\n * });\n *\n * // app.name is typed as string\n * // kafka.brokers is typed as string[]\n * // redis is not accessible - TypeScript error\n * ```\n */\nexport const createValidator = <C>(config: C) => {\n  return <S extends Schema<Partial<C>>>(schema: S): ExtractShape<C, S> => {\n    ascertain(schema as Schema<C>, config);\n    return config as ExtractShape<C, S>;\n  };\n};\n\nexport interface StandardSchemaV1<Input = unknown, Output = Input> {\n  readonly '~standard': StandardSchemaV1.Props<Input, Output>;\n}\n\nexport namespace StandardSchemaV1 {\n  export interface Props<Input = unknown, Output = Input> {\n    readonly version: 1;\n    readonly vendor: string;\n    readonly validate: (value: unknown) => Result<Output> | Promise<Result<Output>>;\n    readonly types?: { readonly input: Input; readonly output: Output };\n  }\n\n  export type Result<Output> = SuccessResult<Output> | FailureResult;\n\n  export interface SuccessResult<Output> {\n    readonly value: Output;\n    readonly issues?: undefined;\n  }\n\n  export interface FailureResult {\n    readonly issues: ReadonlyArray<Issue>;\n  }\n\n  export interface Issue {\n    readonly message: string;\n    readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;\n  }\n\n  export interface PathSegment {\n    readonly key: PropertyKey;\n  }\n}\n\n/**\n * Wraps an Ascertain schema to make it Standard Schema v1 compliant.\n *\n * Creates a validator that implements the Standard Schema specification,\n * enabling interoperability with tools like tRPC, TanStack Form, and other\n * ecosystem libraries that consume Standard Schema-compliant validators.\n *\n * The returned function can be used both as a regular Ascertain validator\n * (throws on error) and as a Standard Schema validator (returns result object).\n *\n * @template T - The type of data the schema validates.\n * @param schema - The Ascertain schema to wrap.\n * @returns A function that validates data, with a `~standard` property for Standard Schema compliance.\n *\n * @see https://standardschema.dev/\n *\n * @example\n * ```typescript\n * import { standardSchema, or, optional } from 'ascertain';\n *\n * // Create a Standard Schema-compliant validator\n * const userValidator = standardSchema({\n *   name: String,\n *   age: Number,\n *   role: or('admin', 'user'),\n *   email: optional(String),\n * });\n *\n * // Use as regular Ascertain validator (throws on error)\n * userValidator({ name: 'Alice', age: 30, role: 'admin' });\n *\n * // Use Standard Schema interface (returns result object)\n * const result = userValidator['~standard'].validate(unknownData);\n * if (result.issues) {\n *   console.log(result.issues);\n * } else {\n *   console.log(result.value); // typed as User\n * }\n *\n * // Works with tRPC, TanStack Form, etc.\n * ```\n */\ninterface StandardSchemaFn<T> {\n  (data: T): void;\n  '~standard': StandardSchemaV1.Props<T, T>;\n}\n\n/**\n * Wraps a schema for Standard Schema v1 compliance.\n * The returned function throws on invalid data and exposes a `~standard` interface\n * for interoperability with tRPC, TanStack Form, and other ecosystem tools.\n *\n * @param schema - The schema to wrap.\n * @returns A validator function with a `~standard` property conforming to Standard Schema v1.\n */\nexport const standardSchema = <T>(schema: Schema<T>): StandardSchemaFn<T> => {\n  const validator = compile(schema);\n\n  const fn = ((data: T) => {\n    if (!validator(data)) {\n      throw new TypeError(validator.issues[0].message, { cause: { issues: validator.issues } });\n    }\n  }) as StandardSchemaFn<T>;\n  fn['~standard'] = {\n    version: 1 as const,\n    vendor: 'ascertain',\n    validate: (value: unknown): StandardSchemaV1.Result<T> => {\n      if (validator(value as T)) {\n        return { value: value as T };\n      }\n      return { issues: validator.issues };\n    },\n  };\n\n  return fn;\n};\n"],"names":["$keys","$strict","$values","and","as","asError","ascertain","check","compile","createValidator","discriminated","format","fromBase64","gt","integer","lt","max","maxLength","min","minLength","multipleOf","oneOf","optional","or","standardSchema","tuple","uniqueItems","Symbol","for","$op","OR","AND","OPTIONAL","TUPLE","DISCRIMINATED","CHECK","ERR","ErrCtor","message","prototype","OrCtor","schemas","AndCtor","OptionalCtor","schema","TupleCtor","DiscriminatedCtor","key","CheckCtor","compileFn","length","TypeError","fnOrOpts","v","ctx","fnRef","ref","JSON","stringify","n","values","set","Set","Array","isArray","Object","map","toLiteral","join","utf8Encoder","TextEncoder","utf8Decoder","TextDecoder","fromBase64Bytes","value","bin","atob","out","Uint8Array","i","charCodeAt","decode","HEX_LUT","t","Int8Array","fill","fromHex","start","digits","byte","MULTIPLIERS","ms","s","m","h","d","w","TIME_REGEX","string","number","c0","c1","result","Number","slice","isNaN","trim","NaN","date","Date","parse","valueOf","time","conversionFactor","matches","match","amount","unit","multiplier","parsed","parseFloat","Math","floor","boolean","test","array","delimiter","split","json","base64","data","type","encode","DATETIME_RE","TIME_FMT_RE","DURATION_RE","EMAIL_RE","IDN_EMAIL_RE","HOSTNAME_RE","IDN_HOSTNAME_RE","IPV4_RE","IPV6_RE","URI_RE","isUriRef","IRI_RE","isIriRef","UUID_RE","URI_TEMPLATE_RE","JSON_POINTER_RE","REL_JSON_POINTER_RE","DAYS","isValidDate","exec","month","day","y","isValidRegex","RegExp","regexFormat","re","name","fnFormat","fn","dateTime","duration","email","idnEmail","hostname","idnHostname","ipv4","ipv6","uri","uriReference","iri","iriReference","uuid","uriTemplate","jsonPointer","relativeJsonPointer","regex","Context","registry","lookupMap","Map","varIndex","pure","register","index","get","undefined","push","unique","prefix","isTagged","buildDynamicPathExpr","staticPath","dynamicParts","k","childMode","mode","carryReady","firstError","issuesReady","dynamic","fast","issues","path","pathExpr","newPath","freeze","collapsibleTypeOf","String","Boolean","BigInt","buildCollapsedOr","hasNull","hasUndefined","groups","ct","g","ctor","literals","clauses","l","buildExpectedDesc","parts","isCollapsible","codeGen","context","valuePath","emit","msg","fail","onFail","errChk","errBranch","tag","valueAlias","code","foundValid","collapsible","complex","condition","branches","branchValid","branchCode","every","expected","firstBranchIssues","idx","branchIssues","replace","localIssues","pushExpr","inner","iname","is","pt","typeMsgs","fromEntries","typeMsgIdx","lines","cond","discriminantAlias","keyStr","variants","discriminantValue","genVariantProps","variantMode","obj","entries","filter","ps","validValues","primitiveType","checks","isError","Error","registryAlias","arrTypeMsgs","arrTypeMsgIdx","toString","indexed","rootFail","kAlias","allowedRef","keys","propMode","sv","startVar","rootCase","extraAlias","forEach","propCode","innerCode","emptyIssues","options","allErrors","canIndex","fastContext","fastCode","indexedFast","Function","issueContext","rootPath","issueCode","issueValidator","validator","fastValidator","rootPath2","firstErrorValidator","rootPath3","cause","config","version","vendor","validate"],"mappings":"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"}