ascertain 3.1.0 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -7
- package/build/__bench__/benchmark.d.ts +1 -0
- package/build/index.cjs +12 -0
- package/build/index.cjs.map +1 -1
- package/build/index.d.ts +87 -0
- package/build/index.js +9 -0
- package/build/index.js.map +1 -1
- package/package.json +17 -17
- package/src/index.ts +92 -0
package/README.md
CHANGED
|
@@ -8,7 +8,20 @@ Zero-dependency, high-performance schema validator for Node.js and browsers.
|
|
|
8
8
|
[![Downloads][downloads-image]][npm-url]
|
|
9
9
|
[![Snyk][snyk-image]][snyk-url]
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
## Table of Contents
|
|
12
|
+
|
|
13
|
+
- [Features](#features)
|
|
14
|
+
- [Install](#install)
|
|
15
|
+
- [Quick Start](#quick-start)
|
|
16
|
+
- [Performance](#performance)
|
|
17
|
+
- [Schema Reference](#schema-reference)
|
|
18
|
+
- [Type Casting](#type-casting)
|
|
19
|
+
- [Patterns](#patterns)
|
|
20
|
+
- [Compile Options](#compile-options)
|
|
21
|
+
- [Standard Schema](#standard-schema)
|
|
22
|
+
- [Complete Example](#complete-example)
|
|
23
|
+
- [Documentation](https://3axap4ehko.github.io/ascertain/) <!--API_TOC-->
|
|
24
|
+
- [License](#license)
|
|
12
25
|
|
|
13
26
|
## Features
|
|
14
27
|
|
|
@@ -65,11 +78,27 @@ validateUser(user2);
|
|
|
65
78
|
|
|
66
79
|
| Library | Mode | Valid (ops/s) | Invalid (ops/s) |
|
|
67
80
|
|---------|------|---------------|-----------------|
|
|
68
|
-
| **Ascertain** | first-error |
|
|
69
|
-
| **Ascertain** | all-errors |
|
|
70
|
-
| AJV | first-error |
|
|
71
|
-
| AJV | all-errors |
|
|
72
|
-
| Zod | all-errors |
|
|
81
|
+
| **Ascertain** | first-error | 322M | 84M |
|
|
82
|
+
| **Ascertain** | all-errors | 325M | 36M |
|
|
83
|
+
| AJV | first-error | 92M | 65M |
|
|
84
|
+
| AJV | all-errors | 92M | 30M |
|
|
85
|
+
| Zod | all-errors | 62M | 72K |
|
|
86
|
+
|
|
87
|
+
Benchmark source: [`src/__bench__/benchmark.ts`](https://github.com/3axap4eHko/ascertain/blob/master/src/__bench__/benchmark.ts)
|
|
88
|
+
|
|
89
|
+
Run it locally:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
pnpm build
|
|
93
|
+
pnpm bench
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Notes:
|
|
97
|
+
|
|
98
|
+
- Maintainer-run benchmark, not an independent study
|
|
99
|
+
- Measures valid and invalid paths for compiled validators
|
|
100
|
+
- Compares the current checkout, published `ascertain`, AJV, and Zod
|
|
101
|
+
- Results vary by CPU, Node.js version, and workload, so treat the numbers as directional
|
|
73
102
|
|
|
74
103
|
## Schema Reference
|
|
75
104
|
|
|
@@ -139,7 +168,7 @@ const config = {
|
|
|
139
168
|
|
|
140
169
|
// Errors surface with clear paths
|
|
141
170
|
ascertain({ port: Number, host: String }, config);
|
|
142
|
-
// → TypeError: "Invalid value undefined, expected
|
|
171
|
+
// → TypeError: "Invalid value undefined, expected a string"
|
|
143
172
|
```
|
|
144
173
|
|
|
145
174
|
## Patterns
|
|
@@ -353,6 +382,8 @@ if (!validate(data)) {
|
|
|
353
382
|
}
|
|
354
383
|
```
|
|
355
384
|
|
|
385
|
+
<!--API_REFERENCE-->
|
|
386
|
+
|
|
356
387
|
## License
|
|
357
388
|
|
|
358
389
|
[MIT](http://opensource.org/licenses/MIT) - Ivan Zakharchanka
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import 'overtake';
|
package/build/index.cjs
CHANGED
|
@@ -72,6 +72,9 @@ _export(exports, {
|
|
|
72
72
|
get multipleOf () {
|
|
73
73
|
return multipleOf;
|
|
74
74
|
},
|
|
75
|
+
get oneOf () {
|
|
76
|
+
return oneOf;
|
|
77
|
+
},
|
|
75
78
|
get optional () {
|
|
76
79
|
return optional;
|
|
77
80
|
},
|
|
@@ -190,6 +193,15 @@ const uniqueItems = (message)=>new CheckCtor((v)=>({
|
|
|
190
193
|
check: `new Set(${v}).size !== ${v}.length`,
|
|
191
194
|
message: message ? JSON.stringify(message) : `\`must have unique items\``
|
|
192
195
|
}));
|
|
196
|
+
const oneOf = (values, message)=>{
|
|
197
|
+
const set = new Set(Array.isArray(values) ? values : Object.values(values));
|
|
198
|
+
return new CheckCtor((v, ctx)=>({
|
|
199
|
+
check: `!${ctx.ref(set)}.has(${v})`,
|
|
200
|
+
message: message ? JSON.stringify(message) : `\`must be one of [${[
|
|
201
|
+
...set
|
|
202
|
+
].map(toLiteral).join(', ')}], got \${${v}}\``
|
|
203
|
+
}));
|
|
204
|
+
};
|
|
193
205
|
const fromBase64 = typeof Buffer === 'undefined' ? (value)=>atob(value) : (value)=>Buffer.from(value, 'base64').toString('utf-8');
|
|
194
206
|
const MULTIPLIERS = {
|
|
195
207
|
ms: 1,
|
package/build/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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');\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\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\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\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\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\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\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\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\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\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\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\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 */\nexport const fromBase64 =\n /* c8 ignore next */\n typeof Buffer === 'undefined' ? (value: string) => atob(value) : (value: string) => Buffer.from(value, 'base64').toString('utf-8');\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 TypeError(message) as unknown as T;\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\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\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\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 }\n | { fast: false; firstError: true; issues: string; path: PropertyKey[]; pathExpr: string }\n | { fast: false; firstError: false; issues: string; path: PropertyKey[]; pathExpr: string };\n\nconst isTagged = (schema: unknown): schema is Tagged<unknown> => (schema as Tagged<unknown>)?.[$op] !== undefined;\n\nconst childMode = (mode: Exclude<Mode, { fast: true }>, key: PropertyKey | { dynamic: string }): Mode => {\n if (typeof key === 'object' && 'dynamic' in key) {\n return {\n fast: false,\n firstError: mode.firstError,\n issues: mode.issues,\n path: mode.path,\n pathExpr: `[${mode.path.map((k) => JSON.stringify(k)).join(',')}${mode.path.length ? ',' : ''}${key.dynamic}]`,\n };\n }\n const newPath = [...mode.path, key];\n return { fast: false, firstError: mode.firstError, issues: mode.issues, path: newPath, pathExpr: JSON.stringify(newPath) };\n};\n\nconst toLiteral = (value: unknown): string => (typeof value === 'bigint' ? `${value}n` : JSON.stringify(value));\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 : (msg: string) => `(${mode.issues} || (${mode.issues} = [])).push({ message: ${msg}, path: ${mode.pathExpr} });`;\n const fail = mode.fast ? (mode.onFail ?? 'return false;') : '';\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 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 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 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 return `const ${valueAlias} = ${valuePath};\\nconst ${localIssues} = [];\\nlet ${foundValid} = false;\\n${branches.join('\\n')}\\nif (!${foundValid}) { (${mode.issues} || (${mode.issues} = [])).push(...${localIssues}); }`;\n }\n } else if (tag === OPTIONAL) {\n const valueAlias = context.unique('v');\n return `const ${valueAlias} = ${valuePath};\\nif (${valueAlias} !== undefined && ${valueAlias} !== null) { ${codeGen((schema as OptionalShape<T>).schemas[0], 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))).join('\\n')} }`,\n ].join('\\n');\n }\n } else if (tag === CHECK) {\n const valueAlias = context.unique('v');\n const ref = (v: unknown) => `ctx.registry[${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 if (mode.fast) {\n const branches = variants.map(({ value, schema: s }) => {\n const branchCode = codeGen(s, context, valueAlias, mode);\n return `if (${discriminantAlias} === ${JSON.stringify(value)}) { ${branchCode} }`;\n });\n return [\n `const ${valueAlias} = ${valuePath};`,\n `if (${valueAlias} === null || ${valueAlias} === undefined || typeof ${valueAlias} !== 'object' || ${valueAlias} instanceof Error) { ${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 const branchCode = codeGen(s, context, valueAlias, mode);\n return `if (${discriminantAlias} === ${JSON.stringify(value)}) { ${branchCode} }`;\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 `else if (${valueAlias} instanceof Error) { ${emit!(`\\`\\${${valueAlias}.message}\\``)} }`,\n `else {`,\n ` const ${discriminantAlias} = ${valueAlias}[${keyStr}];`,\n ` ${branches.join(' else ')} else { ${emit!(`\\`Invalid discriminant value \\${JSON.stringify(${discriminantAlias})}, expected one of: ${validValues}\\``)} }`,\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(`Number.isNaN(${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} = ctx.registry[${index}];\\nif (${valueAlias} === null || ${valueAlias} === undefined${isError ? '' : ` || ${valueAlias} instanceof Error`} || (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 code.push(`if (${valueAlias} === null || ${valueAlias} === undefined) { ${emit!(`\\`Invalid value \\${${valueAlias}}, expected non-nullable\\``)} }`);\n code.push(`else if (${valueAlias} instanceof Error) { ${emit!(`\\`\\${${valueAlias}.message}\\``)} }`);\n code.push(`else if (typeof ${valueAlias} !== '${primitiveType}') { ${emit!(`\\`Invalid type \\${typeof ${valueAlias}}, expected type ${name}\\``)} }`);\n if (primitiveType === 'number')\n code.push(`else if (Number.isNaN(${valueAlias})) { ${emit!(`\\`Invalid value \\${${valueAlias}}, 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(`else if (${valueAlias} instanceof Error) { ${emit!(`\\`\\${${valueAlias}.message}\\``)} }`);\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} = ctx.registry[${index}];`);\n code.push(`if (${valueAlias} === null || ${valueAlias} === undefined) { ${emit!(`\\`Invalid value \\${${valueAlias}}, expected non-nullable\\``)} }`);\n if (!isError) code.push(`else if (${valueAlias} instanceof Error) { ${emit!(`\\`\\${${valueAlias}.message}\\``)} }`);\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 code: string[] = [\n `const ${valueAlias} = ${valuePath};`,\n `if (${valueAlias} === null || ${valueAlias} === undefined) { ${emit!(`\\`Invalid value \\${${valueAlias}}, expected non-nullable\\``)} }`,\n `else if (${valueAlias} instanceof Error) { ${emit!(`\\`\\${${valueAlias}.message}\\``)} }`,\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 ];\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 }))} } }`,\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))).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 || ${valueAlias} instanceof Error || !${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\\``)} }\\nelse if (${valueAlias} instanceof Error) { ${emit!(`\\`\\${${valueAlias}.message}\\``)} }\\nelse 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 let code = `const ${valueAlias} = ${valuePath};\\nif (${valueAlias} === null || typeof ${valueAlias} !== 'object' || ${valueAlias} instanceof Error) { ${fail} }`;\n if ($keys in schema) {\n const keysAlias = context.unique('k');\n const kAlias = context.unique('k');\n code += `\\nconst ${keysAlias} = Object.keys(${valueAlias});\\nfor (const ${kAlias} of ${keysAlias}) { ${codeGen(schema[$keys], context, kAlias, mode)} }`;\n }\n if ($values in schema) {\n const vAlias = context.unique('val');\n const kAlias = context.unique('k');\n const entriesAlias = context.unique('en');\n code += `\\nconst ${entriesAlias} = Object.entries(${valueAlias});\\nfor (const [${kAlias}, ${vAlias}] of ${entriesAlias}) { ${codeGen(schema[$values], context, vAlias, mode)} }`;\n }\n if ($strict in schema && schema[$strict]) {\n const keysAlias = context.unique('k');\n const kAlias = context.unique('k');\n const extraAlias = context.unique('ex');\n code += `\\nconst ${keysAlias} = new Set(${JSON.stringify(Object.keys(schema))});\\nconst ${extraAlias} = Object.keys(${valueAlias}).filter(${kAlias} => !${keysAlias}.has(${kAlias}));\\nif (${extraAlias}.length !== 0) { ${fail} }`;\n }\n code +=\n '\\n' +\n Object.entries(schema)\n .map(([key, s]) => codeGen(s, context, `${valueAlias}[${JSON.stringify(key)}]`, mode))\n .join('\\n');\n return code;\n } else {\n const code: string[] = [\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 Object\\``)} }`,\n `else if (${valueAlias} instanceof Error) { ${emit!(`\\`\\${${valueAlias}.message}\\``)} }`,\n 'else {',\n ];\n const innerCode: string[] = [];\n if ($keys in schema) {\n const keysAlias = context.unique('k');\n const kAlias = context.unique('k');\n innerCode.push(`const ${keysAlias} = Object.keys(${valueAlias});`);\n // Dynamic key - use runtime concat\n innerCode.push(`for (const ${kAlias} of ${keysAlias}) { ${codeGen(schema[$keys], context, kAlias, childMode(mode, { dynamic: kAlias }))} }`);\n }\n if ($values in schema) {\n const vAlias = context.unique('val');\n const kAlias = context.unique('k');\n const entriesAlias = context.unique('en');\n innerCode.push(`const ${entriesAlias} = Object.entries(${valueAlias});`);\n // Dynamic key - use runtime concat\n innerCode.push(\n `for (const [${kAlias}, ${vAlias}] of ${entriesAlias}) { ${codeGen(schema[$values], context, vAlias, childMode(mode, { dynamic: kAlias }))} }`,\n );\n }\n if ($strict in schema && schema[$strict]) {\n const keysAlias = context.unique('k');\n const kAlias = context.unique('k');\n const extraAlias = context.unique('ex');\n innerCode.push(`const ${keysAlias} = new Set(${JSON.stringify(Object.keys(schema))});`);\n innerCode.push(`const ${extraAlias} = Object.keys(${valueAlias}).filter(${kAlias} => !${keysAlias}.has(${kAlias}));`);\n innerCode.push(`if (${extraAlias}.length !== 0) { ${emit!(`\\`Extra properties: \\${${extraAlias}}, are not allowed\\``)} }`);\n }\n // Static keys - pre-register paths\n innerCode.push(...Object.entries(schema).map(([key, s]) => codeGen(s, context, `${valueAlias}[${JSON.stringify(key)}]`, childMode(mode, key))));\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} = ctx.registry[${index}];\\nif (typeof ${valueAlias} !== 'symbol' || ${valueAlias} !== ${registryAlias}) { ${fail} }`;\n } else {\n return `const ${valueAlias} = ${valuePath};\\nconst ${registryAlias} = ctx.registry[${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 `const ${valueAlias} = ${valuePath};\\nconst ${value} = ${toLiteral(schema)};\\nif (${valueAlias} instanceof Error) { ${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\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\n if (allErrors) {\n const fastContext = new Context();\n const fastCode = `${codeGen(schema, fastContext, 'data', { fast: true })}\\nreturn true;`;\n const fastValidator = new Function('ctx', `return (data) => {\\n${fastCode}\\n};`)(fastContext) as (data: T) => boolean;\n\n const issueContext = new Context();\n const issueCode = `let issues;\\n${codeGen(schema, issueContext, 'data', { fast: false, firstError: false, issues: 'issues', path: [], pathExpr: '[]' })}\\nreturn issues || [];`;\n const issueValidator = new Function('ctx', `return (data) => {\\n${issueCode}\\n};`)(issueContext) as (data: T) => 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 const fastContext = new Context();\n const fastCode = `${codeGen(schema, fastContext, 'data', { fast: true })}\\nreturn true;`;\n const fastValidator = new Function('ctx', `return (data) => {\\n${fastCode}\\n};`)(fastContext) as (data: T) => boolean;\n\n const context = new Context();\n const code = codeGen(schema, context, 'data', { fast: false, firstError: true, issues: 'issues', path: [], pathExpr: '[]' });\n const firstErrorValidator = new Function('ctx', `return (data) => {\\nlet issues;\\n${code}\\nreturn issues;\\n};`)(context) 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\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","optional","or","standardSchema","tuple","uniqueItems","Symbol","for","$op","OR","AND","OPTIONAL","TUPLE","DISCRIMINATED","CHECK","OrCtor","schemas","prototype","AndCtor","OptionalCtor","schema","TupleCtor","DiscriminatedCtor","key","CheckCtor","compileFn","length","TypeError","fnOrOpts","message","v","ctx","fnRef","ref","JSON","stringify","n","Buffer","value","atob","from","toString","MULTIPLIERS","ms","s","m","h","d","w","TIME_REGEX","string","number","start","c0","charCodeAt","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","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","register","index","get","undefined","push","set","unique","prefix","isTagged","childMode","mode","fast","firstError","issues","path","pathExpr","map","k","join","dynamic","newPath","toLiteral","codeGen","context","valuePath","emit","msg","fail","onFail","tag","valueAlias","code","foundValid","branches","branchValid","branchCode","firstBranchIssues","idx","branchIssues","replace","localIssues","cond","discriminantAlias","keyStr","variants","discriminantValue","validValues","primitiveType","String","Boolean","BigInt","checks","isError","Error","registryAlias","Array","isArray","keysAlias","kAlias","vAlias","entriesAlias","extraAlias","Object","keys","entries","innerCode","emptyIssues","options","allErrors","fastContext","fastCode","fastValidator","Function","issueContext","issueCode","issueValidator","validator","data","firstErrorValidator","cause","config","version","vendor","validate"],"mappings":"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"}
|
|
1
|
+
{"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');\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 */\nexport const fromBase64 =\n /* c8 ignore next */\n typeof Buffer === 'undefined' ? (value: string) => atob(value) : (value: string) => Buffer.from(value, 'base64').toString('utf-8');\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 TypeError(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\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\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 }\n | { fast: false; firstError: true; issues: string; path: PropertyKey[]; pathExpr: string }\n | { fast: false; firstError: false; issues: string; path: PropertyKey[]; pathExpr: string };\n\nconst isTagged = (schema: unknown): schema is Tagged<unknown> => (schema as Tagged<unknown>)?.[$op] !== undefined;\n\nconst childMode = (mode: Exclude<Mode, { fast: true }>, key: PropertyKey | { dynamic: string }): Mode => {\n if (typeof key === 'object' && 'dynamic' in key) {\n return {\n fast: false,\n firstError: mode.firstError,\n issues: mode.issues,\n path: mode.path,\n pathExpr: `[${mode.path.map((k) => JSON.stringify(k)).join(',')}${mode.path.length ? ',' : ''}${key.dynamic}]`,\n };\n }\n const newPath = [...mode.path, key];\n return { fast: false, firstError: mode.firstError, issues: mode.issues, path: newPath, pathExpr: JSON.stringify(newPath) };\n};\n\nconst toLiteral = (value: unknown): string => (typeof value === 'bigint' ? `${value}n` : JSON.stringify(value));\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 : (msg: string) => `(${mode.issues} || (${mode.issues} = [])).push({ message: ${msg}, path: ${mode.pathExpr} });`;\n const fail = mode.fast ? (mode.onFail ?? 'return false;') : '';\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 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 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 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 return `const ${valueAlias} = ${valuePath};\\nconst ${localIssues} = [];\\nlet ${foundValid} = false;\\n${branches.join('\\n')}\\nif (!${foundValid}) { (${mode.issues} || (${mode.issues} = [])).push(...${localIssues}); }`;\n }\n } else if (tag === OPTIONAL) {\n const valueAlias = context.unique('v');\n return `const ${valueAlias} = ${valuePath};\\nif (${valueAlias} !== undefined && ${valueAlias} !== null) { ${codeGen((schema as OptionalShape<T>).schemas[0], 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))).join('\\n')} }`,\n ].join('\\n');\n }\n } else if (tag === CHECK) {\n const valueAlias = context.unique('v');\n const ref = (v: unknown) => `ctx.registry[${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 if (mode.fast) {\n const branches = variants.map(({ value, schema: s }) => {\n const branchCode = codeGen(s, context, valueAlias, mode);\n return `if (${discriminantAlias} === ${JSON.stringify(value)}) { ${branchCode} }`;\n });\n return [\n `const ${valueAlias} = ${valuePath};`,\n `if (${valueAlias} === null || ${valueAlias} === undefined || typeof ${valueAlias} !== 'object' || ${valueAlias} instanceof Error) { ${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 const branchCode = codeGen(s, context, valueAlias, mode);\n return `if (${discriminantAlias} === ${JSON.stringify(value)}) { ${branchCode} }`;\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 `else if (${valueAlias} instanceof Error) { ${emit!(`\\`\\${${valueAlias}.message}\\``)} }`,\n `else {`,\n ` const ${discriminantAlias} = ${valueAlias}[${keyStr}];`,\n ` ${branches.join(' else ')} else { ${emit!(`\\`Invalid discriminant value \\${JSON.stringify(${discriminantAlias})}, expected one of: ${validValues}\\``)} }`,\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(`Number.isNaN(${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} = ctx.registry[${index}];\\nif (${valueAlias} === null || ${valueAlias} === undefined${isError ? '' : ` || ${valueAlias} instanceof Error`} || (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 code.push(`if (${valueAlias} === null || ${valueAlias} === undefined) { ${emit!(`\\`Invalid value \\${${valueAlias}}, expected non-nullable\\``)} }`);\n code.push(`else if (${valueAlias} instanceof Error) { ${emit!(`\\`\\${${valueAlias}.message}\\``)} }`);\n code.push(`else if (typeof ${valueAlias} !== '${primitiveType}') { ${emit!(`\\`Invalid type \\${typeof ${valueAlias}}, expected type ${name}\\``)} }`);\n if (primitiveType === 'number')\n code.push(`else if (Number.isNaN(${valueAlias})) { ${emit!(`\\`Invalid value \\${${valueAlias}}, 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(`else if (${valueAlias} instanceof Error) { ${emit!(`\\`\\${${valueAlias}.message}\\``)} }`);\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} = ctx.registry[${index}];`);\n code.push(`if (${valueAlias} === null || ${valueAlias} === undefined) { ${emit!(`\\`Invalid value \\${${valueAlias}}, expected non-nullable\\``)} }`);\n if (!isError) code.push(`else if (${valueAlias} instanceof Error) { ${emit!(`\\`\\${${valueAlias}.message}\\``)} }`);\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 code: string[] = [\n `const ${valueAlias} = ${valuePath};`,\n `if (${valueAlias} === null || ${valueAlias} === undefined) { ${emit!(`\\`Invalid value \\${${valueAlias}}, expected non-nullable\\``)} }`,\n `else if (${valueAlias} instanceof Error) { ${emit!(`\\`\\${${valueAlias}.message}\\``)} }`,\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 ];\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 }))} } }`,\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))).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 || ${valueAlias} instanceof Error || !${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\\``)} }\\nelse if (${valueAlias} instanceof Error) { ${emit!(`\\`\\${${valueAlias}.message}\\``)} }\\nelse 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 let code = `const ${valueAlias} = ${valuePath};\\nif (${valueAlias} === null || typeof ${valueAlias} !== 'object' || ${valueAlias} instanceof Error) { ${fail} }`;\n if ($keys in schema) {\n const keysAlias = context.unique('k');\n const kAlias = context.unique('k');\n code += `\\nconst ${keysAlias} = Object.keys(${valueAlias});\\nfor (const ${kAlias} of ${keysAlias}) { ${codeGen(schema[$keys], context, kAlias, mode)} }`;\n }\n if ($values in schema) {\n const vAlias = context.unique('val');\n const kAlias = context.unique('k');\n const entriesAlias = context.unique('en');\n code += `\\nconst ${entriesAlias} = Object.entries(${valueAlias});\\nfor (const [${kAlias}, ${vAlias}] of ${entriesAlias}) { ${codeGen(schema[$values], context, vAlias, mode)} }`;\n }\n if ($strict in schema && schema[$strict]) {\n const keysAlias = context.unique('k');\n const kAlias = context.unique('k');\n const extraAlias = context.unique('ex');\n code += `\\nconst ${keysAlias} = new Set(${JSON.stringify(Object.keys(schema))});\\nconst ${extraAlias} = Object.keys(${valueAlias}).filter(${kAlias} => !${keysAlias}.has(${kAlias}));\\nif (${extraAlias}.length !== 0) { ${fail} }`;\n }\n code +=\n '\\n' +\n Object.entries(schema)\n .map(([key, s]) => codeGen(s, context, `${valueAlias}[${JSON.stringify(key)}]`, mode))\n .join('\\n');\n return code;\n } else {\n const code: string[] = [\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 Object\\``)} }`,\n `else if (${valueAlias} instanceof Error) { ${emit!(`\\`\\${${valueAlias}.message}\\``)} }`,\n 'else {',\n ];\n const innerCode: string[] = [];\n if ($keys in schema) {\n const keysAlias = context.unique('k');\n const kAlias = context.unique('k');\n innerCode.push(`const ${keysAlias} = Object.keys(${valueAlias});`);\n // Dynamic key - use runtime concat\n innerCode.push(`for (const ${kAlias} of ${keysAlias}) { ${codeGen(schema[$keys], context, kAlias, childMode(mode, { dynamic: kAlias }))} }`);\n }\n if ($values in schema) {\n const vAlias = context.unique('val');\n const kAlias = context.unique('k');\n const entriesAlias = context.unique('en');\n innerCode.push(`const ${entriesAlias} = Object.entries(${valueAlias});`);\n // Dynamic key - use runtime concat\n innerCode.push(\n `for (const [${kAlias}, ${vAlias}] of ${entriesAlias}) { ${codeGen(schema[$values], context, vAlias, childMode(mode, { dynamic: kAlias }))} }`,\n );\n }\n if ($strict in schema && schema[$strict]) {\n const keysAlias = context.unique('k');\n const kAlias = context.unique('k');\n const extraAlias = context.unique('ex');\n innerCode.push(`const ${keysAlias} = new Set(${JSON.stringify(Object.keys(schema))});`);\n innerCode.push(`const ${extraAlias} = Object.keys(${valueAlias}).filter(${kAlias} => !${keysAlias}.has(${kAlias}));`);\n innerCode.push(`if (${extraAlias}.length !== 0) { ${emit!(`\\`Extra properties: \\${${extraAlias}}, are not allowed\\``)} }`);\n }\n // Static keys - pre-register paths\n innerCode.push(...Object.entries(schema).map(([key, s]) => codeGen(s, context, `${valueAlias}[${JSON.stringify(key)}]`, childMode(mode, key))));\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} = ctx.registry[${index}];\\nif (typeof ${valueAlias} !== 'symbol' || ${valueAlias} !== ${registryAlias}) { ${fail} }`;\n } else {\n return `const ${valueAlias} = ${valuePath};\\nconst ${registryAlias} = ctx.registry[${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 `const ${valueAlias} = ${valuePath};\\nconst ${value} = ${toLiteral(schema)};\\nif (${valueAlias} instanceof Error) { ${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\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\n if (allErrors) {\n const fastContext = new Context();\n const fastCode = `${codeGen(schema, fastContext, 'data', { fast: true })}\\nreturn true;`;\n const fastValidator = new Function('ctx', `return (data) => {\\n${fastCode}\\n};`)(fastContext) as (data: T) => boolean;\n\n const issueContext = new Context();\n const issueCode = `let issues;\\n${codeGen(schema, issueContext, 'data', { fast: false, firstError: false, issues: 'issues', path: [], pathExpr: '[]' })}\\nreturn issues || [];`;\n const issueValidator = new Function('ctx', `return (data) => {\\n${issueCode}\\n};`)(issueContext) as (data: T) => 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 const fastContext = new Context();\n const fastCode = `${codeGen(schema, fastContext, 'data', { fast: true })}\\nreturn true;`;\n const fastValidator = new Function('ctx', `return (data) => {\\n${fastCode}\\n};`)(fastContext) as (data: T) => boolean;\n\n const context = new Context();\n const code = codeGen(schema, context, 'data', { fast: false, firstError: true, issues: 'issues', path: [], pathExpr: '[]' });\n const firstErrorValidator = new Function('ctx', `return (data) => {\\nlet issues;\\n${code}\\nreturn issues;\\n};`)(context) 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","OrCtor","schemas","prototype","AndCtor","OptionalCtor","schema","TupleCtor","DiscriminatedCtor","key","CheckCtor","compileFn","length","TypeError","fnOrOpts","message","v","ctx","fnRef","ref","JSON","stringify","n","values","set","Set","Array","isArray","Object","map","toLiteral","join","Buffer","value","atob","from","toString","MULTIPLIERS","ms","s","m","h","d","w","TIME_REGEX","string","number","start","c0","charCodeAt","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","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","register","index","get","undefined","push","unique","prefix","isTagged","childMode","mode","fast","firstError","issues","path","pathExpr","k","dynamic","newPath","codeGen","context","valuePath","emit","msg","fail","onFail","tag","valueAlias","code","foundValid","branches","branchValid","branchCode","firstBranchIssues","idx","branchIssues","replace","localIssues","cond","discriminantAlias","keyStr","variants","discriminantValue","validValues","primitiveType","String","Boolean","BigInt","checks","isError","Error","registryAlias","keysAlias","kAlias","vAlias","entriesAlias","extraAlias","keys","entries","innerCode","emptyIssues","options","allErrors","fastContext","fastCode","fastValidator","Function","issueContext","issueCode","issueValidator","validator","data","firstErrorValidator","cause","config","version","vendor","validate"],"mappings":"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"}
|