@earendil-works/pi-schema 1.5.0 → 1.5.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/dist/checks.js CHANGED
@@ -1,20 +1,27 @@
1
1
  // Check factories: each returns a closure that captures only its arguments, never the compiler, so a compiled
2
- // schema keeps no compile-time state alive. Leaf checks are module constants that object and array loops inline.
2
+ // schema keeps no compile-time state alive. Leaf checks (a type, a const, an enum, bounds) are registered with a code
3
+ // and an argument, so object and array loops run them inline instead of calling them.
3
4
  export const ALWAYS = () => true;
4
5
  export const NEVER = () => false;
5
6
  const IS_STRING = (v) => typeof v === "string";
6
- const IS_NUMBER = (v) => typeof v === "number";
7
+ const IS_NUMBER = (v) => Number.isFinite(v);
7
8
  const IS_INTEGER = (v) => Number.isInteger(v);
8
9
  const IS_BOOLEAN = (v) => typeof v === "boolean";
9
10
  const IS_NULL = (v) => v === null;
10
11
  export const IS_ARRAY = (v) => Array.isArray(v);
11
12
  const IS_BYTES = (v) => v instanceof Uint8Array;
13
+ const IS_BIGINT = (v) => typeof v === "bigint";
14
+ const IS_UNDEFINED = (v) => v === undefined;
12
15
  export const IS_OBJECT = (v) => isObject(v);
13
16
  /** Whether `v` is a JSON object: not null, an array or bytes. */
14
17
  export function isObject(v) {
15
18
  return typeof v === "object" && v !== null && !Array.isArray(v) && !(v instanceof Uint8Array);
16
19
  }
17
- /** The check of a `type` name; `bytes` (a Uint8Array) extends JSON Schema for values that never pass through JSON. */
20
+ /**
21
+ * The check of a `type` name. `bytes` (a Uint8Array), `bigint` (TypeBox's `Type.BigInt`) and `undefined` (TypeBox's
22
+ * `Type.Undefined`) extend JSON Schema for values that never pass through JSON. A `number` is finite, as in TypeBox:
23
+ * JSON has no NaN or Infinity, so only a value built in code can be one.
24
+ */
18
25
  export const TYPE_CHECKS = new Map([
19
26
  ["string", IS_STRING],
20
27
  ["number", IS_NUMBER],
@@ -24,40 +31,85 @@ export const TYPE_CHECKS = new Map([
24
31
  ["array", IS_ARRAY],
25
32
  ["object", IS_OBJECT],
26
33
  ["bytes", IS_BYTES],
34
+ ["bigint", IS_BIGINT],
35
+ ["undefined", IS_UNDEFINED],
27
36
  ]);
28
- /** Leaf checks that object and array loops run inline by code instead of calling them. */
29
- export const LEAF_CODES = new Map([
30
- [IS_STRING, 1],
31
- [IS_NUMBER, 2],
32
- [IS_INTEGER, 3],
33
- [IS_BOOLEAN, 4],
34
- [IS_NULL, 5],
35
- [ALWAYS, 6],
37
+ const leaves = new WeakMap([
38
+ [IS_STRING, [1, undefined]],
39
+ [IS_NUMBER, [2, undefined]],
40
+ [IS_INTEGER, [3, undefined]],
41
+ [IS_BOOLEAN, [4, undefined]],
42
+ [IS_NULL, [5, undefined]],
43
+ [ALWAYS, [6, undefined]],
36
44
  ]);
37
- function leafOk(code, x) {
45
+ /** The leaf form of `check`, undefined when it is not a leaf. */
46
+ export function leafOf(check) {
47
+ return leaves.get(check);
48
+ }
49
+ function leaf(code, arg, check) {
50
+ leaves.set(check, [code, arg]);
51
+ return check;
52
+ }
53
+ /** Bounds of a number or a string length leaf. */
54
+ class Bounds {
55
+ min;
56
+ max;
57
+ xmin;
58
+ xmax;
59
+ constructor(min, max, xmin, xmax) {
60
+ this.min = min;
61
+ this.max = max;
62
+ this.xmin = xmin;
63
+ this.xmax = xmax;
64
+ }
65
+ }
66
+ // Codes 1-6 are the bare types and `true`; the others read their argument.
67
+ function leafOk(code, x, arg) {
38
68
  switch (code) {
39
69
  case 1:
40
70
  return typeof x === "string";
41
71
  case 2:
42
- return typeof x === "number";
72
+ return Number.isFinite(x);
43
73
  case 3:
44
74
  return Number.isInteger(x);
45
75
  case 4:
46
76
  return typeof x === "boolean";
47
77
  case 5:
48
78
  return x === null;
79
+ case 7:
80
+ return x === arg;
81
+ case 8: {
82
+ const list = arg;
83
+ for (let i = 0; i < list.length; i++)
84
+ if (list[i] === x)
85
+ return true;
86
+ return false;
87
+ }
88
+ case 9:
89
+ return (typeBits(x) & arg) !== 0;
90
+ case 10:
91
+ return Number.isInteger(x) && inBounds(x, arg);
92
+ case 11:
93
+ return Number.isFinite(x) && inBounds(x, arg);
94
+ case 12:
95
+ return typeof x === "string" && lengthOk(x, arg.min, arg.max);
96
+ case 13:
97
+ return typeof x === "string" && arg.test(x);
49
98
  default:
50
99
  return true;
51
100
  }
52
101
  }
102
+ function inBounds(x, b) {
103
+ return x >= b.min && x <= b.max && x > b.xmin && x < b.xmax;
104
+ }
53
105
  /** Whether a combined object or array check also checks the type: not at all, strictly, or passing other types. */
54
106
  export const GUARD_NONE = 0;
55
107
  export const GUARD_STRICT = 1;
56
108
  export const GUARD_LOOSE = 2;
57
109
  /** Flags of a declared property in an object check's entries: its leaf code and two bits. */
58
- export const CODE = 7;
59
- export const REQUIRED = 8;
60
- export const INHERITED = 16;
110
+ export const CODE = 15;
111
+ export const REQUIRED = 16;
112
+ export const INHERITED = 32;
61
113
  /** All of `parts`; two and three parts get closures without a loop. */
62
114
  export function and(parts) {
63
115
  switch (parts.length) {
@@ -97,15 +149,58 @@ export function scopedCheck(scope, uri, check) {
97
149
  }
98
150
  /** Any of the named types. */
99
151
  export function typeCheck(types) {
100
- const checks = types.map((t) => (typeof t === "string" ? TYPE_CHECKS.get(t) : undefined) ?? NEVER);
101
- if (checks.length === 1)
102
- return checks[0];
103
- return (v) => {
104
- for (let i = 0; i < checks.length; i++)
105
- if (checks[i](v))
106
- return true;
107
- return false;
108
- };
152
+ if (types.length === 1)
153
+ return (typeof types[0] === "string" ? TYPE_CHECKS.get(types[0]) : undefined) ?? NEVER;
154
+ return maskCheck(typeMask(types));
155
+ }
156
+ const TYPE_BITS = new Map([
157
+ ["string", 1],
158
+ ["number", 2],
159
+ ["integer", 4],
160
+ ["boolean", 8],
161
+ ["null", 16],
162
+ ["array", 32],
163
+ ["object", 64],
164
+ ["bytes", 128],
165
+ ["bigint", 256],
166
+ ["undefined", 512],
167
+ ]);
168
+ /** The bits of the named types; unknown names add none. */
169
+ export function typeMask(types) {
170
+ let mask = 0;
171
+ for (const t of types)
172
+ if (typeof t === "string")
173
+ mask |= TYPE_BITS.get(t) ?? 0;
174
+ return mask;
175
+ }
176
+ /** The type bits of `v`: an integer has the bits of `number` and `integer`; NaN and Infinity have neither. */
177
+ function typeBits(v) {
178
+ switch (typeof v) {
179
+ case "string":
180
+ return 1;
181
+ case "number":
182
+ return Number.isInteger(v) ? 6 : Number.isFinite(v) ? 2 : 0;
183
+ case "boolean":
184
+ return 8;
185
+ case "object":
186
+ return v === null ? 16 : Array.isArray(v) ? 32 : v instanceof Uint8Array ? 128 : 64;
187
+ case "bigint":
188
+ return 256;
189
+ case "undefined":
190
+ return 512;
191
+ default:
192
+ return 0;
193
+ }
194
+ }
195
+ function maskCheck(mask) {
196
+ return leaf(9, mask, (v) => (typeBits(v) & mask) !== 0);
197
+ }
198
+ /** `anyOf` whose bare-type branches have the types of `mask`: those by one type test, the others by their checks. */
199
+ export function maskedAnyCheck(mask, checks) {
200
+ if (checks.length === 0)
201
+ return maskCheck(mask);
202
+ const rest = checks.length === 1 ? checks[0] : anyCheck(checks);
203
+ return (v) => (typeBits(v) & mask) !== 0 || rest(v);
109
204
  }
110
205
  /** A Uint8Array within the length bounds. */
111
206
  export function bytesCheck(min, max) {
@@ -137,11 +232,13 @@ function lengthOk(s, min, max) {
137
232
  /** The string keywords: length bounds, pattern and format. */
138
233
  export function stringCheck(strict, min, max, re, format) {
139
234
  if (re !== undefined && min === 0 && max === Number.POSITIVE_INFINITY && format === undefined) {
140
- return strict ? (v) => typeof v === "string" && re.test(v) : (v) => typeof v !== "string" || re.test(v);
235
+ return strict
236
+ ? leaf(13, re, (v) => typeof v === "string" && re.test(v))
237
+ : (v) => typeof v !== "string" || re.test(v);
141
238
  }
142
239
  if (re === undefined && format === undefined) {
143
240
  return strict
144
- ? (v) => typeof v === "string" && lengthOk(v, min, max)
241
+ ? leaf(12, new Bounds(min, max, 0, 0), (v) => typeof v === "string" && lengthOk(v, min, max))
145
242
  : (v) => typeof v !== "string" || lengthOk(v, min, max);
146
243
  }
147
244
  return (v) => {
@@ -150,18 +247,39 @@ export function stringCheck(strict, min, max, re, format) {
150
247
  return lengthOk(v, min, max) && (re === undefined || re.test(v)) && (format === undefined || format(v));
151
248
  };
152
249
  }
153
- /** The number keywords. `mode`: 0 passes other types, 1 requires a number, 2 an integer. */
250
+ /**
251
+ * The number keywords, for numbers and bigints alike (as TypeBox applies them): bounds of either kind compare with
252
+ * values of either kind. `mode`: 0 passes other types, 1 requires a number, 2 an integer, 3 a bigint.
253
+ */
154
254
  export function numberCheck(mode, min, max, xmin, xmax, multipleOf) {
155
- return (v) => {
156
- if (typeof v !== "number")
255
+ const check = (v) => {
256
+ if (typeof v !== "number" && typeof v !== "bigint")
157
257
  return mode === 0;
258
+ if (mode === 3 ? typeof v !== "bigint" : mode !== 0 && !Number.isFinite(v))
259
+ return false;
158
260
  if (mode === 2 && !Number.isInteger(v))
159
261
  return false;
160
262
  return v >= min && v <= max && v > xmin && v < xmax && (multipleOf === undefined || isMultiple(v, multipleOf));
161
263
  };
264
+ const plain = typeof min === "number" && typeof max === "number" && typeof xmin === "number" && typeof xmax === "number";
265
+ if (mode === 0 || mode === 3 || multipleOf !== undefined || !plain)
266
+ return check;
267
+ return leaf(mode === 2 ? 10 : 11, new Bounds(min, max, xmin, xmax), check);
162
268
  }
163
- /** Whether `v` is a multiple of `d`, exactly for decimals: 0.0075 / 0.0001 is 74.99999999999999 in floating point. */
269
+ /**
270
+ * Whether `v` is a multiple of `d`, exactly for decimals: 0.0075 / 0.0001 is 74.99999999999999 in floating point. With
271
+ * a bigint on either side, exact integer arithmetic; a bigint is no multiple of 0 or of a fraction.
272
+ *
273
+ * Deliberately unlike TypeBox, which throws there (`BigInt(0.5)`, division by zero): a check answers for every value
274
+ * and never throws, and no real schema pairs a bigint with a fractional or zero `multipleOf`.
275
+ */
164
276
  export function isMultiple(v, d) {
277
+ if (typeof v === "bigint" || typeof d === "bigint") {
278
+ if ((typeof v === "number" && !Number.isInteger(v)) || (typeof d === "number" && !Number.isInteger(d)))
279
+ return false;
280
+ const divisor = BigInt(d);
281
+ return divisor !== 0n && BigInt(v) % divisor === 0n;
282
+ }
165
283
  const q = v / d;
166
284
  if (Number.isInteger(q))
167
285
  return true;
@@ -198,21 +316,29 @@ export function declaredObject(entries, requiredCount, closed, guard) {
198
316
  // Guarded: by the check above, or by the caller for GUARD_NONE.
199
317
  const o = v;
200
318
  let required = 0;
319
+ let next = 0;
201
320
  for (const k in o) {
202
- let i = 0;
203
- while (i < n && entries[i] !== k)
204
- i += 3;
205
- if (i === n) {
206
- if (closed)
207
- return false;
208
- continue;
321
+ // Keys usually come in the declared order: try the entry after the last match before searching.
322
+ let i = next;
323
+ if (entries[i] !== k) {
324
+ i = 0;
325
+ while (i < n && entries[i] !== k)
326
+ i += 3;
327
+ if (i === n) {
328
+ if (closed)
329
+ return false;
330
+ continue;
331
+ }
209
332
  }
333
+ next = i + 3;
210
334
  const x = o[k];
211
- if (x === undefined)
212
- continue;
213
335
  const f = entries[i + 2];
336
+ // An optional property set to undefined counts as absent; a required one is present, and its schema decides
337
+ // whether undefined is a value of it (TypeBox's Type.Undefined, Unknown, Any).
338
+ if (x === undefined && !(f & REQUIRED))
339
+ continue;
214
340
  const c = f & CODE;
215
- if (c !== 0 ? !leafOk(c, x) : !entries[i + 1](x))
341
+ if (c !== 0 ? !leafOk(c, x, entries[i + 1]) : !entries[i + 1](x))
216
342
  return false;
217
343
  if (f & REQUIRED)
218
344
  required++;
@@ -231,13 +357,14 @@ export function openObject(entries, keys, extraRequired, patterns, additional, g
231
357
  const k = entries[i];
232
358
  const x = o[k];
233
359
  const f = entries[i + 2];
234
- if (x === undefined || (f & INHERITED && !Object.hasOwn(o, k))) {
360
+ // Absent, or an optional property set to undefined (which counts as absent); see declaredObject.
361
+ if ((x === undefined && !(f & REQUIRED && Object.hasOwn(o, k))) || (f & INHERITED && !Object.hasOwn(o, k))) {
235
362
  if (f & REQUIRED)
236
363
  return false;
237
364
  continue;
238
365
  }
239
366
  const c = f & CODE;
240
- if (c !== 0 ? !leafOk(c, x) : !entries[i + 1](x))
367
+ if (c !== 0 ? !leafOk(c, x, entries[i + 1]) : !entries[i + 1](x))
241
368
  return false;
242
369
  }
243
370
  for (let i = 0; i < extraRequired.length; i++)
@@ -299,10 +426,11 @@ export function dependentSchemasCheck(entries) {
299
426
  return true;
300
427
  };
301
428
  }
429
+ const NO_LEAF = [0, undefined];
302
430
  /** The common array: guard, length bounds, prefix items and the items after them, in one closure. */
303
431
  export function listCheck(guard, min, max, prefix, rest) {
304
432
  const n = prefix.length;
305
- const code = rest === undefined ? 0 : (LEAF_CODES.get(rest) ?? 0);
433
+ const [code, arg] = (rest === undefined ? undefined : leafOf(rest)) ?? NO_LEAF;
306
434
  return (v) => {
307
435
  if (!Array.isArray(v))
308
436
  return guard === GUARD_LOOSE;
@@ -317,7 +445,7 @@ export function listCheck(guard, min, max, prefix, rest) {
317
445
  return true;
318
446
  if (code !== 0) {
319
447
  for (let i = n; i < length; i++)
320
- if (!leafOk(code, v[i]))
448
+ if (!leafOk(code, v[i], arg))
321
449
  return false;
322
450
  return true;
323
451
  }
@@ -359,12 +487,12 @@ export function uniqueCheck(v) {
359
487
  export function enumCheck(values) {
360
488
  const primitives = values.filter((x) => typeof x !== "object" || x === null);
361
489
  if (primitives.length === values.length && primitives.length <= 8) {
362
- return (v) => {
490
+ return leaf(8, primitives, (v) => {
363
491
  for (let i = 0; i < primitives.length; i++)
364
492
  if (primitives[i] === v)
365
493
  return true;
366
494
  return false;
367
- };
495
+ });
368
496
  }
369
497
  const set = new Set(primitives);
370
498
  const objects = values.filter((x) => typeof x === "object" && x !== null);
@@ -373,7 +501,7 @@ export function enumCheck(values) {
373
501
  /** `const`. */
374
502
  export function constCheck(value) {
375
503
  if (typeof value !== "object" || value === null)
376
- return (v) => v === value;
504
+ return leaf(7, value, (v) => v === value);
377
505
  return (v) => deepEqual(v, value);
378
506
  }
379
507
  /** `anyOf`. */
@@ -415,7 +543,10 @@ export function taggedCheck(key, tags, checks) {
415
543
  return false;
416
544
  };
417
545
  }
418
- /** JSON equality: same primitives, arrays with equal items in order, objects with the same keys and equal values. */
546
+ /**
547
+ * JSON equality, as `const`, `enum` and `uniqueItems` compare: the same primitives, arrays with equal items in order,
548
+ * objects with the same keys and equal values (key order does not matter).
549
+ */
419
550
  export function deepEqual(a, b) {
420
551
  if (a === b)
421
552
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"checks.js","sourceRoot":"","sources":["../src/checks.ts"],"names":[],"mappings":"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","sourcesContent":["// Check factories: each returns a closure that captures only its arguments, never the compiler, so a compiled\n// schema keeps no compile-time state alive. Leaf checks are module constants that object and array loops inline.\n\nimport type { Check } from \"./types.ts\";\n\nexport const ALWAYS: Check = () => true;\nexport const NEVER: Check = () => false;\nconst IS_STRING: Check = (v) => typeof v === \"string\";\nconst IS_NUMBER: Check = (v) => typeof v === \"number\";\nconst IS_INTEGER: Check = (v) => Number.isInteger(v);\nconst IS_BOOLEAN: Check = (v) => typeof v === \"boolean\";\nconst IS_NULL: Check = (v) => v === null;\nexport const IS_ARRAY: Check = (v) => Array.isArray(v);\nconst IS_BYTES: Check = (v) => v instanceof Uint8Array;\nexport const IS_OBJECT: Check = (v) => isObject(v);\n\n/** Whether `v` is a JSON object: not null, an array or bytes. */\nexport function isObject(v: unknown): v is Record<string, unknown> {\n\treturn typeof v === \"object\" && v !== null && !Array.isArray(v) && !(v instanceof Uint8Array);\n}\n\n/** The check of a `type` name; `bytes` (a Uint8Array) extends JSON Schema for values that never pass through JSON. */\nexport const TYPE_CHECKS: ReadonlyMap<string, Check> = new Map([\n\t[\"string\", IS_STRING],\n\t[\"number\", IS_NUMBER],\n\t[\"integer\", IS_INTEGER],\n\t[\"boolean\", IS_BOOLEAN],\n\t[\"null\", IS_NULL],\n\t[\"array\", IS_ARRAY],\n\t[\"object\", IS_OBJECT],\n\t[\"bytes\", IS_BYTES],\n]);\n\n/** Leaf checks that object and array loops run inline by code instead of calling them. */\nexport const LEAF_CODES: ReadonlyMap<Check, number> = new Map([\n\t[IS_STRING, 1],\n\t[IS_NUMBER, 2],\n\t[IS_INTEGER, 3],\n\t[IS_BOOLEAN, 4],\n\t[IS_NULL, 5],\n\t[ALWAYS, 6],\n]);\n\nfunction leafOk(code: number, x: unknown): boolean {\n\tswitch (code) {\n\t\tcase 1:\n\t\t\treturn typeof x === \"string\";\n\t\tcase 2:\n\t\t\treturn typeof x === \"number\";\n\t\tcase 3:\n\t\t\treturn Number.isInteger(x);\n\t\tcase 4:\n\t\t\treturn typeof x === \"boolean\";\n\t\tcase 5:\n\t\t\treturn x === null;\n\t\tdefault:\n\t\t\treturn true;\n\t}\n}\n\n/** Whether a combined object or array check also checks the type: not at all, strictly, or passing other types. */\nexport const GUARD_NONE = 0;\nexport const GUARD_STRICT = 1;\nexport const GUARD_LOOSE = 2;\nexport type Guard = typeof GUARD_NONE | typeof GUARD_STRICT | typeof GUARD_LOOSE;\n\n/** Flags of a declared property in an object check's entries: its leaf code and two bits. */\nexport const CODE = 7;\nexport const REQUIRED = 8;\nexport const INHERITED = 16;\n\n/** All of `parts`; two and three parts get closures without a loop. */\nexport function and(parts: readonly Check[]): Check {\n\tswitch (parts.length) {\n\t\tcase 0:\n\t\t\treturn ALWAYS;\n\t\tcase 1:\n\t\t\treturn parts[0];\n\t\tcase 2: {\n\t\t\tconst [a, b] = parts;\n\t\t\treturn (v) => a(v) && b(v);\n\t\t}\n\t\tcase 3: {\n\t\t\tconst [a, b, c] = parts;\n\t\t\treturn (v) => a(v) && b(v) && c(v);\n\t\t}\n\t\tdefault:\n\t\t\treturn (v) => {\n\t\t\t\tfor (let i = 0; i < parts.length; i++) if (!parts[i](v)) return false;\n\t\t\t\treturn true;\n\t\t\t};\n\t}\n}\n\n/** A check whose implementation is set later: the indirection a recursive reference goes through. */\nexport function indirect(slot: { check: Check | undefined }): Check {\n\treturn (v) => (slot.check as Check)(v);\n}\n\n/** `check` with `uri` pushed onto the dynamic scope while it runs (only for schemas with `$dynamicRef`). */\nexport function scopedCheck(scope: string[], uri: string, check: Check): Check {\n\treturn (v) => {\n\t\tscope.push(uri);\n\t\tconst ok = check(v);\n\t\tscope.pop();\n\t\treturn ok;\n\t};\n}\n\n/** Any of the named types. */\nexport function typeCheck(types: readonly unknown[]): Check {\n\tconst checks = types.map((t) => (typeof t === \"string\" ? TYPE_CHECKS.get(t) : undefined) ?? NEVER);\n\tif (checks.length === 1) return checks[0];\n\treturn (v) => {\n\t\tfor (let i = 0; i < checks.length; i++) if (checks[i](v)) return true;\n\t\treturn false;\n\t};\n}\n\n/** A Uint8Array within the length bounds. */\nexport function bytesCheck(min: number, max: number): Check {\n\treturn (v) => v instanceof Uint8Array && v.length >= min && v.length <= max;\n}\n\n/** The number of Unicode code points of `s`: JSON Schema string lengths count code points, not UTF-16 units. */\nexport function codePoints(s: string): number {\n\tlet n = 0;\n\tfor (let i = 0; i < s.length; i++, n++) {\n\t\tconst c = s.charCodeAt(i);\n\t\t// A high surrogate starts a pair only when a low surrogate follows; an unpaired one is a code point of its own.\n\t\tif (c >= 0xd800 && c <= 0xdbff && i + 1 < s.length) {\n\t\t\tconst next = s.charCodeAt(i + 1);\n\t\t\tif (next >= 0xdc00 && next <= 0xdfff) i++;\n\t\t}\n\t}\n\treturn n;\n}\n\n// UTF-16 units bound code points from both sides (units / 2 <= points <= units), so most strings need no count.\nfunction lengthOk(s: string, min: number, max: number): boolean {\n\tconst units = s.length;\n\tif (units < min) return false;\n\tif (units < 2 * min && codePoints(s) < min) return false;\n\treturn units <= max || codePoints(s) <= max;\n}\n\n/** The string keywords: length bounds, pattern and format. */\nexport function stringCheck(\n\tstrict: boolean,\n\tmin: number,\n\tmax: number,\n\tre: RegExp | undefined,\n\tformat: ((value: string) => boolean) | undefined,\n): Check {\n\tif (re !== undefined && min === 0 && max === Number.POSITIVE_INFINITY && format === undefined) {\n\t\treturn strict ? (v) => typeof v === \"string\" && re.test(v) : (v) => typeof v !== \"string\" || re.test(v);\n\t}\n\tif (re === undefined && format === undefined) {\n\t\treturn strict\n\t\t\t? (v) => typeof v === \"string\" && lengthOk(v, min, max)\n\t\t\t: (v) => typeof v !== \"string\" || lengthOk(v, min, max);\n\t}\n\treturn (v) => {\n\t\tif (typeof v !== \"string\") return !strict;\n\t\treturn lengthOk(v, min, max) && (re === undefined || re.test(v)) && (format === undefined || format(v));\n\t};\n}\n\n/** The number keywords. `mode`: 0 passes other types, 1 requires a number, 2 an integer. */\nexport function numberCheck(\n\tmode: 0 | 1 | 2,\n\tmin: number,\n\tmax: number,\n\txmin: number,\n\txmax: number,\n\tmultipleOf: number | undefined,\n): Check {\n\treturn (v) => {\n\t\tif (typeof v !== \"number\") return mode === 0;\n\t\tif (mode === 2 && !Number.isInteger(v)) return false;\n\t\treturn v >= min && v <= max && v > xmin && v < xmax && (multipleOf === undefined || isMultiple(v, multipleOf));\n\t};\n}\n\n/** Whether `v` is a multiple of `d`, exactly for decimals: 0.0075 / 0.0001 is 74.99999999999999 in floating point. */\nexport function isMultiple(v: number, d: number): boolean {\n\tconst q = v / d;\n\tif (Number.isInteger(q)) return true;\n\tif (!Number.isFinite(q)) return v % d === 0;\n\tconst [vc, ve] = decimal(v);\n\tconst [dc, de] = decimal(d);\n\treturn ve >= de ? (vc * 10n ** BigInt(ve - de)) % dc === 0n : vc % (dc * 10n ** BigInt(de - ve)) === 0n;\n}\n\nfunction decimal(x: number): [bigint, number] {\n\tconst [mantissa, exponent = \"0\"] = Math.abs(x).toString().split(\"e\");\n\tconst point = mantissa.indexOf(\".\");\n\tconst fraction = point < 0 ? 0 : mantissa.length - point - 1;\n\treturn [BigInt(mantissa.replace(\".\", \"\")), Number(exponent) - fraction];\n}\n\n/** `inner` for objects; other values pass unless `strict`. */\nexport function guardObject(inner: Check, strict: boolean): Check {\n\treturn strict ? (v) => isObject(v) && inner(v) : (v) => !isObject(v) || inner(v);\n}\n\n/** `inner` for arrays; other values pass unless `strict`. */\nexport function guardArray(inner: Check, strict: boolean): Check {\n\treturn strict ? (v) => Array.isArray(v) && inner(v) : (v) => !Array.isArray(v) || inner(v);\n}\n\n/**\n * An object with declared properties: `entries` is `[key, check, flags]` per property. The value's own keys are\n * walked with for...in (whose `o[k]` V8 reads from the enum cache, unlike a load by a name from a list), each found\n * among the declared names; `closed` rejects any other key. A property whose value is `undefined` counts as absent.\n */\nexport function declaredObject(\n\tentries: readonly unknown[],\n\trequiredCount: number,\n\tclosed: boolean,\n\tguard: Guard,\n): Check {\n\tconst n = entries.length;\n\treturn (v) => {\n\t\tif (guard !== GUARD_NONE && !isObject(v)) return guard === GUARD_LOOSE;\n\t\t// Guarded: by the check above, or by the caller for GUARD_NONE.\n\t\tconst o = v as Record<string, unknown>;\n\t\tlet required = 0;\n\t\tfor (const k in o) {\n\t\t\tlet i = 0;\n\t\t\twhile (i < n && entries[i] !== k) i += 3;\n\t\t\tif (i === n) {\n\t\t\t\tif (closed) return false;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst x = o[k];\n\t\t\tif (x === undefined) continue;\n\t\t\tconst f = entries[i + 2] as number;\n\t\t\tconst c = f & CODE;\n\t\t\tif (c !== 0 ? !leafOk(c, x) : !(entries[i + 1] as Check)(x)) return false;\n\t\t\tif (f & REQUIRED) required++;\n\t\t}\n\t\treturn required === requiredCount;\n\t};\n}\n\n/** An object with declared properties, required keys not declared, pattern properties and additional properties. */\nexport function openObject(\n\tentries: readonly unknown[],\n\tkeys: readonly string[],\n\textraRequired: readonly string[],\n\tpatterns: readonly (readonly [RegExp, Check])[],\n\tadditional: Check | undefined,\n\tguard: Guard,\n): Check {\n\tconst known = patterns.length > 0 || additional !== undefined ? new Set(keys) : undefined;\n\treturn (v) => {\n\t\tif (guard !== GUARD_NONE && !isObject(v)) return guard === GUARD_LOOSE;\n\t\tconst o = v as Record<string, unknown>;\n\t\tfor (let i = 0; i < entries.length; i += 3) {\n\t\t\tconst k = entries[i] as string;\n\t\t\tconst x = o[k];\n\t\t\tconst f = entries[i + 2] as number;\n\t\t\tif (x === undefined || (f & INHERITED && !Object.hasOwn(o, k))) {\n\t\t\t\tif (f & REQUIRED) return false;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst c = f & CODE;\n\t\t\tif (c !== 0 ? !leafOk(c, x) : !(entries[i + 1] as Check)(x)) return false;\n\t\t}\n\t\tfor (let i = 0; i < extraRequired.length; i++) if (!Object.hasOwn(o, extraRequired[i])) return false;\n\t\tif (known === undefined) return true;\n\t\tfor (const k of Object.keys(o)) {\n\t\t\tlet matched = known.has(k);\n\t\t\tfor (let i = 0; i < patterns.length; i++) {\n\t\t\t\tif (patterns[i][0].test(k)) {\n\t\t\t\t\tmatched = true;\n\t\t\t\t\tif (!patterns[i][1](o[k])) return false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!matched && additional !== undefined && !additional(o[k])) return false;\n\t\t}\n\t\treturn true;\n\t};\n}\n\n/** Every property name passes `check` (`v` is an object). */\nexport function propertyNamesCheck(check: Check): Check {\n\treturn (v) => {\n\t\tfor (const k in v as object) if (!check(k)) return false;\n\t\treturn true;\n\t};\n}\n\n/** `minProperties` and `maxProperties` (`v` is an object). */\nexport function propertyCountCheck(min: number, max: number): Check {\n\treturn (v) => {\n\t\tlet n = 0;\n\t\tfor (const _ in v as object) n++;\n\t\treturn n >= min && n <= max;\n\t};\n}\n\n/** `dependentRequired` (`v` is an object). */\nexport function dependentRequiredCheck(entries: readonly (readonly [string, readonly string[]])[]): Check {\n\treturn (v) => {\n\t\tconst o = v as object;\n\t\tfor (const [k, list] of entries)\n\t\t\tif (Object.hasOwn(o, k)) for (const r of list) if (!Object.hasOwn(o, r)) return false;\n\t\treturn true;\n\t};\n}\n\n/** `dependentSchemas` (`v` is an object). */\nexport function dependentSchemasCheck(entries: readonly (readonly [string, Check])[]): Check {\n\treturn (v) => {\n\t\tfor (const [k, check] of entries) if (Object.hasOwn(v as object, k) && !check(v)) return false;\n\t\treturn true;\n\t};\n}\n\n/** The common array: guard, length bounds, prefix items and the items after them, in one closure. */\nexport function listCheck(\n\tguard: Guard,\n\tmin: number,\n\tmax: number,\n\tprefix: readonly Check[],\n\trest: Check | undefined,\n): Check {\n\tconst n = prefix.length;\n\tconst code = rest === undefined ? 0 : (LEAF_CODES.get(rest) ?? 0);\n\treturn (v) => {\n\t\tif (!Array.isArray(v)) return guard === GUARD_LOOSE;\n\t\tconst length = v.length;\n\t\tif (length < min || length > max) return false;\n\t\tconst m = length < n ? length : n;\n\t\tfor (let i = 0; i < m; i++) if (!prefix[i](v[i])) return false;\n\t\tif (rest === undefined) return true;\n\t\tif (code !== 0) {\n\t\t\tfor (let i = n; i < length; i++) if (!leafOk(code, v[i])) return false;\n\t\t\treturn true;\n\t\t}\n\t\tfor (let i = n; i < length; i++) if (!rest(v[i])) return false;\n\t\treturn true;\n\t};\n}\n\n/** Prefix items and the items after them (`v` is an array). */\nexport function itemsCheck(prefix: readonly Check[], rest: Check | undefined): Check {\n\treturn listCheck(GUARD_NONE, 0, Number.POSITIVE_INFINITY, prefix, rest);\n}\n\n/** `minItems` and `maxItems` (`v` is an array). */\nexport function lengthCheck(min: number, max: number): Check {\n\treturn (v) => (v as unknown[]).length >= min && (v as unknown[]).length <= max;\n}\n\n/** `contains` with its bounds (`v` is an array). */\nexport function containsCheck(check: Check, min: number, max: number): Check {\n\treturn (v) => {\n\t\tconst list = v as unknown[];\n\t\tlet n = 0;\n\t\tfor (let i = 0; i < list.length; i++) if (check(list[i]) && ++n > max) return false;\n\t\treturn n >= min;\n\t};\n}\n\n/** `uniqueItems` (`v` is an array). */\nexport function uniqueCheck(v: unknown): boolean {\n\tconst list = v as unknown[];\n\tfor (let i = 1; i < list.length; i++) for (let j = 0; j < i; j++) if (deepEqual(list[i], list[j])) return false;\n\treturn true;\n}\n\n/** `enum`: up to 8 primitives by a scan, more by a Set, objects and arrays by deep equality. */\nexport function enumCheck(values: readonly unknown[]): Check {\n\tconst primitives = values.filter((x) => typeof x !== \"object\" || x === null);\n\tif (primitives.length === values.length && primitives.length <= 8) {\n\t\treturn (v) => {\n\t\t\tfor (let i = 0; i < primitives.length; i++) if (primitives[i] === v) return true;\n\t\t\treturn false;\n\t\t};\n\t}\n\tconst set = new Set(primitives);\n\tconst objects = values.filter((x) => typeof x === \"object\" && x !== null);\n\treturn (v) => set.has(v) || (typeof v === \"object\" && objects.some((o) => deepEqual(v, o)));\n}\n\n/** `const`. */\nexport function constCheck(value: unknown): Check {\n\tif (typeof value !== \"object\" || value === null) return (v) => v === value;\n\treturn (v) => deepEqual(v, value);\n}\n\n/** `anyOf`. */\nexport function anyCheck(checks: readonly Check[]): Check {\n\treturn (v) => {\n\t\tfor (let i = 0; i < checks.length; i++) if (checks[i](v)) return true;\n\t\treturn false;\n\t};\n}\n\n/** `oneOf`. */\nexport function oneCheck(checks: readonly Check[]): Check {\n\treturn (v) => {\n\t\tlet n = 0;\n\t\tfor (let i = 0; i < checks.length; i++) if (checks[i](v) && ++n > 1) return false;\n\t\treturn n === 1;\n\t};\n}\n\n/** `not`. */\nexport function notCheck(check: Check): Check {\n\treturn (v) => !check(v);\n}\n\n/** `if`, `then` and `else`. */\nexport function ifCheck(cond: Check, then: Check, otherwise: Check): Check {\n\treturn (v) => (cond(v) ? then(v) : otherwise(v));\n}\n\n/** A union of objects tagged by a const on `key`: the tag selects the one branch that can match. */\nexport function taggedCheck(key: string, tags: readonly unknown[], checks: readonly Check[]): Check {\n\treturn (v) => {\n\t\tif (!isObject(v)) return false;\n\t\tconst tag = v[key];\n\t\tfor (let i = 0; i < tags.length; i++) if (tags[i] === tag) return checks[i](v);\n\t\treturn false;\n\t};\n}\n\n/** JSON equality: same primitives, arrays with equal items in order, objects with the same keys and equal values. */\nexport function deepEqual(a: unknown, b: unknown): boolean {\n\tif (a === b) return true;\n\tif (typeof a !== \"object\" || typeof b !== \"object\" || a === null || b === null) return false;\n\tconst array = Array.isArray(a);\n\tif (array !== Array.isArray(b)) return false;\n\tif (array) {\n\t\tconst x = a as unknown[];\n\t\tconst y = b as unknown[];\n\t\tif (x.length !== y.length) return false;\n\t\tfor (let i = 0; i < x.length; i++) if (!deepEqual(x[i], y[i])) return false;\n\t\treturn true;\n\t}\n\tconst x = a as Record<string, unknown>;\n\tconst y = b as Record<string, unknown>;\n\tconst keys = Object.keys(x);\n\tif (keys.length !== Object.keys(y).length) return false;\n\tfor (const k of keys) if (!Object.hasOwn(y, k) || !deepEqual(x[k], y[k])) return false;\n\treturn true;\n}\n"]}
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../src/checks.ts"],"names":[],"mappings":"AAAA,8GAA8G;AAC9G,sHAAsH;AACtH,sFAAsF;AAItF,MAAM,CAAC,MAAM,MAAM,GAAU,GAAG,EAAE,CAAC,IAAI,CAAC;AACxC,MAAM,CAAC,MAAM,KAAK,GAAU,GAAG,EAAE,CAAC,KAAK,CAAC;AACxC,MAAM,SAAS,GAAU,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;AACtD,MAAM,SAAS,GAAU,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACnD,MAAM,UAAU,GAAU,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACrD,MAAM,UAAU,GAAU,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;AACxD,MAAM,OAAO,GAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;AACzC,MAAM,CAAC,MAAM,QAAQ,GAAU,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACvD,MAAM,QAAQ,GAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,UAAU,CAAC;AACvD,MAAM,SAAS,GAAU,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;AACtD,MAAM,YAAY,GAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;AACnD,MAAM,CAAC,MAAM,SAAS,GAAU,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEnD,iEAAiE;AACjE,MAAM,UAAU,QAAQ,CAAC,CAAU;IAClC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,UAAU,CAAC,CAAC;AAC/F,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAA+B,IAAI,GAAG,CAAC;IAC9D,CAAC,QAAQ,EAAE,SAAS,CAAC;IACrB,CAAC,QAAQ,EAAE,SAAS,CAAC;IACrB,CAAC,SAAS,EAAE,UAAU,CAAC;IACvB,CAAC,SAAS,EAAE,UAAU,CAAC;IACvB,CAAC,MAAM,EAAE,OAAO,CAAC;IACjB,CAAC,OAAO,EAAE,QAAQ,CAAC;IACnB,CAAC,QAAQ,EAAE,SAAS,CAAC;IACrB,CAAC,OAAO,EAAE,QAAQ,CAAC;IACnB,CAAC,QAAQ,EAAE,SAAS,CAAC;IACrB,CAAC,WAAW,EAAE,YAAY,CAAC;CAC3B,CAAC,CAAC;AAQH,MAAM,MAAM,GAAG,IAAI,OAAO,CAAc;IACvC,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3B,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3B,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC5B,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC5B,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACzB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;CACxB,CAAC,CAAC;AAEH,iEAAiE;AACjE,MAAM,UAAU,MAAM,CAAC,KAAY;IAClC,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,IAAI,CAAC,IAAY,EAAE,GAAY,EAAE,KAAY;IACrD,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC;AACd,CAAC;AAED,kDAAkD;AAClD,MAAM,MAAM;IACF,GAAG,CAAS;IACZ,GAAG,CAAS;IACZ,IAAI,CAAS;IACb,IAAI,CAAS;IAEtB,YAAY,GAAW,EAAE,GAAW,EAAE,IAAY,EAAE,IAAY;QAC/D,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;CACD;AAED,2EAA2E;AAC3E,SAAS,MAAM,CAAC,IAAY,EAAE,CAAU,EAAE,GAAY;IACrD,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,CAAC;YACL,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC;QAC9B,KAAK,CAAC;YACL,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC3B,KAAK,CAAC;YACL,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5B,KAAK,CAAC;YACL,OAAO,OAAO,CAAC,KAAK,SAAS,CAAC;QAC/B,KAAK,CAAC;YACL,OAAO,CAAC,KAAK,IAAI,CAAC;QACnB,KAAK,CAAC;YACL,OAAO,CAAC,KAAK,GAAG,CAAC;QAClB,KAAK,CAAC,EAAE,CAAC;YACR,MAAM,IAAI,GAAG,GAAyB,CAAC;YACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;gBAAE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC;YACrE,OAAO,KAAK,CAAC;QACd,CAAC;QACD,KAAK,CAAC;YACL,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAI,GAAc,CAAC,KAAK,CAAC,CAAC;QAC9C,KAAK,EAAE;YACN,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAW,EAAE,GAAa,CAAC,CAAC;QACpE,KAAK,EAAE;YACN,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAW,EAAE,GAAa,CAAC,CAAC;QACnE,KAAK,EAAE;YACN,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,EAAG,GAAc,CAAC,GAAG,EAAG,GAAc,CAAC,GAAG,CAAC,CAAC;QACvF,KAAK,EAAE;YACN,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAK,GAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzD;YACC,OAAO,IAAI,CAAC;IACd,CAAC;AACF,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,mHAAmH;AACnH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAC5B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAG7B,6FAA6F;AAC7F,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;AACvB,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC;AAC3B,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC;AAE5B,uEAAuE;AACvE,MAAM,UAAU,GAAG,CAAC,KAAuB;IAC1C,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,CAAC;YACL,OAAO,MAAM,CAAC;QACf,KAAK,CAAC;YACL,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QACjB,KAAK,CAAC,EAAE,CAAC;YACR,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;YACrB,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,EAAE,CAAC;YACR,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;YACxB,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;QACD;YACC,OAAO,CAAC,CAAC,EAAE,EAAE;gBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;oBAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAAE,OAAO,KAAK,CAAC;gBACtE,OAAO,IAAI,CAAC;YACb,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,QAAQ,CAAC,IAAkC;IAC1D,OAAO,CAAC,CAAC,EAAE,EAAE,CAAE,IAAI,CAAC,KAAe,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,4GAA4G;AAC5G,MAAM,UAAU,WAAW,CAAC,KAAe,EAAE,GAAW,EAAE,KAAY;IACrE,OAAO,CAAC,CAAC,EAAE,EAAE;QACZ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,KAAK,CAAC,GAAG,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACX,CAAC,CAAC;AACH,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,SAAS,CAAC,KAAyB;IAClD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;IAC/G,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,SAAS,GAAgC,IAAI,GAAG,CAAC;IACtD,CAAC,QAAQ,EAAE,CAAC,CAAC;IACb,CAAC,QAAQ,EAAE,CAAC,CAAC;IACb,CAAC,SAAS,EAAE,CAAC,CAAC;IACd,CAAC,SAAS,EAAE,CAAC,CAAC;IACd,CAAC,MAAM,EAAE,EAAE,CAAC;IACZ,CAAC,OAAO,EAAE,EAAE,CAAC;IACb,CAAC,QAAQ,EAAE,EAAE,CAAC;IACd,CAAC,OAAO,EAAE,GAAG,CAAC;IACd,CAAC,QAAQ,EAAE,GAAG,CAAC;IACf,CAAC,WAAW,EAAE,GAAG,CAAC;CAClB,CAAC,CAAC;AAEH,2DAA2D;AAC3D,MAAM,UAAU,QAAQ,CAAC,KAAyB;IACjD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChF,OAAO,IAAI,CAAC;AACb,CAAC;AAED,8GAA8G;AAC9G,SAAS,QAAQ,CAAC,CAAU;IAC3B,QAAQ,OAAO,CAAC,EAAE,CAAC;QAClB,KAAK,QAAQ;YACZ,OAAO,CAAC,CAAC;QACV,KAAK,QAAQ;YACZ,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,KAAK,SAAS;YACb,OAAO,CAAC,CAAC;QACV,KAAK,QAAQ;YACZ,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,KAAK,QAAQ;YACZ,OAAO,GAAG,CAAC;QACZ,KAAK,WAAW;YACf,OAAO,GAAG,CAAC;QACZ;YACC,OAAO,CAAC,CAAC;IACX,CAAC;AACF,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,qHAAqH;AACrH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,MAAwB;IACpE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,GAAW;IAClD,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,UAAU,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC;AAC7E,CAAC;AAED,gHAAgH;AAChH,MAAM,UAAU,UAAU,CAAC,CAAS;IACnC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1B,gHAAgH;QAChH,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACpD,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACjC,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM;gBAAE,CAAC,EAAE,CAAC;QAC3C,CAAC;IACF,CAAC;IACD,OAAO,CAAC,CAAC;AACV,CAAC;AAED,gHAAgH;AAChH,SAAS,QAAQ,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW;IACpD,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;IACvB,IAAI,KAAK,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC;IACzD,OAAO,KAAK,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;AAC7C,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,WAAW,CAC1B,MAAe,EACf,GAAW,EACX,GAAW,EACX,EAAsB,EACtB,MAAgD;IAEhD,IAAI,EAAE,KAAK,SAAS,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,MAAM,CAAC,iBAAiB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/F,OAAO,MAAM;YACZ,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,EAAE,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9C,OAAO,MAAM;YACZ,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC7F,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,CAAC,CAAC,EAAE,EAAE;QACZ,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,MAAM,CAAC;QAC1C,OAAO,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACzG,CAAC,CAAC;AACH,CAAC;AAKD;;;GAGG;AACH,MAAM,UAAU,WAAW,CAC1B,IAAmB,EACnB,GAAU,EACV,GAAU,EACV,IAAW,EACX,IAAW,EACX,UAA6B;IAE7B,MAAM,KAAK,GAAU,CAAC,CAAC,EAAE,EAAE;QAC1B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,IAAI,KAAK,CAAC,CAAC;QACtE,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACzF,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACrD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAChH,CAAC,CAAC;IACF,MAAM,KAAK,GACV,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC;IAC5G,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACjF,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,CAAQ,EAAE,CAAQ;IAC5C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QACpD,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACrG,OAAO,KAAK,CAAC;QACd,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO,OAAO,KAAK,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,EAAE,CAAC;IACrD,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AACzG,CAAC;AAED,SAAS,OAAO,CAAC,CAAS;IACzB,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;IAC7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;AACzE,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,WAAW,CAAC,KAAY,EAAE,MAAe;IACxD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,UAAU,CAAC,KAAY,EAAE,MAAe;IACvD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC7B,OAA2B,EAC3B,aAAqB,EACrB,MAAe,EACf,KAAY;IAEZ,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IACzB,OAAO,CAAC,CAAC,EAAE,EAAE;QACZ,IAAI,KAAK,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,KAAK,WAAW,CAAC;QACvE,gEAAgE;QAChE,MAAM,CAAC,GAAG,CAA4B,CAAC;QACvC,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,gGAAgG;YAChG,IAAI,CAAC,GAAG,IAAI,CAAC;YACb,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,CAAC,GAAG,CAAC,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;oBAAE,CAAC,IAAI,CAAC,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACb,IAAI,MAAM;wBAAE,OAAO,KAAK,CAAC;oBACzB,SAAS;gBACV,CAAC;YACF,CAAC;YACD,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAW,CAAC;YACnC,4GAA4G;YAC5G,+EAA+E;YAC/E,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;gBAAE,SAAS;YACjD,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAW,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC1F,IAAI,CAAC,GAAG,QAAQ;gBAAE,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,OAAO,QAAQ,KAAK,aAAa,CAAC;IACnC,CAAC,CAAC;AACH,CAAC;AAED,oHAAoH;AACpH,MAAM,UAAU,UAAU,CACzB,OAA2B,EAC3B,IAAuB,EACvB,aAAgC,EAChC,QAA+C,EAC/C,UAA6B,EAC7B,KAAY;IAEZ,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,OAAO,CAAC,CAAC,EAAE,EAAE;QACZ,IAAI,KAAK,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,KAAK,WAAW,CAAC;QACvE,MAAM,CAAC,GAAG,CAA4B,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAW,CAAC;YACnC,iGAAiG;YACjG,IAAI,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5G,IAAI,CAAC,GAAG,QAAQ;oBAAE,OAAO,KAAK,CAAC;gBAC/B,SAAS;YACV,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAW,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC3F,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QACrG,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACrC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,IAAI,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5B,OAAO,GAAG,IAAI,CAAC;oBACf,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAAE,OAAO,KAAK,CAAC;gBACzC,CAAC;YACF,CAAC;YACD,IAAI,CAAC,OAAO,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC7E,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;AACH,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAC9C,OAAO,CAAC,CAAC,EAAE,EAAE;QACZ,KAAK,MAAM,CAAC,IAAI,CAAW;YAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QACzD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;AACH,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,GAAW;IAC1D,OAAO,CAAC,CAAC,EAAE,EAAE;QACZ,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,CAAW;YAAE,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;IAC7B,CAAC,CAAC;AACH,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,sBAAsB,CAAC,OAA0D;IAChG,OAAO,CAAC,CAAC,EAAE,EAAE;QACZ,MAAM,CAAC,GAAG,CAAW,CAAC;QACtB,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,OAAO;YAC9B,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;gBAAE,KAAK,MAAM,CAAC,IAAI,IAAI;oBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;wBAAE,OAAO,KAAK,CAAC;QACvF,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;AACH,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,qBAAqB,CAAC,OAA8C;IACnF,OAAO,CAAC,CAAC,EAAE,EAAE;QACZ,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,OAAO;YAAE,IAAI,MAAM,CAAC,MAAM,CAAC,CAAW,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC/F,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAErC,qGAAqG;AACrG,MAAM,UAAU,SAAS,CACxB,KAAY,EACZ,GAAW,EACX,GAAW,EACX,MAAwB,EACxB,IAAuB;IAEvB,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC;IAC/E,OAAO,CAAC,CAAC,EAAE,EAAE;QACZ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,KAAK,WAAW,CAAC;QACpD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACxB,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,GAAG,GAAG;YAAE,OAAO,KAAK,CAAC;QAC/C,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC/D,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACpC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC;YAC5E,OAAO,IAAI,CAAC;QACb,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC/D,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,UAAU,CAAC,MAAwB,EAAE,IAAuB;IAC3E,OAAO,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,GAAW;IACnD,OAAO,CAAC,CAAC,EAAE,EAAE,CAAE,CAAe,CAAC,MAAM,IAAI,GAAG,IAAK,CAAe,CAAC,MAAM,IAAI,GAAG,CAAC;AAChF,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,aAAa,CAAC,KAAY,EAAE,GAAW,EAAE,GAAW;IACnE,OAAO,CAAC,CAAC,EAAE,EAAE;QACZ,MAAM,IAAI,GAAG,CAAc,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG;gBAAE,OAAO,KAAK,CAAC;QACpF,OAAO,CAAC,IAAI,GAAG,CAAC;IACjB,CAAC,CAAC;AACH,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,WAAW,CAAC,CAAU;IACrC,MAAM,IAAI,GAAG,CAAc,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;IAChH,OAAO,IAAI,CAAC;AACb,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,SAAS,CAAC,MAA0B;IACnD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IAC7E,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACnE,OAAO,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE;gBAAE,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC;YACjF,OAAO,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IAC1E,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED,eAAe;AACf,MAAM,UAAU,UAAU,CAAC,KAAc;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;IAC3F,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,eAAe;AACf,MAAM,UAAU,QAAQ,CAAC,MAAwB;IAChD,OAAO,CAAC,CAAC,EAAE,EAAE;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;QACtE,OAAO,KAAK,CAAC;IACd,CAAC,CAAC;AACH,CAAC;AAED,eAAe;AACf,MAAM,UAAU,QAAQ,CAAC,MAAwB;IAChD,OAAO,CAAC,CAAC,EAAE,EAAE;QACZ,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;QAClF,OAAO,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC;AACH,CAAC;AAED,aAAa;AACb,MAAM,UAAU,QAAQ,CAAC,KAAY;IACpC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,OAAO,CAAC,IAAW,EAAE,IAAW,EAAE,SAAgB;IACjE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,IAAwB,EAAE,MAAwB;IAC1F,OAAO,CAAC,CAAC,EAAE,EAAE;QACZ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/B,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,OAAO,KAAK,CAAC;IACd,CAAC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,CAAU,EAAE,CAAU;IAC/C,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC7F,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,KAAK,EAAE,CAAC;QACX,MAAM,CAAC,GAAG,CAAc,CAAC;QACzB,MAAM,CAAC,GAAG,CAAc,CAAC;QACzB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC5E,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,CAAC,GAAG,CAA4B,CAAC;IACvC,MAAM,CAAC,GAAG,CAA4B,CAAC;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACvF,OAAO,IAAI,CAAC;AACb,CAAC","sourcesContent":["// Check factories: each returns a closure that captures only its arguments, never the compiler, so a compiled\n// schema keeps no compile-time state alive. Leaf checks (a type, a const, an enum, bounds) are registered with a code\n// and an argument, so object and array loops run them inline instead of calling them.\n\nimport type { Check } from \"./types.ts\";\n\nexport const ALWAYS: Check = () => true;\nexport const NEVER: Check = () => false;\nconst IS_STRING: Check = (v) => typeof v === \"string\";\nconst IS_NUMBER: Check = (v) => Number.isFinite(v);\nconst IS_INTEGER: Check = (v) => Number.isInteger(v);\nconst IS_BOOLEAN: Check = (v) => typeof v === \"boolean\";\nconst IS_NULL: Check = (v) => v === null;\nexport const IS_ARRAY: Check = (v) => Array.isArray(v);\nconst IS_BYTES: Check = (v) => v instanceof Uint8Array;\nconst IS_BIGINT: Check = (v) => typeof v === \"bigint\";\nconst IS_UNDEFINED: Check = (v) => v === undefined;\nexport const IS_OBJECT: Check = (v) => isObject(v);\n\n/** Whether `v` is a JSON object: not null, an array or bytes. */\nexport function isObject(v: unknown): v is Record<string, unknown> {\n\treturn typeof v === \"object\" && v !== null && !Array.isArray(v) && !(v instanceof Uint8Array);\n}\n\n/**\n * The check of a `type` name. `bytes` (a Uint8Array), `bigint` (TypeBox's `Type.BigInt`) and `undefined` (TypeBox's\n * `Type.Undefined`) extend JSON Schema for values that never pass through JSON. A `number` is finite, as in TypeBox:\n * JSON has no NaN or Infinity, so only a value built in code can be one.\n */\nexport const TYPE_CHECKS: ReadonlyMap<string, Check> = new Map([\n\t[\"string\", IS_STRING],\n\t[\"number\", IS_NUMBER],\n\t[\"integer\", IS_INTEGER],\n\t[\"boolean\", IS_BOOLEAN],\n\t[\"null\", IS_NULL],\n\t[\"array\", IS_ARRAY],\n\t[\"object\", IS_OBJECT],\n\t[\"bytes\", IS_BYTES],\n\t[\"bigint\", IS_BIGINT],\n\t[\"undefined\", IS_UNDEFINED],\n]);\n\n/**\n * A leaf check as a code and its argument, which object and array loops run by `leafOk` instead of calling the\n * check: a call through a list of checks is not inlined, a switch is.\n */\nexport type Leaf = readonly [code: number, arg: unknown];\n\nconst leaves = new WeakMap<Check, Leaf>([\n\t[IS_STRING, [1, undefined]],\n\t[IS_NUMBER, [2, undefined]],\n\t[IS_INTEGER, [3, undefined]],\n\t[IS_BOOLEAN, [4, undefined]],\n\t[IS_NULL, [5, undefined]],\n\t[ALWAYS, [6, undefined]],\n]);\n\n/** The leaf form of `check`, undefined when it is not a leaf. */\nexport function leafOf(check: Check): Leaf | undefined {\n\treturn leaves.get(check);\n}\n\nfunction leaf(code: number, arg: unknown, check: Check): Check {\n\tleaves.set(check, [code, arg]);\n\treturn check;\n}\n\n/** Bounds of a number or a string length leaf. */\nclass Bounds {\n\treadonly min: number;\n\treadonly max: number;\n\treadonly xmin: number;\n\treadonly xmax: number;\n\n\tconstructor(min: number, max: number, xmin: number, xmax: number) {\n\t\tthis.min = min;\n\t\tthis.max = max;\n\t\tthis.xmin = xmin;\n\t\tthis.xmax = xmax;\n\t}\n}\n\n// Codes 1-6 are the bare types and `true`; the others read their argument.\nfunction leafOk(code: number, x: unknown, arg: unknown): boolean {\n\tswitch (code) {\n\t\tcase 1:\n\t\t\treturn typeof x === \"string\";\n\t\tcase 2:\n\t\t\treturn Number.isFinite(x);\n\t\tcase 3:\n\t\t\treturn Number.isInteger(x);\n\t\tcase 4:\n\t\t\treturn typeof x === \"boolean\";\n\t\tcase 5:\n\t\t\treturn x === null;\n\t\tcase 7:\n\t\t\treturn x === arg;\n\t\tcase 8: {\n\t\t\tconst list = arg as readonly unknown[];\n\t\t\tfor (let i = 0; i < list.length; i++) if (list[i] === x) return true;\n\t\t\treturn false;\n\t\t}\n\t\tcase 9:\n\t\t\treturn (typeBits(x) & (arg as number)) !== 0;\n\t\tcase 10:\n\t\t\treturn Number.isInteger(x) && inBounds(x as number, arg as Bounds);\n\t\tcase 11:\n\t\t\treturn Number.isFinite(x) && inBounds(x as number, arg as Bounds);\n\t\tcase 12:\n\t\t\treturn typeof x === \"string\" && lengthOk(x, (arg as Bounds).min, (arg as Bounds).max);\n\t\tcase 13:\n\t\t\treturn typeof x === \"string\" && (arg as RegExp).test(x);\n\t\tdefault:\n\t\t\treturn true;\n\t}\n}\n\nfunction inBounds(x: number, b: Bounds): boolean {\n\treturn x >= b.min && x <= b.max && x > b.xmin && x < b.xmax;\n}\n\n/** Whether a combined object or array check also checks the type: not at all, strictly, or passing other types. */\nexport const GUARD_NONE = 0;\nexport const GUARD_STRICT = 1;\nexport const GUARD_LOOSE = 2;\nexport type Guard = typeof GUARD_NONE | typeof GUARD_STRICT | typeof GUARD_LOOSE;\n\n/** Flags of a declared property in an object check's entries: its leaf code and two bits. */\nexport const CODE = 15;\nexport const REQUIRED = 16;\nexport const INHERITED = 32;\n\n/** All of `parts`; two and three parts get closures without a loop. */\nexport function and(parts: readonly Check[]): Check {\n\tswitch (parts.length) {\n\t\tcase 0:\n\t\t\treturn ALWAYS;\n\t\tcase 1:\n\t\t\treturn parts[0];\n\t\tcase 2: {\n\t\t\tconst [a, b] = parts;\n\t\t\treturn (v) => a(v) && b(v);\n\t\t}\n\t\tcase 3: {\n\t\t\tconst [a, b, c] = parts;\n\t\t\treturn (v) => a(v) && b(v) && c(v);\n\t\t}\n\t\tdefault:\n\t\t\treturn (v) => {\n\t\t\t\tfor (let i = 0; i < parts.length; i++) if (!parts[i](v)) return false;\n\t\t\t\treturn true;\n\t\t\t};\n\t}\n}\n\n/** A check whose implementation is set later: the indirection a recursive reference goes through. */\nexport function indirect(slot: { check: Check | undefined }): Check {\n\treturn (v) => (slot.check as Check)(v);\n}\n\n/** `check` with `uri` pushed onto the dynamic scope while it runs (only for schemas with `$dynamicRef`). */\nexport function scopedCheck(scope: string[], uri: string, check: Check): Check {\n\treturn (v) => {\n\t\tscope.push(uri);\n\t\tconst ok = check(v);\n\t\tscope.pop();\n\t\treturn ok;\n\t};\n}\n\n/** Any of the named types. */\nexport function typeCheck(types: readonly unknown[]): Check {\n\tif (types.length === 1) return (typeof types[0] === \"string\" ? TYPE_CHECKS.get(types[0]) : undefined) ?? NEVER;\n\treturn maskCheck(typeMask(types));\n}\n\nconst TYPE_BITS: ReadonlyMap<string, number> = new Map([\n\t[\"string\", 1],\n\t[\"number\", 2],\n\t[\"integer\", 4],\n\t[\"boolean\", 8],\n\t[\"null\", 16],\n\t[\"array\", 32],\n\t[\"object\", 64],\n\t[\"bytes\", 128],\n\t[\"bigint\", 256],\n\t[\"undefined\", 512],\n]);\n\n/** The bits of the named types; unknown names add none. */\nexport function typeMask(types: readonly unknown[]): number {\n\tlet mask = 0;\n\tfor (const t of types) if (typeof t === \"string\") mask |= TYPE_BITS.get(t) ?? 0;\n\treturn mask;\n}\n\n/** The type bits of `v`: an integer has the bits of `number` and `integer`; NaN and Infinity have neither. */\nfunction typeBits(v: unknown): number {\n\tswitch (typeof v) {\n\t\tcase \"string\":\n\t\t\treturn 1;\n\t\tcase \"number\":\n\t\t\treturn Number.isInteger(v) ? 6 : Number.isFinite(v) ? 2 : 0;\n\t\tcase \"boolean\":\n\t\t\treturn 8;\n\t\tcase \"object\":\n\t\t\treturn v === null ? 16 : Array.isArray(v) ? 32 : v instanceof Uint8Array ? 128 : 64;\n\t\tcase \"bigint\":\n\t\t\treturn 256;\n\t\tcase \"undefined\":\n\t\t\treturn 512;\n\t\tdefault:\n\t\t\treturn 0;\n\t}\n}\n\nfunction maskCheck(mask: number): Check {\n\treturn leaf(9, mask, (v) => (typeBits(v) & mask) !== 0);\n}\n\n/** `anyOf` whose bare-type branches have the types of `mask`: those by one type test, the others by their checks. */\nexport function maskedAnyCheck(mask: number, checks: readonly Check[]): Check {\n\tif (checks.length === 0) return maskCheck(mask);\n\tconst rest = checks.length === 1 ? checks[0] : anyCheck(checks);\n\treturn (v) => (typeBits(v) & mask) !== 0 || rest(v);\n}\n\n/** A Uint8Array within the length bounds. */\nexport function bytesCheck(min: number, max: number): Check {\n\treturn (v) => v instanceof Uint8Array && v.length >= min && v.length <= max;\n}\n\n/** The number of Unicode code points of `s`: JSON Schema string lengths count code points, not UTF-16 units. */\nexport function codePoints(s: string): number {\n\tlet n = 0;\n\tfor (let i = 0; i < s.length; i++, n++) {\n\t\tconst c = s.charCodeAt(i);\n\t\t// A high surrogate starts a pair only when a low surrogate follows; an unpaired one is a code point of its own.\n\t\tif (c >= 0xd800 && c <= 0xdbff && i + 1 < s.length) {\n\t\t\tconst next = s.charCodeAt(i + 1);\n\t\t\tif (next >= 0xdc00 && next <= 0xdfff) i++;\n\t\t}\n\t}\n\treturn n;\n}\n\n// UTF-16 units bound code points from both sides (units / 2 <= points <= units), so most strings need no count.\nfunction lengthOk(s: string, min: number, max: number): boolean {\n\tconst units = s.length;\n\tif (units < min) return false;\n\tif (units < 2 * min && codePoints(s) < min) return false;\n\treturn units <= max || codePoints(s) <= max;\n}\n\n/** The string keywords: length bounds, pattern and format. */\nexport function stringCheck(\n\tstrict: boolean,\n\tmin: number,\n\tmax: number,\n\tre: RegExp | undefined,\n\tformat: ((value: string) => boolean) | undefined,\n): Check {\n\tif (re !== undefined && min === 0 && max === Number.POSITIVE_INFINITY && format === undefined) {\n\t\treturn strict\n\t\t\t? leaf(13, re, (v) => typeof v === \"string\" && re.test(v))\n\t\t\t: (v) => typeof v !== \"string\" || re.test(v);\n\t}\n\tif (re === undefined && format === undefined) {\n\t\treturn strict\n\t\t\t? leaf(12, new Bounds(min, max, 0, 0), (v) => typeof v === \"string\" && lengthOk(v, min, max))\n\t\t\t: (v) => typeof v !== \"string\" || lengthOk(v, min, max);\n\t}\n\treturn (v) => {\n\t\tif (typeof v !== \"string\") return !strict;\n\t\treturn lengthOk(v, min, max) && (re === undefined || re.test(v)) && (format === undefined || format(v));\n\t};\n}\n\n/** A number bound: a number, or a bigint (TypeBox's `Type.BigInt` writes its bounds as bigints). */\nexport type Bound = number | bigint;\n\n/**\n * The number keywords, for numbers and bigints alike (as TypeBox applies them): bounds of either kind compare with\n * values of either kind. `mode`: 0 passes other types, 1 requires a number, 2 an integer, 3 a bigint.\n */\nexport function numberCheck(\n\tmode: 0 | 1 | 2 | 3,\n\tmin: Bound,\n\tmax: Bound,\n\txmin: Bound,\n\txmax: Bound,\n\tmultipleOf: Bound | undefined,\n): Check {\n\tconst check: Check = (v) => {\n\t\tif (typeof v !== \"number\" && typeof v !== \"bigint\") return mode === 0;\n\t\tif (mode === 3 ? typeof v !== \"bigint\" : mode !== 0 && !Number.isFinite(v)) return false;\n\t\tif (mode === 2 && !Number.isInteger(v)) return false;\n\t\treturn v >= min && v <= max && v > xmin && v < xmax && (multipleOf === undefined || isMultiple(v, multipleOf));\n\t};\n\tconst plain =\n\t\ttypeof min === \"number\" && typeof max === \"number\" && typeof xmin === \"number\" && typeof xmax === \"number\";\n\tif (mode === 0 || mode === 3 || multipleOf !== undefined || !plain) return check;\n\treturn leaf(mode === 2 ? 10 : 11, new Bounds(min, max, xmin, xmax), check);\n}\n\n/**\n * Whether `v` is a multiple of `d`, exactly for decimals: 0.0075 / 0.0001 is 74.99999999999999 in floating point. With\n * a bigint on either side, exact integer arithmetic; a bigint is no multiple of 0 or of a fraction.\n *\n * Deliberately unlike TypeBox, which throws there (`BigInt(0.5)`, division by zero): a check answers for every value\n * and never throws, and no real schema pairs a bigint with a fractional or zero `multipleOf`.\n */\nexport function isMultiple(v: Bound, d: Bound): boolean {\n\tif (typeof v === \"bigint\" || typeof d === \"bigint\") {\n\t\tif ((typeof v === \"number\" && !Number.isInteger(v)) || (typeof d === \"number\" && !Number.isInteger(d)))\n\t\t\treturn false;\n\t\tconst divisor = BigInt(d);\n\t\treturn divisor !== 0n && BigInt(v) % divisor === 0n;\n\t}\n\tconst q = v / d;\n\tif (Number.isInteger(q)) return true;\n\tif (!Number.isFinite(q)) return v % d === 0;\n\tconst [vc, ve] = decimal(v);\n\tconst [dc, de] = decimal(d);\n\treturn ve >= de ? (vc * 10n ** BigInt(ve - de)) % dc === 0n : vc % (dc * 10n ** BigInt(de - ve)) === 0n;\n}\n\nfunction decimal(x: number): [bigint, number] {\n\tconst [mantissa, exponent = \"0\"] = Math.abs(x).toString().split(\"e\");\n\tconst point = mantissa.indexOf(\".\");\n\tconst fraction = point < 0 ? 0 : mantissa.length - point - 1;\n\treturn [BigInt(mantissa.replace(\".\", \"\")), Number(exponent) - fraction];\n}\n\n/** `inner` for objects; other values pass unless `strict`. */\nexport function guardObject(inner: Check, strict: boolean): Check {\n\treturn strict ? (v) => isObject(v) && inner(v) : (v) => !isObject(v) || inner(v);\n}\n\n/** `inner` for arrays; other values pass unless `strict`. */\nexport function guardArray(inner: Check, strict: boolean): Check {\n\treturn strict ? (v) => Array.isArray(v) && inner(v) : (v) => !Array.isArray(v) || inner(v);\n}\n\n/**\n * An object with declared properties: `entries` is `[key, check, flags]` per property. The value's own keys are\n * walked with for...in (whose `o[k]` V8 reads from the enum cache, unlike a load by a name from a list), each found\n * among the declared names; `closed` rejects any other key. A property whose value is `undefined` counts as absent.\n */\nexport function declaredObject(\n\tentries: readonly unknown[],\n\trequiredCount: number,\n\tclosed: boolean,\n\tguard: Guard,\n): Check {\n\tconst n = entries.length;\n\treturn (v) => {\n\t\tif (guard !== GUARD_NONE && !isObject(v)) return guard === GUARD_LOOSE;\n\t\t// Guarded: by the check above, or by the caller for GUARD_NONE.\n\t\tconst o = v as Record<string, unknown>;\n\t\tlet required = 0;\n\t\tlet next = 0;\n\t\tfor (const k in o) {\n\t\t\t// Keys usually come in the declared order: try the entry after the last match before searching.\n\t\t\tlet i = next;\n\t\t\tif (entries[i] !== k) {\n\t\t\t\ti = 0;\n\t\t\t\twhile (i < n && entries[i] !== k) i += 3;\n\t\t\t\tif (i === n) {\n\t\t\t\t\tif (closed) return false;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tnext = i + 3;\n\t\t\tconst x = o[k];\n\t\t\tconst f = entries[i + 2] as number;\n\t\t\t// An optional property set to undefined counts as absent; a required one is present, and its schema decides\n\t\t\t// whether undefined is a value of it (TypeBox's Type.Undefined, Unknown, Any).\n\t\t\tif (x === undefined && !(f & REQUIRED)) continue;\n\t\t\tconst c = f & CODE;\n\t\t\tif (c !== 0 ? !leafOk(c, x, entries[i + 1]) : !(entries[i + 1] as Check)(x)) return false;\n\t\t\tif (f & REQUIRED) required++;\n\t\t}\n\t\treturn required === requiredCount;\n\t};\n}\n\n/** An object with declared properties, required keys not declared, pattern properties and additional properties. */\nexport function openObject(\n\tentries: readonly unknown[],\n\tkeys: readonly string[],\n\textraRequired: readonly string[],\n\tpatterns: readonly (readonly [RegExp, Check])[],\n\tadditional: Check | undefined,\n\tguard: Guard,\n): Check {\n\tconst known = patterns.length > 0 || additional !== undefined ? new Set(keys) : undefined;\n\treturn (v) => {\n\t\tif (guard !== GUARD_NONE && !isObject(v)) return guard === GUARD_LOOSE;\n\t\tconst o = v as Record<string, unknown>;\n\t\tfor (let i = 0; i < entries.length; i += 3) {\n\t\t\tconst k = entries[i] as string;\n\t\t\tconst x = o[k];\n\t\t\tconst f = entries[i + 2] as number;\n\t\t\t// Absent, or an optional property set to undefined (which counts as absent); see declaredObject.\n\t\t\tif ((x === undefined && !(f & REQUIRED && Object.hasOwn(o, k))) || (f & INHERITED && !Object.hasOwn(o, k))) {\n\t\t\t\tif (f & REQUIRED) return false;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst c = f & CODE;\n\t\t\tif (c !== 0 ? !leafOk(c, x, entries[i + 1]) : !(entries[i + 1] as Check)(x)) return false;\n\t\t}\n\t\tfor (let i = 0; i < extraRequired.length; i++) if (!Object.hasOwn(o, extraRequired[i])) return false;\n\t\tif (known === undefined) return true;\n\t\tfor (const k of Object.keys(o)) {\n\t\t\tlet matched = known.has(k);\n\t\t\tfor (let i = 0; i < patterns.length; i++) {\n\t\t\t\tif (patterns[i][0].test(k)) {\n\t\t\t\t\tmatched = true;\n\t\t\t\t\tif (!patterns[i][1](o[k])) return false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!matched && additional !== undefined && !additional(o[k])) return false;\n\t\t}\n\t\treturn true;\n\t};\n}\n\n/** Every property name passes `check` (`v` is an object). */\nexport function propertyNamesCheck(check: Check): Check {\n\treturn (v) => {\n\t\tfor (const k in v as object) if (!check(k)) return false;\n\t\treturn true;\n\t};\n}\n\n/** `minProperties` and `maxProperties` (`v` is an object). */\nexport function propertyCountCheck(min: number, max: number): Check {\n\treturn (v) => {\n\t\tlet n = 0;\n\t\tfor (const _ in v as object) n++;\n\t\treturn n >= min && n <= max;\n\t};\n}\n\n/** `dependentRequired` (`v` is an object). */\nexport function dependentRequiredCheck(entries: readonly (readonly [string, readonly string[]])[]): Check {\n\treturn (v) => {\n\t\tconst o = v as object;\n\t\tfor (const [k, list] of entries)\n\t\t\tif (Object.hasOwn(o, k)) for (const r of list) if (!Object.hasOwn(o, r)) return false;\n\t\treturn true;\n\t};\n}\n\n/** `dependentSchemas` (`v` is an object). */\nexport function dependentSchemasCheck(entries: readonly (readonly [string, Check])[]): Check {\n\treturn (v) => {\n\t\tfor (const [k, check] of entries) if (Object.hasOwn(v as object, k) && !check(v)) return false;\n\t\treturn true;\n\t};\n}\n\nconst NO_LEAF: Leaf = [0, undefined];\n\n/** The common array: guard, length bounds, prefix items and the items after them, in one closure. */\nexport function listCheck(\n\tguard: Guard,\n\tmin: number,\n\tmax: number,\n\tprefix: readonly Check[],\n\trest: Check | undefined,\n): Check {\n\tconst n = prefix.length;\n\tconst [code, arg] = (rest === undefined ? undefined : leafOf(rest)) ?? NO_LEAF;\n\treturn (v) => {\n\t\tif (!Array.isArray(v)) return guard === GUARD_LOOSE;\n\t\tconst length = v.length;\n\t\tif (length < min || length > max) return false;\n\t\tconst m = length < n ? length : n;\n\t\tfor (let i = 0; i < m; i++) if (!prefix[i](v[i])) return false;\n\t\tif (rest === undefined) return true;\n\t\tif (code !== 0) {\n\t\t\tfor (let i = n; i < length; i++) if (!leafOk(code, v[i], arg)) return false;\n\t\t\treturn true;\n\t\t}\n\t\tfor (let i = n; i < length; i++) if (!rest(v[i])) return false;\n\t\treturn true;\n\t};\n}\n\n/** Prefix items and the items after them (`v` is an array). */\nexport function itemsCheck(prefix: readonly Check[], rest: Check | undefined): Check {\n\treturn listCheck(GUARD_NONE, 0, Number.POSITIVE_INFINITY, prefix, rest);\n}\n\n/** `minItems` and `maxItems` (`v` is an array). */\nexport function lengthCheck(min: number, max: number): Check {\n\treturn (v) => (v as unknown[]).length >= min && (v as unknown[]).length <= max;\n}\n\n/** `contains` with its bounds (`v` is an array). */\nexport function containsCheck(check: Check, min: number, max: number): Check {\n\treturn (v) => {\n\t\tconst list = v as unknown[];\n\t\tlet n = 0;\n\t\tfor (let i = 0; i < list.length; i++) if (check(list[i]) && ++n > max) return false;\n\t\treturn n >= min;\n\t};\n}\n\n/** `uniqueItems` (`v` is an array). */\nexport function uniqueCheck(v: unknown): boolean {\n\tconst list = v as unknown[];\n\tfor (let i = 1; i < list.length; i++) for (let j = 0; j < i; j++) if (deepEqual(list[i], list[j])) return false;\n\treturn true;\n}\n\n/** `enum`: up to 8 primitives by a scan, more by a Set, objects and arrays by deep equality. */\nexport function enumCheck(values: readonly unknown[]): Check {\n\tconst primitives = values.filter((x) => typeof x !== \"object\" || x === null);\n\tif (primitives.length === values.length && primitives.length <= 8) {\n\t\treturn leaf(8, primitives, (v) => {\n\t\t\tfor (let i = 0; i < primitives.length; i++) if (primitives[i] === v) return true;\n\t\t\treturn false;\n\t\t});\n\t}\n\tconst set = new Set(primitives);\n\tconst objects = values.filter((x) => typeof x === \"object\" && x !== null);\n\treturn (v) => set.has(v) || (typeof v === \"object\" && objects.some((o) => deepEqual(v, o)));\n}\n\n/** `const`. */\nexport function constCheck(value: unknown): Check {\n\tif (typeof value !== \"object\" || value === null) return leaf(7, value, (v) => v === value);\n\treturn (v) => deepEqual(v, value);\n}\n\n/** `anyOf`. */\nexport function anyCheck(checks: readonly Check[]): Check {\n\treturn (v) => {\n\t\tfor (let i = 0; i < checks.length; i++) if (checks[i](v)) return true;\n\t\treturn false;\n\t};\n}\n\n/** `oneOf`. */\nexport function oneCheck(checks: readonly Check[]): Check {\n\treturn (v) => {\n\t\tlet n = 0;\n\t\tfor (let i = 0; i < checks.length; i++) if (checks[i](v) && ++n > 1) return false;\n\t\treturn n === 1;\n\t};\n}\n\n/** `not`. */\nexport function notCheck(check: Check): Check {\n\treturn (v) => !check(v);\n}\n\n/** `if`, `then` and `else`. */\nexport function ifCheck(cond: Check, then: Check, otherwise: Check): Check {\n\treturn (v) => (cond(v) ? then(v) : otherwise(v));\n}\n\n/** A union of objects tagged by a const on `key`: the tag selects the one branch that can match. */\nexport function taggedCheck(key: string, tags: readonly unknown[], checks: readonly Check[]): Check {\n\treturn (v) => {\n\t\tif (!isObject(v)) return false;\n\t\tconst tag = v[key];\n\t\tfor (let i = 0; i < tags.length; i++) if (tags[i] === tag) return checks[i](v);\n\t\treturn false;\n\t};\n}\n\n/**\n * JSON equality, as `const`, `enum` and `uniqueItems` compare: the same primitives, arrays with equal items in order,\n * objects with the same keys and equal values (key order does not matter).\n */\nexport function deepEqual(a: unknown, b: unknown): boolean {\n\tif (a === b) return true;\n\tif (typeof a !== \"object\" || typeof b !== \"object\" || a === null || b === null) return false;\n\tconst array = Array.isArray(a);\n\tif (array !== Array.isArray(b)) return false;\n\tif (array) {\n\t\tconst x = a as unknown[];\n\t\tconst y = b as unknown[];\n\t\tif (x.length !== y.length) return false;\n\t\tfor (let i = 0; i < x.length; i++) if (!deepEqual(x[i], y[i])) return false;\n\t\treturn true;\n\t}\n\tconst x = a as Record<string, unknown>;\n\tconst y = b as Record<string, unknown>;\n\tconst keys = Object.keys(x);\n\tif (keys.length !== Object.keys(y).length) return false;\n\tfor (const k of keys) if (!Object.hasOwn(y, k) || !deepEqual(x[k], y[k])) return false;\n\treturn true;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"coerce.d.ts","sourceRoot":"","sources":["../src/coerce.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK9C,8CAA8C;AAC9C,qBAAa,OAAO;IACnB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAW;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,8GAA8G;IAC9G,OAAO,CAAC,IAAI,CAAK;IACjB;;;OAGG;IACH,OAAO,CAAC,IAAI,CAA6D;IAEzE,YAAY,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAG9C;IAED,oGAAoG;IACpG,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAI9B;IAED,yFAAyF;IACzF,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOnC;IAED,6GAA6G;IAC7G,OAAO,CAAC,OAAO;IA8Bf,0FAA0F;IAC1F,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,iBAAiB;IAqDzB,OAAO,CAAC,OAAO;IAef,6GAA6G;IAC7G,OAAO,CAAC,WAAW;IAwCnB,oGAAoG;IACpG,OAAO,CAAC,WAAW;IASnB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAUpB,gFAAgF;IAChF,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,aAAa;IAgCrB,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,WAAW;CAMnB"}
1
+ {"version":3,"file":"coerce.d.ts","sourceRoot":"","sources":["../src/coerce.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK9C,8CAA8C;AAC9C,qBAAa,OAAO;IACnB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAW;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,8GAA8G;IAC9G,OAAO,CAAC,IAAI,CAAK;IACjB;;;OAGG;IACH,OAAO,CAAC,IAAI,CAA6D;IAEzE,YAAY,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAG9C;IAED,oGAAoG;IACpG,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAI9B;IAED,yFAAyF;IACzF,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOnC;IAED,6GAA6G;IAC7G,OAAO,CAAC,OAAO;IA8Bf,0FAA0F;IAC1F,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,iBAAiB;IAqDzB,OAAO,CAAC,OAAO;IAef,6GAA6G;IAC7G,OAAO,CAAC,WAAW;IA4CnB,oGAAoG;IACpG,OAAO,CAAC,WAAW;IASnB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAUpB,gFAAgF;IAChF,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,aAAa;IAgCrB,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,WAAW;CAMnB"}