@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/CHANGELOG.md +22 -0
- package/README.md +31 -8
- package/dist/builders.d.ts +29 -0
- package/dist/builders.d.ts.map +1 -1
- package/dist/builders.js +28 -0
- package/dist/builders.js.map +1 -1
- package/dist/checks.d.ts +38 -11
- package/dist/checks.d.ts.map +1 -1
- package/dist/checks.js +180 -49
- package/dist/checks.js.map +1 -1
- package/dist/coerce.d.ts.map +1 -1
- package/dist/coerce.js +42 -3
- package/dist/coerce.js.map +1 -1
- package/dist/compiler.d.ts.map +1 -1
- package/dist/compiler.js +33 -14
- package/dist/compiler.js.map +1 -1
- package/dist/explain.d.ts.map +1 -1
- package/dist/explain.js +29 -18
- package/dist/explain.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/resolver.d.ts +3 -2
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +11 -4
- package/dist/resolver.js.map +1 -1
- package/dist/typebox-static.d.ts +9 -1
- package/dist/typebox-static.d.ts.map +1 -1
- package/dist/typebox-static.js +3 -1
- package/dist/typebox-static.js.map +1 -1
- package/dist/validator.d.ts +9 -0
- package/dist/validator.d.ts.map +1 -1
- package/dist/validator.js +12 -2
- package/dist/validator.js.map +1 -1
- package/package.json +2 -2
- /package/{LICENSES → THIRD_PARTY_NOTICES}/typebox-LICENSE +0 -0
package/dist/coerce.js
CHANGED
|
@@ -99,7 +99,7 @@ export class Coercer {
|
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
baseOf(node, base) {
|
|
102
|
-
return isSchemaObject(node) ?
|
|
102
|
+
return isSchemaObject(node) ? this.c.r.baseFor(node, base) : base;
|
|
103
103
|
}
|
|
104
104
|
// ---------------------------------------------------------------------------------------------------------------
|
|
105
105
|
// Pass 1: optional nulls
|
|
@@ -209,6 +209,10 @@ export class Coercer {
|
|
|
209
209
|
return orValue(tryBoolean(value), value);
|
|
210
210
|
case "null":
|
|
211
211
|
return orValue(tryNull(value), value);
|
|
212
|
+
case "bigint":
|
|
213
|
+
return orValue(tryBigInt(value), value);
|
|
214
|
+
case "undefined":
|
|
215
|
+
return orValue(tryUndefined(value), value);
|
|
212
216
|
case "array":
|
|
213
217
|
return this.convertArray(node, b, value);
|
|
214
218
|
case "object":
|
|
@@ -429,7 +433,9 @@ function convertLiteral(literal, value) {
|
|
|
429
433
|
? tryNumber(value)
|
|
430
434
|
: typeof literal === "boolean"
|
|
431
435
|
? tryBoolean(value)
|
|
432
|
-
:
|
|
436
|
+
: typeof literal === "bigint"
|
|
437
|
+
? tryBigInt(value)
|
|
438
|
+
: undefined;
|
|
433
439
|
return result !== undefined && result.value === literal ? result.value : value;
|
|
434
440
|
}
|
|
435
441
|
function tryString(value) {
|
|
@@ -477,6 +483,35 @@ function bigIntOfString(value) {
|
|
|
477
483
|
return BigInt(value);
|
|
478
484
|
return undefined;
|
|
479
485
|
}
|
|
486
|
+
/** TypeBox's TryBigInt: booleans to 1n/0n, numbers truncated, null and undefined to 0n, bigint-like strings. */
|
|
487
|
+
function tryBigInt(value) {
|
|
488
|
+
if (typeof value === "bigint")
|
|
489
|
+
return { value };
|
|
490
|
+
if (typeof value === "boolean")
|
|
491
|
+
return { value: value ? 1n : 0n };
|
|
492
|
+
if (isFiniteNumber(value))
|
|
493
|
+
return { value: BigInt(Math.trunc(value)) };
|
|
494
|
+
if (value === null || value === undefined)
|
|
495
|
+
return { value: 0n };
|
|
496
|
+
if (typeof value !== "string")
|
|
497
|
+
return undefined;
|
|
498
|
+
const big = bigIntOfString(value);
|
|
499
|
+
if (big !== undefined)
|
|
500
|
+
return { value: big };
|
|
501
|
+
const lowercase = value.toLowerCase();
|
|
502
|
+
return lowercase === "false" ? { value: 0n } : lowercase === "true" ? { value: 1n } : undefined;
|
|
503
|
+
}
|
|
504
|
+
/** TypeBox's TryUndefined: 0n, false, 0, null, `"undefined"`, `"null"`, `""` and `"0"` to undefined. */
|
|
505
|
+
function tryUndefined(value) {
|
|
506
|
+
if (value === undefined || value === null || value === 0n || value === false || value === 0)
|
|
507
|
+
return { value: undefined };
|
|
508
|
+
if (typeof value !== "string")
|
|
509
|
+
return undefined;
|
|
510
|
+
const lowercase = value.toLowerCase();
|
|
511
|
+
return lowercase === "undefined" || lowercase === "null" || value === "" || value === "0"
|
|
512
|
+
? { value: undefined }
|
|
513
|
+
: undefined;
|
|
514
|
+
}
|
|
480
515
|
function tryBoolean(value) {
|
|
481
516
|
if (typeof value === "bigint")
|
|
482
517
|
return value === 0n ? { value: false } : value === 1n ? { value: true } : undefined;
|
|
@@ -527,7 +562,7 @@ function typesOf(schema) {
|
|
|
527
562
|
function matchesType(value, type) {
|
|
528
563
|
switch (type) {
|
|
529
564
|
case "number":
|
|
530
|
-
return
|
|
565
|
+
return Number.isFinite(value);
|
|
531
566
|
case "integer":
|
|
532
567
|
return typeof value === "number" && Number.isInteger(value);
|
|
533
568
|
case "boolean":
|
|
@@ -536,6 +571,10 @@ function matchesType(value, type) {
|
|
|
536
571
|
return typeof value === "string";
|
|
537
572
|
case "null":
|
|
538
573
|
return value === null;
|
|
574
|
+
case "bigint":
|
|
575
|
+
return typeof value === "bigint";
|
|
576
|
+
case "undefined":
|
|
577
|
+
return value === undefined;
|
|
539
578
|
case "array":
|
|
540
579
|
return Array.isArray(value);
|
|
541
580
|
case "object":
|
package/dist/coerce.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coerce.js","sourceRoot":"","sources":["../src/coerce.ts"],"names":[],"mappings":"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","sourcesContent":["// Coercion: turns a loosely typed value (a model's tool call arguments, form input, query strings) into the value a\n// schema most likely meant, before it is checked. Only validators compiled with `{ coerce: true }` have it, and they\n// build it on their first coerce() or parse(); the check path never runs it.\n//\n// Three passes, in this order:\n// 1. Optional nulls: a `null` in an optional property whose schema rejects null is dropped, as if omitted.\n// 2. Conversion rules ported from TypeBox 1.3.27's Value.Convert (MIT), keyed on JSON Schema structure (`$ref`, `const`,\n// `enum`, `anyOf`/`oneOf`, `allOf`, `type`, `items`/`prefixItems`, `properties`/`patternProperties`) instead of\n// TypeBox's kind marks: `null` becomes \"null\" for a string, `\"3.5\"` becomes 3 for an integer, a single value becomes\n// a one-item array, and a union takes the first branch whose conversion passes.\n// 3. Primitive coercion by `type` (also type arrays), as in Ajv's `coerceTypes`: what pass 2 left, for example a type\n// array `[\"integer\", \"null\"]`, or `\"\"` for `null`.\n// A value that cannot be coerced is left as it is; the check then reports it.\n//\n// Every pass is copy-on-write: an object or array is copied only when one of its members changes, so an unchanged\n// value comes back as the same reference and the input is never modified. All passes walk the same keywords for\n// members: `properties`, then `patternProperties`, then `additionalProperties` for keys neither names; tuple items by\n// `prefixItems` (or a draft-7 `items` array), the rest by `items`. Draft 7's `additionalItems` is not coerced.\n\nimport type { Compiler } from \"./compiler.ts\";\nimport { isSchemaObject } from \"./resolver.ts\";\nimport { sharedRegex } from \"./shared.ts\";\nimport type { SchemaObject } from \"./types.ts\";\n\n/** Coerces values for one compiled schema. */\nexport class Coercer {\n\tprivate readonly c: Compiler;\n\tprivate readonly schema: unknown;\n\t/**\n\t * The (schema node, value) pairs pass 2 is converting through a re-entry point, as a stack. Conversion can enter\n\t * a node again with the same value only through a `$ref` or by wrapping a single value into an array (also for\n\t * schemas that cycle through shared JS objects): a recursive schema that meets a value no branch accepts would\n\t * convert it without end. A pair already on the stack (primitives by value, objects by reference) leaves the value\n\t * unchanged. Only those two points push, so schemas without references or wraps pay nothing.\n\t */\n\tprivate readonly entered: unknown[] = [];\n\t/** How often a re-entry was cut short in this coerce() call; results computed across one are not memoized. */\n\tprivate cuts = 0;\n\t/**\n\t * Results of `$ref` targets by (node, value) within one coerce() call: a recursive union whose branches all\n\t * convert the same children (and all fail) would convert them once per branch, exponentially in the depth.\n\t */\n\tprivate memo: Map<object, Map<unknown, unknown>> | undefined = undefined;\n\n\tconstructor(compiler: Compiler, schema: unknown) {\n\t\tthis.c = compiler;\n\t\tthis.schema = schema;\n\t}\n\n\t/** `value` coerced: a copy along the changed paths only, or `value` itself when nothing changes. */\n\tcoerce(value: unknown): unknown {\n\t\tconst base = this.c.r.rootBase;\n\t\tconst withoutNulls = this.dropOptionalNulls(value, this.schema, base);\n\t\treturn this.coerceTypes(this.convertOnly(withoutNulls), this.schema, base);\n\t}\n\n\t/** Pass 2 alone, as TypeBox's `Value.Convert` (the TypeBox conformance tests run it). */\n\tconvertOnly(value: unknown): unknown {\n\t\ttry {\n\t\t\treturn this.convert(this.schema, this.c.r.rootBase, value);\n\t\t} finally {\n\t\t\tthis.memo = undefined;\n\t\t\tthis.cuts = 0;\n\t\t}\n\t}\n\n\t/** `node` converted for `value` at a re-entry point: unchanged when that pair is already being converted. */\n\tprivate reenter(node: object, base: string, value: unknown, memoize: boolean): unknown {\n\t\tconst entered = this.entered;\n\t\tfor (let i = 0; i < entered.length; i += 2) {\n\t\t\tif (entered[i] === node && Object.is(entered[i + 1], value)) {\n\t\t\t\tthis.cuts++;\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\tconst memo = memoize ? this.memo?.get(node) : undefined;\n\t\tif (memo?.has(value)) return memo.get(value);\n\t\tconst cuts = this.cuts;\n\t\tentered.push(node, value);\n\t\tlet result: unknown;\n\t\ttry {\n\t\t\tresult = this.convert(node, base, value);\n\t\t} finally {\n\t\t\tentered.length -= 2;\n\t\t}\n\t\tif (memoize && this.cuts === cuts) {\n\t\t\tthis.memo ??= new Map();\n\t\t\tlet values = this.memo.get(node);\n\t\t\tif (values === undefined) {\n\t\t\t\tvalues = new Map();\n\t\t\t\tthis.memo.set(node, values);\n\t\t\t}\n\t\t\tvalues.set(value, result);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/** Whether `value` passes the schema `node`; undefined when `node` cannot be compiled. */\n\tprivate passes(node: unknown, base: string, value: unknown): boolean | undefined {\n\t\ttry {\n\t\t\treturn this.c.check(node, this.baseOf(node, base))(value);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprivate baseOf(node: unknown, base: string): string {\n\t\treturn isSchemaObject(node) ? (this.c.r.baseOf.get(node) ?? base) : base;\n\t}\n\n\t// ---------------------------------------------------------------------------------------------------------------\n\t// Pass 1: optional nulls\n\t// ---------------------------------------------------------------------------------------------------------------\n\n\tprivate dropOptionalNulls(value: unknown, schema: unknown, base: string): unknown {\n\t\tif (!isSchemaObject(schema)) return value;\n\t\tconst b = this.baseOf(schema, base);\n\t\tif (Array.isArray(value)) {\n\t\t\treturn mapItems(value, (item, i) => {\n\t\t\t\tconst itemSchema = itemSchemaAt(schema, i);\n\t\t\t\treturn itemSchema === undefined ? item : this.dropOptionalNulls(item, itemSchema, b);\n\t\t\t});\n\t\t}\n\t\tif (!isPlainObject(value)) return value;\n\t\tconst properties = isSchemaObject(schema.properties) ? schema.properties : {};\n\t\tconst patterns = isSchemaObject(schema.patternProperties)\n\t\t\t? Object.entries(schema.patternProperties).map(([pattern, item]) => [sharedRegex(pattern), item] as const)\n\t\t\t: [];\n\t\tconst additional = isSchemaObject(schema.additionalProperties) ? schema.additionalProperties : undefined;\n\t\tif (patterns.length === 0 && additional === undefined && !isSchemaObject(schema.properties)) return value;\n\t\tconst required = new Set(Array.isArray(schema.required) ? schema.required : []);\n\t\tlet out: Record<string, unknown> | undefined;\n\t\tconst set = (key: string, next: unknown) => {\n\t\t\tif (next === (out ?? value)[key]) return;\n\t\t\tout ??= { ...value };\n\t\t\tout[key] = next;\n\t\t};\n\t\tfor (const [key, property] of Object.entries(properties)) {\n\t\t\tif (!Object.hasOwn(value, key)) continue;\n\t\t\tconst isRef = isSchemaObject(property) && typeof property.$ref === \"string\";\n\t\t\tif (value[key] === null && !required.has(key) && !isRef && this.passes(property, b, null) === false) {\n\t\t\t\tout ??= { ...value };\n\t\t\t\tdelete out[key];\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tset(key, this.dropOptionalNulls(value[key], property, b));\n\t\t}\n\t\t// Values of pattern and additional properties are walked for their own optional nulls; the keys themselves\n\t\t// are not optional properties, so they stay.\n\t\tif (patterns.length > 0 || additional !== undefined) {\n\t\t\tfor (const key of Object.keys(value)) {\n\t\t\t\tlet matched = Object.hasOwn(properties, key);\n\t\t\t\tfor (const [pattern, item] of patterns) {\n\t\t\t\t\tif (!pattern.test(key)) continue;\n\t\t\t\t\tmatched = true;\n\t\t\t\t\tset(key, this.dropOptionalNulls((out ?? value)[key], item, b));\n\t\t\t\t}\n\t\t\t\tif (!matched && additional !== undefined) set(key, this.dropOptionalNulls(value[key], additional, b));\n\t\t\t}\n\t\t}\n\t\treturn out ?? value;\n\t}\n\n\t// ---------------------------------------------------------------------------------------------------------------\n\t// Pass 2: TypeBox's conversion rules\n\t// ---------------------------------------------------------------------------------------------------------------\n\n\tprivate convert(node: unknown, base: string, value: unknown): unknown {\n\t\tif (!isSchemaObject(node)) return value;\n\t\tconst b = this.baseOf(node, base);\n\t\tif (typeof node.$ref === \"string\") {\n\t\t\tlet target: { node: unknown; base: string };\n\t\t\ttry {\n\t\t\t\ttarget = this.c.r.resolve(node.$ref, b);\n\t\t\t} catch {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\treturn isSchemaObject(target.node) ? this.reenter(target.node, target.base, value, true) : value;\n\t\t}\n\t\treturn this.convertNode(node, b, value);\n\t}\n\n\t/** One schema node's conversion: its first keyword among `const`, `enum`, the unions, `allOf` and `type`. */\n\tprivate convertNode(node: SchemaObject, b: string, value: unknown): unknown {\n\t\tif (Object.hasOwn(node, \"const\")) return convertLiteral(node.const, value);\n\t\tif (Array.isArray(node.enum)) return this.convertEnum(node, node.enum, b, value);\n\t\t// A union or intersection node may also declare members (plain JSON Schema; TypeBox's never do): they convert\n\t\t// after the branches.\n\t\tif (Array.isArray(node.anyOf)) return this.convertUnion(node, node.anyOf, b, value);\n\t\tif (Array.isArray(node.oneOf)) return this.convertUnion(node, node.oneOf, b, value);\n\t\tif (Array.isArray(node.allOf)) {\n\t\t\tlet next = value;\n\t\t\tfor (const member of node.allOf) next = this.convert(member, b, next);\n\t\t\treturn this.convertMembers(node, b, next);\n\t\t}\n\t\tswitch (node.type) {\n\t\t\tcase \"string\":\n\t\t\t\treturn orValue(tryString(value), value);\n\t\t\tcase \"number\":\n\t\t\t\treturn orValue(tryNumber(value), value);\n\t\t\tcase \"integer\": {\n\t\t\t\tconst result = tryNumber(value);\n\t\t\t\treturn result === undefined ? value : Math.trunc(result.value);\n\t\t\t}\n\t\t\tcase \"boolean\":\n\t\t\t\treturn orValue(tryBoolean(value), value);\n\t\t\tcase \"null\":\n\t\t\t\treturn orValue(tryNull(value), value);\n\t\t\tcase \"array\":\n\t\t\t\treturn this.convertArray(node, b, value);\n\t\t\tcase \"object\":\n\t\t\t\treturn this.convertObject(node, b, value);\n\t\t\tcase undefined:\n\t\t\t\tif (node.properties !== undefined || node.patternProperties !== undefined) {\n\t\t\t\t\treturn this.convertObject(node, b, value);\n\t\t\t\t}\n\t\t\t\tif (node.items !== undefined || node.prefixItems !== undefined) return this.convertArray(node, b, value);\n\t\t\t\treturn value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t}\n\n\t/** An enum is a union of its values: a member stays, else the first value the input converts to. */\n\tprivate convertEnum(node: SchemaObject, values: readonly unknown[], base: string, value: unknown): unknown {\n\t\tif (values.some((member) => member === value)) return value;\n\t\tfor (const member of values) {\n\t\t\tconst candidate = convertLiteral(member, value);\n\t\t\tif (candidate !== value && this.passes(node, base, candidate) === true) return candidate;\n\t\t}\n\t\treturn value;\n\t}\n\n\t/**\n\t * A value one branch accepts stays; else the first branch's conversion that the whole union accepts. Branches are\n\t * converted in order and only until one is accepted, so a later recursive branch is not entered needlessly. A node\n\t * that also declares members (plain JSON Schema; TypeBox's never do) converts them into each candidate before it is\n\t * checked, so a branch is not discarded for a sibling property that is converted after it.\n\t */\n\tprivate convertUnion(node: SchemaObject, branches: readonly unknown[], base: string, value: unknown): unknown {\n\t\tif (branches.some((branch) => this.passes(branch, base, value) === true))\n\t\t\treturn this.convertMembers(node, base, value);\n\t\tfor (const branch of branches) {\n\t\t\tconst candidate = this.convertMembers(node, base, this.convert(branch, base, value));\n\t\t\tif (this.passes(node, base, candidate) === true) return candidate;\n\t\t}\n\t\treturn this.convertMembers(node, base, value);\n\t}\n\n\t/** The object members of a union or intersection node, when it declares any. */\n\tprivate convertMembers(node: SchemaObject, base: string, value: unknown): unknown {\n\t\tconst declares =\n\t\t\tnode.properties !== undefined ||\n\t\t\tnode.patternProperties !== undefined ||\n\t\t\tnode.additionalProperties !== undefined;\n\t\treturn declares ? this.convertObject(node, base, value) : value;\n\t}\n\n\tprivate convertArray(node: SchemaObject, base: string, value: unknown): unknown {\n\t\tconst prefix = Array.isArray(node.items)\n\t\t\t? node.items\n\t\t\t: Array.isArray(node.prefixItems)\n\t\t\t\t? node.prefixItems\n\t\t\t\t: undefined;\n\t\tif (prefix !== undefined) {\n\t\t\t// A tuple converts its items and never wraps a single value.\n\t\t\tif (!Array.isArray(value)) return value;\n\t\t\tconst rest = Array.isArray(node.items) ? undefined : node.items;\n\t\t\treturn mapItems(value, (item, i) => {\n\t\t\t\tconst schema = i < prefix.length ? prefix[i] : rest;\n\t\t\t\treturn schema === undefined ? item : this.convert(schema, base, item);\n\t\t\t});\n\t\t}\n\t\tif (Array.isArray(value)) {\n\t\t\treturn node.items === undefined ? value : mapItems(value, (item) => this.convert(node.items, base, item));\n\t\t}\n\t\t// The wrapped single value is converted by the item schema with the same value: a re-entry point.\n\t\tconst item = node.items;\n\t\treturn [isSchemaObject(item) ? this.reenter(item, base, value, false) : value];\n\t}\n\n\tprivate convertObject(node: SchemaObject, base: string, value: unknown): unknown {\n\t\tif (!isPlainObject(value)) return value;\n\t\tconst properties = isSchemaObject(node.properties) ? node.properties : {};\n\t\tconst patterns = isSchemaObject(node.patternProperties)\n\t\t\t? Object.entries(node.patternProperties).map(([pattern, schema]) => [sharedRegex(pattern), schema] as const)\n\t\t\t: [];\n\t\tconst additional = isSchemaObject(node.additionalProperties) ? node.additionalProperties : undefined;\n\t\tlet out: Record<string, unknown> | undefined;\n\t\tfor (const key of Object.keys(value)) {\n\t\t\t// An undefined property counts as absent.\n\t\t\tif (value[key] === undefined) continue;\n\t\t\tlet next: unknown = value[key];\n\t\t\tlet matched = Object.hasOwn(properties, key);\n\t\t\tif (matched) next = this.convert(properties[key], base, next);\n\t\t\tfor (const [pattern, schema] of patterns) {\n\t\t\t\tif (!pattern.test(key)) continue;\n\t\t\t\tmatched = true;\n\t\t\t\tnext = this.convert(schema, base, next);\n\t\t\t}\n\t\t\tif (!matched && additional !== undefined) next = this.convert(additional, base, next);\n\t\t\tif (next !== value[key]) {\n\t\t\t\tout ??= { ...value };\n\t\t\t\tout[key] = next;\n\t\t\t}\n\t\t}\n\t\treturn out ?? value;\n\t}\n\n\t// ---------------------------------------------------------------------------------------------------------------\n\t// Pass 3: primitive coercion by type\n\t// ---------------------------------------------------------------------------------------------------------------\n\n\tprivate coerceTypes(value: unknown, schema: unknown, base: string): unknown {\n\t\tif (!isSchemaObject(schema)) return value;\n\t\tconst b = this.baseOf(schema, base);\n\t\tlet next = value;\n\t\tif (Array.isArray(schema.allOf)) for (const member of schema.allOf) next = this.coerceTypes(next, member, b);\n\t\tif (Array.isArray(schema.anyOf)) next = this.coerceUnion(next, schema.anyOf, b);\n\t\tif (Array.isArray(schema.oneOf)) next = this.coerceUnion(next, schema.oneOf, b);\n\t\tconst types = typesOf(schema);\n\t\tconst matchesUnionMember = types.length > 1 && types.some((type) => matchesType(next, type));\n\t\tif (types.length > 0 && !matchesUnionMember) {\n\t\t\tfor (const type of types) {\n\t\t\t\tconst candidate = coercePrimitive(next, type);\n\t\t\t\tif (candidate !== next) {\n\t\t\t\t\tnext = candidate;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (types.includes(\"object\") && isPlainObject(next)) next = this.coerceProperties(next, schema, b);\n\t\tif (types.includes(\"array\") && Array.isArray(next)) next = this.coerceItems(next, schema, b);\n\t\treturn next;\n\t}\n\n\tprivate coerceUnion(value: unknown, branches: readonly unknown[], base: string): unknown {\n\t\tfor (const branch of branches) if (this.passes(branch, base, value) === true) return value;\n\t\tfor (const branch of branches) {\n\t\t\tconst coerced = this.coerceTypes(value, branch, base);\n\t\t\tif (this.passes(branch, base, coerced) === true) return coerced;\n\t\t}\n\t\treturn value;\n\t}\n\n\tprivate coerceProperties(\n\t\tvalue: Record<string, unknown>,\n\t\tschema: SchemaObject,\n\t\tbase: string,\n\t): Record<string, unknown> {\n\t\tconst properties = isSchemaObject(schema.properties) ? schema.properties : {};\n\t\tconst patterns = isSchemaObject(schema.patternProperties)\n\t\t\t? Object.entries(schema.patternProperties).map(([pattern, item]) => [sharedRegex(pattern), item] as const)\n\t\t\t: [];\n\t\tconst additional = isSchemaObject(schema.additionalProperties) ? schema.additionalProperties : undefined;\n\t\tlet out: Record<string, unknown> | undefined;\n\t\tconst set = (key: string, next: unknown) => {\n\t\t\tif (next === (out ?? value)[key]) return;\n\t\t\tout ??= { ...value };\n\t\t\tout[key] = next;\n\t\t};\n\t\tfor (const [key, property] of Object.entries(properties)) {\n\t\t\tif (key in value) set(key, this.coerceTypes(value[key], property, base));\n\t\t}\n\t\tfor (const key of Object.keys(value)) {\n\t\t\tlet matched = Object.hasOwn(properties, key);\n\t\t\tfor (const [pattern, item] of patterns) {\n\t\t\t\tif (!pattern.test(key)) continue;\n\t\t\t\tmatched = true;\n\t\t\t\tset(key, this.coerceTypes((out ?? value)[key], item, base));\n\t\t\t}\n\t\t\tif (!matched && additional !== undefined) set(key, this.coerceTypes(value[key], additional, base));\n\t\t}\n\t\treturn out ?? value;\n\t}\n\n\tprivate coerceItems(value: unknown[], schema: SchemaObject, base: string): unknown[] {\n\t\treturn mapItems(value, (item, i) => {\n\t\t\tconst itemSchema = itemSchemaAt(schema, i);\n\t\t\treturn isSchemaObject(itemSchema) ? this.coerceTypes(item, itemSchema, base) : item;\n\t\t});\n\t}\n}\n\n/**\n * The schema of an array's item at `index`: a tuple's (`prefixItems`, or a draft-7 `items` array) for its prefix,\n * `items` after `prefixItems`, or `items` for every item. Undefined when nothing applies.\n */\nfunction itemSchemaAt(schema: SchemaObject, index: number): unknown {\n\tif (Array.isArray(schema.items)) return schema.items[index];\n\tif (Array.isArray(schema.prefixItems) && index < schema.prefixItems.length) return schema.prefixItems[index];\n\treturn schema.items;\n}\n\n/** `items` mapped by `map`; the same array when every item maps to itself. */\nfunction mapItems(items: unknown[], map: (item: unknown, index: number) => unknown): unknown[] {\n\tlet out: unknown[] | undefined;\n\tfor (let i = 0; i < items.length; i++) {\n\t\tconst next = map(items[i], i);\n\t\tif (next === items[i]) continue;\n\t\tout ??= items.slice();\n\t\tout[i] = next;\n\t}\n\treturn out ?? items;\n}\n\n// -------------------------------------------------------------------------------------------------------------------\n// TypeBox's conversions of one value (value/convert/try in TypeBox 1.3.27): a result, or undefined when there is none\n// -------------------------------------------------------------------------------------------------------------------\n\ntype Converted<T> = { readonly value: T } | undefined;\n\nfunction orValue(result: Converted<unknown>, value: unknown): unknown {\n\treturn result === undefined ? value : result.value;\n}\n\n/** A literal (`const`, an enum value) taken from a value of another type that converts to exactly it. */\nfunction convertLiteral(literal: unknown, value: unknown): unknown {\n\tif (literal === value) return value;\n\tconst result =\n\t\ttypeof literal === \"string\"\n\t\t\t? tryString(value)\n\t\t\t: typeof literal === \"number\"\n\t\t\t\t? tryNumber(value)\n\t\t\t\t: typeof literal === \"boolean\"\n\t\t\t\t\t? tryBoolean(value)\n\t\t\t\t\t: undefined;\n\treturn result !== undefined && result.value === literal ? result.value : value;\n}\n\nfunction tryString(value: unknown): Converted<string> {\n\tif (typeof value === \"bigint\" || typeof value === \"boolean\" || isFiniteNumber(value))\n\t\treturn { value: String(value) };\n\tif (value === null) return { value: \"null\" };\n\tif (typeof value === \"string\") return { value };\n\tif (value === undefined) return { value: \"\" };\n\treturn undefined;\n}\n\nconst MAX_BIGINT = BigInt(Number.MAX_SAFE_INTEGER);\nconst MIN_BIGINT = BigInt(Number.MIN_SAFE_INTEGER);\n\nfunction tryNumber(value: unknown): Converted<number> {\n\tif (typeof value === \"bigint\")\n\t\treturn value <= MAX_BIGINT && value >= MIN_BIGINT ? { value: Number(value) } : undefined;\n\tif (typeof value === \"boolean\") return { value: value ? 1 : 0 };\n\tif (isFiniteNumber(value)) return { value };\n\tif (value === null || value === undefined) return { value: 0 };\n\tif (typeof value !== \"string\") return undefined;\n\tconst coerced = +value;\n\tif (Number.isFinite(coerced)) return { value: coerced };\n\tconst lowercase = value.toLowerCase();\n\tif (lowercase === \"false\") return { value: 0 };\n\tif (lowercase === \"true\") return { value: 1 };\n\tconst big = bigIntOfString(value);\n\treturn big !== undefined && big <= MAX_BIGINT && big >= MIN_BIGINT ? { value: Number(big) } : undefined;\n}\n\n/** TypeBox's TryBigInt of a string: `12n`, `12.5` (truncated) or `12`; true and false are not reached from tryNumber. */\nfunction bigIntOfString(value: string): bigint | undefined {\n\tif (/^-?(0|[1-9]\\d*)n$/.test(value)) return BigInt(value.slice(0, -1));\n\tif (/^-?(0|[1-9]\\d*)\\.\\d+$/.test(value)) return BigInt(value.split(\".\")[0]);\n\tif (/^-?(0|[1-9]\\d*)$/.test(value)) return BigInt(value);\n\treturn undefined;\n}\n\nfunction tryBoolean(value: unknown): Converted<boolean> {\n\tif (typeof value === \"bigint\") return value === 0n ? { value: false } : value === 1n ? { value: true } : undefined;\n\tif (typeof value === \"boolean\") return { value };\n\tif (isFiniteNumber(value)) return value === 0 ? { value: false } : value === 1 ? { value: true } : undefined;\n\tif (value === null || value === undefined) return { value: false };\n\tif (typeof value !== \"string\") return undefined;\n\tconst lowercase = value.toLowerCase();\n\tif (lowercase === \"false\" || value === \"0\") return { value: false };\n\tif (lowercase === \"true\" || value === \"1\") return { value: true };\n\treturn undefined;\n}\n\nfunction tryNull(value: unknown): Converted<null> {\n\tif (typeof value === \"bigint\") return value === 0n ? { value: null } : undefined;\n\tif (typeof value === \"boolean\") return value === false ? { value: null } : undefined;\n\tif (isFiniteNumber(value)) return value === 0 ? { value: null } : undefined;\n\tif (value === null || value === undefined) return { value: null };\n\tif (typeof value !== \"string\") return undefined;\n\tconst lowercase = value.toLowerCase();\n\treturn lowercase === \"undefined\" || lowercase === \"null\" || value === \"\" || value === \"0\"\n\t\t? { value: null }\n\t\t: undefined;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value);\n}\n\n// -------------------------------------------------------------------------------------------------------------------\n// Primitive coercion by type (pass 3)\n// -------------------------------------------------------------------------------------------------------------------\n\nfunction typesOf(schema: SchemaObject): string[] {\n\tif (typeof schema.type === \"string\") return [schema.type];\n\tif (Array.isArray(schema.type)) return schema.type.filter((type): type is string => typeof type === \"string\");\n\treturn [];\n}\n\nfunction matchesType(value: unknown, type: string): boolean {\n\tswitch (type) {\n\t\tcase \"number\":\n\t\t\treturn typeof value === \"number\";\n\t\tcase \"integer\":\n\t\t\treturn typeof value === \"number\" && Number.isInteger(value);\n\t\tcase \"boolean\":\n\t\t\treturn typeof value === \"boolean\";\n\t\tcase \"string\":\n\t\t\treturn typeof value === \"string\";\n\t\tcase \"null\":\n\t\t\treturn value === null;\n\t\tcase \"array\":\n\t\t\treturn Array.isArray(value);\n\t\tcase \"object\":\n\t\t\treturn isPlainObject(value);\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nfunction coercePrimitive(value: unknown, type: string): unknown {\n\tswitch (type) {\n\t\tcase \"number\":\n\t\tcase \"integer\": {\n\t\t\tif (value === null) return 0;\n\t\t\tif (typeof value === \"string\" && value.trim() !== \"\") {\n\t\t\t\tconst parsed = Number(value);\n\t\t\t\tif (type === \"number\" ? Number.isFinite(parsed) : Number.isInteger(parsed)) return parsed;\n\t\t\t}\n\t\t\tif (typeof value === \"boolean\") return value ? 1 : 0;\n\t\t\treturn value;\n\t\t}\n\t\tcase \"boolean\":\n\t\t\tif (value === null) return false;\n\t\t\tif (value === \"true\" || value === 1) return true;\n\t\t\tif (value === \"false\" || value === 0) return false;\n\t\t\treturn value;\n\t\tcase \"string\":\n\t\t\tif (value === null) return \"\";\n\t\t\tif (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n\t\t\treturn value;\n\t\tcase \"null\":\n\t\t\treturn value === \"\" || value === 0 || value === false ? null : value;\n\t\tdefault:\n\t\t\treturn value;\n\t}\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"coerce.js","sourceRoot":"","sources":["../src/coerce.ts"],"names":[],"mappings":"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","sourcesContent":["// Coercion: turns a loosely typed value (a model's tool call arguments, form input, query strings) into the value a\n// schema most likely meant, before it is checked. Only validators compiled with `{ coerce: true }` have it, and they\n// build it on their first coerce() or parse(); the check path never runs it.\n//\n// Three passes, in this order:\n// 1. Optional nulls: a `null` in an optional property whose schema rejects null is dropped, as if omitted.\n// 2. Conversion rules ported from TypeBox 1.3.27's Value.Convert (MIT), keyed on JSON Schema structure (`$ref`, `const`,\n// `enum`, `anyOf`/`oneOf`, `allOf`, `type`, `items`/`prefixItems`, `properties`/`patternProperties`) instead of\n// TypeBox's kind marks: `null` becomes \"null\" for a string, `\"3.5\"` becomes 3 for an integer, a single value becomes\n// a one-item array, and a union takes the first branch whose conversion passes.\n// 3. Primitive coercion by `type` (also type arrays), as in Ajv's `coerceTypes`: what pass 2 left, for example a type\n// array `[\"integer\", \"null\"]`, or `\"\"` for `null`.\n// A value that cannot be coerced is left as it is; the check then reports it.\n//\n// Every pass is copy-on-write: an object or array is copied only when one of its members changes, so an unchanged\n// value comes back as the same reference and the input is never modified. All passes walk the same keywords for\n// members: `properties`, then `patternProperties`, then `additionalProperties` for keys neither names; tuple items by\n// `prefixItems` (or a draft-7 `items` array), the rest by `items`. Draft 7's `additionalItems` is not coerced.\n\nimport type { Compiler } from \"./compiler.ts\";\nimport { isSchemaObject } from \"./resolver.ts\";\nimport { sharedRegex } from \"./shared.ts\";\nimport type { SchemaObject } from \"./types.ts\";\n\n/** Coerces values for one compiled schema. */\nexport class Coercer {\n\tprivate readonly c: Compiler;\n\tprivate readonly schema: unknown;\n\t/**\n\t * The (schema node, value) pairs pass 2 is converting through a re-entry point, as a stack. Conversion can enter\n\t * a node again with the same value only through a `$ref` or by wrapping a single value into an array (also for\n\t * schemas that cycle through shared JS objects): a recursive schema that meets a value no branch accepts would\n\t * convert it without end. A pair already on the stack (primitives by value, objects by reference) leaves the value\n\t * unchanged. Only those two points push, so schemas without references or wraps pay nothing.\n\t */\n\tprivate readonly entered: unknown[] = [];\n\t/** How often a re-entry was cut short in this coerce() call; results computed across one are not memoized. */\n\tprivate cuts = 0;\n\t/**\n\t * Results of `$ref` targets by (node, value) within one coerce() call: a recursive union whose branches all\n\t * convert the same children (and all fail) would convert them once per branch, exponentially in the depth.\n\t */\n\tprivate memo: Map<object, Map<unknown, unknown>> | undefined = undefined;\n\n\tconstructor(compiler: Compiler, schema: unknown) {\n\t\tthis.c = compiler;\n\t\tthis.schema = schema;\n\t}\n\n\t/** `value` coerced: a copy along the changed paths only, or `value` itself when nothing changes. */\n\tcoerce(value: unknown): unknown {\n\t\tconst base = this.c.r.rootBase;\n\t\tconst withoutNulls = this.dropOptionalNulls(value, this.schema, base);\n\t\treturn this.coerceTypes(this.convertOnly(withoutNulls), this.schema, base);\n\t}\n\n\t/** Pass 2 alone, as TypeBox's `Value.Convert` (the TypeBox conformance tests run it). */\n\tconvertOnly(value: unknown): unknown {\n\t\ttry {\n\t\t\treturn this.convert(this.schema, this.c.r.rootBase, value);\n\t\t} finally {\n\t\t\tthis.memo = undefined;\n\t\t\tthis.cuts = 0;\n\t\t}\n\t}\n\n\t/** `node` converted for `value` at a re-entry point: unchanged when that pair is already being converted. */\n\tprivate reenter(node: object, base: string, value: unknown, memoize: boolean): unknown {\n\t\tconst entered = this.entered;\n\t\tfor (let i = 0; i < entered.length; i += 2) {\n\t\t\tif (entered[i] === node && Object.is(entered[i + 1], value)) {\n\t\t\t\tthis.cuts++;\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\tconst memo = memoize ? this.memo?.get(node) : undefined;\n\t\tif (memo?.has(value)) return memo.get(value);\n\t\tconst cuts = this.cuts;\n\t\tentered.push(node, value);\n\t\tlet result: unknown;\n\t\ttry {\n\t\t\tresult = this.convert(node, base, value);\n\t\t} finally {\n\t\t\tentered.length -= 2;\n\t\t}\n\t\tif (memoize && this.cuts === cuts) {\n\t\t\tthis.memo ??= new Map();\n\t\t\tlet values = this.memo.get(node);\n\t\t\tif (values === undefined) {\n\t\t\t\tvalues = new Map();\n\t\t\t\tthis.memo.set(node, values);\n\t\t\t}\n\t\t\tvalues.set(value, result);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/** Whether `value` passes the schema `node`; undefined when `node` cannot be compiled. */\n\tprivate passes(node: unknown, base: string, value: unknown): boolean | undefined {\n\t\ttry {\n\t\t\treturn this.c.check(node, this.baseOf(node, base))(value);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprivate baseOf(node: unknown, base: string): string {\n\t\treturn isSchemaObject(node) ? this.c.r.baseFor(node, base) : base;\n\t}\n\n\t// ---------------------------------------------------------------------------------------------------------------\n\t// Pass 1: optional nulls\n\t// ---------------------------------------------------------------------------------------------------------------\n\n\tprivate dropOptionalNulls(value: unknown, schema: unknown, base: string): unknown {\n\t\tif (!isSchemaObject(schema)) return value;\n\t\tconst b = this.baseOf(schema, base);\n\t\tif (Array.isArray(value)) {\n\t\t\treturn mapItems(value, (item, i) => {\n\t\t\t\tconst itemSchema = itemSchemaAt(schema, i);\n\t\t\t\treturn itemSchema === undefined ? item : this.dropOptionalNulls(item, itemSchema, b);\n\t\t\t});\n\t\t}\n\t\tif (!isPlainObject(value)) return value;\n\t\tconst properties = isSchemaObject(schema.properties) ? schema.properties : {};\n\t\tconst patterns = isSchemaObject(schema.patternProperties)\n\t\t\t? Object.entries(schema.patternProperties).map(([pattern, item]) => [sharedRegex(pattern), item] as const)\n\t\t\t: [];\n\t\tconst additional = isSchemaObject(schema.additionalProperties) ? schema.additionalProperties : undefined;\n\t\tif (patterns.length === 0 && additional === undefined && !isSchemaObject(schema.properties)) return value;\n\t\tconst required = new Set(Array.isArray(schema.required) ? schema.required : []);\n\t\tlet out: Record<string, unknown> | undefined;\n\t\tconst set = (key: string, next: unknown) => {\n\t\t\tif (next === (out ?? value)[key]) return;\n\t\t\tout ??= { ...value };\n\t\t\tout[key] = next;\n\t\t};\n\t\tfor (const [key, property] of Object.entries(properties)) {\n\t\t\tif (!Object.hasOwn(value, key)) continue;\n\t\t\tconst isRef = isSchemaObject(property) && typeof property.$ref === \"string\";\n\t\t\tif (value[key] === null && !required.has(key) && !isRef && this.passes(property, b, null) === false) {\n\t\t\t\tout ??= { ...value };\n\t\t\t\tdelete out[key];\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tset(key, this.dropOptionalNulls(value[key], property, b));\n\t\t}\n\t\t// Values of pattern and additional properties are walked for their own optional nulls; the keys themselves\n\t\t// are not optional properties, so they stay.\n\t\tif (patterns.length > 0 || additional !== undefined) {\n\t\t\tfor (const key of Object.keys(value)) {\n\t\t\t\tlet matched = Object.hasOwn(properties, key);\n\t\t\t\tfor (const [pattern, item] of patterns) {\n\t\t\t\t\tif (!pattern.test(key)) continue;\n\t\t\t\t\tmatched = true;\n\t\t\t\t\tset(key, this.dropOptionalNulls((out ?? value)[key], item, b));\n\t\t\t\t}\n\t\t\t\tif (!matched && additional !== undefined) set(key, this.dropOptionalNulls(value[key], additional, b));\n\t\t\t}\n\t\t}\n\t\treturn out ?? value;\n\t}\n\n\t// ---------------------------------------------------------------------------------------------------------------\n\t// Pass 2: TypeBox's conversion rules\n\t// ---------------------------------------------------------------------------------------------------------------\n\n\tprivate convert(node: unknown, base: string, value: unknown): unknown {\n\t\tif (!isSchemaObject(node)) return value;\n\t\tconst b = this.baseOf(node, base);\n\t\tif (typeof node.$ref === \"string\") {\n\t\t\tlet target: { node: unknown; base: string };\n\t\t\ttry {\n\t\t\t\ttarget = this.c.r.resolve(node.$ref, b);\n\t\t\t} catch {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\treturn isSchemaObject(target.node) ? this.reenter(target.node, target.base, value, true) : value;\n\t\t}\n\t\treturn this.convertNode(node, b, value);\n\t}\n\n\t/** One schema node's conversion: its first keyword among `const`, `enum`, the unions, `allOf` and `type`. */\n\tprivate convertNode(node: SchemaObject, b: string, value: unknown): unknown {\n\t\tif (Object.hasOwn(node, \"const\")) return convertLiteral(node.const, value);\n\t\tif (Array.isArray(node.enum)) return this.convertEnum(node, node.enum, b, value);\n\t\t// A union or intersection node may also declare members (plain JSON Schema; TypeBox's never do): they convert\n\t\t// after the branches.\n\t\tif (Array.isArray(node.anyOf)) return this.convertUnion(node, node.anyOf, b, value);\n\t\tif (Array.isArray(node.oneOf)) return this.convertUnion(node, node.oneOf, b, value);\n\t\tif (Array.isArray(node.allOf)) {\n\t\t\tlet next = value;\n\t\t\tfor (const member of node.allOf) next = this.convert(member, b, next);\n\t\t\treturn this.convertMembers(node, b, next);\n\t\t}\n\t\tswitch (node.type) {\n\t\t\tcase \"string\":\n\t\t\t\treturn orValue(tryString(value), value);\n\t\t\tcase \"number\":\n\t\t\t\treturn orValue(tryNumber(value), value);\n\t\t\tcase \"integer\": {\n\t\t\t\tconst result = tryNumber(value);\n\t\t\t\treturn result === undefined ? value : Math.trunc(result.value);\n\t\t\t}\n\t\t\tcase \"boolean\":\n\t\t\t\treturn orValue(tryBoolean(value), value);\n\t\t\tcase \"null\":\n\t\t\t\treturn orValue(tryNull(value), value);\n\t\t\tcase \"bigint\":\n\t\t\t\treturn orValue(tryBigInt(value), value);\n\t\t\tcase \"undefined\":\n\t\t\t\treturn orValue(tryUndefined(value), value);\n\t\t\tcase \"array\":\n\t\t\t\treturn this.convertArray(node, b, value);\n\t\t\tcase \"object\":\n\t\t\t\treturn this.convertObject(node, b, value);\n\t\t\tcase undefined:\n\t\t\t\tif (node.properties !== undefined || node.patternProperties !== undefined) {\n\t\t\t\t\treturn this.convertObject(node, b, value);\n\t\t\t\t}\n\t\t\t\tif (node.items !== undefined || node.prefixItems !== undefined) return this.convertArray(node, b, value);\n\t\t\t\treturn value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t}\n\n\t/** An enum is a union of its values: a member stays, else the first value the input converts to. */\n\tprivate convertEnum(node: SchemaObject, values: readonly unknown[], base: string, value: unknown): unknown {\n\t\tif (values.some((member) => member === value)) return value;\n\t\tfor (const member of values) {\n\t\t\tconst candidate = convertLiteral(member, value);\n\t\t\tif (candidate !== value && this.passes(node, base, candidate) === true) return candidate;\n\t\t}\n\t\treturn value;\n\t}\n\n\t/**\n\t * A value one branch accepts stays; else the first branch's conversion that the whole union accepts. Branches are\n\t * converted in order and only until one is accepted, so a later recursive branch is not entered needlessly. A node\n\t * that also declares members (plain JSON Schema; TypeBox's never do) converts them into each candidate before it is\n\t * checked, so a branch is not discarded for a sibling property that is converted after it.\n\t */\n\tprivate convertUnion(node: SchemaObject, branches: readonly unknown[], base: string, value: unknown): unknown {\n\t\tif (branches.some((branch) => this.passes(branch, base, value) === true))\n\t\t\treturn this.convertMembers(node, base, value);\n\t\tfor (const branch of branches) {\n\t\t\tconst candidate = this.convertMembers(node, base, this.convert(branch, base, value));\n\t\t\tif (this.passes(node, base, candidate) === true) return candidate;\n\t\t}\n\t\treturn this.convertMembers(node, base, value);\n\t}\n\n\t/** The object members of a union or intersection node, when it declares any. */\n\tprivate convertMembers(node: SchemaObject, base: string, value: unknown): unknown {\n\t\tconst declares =\n\t\t\tnode.properties !== undefined ||\n\t\t\tnode.patternProperties !== undefined ||\n\t\t\tnode.additionalProperties !== undefined;\n\t\treturn declares ? this.convertObject(node, base, value) : value;\n\t}\n\n\tprivate convertArray(node: SchemaObject, base: string, value: unknown): unknown {\n\t\tconst prefix = Array.isArray(node.items)\n\t\t\t? node.items\n\t\t\t: Array.isArray(node.prefixItems)\n\t\t\t\t? node.prefixItems\n\t\t\t\t: undefined;\n\t\tif (prefix !== undefined) {\n\t\t\t// A tuple converts its items and never wraps a single value.\n\t\t\tif (!Array.isArray(value)) return value;\n\t\t\tconst rest = Array.isArray(node.items) ? undefined : node.items;\n\t\t\treturn mapItems(value, (item, i) => {\n\t\t\t\tconst schema = i < prefix.length ? prefix[i] : rest;\n\t\t\t\treturn schema === undefined ? item : this.convert(schema, base, item);\n\t\t\t});\n\t\t}\n\t\tif (Array.isArray(value)) {\n\t\t\treturn node.items === undefined ? value : mapItems(value, (item) => this.convert(node.items, base, item));\n\t\t}\n\t\t// The wrapped single value is converted by the item schema with the same value: a re-entry point.\n\t\tconst item = node.items;\n\t\treturn [isSchemaObject(item) ? this.reenter(item, base, value, false) : value];\n\t}\n\n\tprivate convertObject(node: SchemaObject, base: string, value: unknown): unknown {\n\t\tif (!isPlainObject(value)) return value;\n\t\tconst properties = isSchemaObject(node.properties) ? node.properties : {};\n\t\tconst patterns = isSchemaObject(node.patternProperties)\n\t\t\t? Object.entries(node.patternProperties).map(([pattern, schema]) => [sharedRegex(pattern), schema] as const)\n\t\t\t: [];\n\t\tconst additional = isSchemaObject(node.additionalProperties) ? node.additionalProperties : undefined;\n\t\tlet out: Record<string, unknown> | undefined;\n\t\tfor (const key of Object.keys(value)) {\n\t\t\t// An undefined property counts as absent.\n\t\t\tif (value[key] === undefined) continue;\n\t\t\tlet next: unknown = value[key];\n\t\t\tlet matched = Object.hasOwn(properties, key);\n\t\t\tif (matched) next = this.convert(properties[key], base, next);\n\t\t\tfor (const [pattern, schema] of patterns) {\n\t\t\t\tif (!pattern.test(key)) continue;\n\t\t\t\tmatched = true;\n\t\t\t\tnext = this.convert(schema, base, next);\n\t\t\t}\n\t\t\tif (!matched && additional !== undefined) next = this.convert(additional, base, next);\n\t\t\tif (next !== value[key]) {\n\t\t\t\tout ??= { ...value };\n\t\t\t\tout[key] = next;\n\t\t\t}\n\t\t}\n\t\treturn out ?? value;\n\t}\n\n\t// ---------------------------------------------------------------------------------------------------------------\n\t// Pass 3: primitive coercion by type\n\t// ---------------------------------------------------------------------------------------------------------------\n\n\tprivate coerceTypes(value: unknown, schema: unknown, base: string): unknown {\n\t\tif (!isSchemaObject(schema)) return value;\n\t\tconst b = this.baseOf(schema, base);\n\t\tlet next = value;\n\t\tif (Array.isArray(schema.allOf)) for (const member of schema.allOf) next = this.coerceTypes(next, member, b);\n\t\tif (Array.isArray(schema.anyOf)) next = this.coerceUnion(next, schema.anyOf, b);\n\t\tif (Array.isArray(schema.oneOf)) next = this.coerceUnion(next, schema.oneOf, b);\n\t\tconst types = typesOf(schema);\n\t\tconst matchesUnionMember = types.length > 1 && types.some((type) => matchesType(next, type));\n\t\tif (types.length > 0 && !matchesUnionMember) {\n\t\t\tfor (const type of types) {\n\t\t\t\tconst candidate = coercePrimitive(next, type);\n\t\t\t\tif (candidate !== next) {\n\t\t\t\t\tnext = candidate;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (types.includes(\"object\") && isPlainObject(next)) next = this.coerceProperties(next, schema, b);\n\t\tif (types.includes(\"array\") && Array.isArray(next)) next = this.coerceItems(next, schema, b);\n\t\treturn next;\n\t}\n\n\tprivate coerceUnion(value: unknown, branches: readonly unknown[], base: string): unknown {\n\t\tfor (const branch of branches) if (this.passes(branch, base, value) === true) return value;\n\t\tfor (const branch of branches) {\n\t\t\tconst coerced = this.coerceTypes(value, branch, base);\n\t\t\tif (this.passes(branch, base, coerced) === true) return coerced;\n\t\t}\n\t\treturn value;\n\t}\n\n\tprivate coerceProperties(\n\t\tvalue: Record<string, unknown>,\n\t\tschema: SchemaObject,\n\t\tbase: string,\n\t): Record<string, unknown> {\n\t\tconst properties = isSchemaObject(schema.properties) ? schema.properties : {};\n\t\tconst patterns = isSchemaObject(schema.patternProperties)\n\t\t\t? Object.entries(schema.patternProperties).map(([pattern, item]) => [sharedRegex(pattern), item] as const)\n\t\t\t: [];\n\t\tconst additional = isSchemaObject(schema.additionalProperties) ? schema.additionalProperties : undefined;\n\t\tlet out: Record<string, unknown> | undefined;\n\t\tconst set = (key: string, next: unknown) => {\n\t\t\tif (next === (out ?? value)[key]) return;\n\t\t\tout ??= { ...value };\n\t\t\tout[key] = next;\n\t\t};\n\t\tfor (const [key, property] of Object.entries(properties)) {\n\t\t\tif (key in value) set(key, this.coerceTypes(value[key], property, base));\n\t\t}\n\t\tfor (const key of Object.keys(value)) {\n\t\t\tlet matched = Object.hasOwn(properties, key);\n\t\t\tfor (const [pattern, item] of patterns) {\n\t\t\t\tif (!pattern.test(key)) continue;\n\t\t\t\tmatched = true;\n\t\t\t\tset(key, this.coerceTypes((out ?? value)[key], item, base));\n\t\t\t}\n\t\t\tif (!matched && additional !== undefined) set(key, this.coerceTypes(value[key], additional, base));\n\t\t}\n\t\treturn out ?? value;\n\t}\n\n\tprivate coerceItems(value: unknown[], schema: SchemaObject, base: string): unknown[] {\n\t\treturn mapItems(value, (item, i) => {\n\t\t\tconst itemSchema = itemSchemaAt(schema, i);\n\t\t\treturn isSchemaObject(itemSchema) ? this.coerceTypes(item, itemSchema, base) : item;\n\t\t});\n\t}\n}\n\n/**\n * The schema of an array's item at `index`: a tuple's (`prefixItems`, or a draft-7 `items` array) for its prefix,\n * `items` after `prefixItems`, or `items` for every item. Undefined when nothing applies.\n */\nfunction itemSchemaAt(schema: SchemaObject, index: number): unknown {\n\tif (Array.isArray(schema.items)) return schema.items[index];\n\tif (Array.isArray(schema.prefixItems) && index < schema.prefixItems.length) return schema.prefixItems[index];\n\treturn schema.items;\n}\n\n/** `items` mapped by `map`; the same array when every item maps to itself. */\nfunction mapItems(items: unknown[], map: (item: unknown, index: number) => unknown): unknown[] {\n\tlet out: unknown[] | undefined;\n\tfor (let i = 0; i < items.length; i++) {\n\t\tconst next = map(items[i], i);\n\t\tif (next === items[i]) continue;\n\t\tout ??= items.slice();\n\t\tout[i] = next;\n\t}\n\treturn out ?? items;\n}\n\n// -------------------------------------------------------------------------------------------------------------------\n// TypeBox's conversions of one value (value/convert/try in TypeBox 1.3.27): a result, or undefined when there is none\n// -------------------------------------------------------------------------------------------------------------------\n\ntype Converted<T> = { readonly value: T } | undefined;\n\nfunction orValue(result: Converted<unknown>, value: unknown): unknown {\n\treturn result === undefined ? value : result.value;\n}\n\n/** A literal (`const`, an enum value) taken from a value of another type that converts to exactly it. */\nfunction convertLiteral(literal: unknown, value: unknown): unknown {\n\tif (literal === value) return value;\n\tconst result =\n\t\ttypeof literal === \"string\"\n\t\t\t? tryString(value)\n\t\t\t: typeof literal === \"number\"\n\t\t\t\t? tryNumber(value)\n\t\t\t\t: typeof literal === \"boolean\"\n\t\t\t\t\t? tryBoolean(value)\n\t\t\t\t\t: typeof literal === \"bigint\"\n\t\t\t\t\t\t? tryBigInt(value)\n\t\t\t\t\t\t: undefined;\n\treturn result !== undefined && result.value === literal ? result.value : value;\n}\n\nfunction tryString(value: unknown): Converted<string> {\n\tif (typeof value === \"bigint\" || typeof value === \"boolean\" || isFiniteNumber(value))\n\t\treturn { value: String(value) };\n\tif (value === null) return { value: \"null\" };\n\tif (typeof value === \"string\") return { value };\n\tif (value === undefined) return { value: \"\" };\n\treturn undefined;\n}\n\nconst MAX_BIGINT = BigInt(Number.MAX_SAFE_INTEGER);\nconst MIN_BIGINT = BigInt(Number.MIN_SAFE_INTEGER);\n\nfunction tryNumber(value: unknown): Converted<number> {\n\tif (typeof value === \"bigint\")\n\t\treturn value <= MAX_BIGINT && value >= MIN_BIGINT ? { value: Number(value) } : undefined;\n\tif (typeof value === \"boolean\") return { value: value ? 1 : 0 };\n\tif (isFiniteNumber(value)) return { value };\n\tif (value === null || value === undefined) return { value: 0 };\n\tif (typeof value !== \"string\") return undefined;\n\tconst coerced = +value;\n\tif (Number.isFinite(coerced)) return { value: coerced };\n\tconst lowercase = value.toLowerCase();\n\tif (lowercase === \"false\") return { value: 0 };\n\tif (lowercase === \"true\") return { value: 1 };\n\tconst big = bigIntOfString(value);\n\treturn big !== undefined && big <= MAX_BIGINT && big >= MIN_BIGINT ? { value: Number(big) } : undefined;\n}\n\n/** TypeBox's TryBigInt of a string: `12n`, `12.5` (truncated) or `12`; true and false are not reached from tryNumber. */\nfunction bigIntOfString(value: string): bigint | undefined {\n\tif (/^-?(0|[1-9]\\d*)n$/.test(value)) return BigInt(value.slice(0, -1));\n\tif (/^-?(0|[1-9]\\d*)\\.\\d+$/.test(value)) return BigInt(value.split(\".\")[0]);\n\tif (/^-?(0|[1-9]\\d*)$/.test(value)) return BigInt(value);\n\treturn undefined;\n}\n\n/** TypeBox's TryBigInt: booleans to 1n/0n, numbers truncated, null and undefined to 0n, bigint-like strings. */\nfunction tryBigInt(value: unknown): Converted<bigint> {\n\tif (typeof value === \"bigint\") return { value };\n\tif (typeof value === \"boolean\") return { value: value ? 1n : 0n };\n\tif (isFiniteNumber(value)) return { value: BigInt(Math.trunc(value)) };\n\tif (value === null || value === undefined) return { value: 0n };\n\tif (typeof value !== \"string\") return undefined;\n\tconst big = bigIntOfString(value);\n\tif (big !== undefined) return { value: big };\n\tconst lowercase = value.toLowerCase();\n\treturn lowercase === \"false\" ? { value: 0n } : lowercase === \"true\" ? { value: 1n } : undefined;\n}\n\n/** TypeBox's TryUndefined: 0n, false, 0, null, `\"undefined\"`, `\"null\"`, `\"\"` and `\"0\"` to undefined. */\nfunction tryUndefined(value: unknown): Converted<undefined> {\n\tif (value === undefined || value === null || value === 0n || value === false || value === 0)\n\t\treturn { value: undefined };\n\tif (typeof value !== \"string\") return undefined;\n\tconst lowercase = value.toLowerCase();\n\treturn lowercase === \"undefined\" || lowercase === \"null\" || value === \"\" || value === \"0\"\n\t\t? { value: undefined }\n\t\t: undefined;\n}\n\nfunction tryBoolean(value: unknown): Converted<boolean> {\n\tif (typeof value === \"bigint\") return value === 0n ? { value: false } : value === 1n ? { value: true } : undefined;\n\tif (typeof value === \"boolean\") return { value };\n\tif (isFiniteNumber(value)) return value === 0 ? { value: false } : value === 1 ? { value: true } : undefined;\n\tif (value === null || value === undefined) return { value: false };\n\tif (typeof value !== \"string\") return undefined;\n\tconst lowercase = value.toLowerCase();\n\tif (lowercase === \"false\" || value === \"0\") return { value: false };\n\tif (lowercase === \"true\" || value === \"1\") return { value: true };\n\treturn undefined;\n}\n\nfunction tryNull(value: unknown): Converted<null> {\n\tif (typeof value === \"bigint\") return value === 0n ? { value: null } : undefined;\n\tif (typeof value === \"boolean\") return value === false ? { value: null } : undefined;\n\tif (isFiniteNumber(value)) return value === 0 ? { value: null } : undefined;\n\tif (value === null || value === undefined) return { value: null };\n\tif (typeof value !== \"string\") return undefined;\n\tconst lowercase = value.toLowerCase();\n\treturn lowercase === \"undefined\" || lowercase === \"null\" || value === \"\" || value === \"0\"\n\t\t? { value: null }\n\t\t: undefined;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value);\n}\n\n// -------------------------------------------------------------------------------------------------------------------\n// Primitive coercion by type (pass 3)\n// -------------------------------------------------------------------------------------------------------------------\n\nfunction typesOf(schema: SchemaObject): string[] {\n\tif (typeof schema.type === \"string\") return [schema.type];\n\tif (Array.isArray(schema.type)) return schema.type.filter((type): type is string => typeof type === \"string\");\n\treturn [];\n}\n\nfunction matchesType(value: unknown, type: string): boolean {\n\tswitch (type) {\n\t\tcase \"number\":\n\t\t\treturn Number.isFinite(value);\n\t\tcase \"integer\":\n\t\t\treturn typeof value === \"number\" && Number.isInteger(value);\n\t\tcase \"boolean\":\n\t\t\treturn typeof value === \"boolean\";\n\t\tcase \"string\":\n\t\t\treturn typeof value === \"string\";\n\t\tcase \"null\":\n\t\t\treturn value === null;\n\t\tcase \"bigint\":\n\t\t\treturn typeof value === \"bigint\";\n\t\tcase \"undefined\":\n\t\t\treturn value === undefined;\n\t\tcase \"array\":\n\t\t\treturn Array.isArray(value);\n\t\tcase \"object\":\n\t\t\treturn isPlainObject(value);\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nfunction coercePrimitive(value: unknown, type: string): unknown {\n\tswitch (type) {\n\t\tcase \"number\":\n\t\tcase \"integer\": {\n\t\t\tif (value === null) return 0;\n\t\t\tif (typeof value === \"string\" && value.trim() !== \"\") {\n\t\t\t\tconst parsed = Number(value);\n\t\t\t\tif (type === \"number\" ? Number.isFinite(parsed) : Number.isInteger(parsed)) return parsed;\n\t\t\t}\n\t\t\tif (typeof value === \"boolean\") return value ? 1 : 0;\n\t\t\treturn value;\n\t\t}\n\t\tcase \"boolean\":\n\t\t\tif (value === null) return false;\n\t\t\tif (value === \"true\" || value === 1) return true;\n\t\t\tif (value === \"false\" || value === 0) return false;\n\t\t\treturn value;\n\t\tcase \"string\":\n\t\t\tif (value === null) return \"\";\n\t\t\tif (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n\t\t\treturn value;\n\t\tcase \"null\":\n\t\t\treturn value === \"\" || value === 0 || value === false ? null : value;\n\t\tdefault:\n\t\t\treturn value;\n\t}\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"]}
|
package/dist/compiler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAIA,OAAO,EAGN,KAAK,eAAe,EAcpB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAIA,OAAO,EAGN,KAAK,eAAe,EAcpB,MAAM,kBAAkB,CAAC;AA6C1B,OAAO,EAA8B,QAAQ,EAAc,MAAM,eAAe,CAAC;AAEjF,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAE/F,mHAAmH;AACnH,eAAO,MAAM,OAAO,eAAoB,CAAC;AAEzC,gGAAgG;AAChG,qBAAa,QAAQ;IACpB,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,GAAG,SAAS,CAAC;IACpE,yFAAyF;IACzF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA4B;IAClD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsC;IAEtE,YAAY,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAOxE;IAED,oCAAoC;IACpC,IAAI,IAAI,KAAK,CAEZ;IAED,0GAA0G;IAC1G,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAexC;IAED,OAAO,CAAC,KAAK;IASb;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAUhB,yDAAyD;IACzD,OAAO,CAAC,KAAK;IA+Bb,OAAO,CAAC,OAAO;IAkBf,OAAO,CAAC,KAAK;IASb,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,UAAU;IAgBlB,qHAAqH;IACrH,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,aAAa;IAcrB,sHAAsH;IACtH,OAAO,CAAC,MAAM;IAwBd,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,WAAW;IA6BnB,OAAO,CAAC,UAAU;IAiClB,OAAO,CAAC,UAAU;IAuClB,mHAAmH;IACnH,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAavD;IAED,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,eAAe;IA0DvB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,oBAAoB;CAe5B;AAED,0CAA0C;AAC1C,eAAO,MAAM,gBAAgB,aAiB3B,CAAC"}
|
package/dist/compiler.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// is classified once per schema, and the common shapes (closed objects, arrays of one item schema, tagged unions,
|
|
3
3
|
// leaf schemas) get one specialized closure each.
|
|
4
4
|
import { ANNOTATING_FALSE, ANNOTATING_TRUE, annotateAll, annotateAny, annotateArray, annotateDependent, annotateIf, annotateObject, ignoreAnnotations, indirectAnnotating, isolateAnnotations, scopedAnnotating, unevaluatedItems, unevaluatedProperties, withFreshAnnotations, } from "./annotations.js";
|
|
5
|
-
import { ALWAYS, and, anyCheck, bytesCheck, constCheck, containsCheck, declaredObject, dependentRequiredCheck, dependentSchemasCheck, enumCheck, GUARD_LOOSE, GUARD_NONE, GUARD_STRICT, guardArray, guardObject, INHERITED, IS_ARRAY, IS_OBJECT, ifCheck, indirect, itemsCheck,
|
|
5
|
+
import { ALWAYS, and, anyCheck, bytesCheck, constCheck, containsCheck, declaredObject, dependentRequiredCheck, dependentSchemasCheck, enumCheck, GUARD_LOOSE, GUARD_NONE, GUARD_STRICT, guardArray, guardObject, INHERITED, IS_ARRAY, IS_OBJECT, ifCheck, indirect, itemsCheck, leafOf, lengthCheck, listCheck, maskedAnyCheck, NEVER, notCheck, numberCheck, oneCheck, openObject, propertyCountCheck, propertyNamesCheck, REQUIRED, scopedCheck, stringCheck, TYPE_CHECKS, taggedCheck, typeCheck, typeMask, uniqueCheck, } from "./checks.js";
|
|
6
6
|
import { documentOf, isSchemaObject, Resolver, resolveUri } from "./resolver.js";
|
|
7
7
|
import { sharedRegex } from "./shared.js";
|
|
8
8
|
/** Thrown when a compile without dynamic scope tracking meets a bookended `$dynamicRef`: compile again with it. */
|
|
@@ -90,8 +90,9 @@ export class Compiler {
|
|
|
90
90
|
const string = this.stringGroup(node, single === "string");
|
|
91
91
|
if (string !== undefined)
|
|
92
92
|
parts.push(string);
|
|
93
|
-
const numeric = single === "number" || single === "integer";
|
|
94
|
-
const
|
|
93
|
+
const numeric = single === "number" || single === "integer" || single === "bigint";
|
|
94
|
+
const mode = single === "number" ? 1 : single === "integer" ? 2 : single === "bigint" ? 3 : 0;
|
|
95
|
+
const number = this.numberGroup(node, mode);
|
|
95
96
|
if (number !== undefined)
|
|
96
97
|
parts.push(number);
|
|
97
98
|
const object = this.objectGroup(node, base, single === "object");
|
|
@@ -140,7 +141,7 @@ export class Compiler {
|
|
|
140
141
|
const checks = () => branches.map((s) => this.check(s, base));
|
|
141
142
|
return (constUnion(branches, exactlyOne) ??
|
|
142
143
|
this.tagged(branches, base) ??
|
|
143
|
-
(exactlyOne ? oneCheck(checks()) :
|
|
144
|
+
(exactlyOne ? oneCheck(checks()) : anyOf(checks())));
|
|
144
145
|
}
|
|
145
146
|
ref(ref, base) {
|
|
146
147
|
const target = this.r.resolve(ref, base);
|
|
@@ -227,11 +228,11 @@ export class Compiler {
|
|
|
227
228
|
return stringCheck(strict, min, max, re, format);
|
|
228
229
|
}
|
|
229
230
|
numberGroup(node, mode) {
|
|
230
|
-
const min =
|
|
231
|
-
const max =
|
|
232
|
-
const xmin =
|
|
233
|
-
const xmax =
|
|
234
|
-
const multipleOf =
|
|
231
|
+
const min = bound(node.minimum);
|
|
232
|
+
const max = bound(node.maximum);
|
|
233
|
+
const xmin = bound(node.exclusiveMinimum);
|
|
234
|
+
const xmax = bound(node.exclusiveMaximum);
|
|
235
|
+
const multipleOf = bound(node.multipleOf);
|
|
235
236
|
if ([min, max, xmin, xmax, multipleOf].every((x) => x === undefined))
|
|
236
237
|
return undefined;
|
|
237
238
|
const inf = Number.POSITIVE_INFINITY;
|
|
@@ -285,14 +286,14 @@ export class Compiler {
|
|
|
285
286
|
(additional === undefined || additional === true)) {
|
|
286
287
|
return undefined;
|
|
287
288
|
}
|
|
288
|
-
// One array per object: key, check, flags (leaf code, required, key also names an
|
|
289
|
+
// One array per object: key, check (or a leaf's argument), flags (leaf code, required, key also names an
|
|
290
|
+
// Object.prototype member).
|
|
289
291
|
const entries = [];
|
|
290
292
|
for (const k of keys) {
|
|
291
293
|
const check = this.check(properties[k], base);
|
|
292
|
-
const
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
entries.push(k, check, flags);
|
|
294
|
+
const leaf = leafOf(check);
|
|
295
|
+
const flags = (leaf?.[0] ?? 0) | (required.includes(k) ? REQUIRED : 0) | (k in Object.prototype ? INHERITED : 0);
|
|
296
|
+
entries.push(k, leaf === undefined ? check : leaf[1], flags);
|
|
296
297
|
}
|
|
297
298
|
const extraRequired = required.filter((k) => !Object.hasOwn(properties, k));
|
|
298
299
|
const pats = patternKeys.map((p) => [sharedRegex(p), this.check(patterns[p], base)]);
|
|
@@ -513,6 +514,20 @@ function constUnion(branches, exactlyOne) {
|
|
|
513
514
|
}
|
|
514
515
|
return enumCheck(values);
|
|
515
516
|
}
|
|
517
|
+
/** `anyOf`: its bare-type branches (`nullable` gives one) run as one type test. */
|
|
518
|
+
function anyOf(checks) {
|
|
519
|
+
const types = [];
|
|
520
|
+
const rest = [];
|
|
521
|
+
for (const check of checks) {
|
|
522
|
+
const type = BARE_TYPES.get(check);
|
|
523
|
+
if (type === undefined)
|
|
524
|
+
rest.push(check);
|
|
525
|
+
else
|
|
526
|
+
types.push(type);
|
|
527
|
+
}
|
|
528
|
+
return types.length === 0 ? anyCheck(rest) : maskedAnyCheck(typeMask(types), rest);
|
|
529
|
+
}
|
|
530
|
+
const BARE_TYPES = new Map([...TYPE_CHECKS].map(([type, check]) => [check, type]));
|
|
516
531
|
// The tag of a tagged-union branch: a primitive const on a required property of an object schema.
|
|
517
532
|
function tagOf(branch, key) {
|
|
518
533
|
const properties = branch.properties;
|
|
@@ -523,6 +538,10 @@ function tagOf(branch, key) {
|
|
|
523
538
|
return undefined;
|
|
524
539
|
return typeof tag.const === "object" && tag.const !== null ? undefined : tag.const;
|
|
525
540
|
}
|
|
541
|
+
/** A number keyword's value: a number, or a bigint (TypeBox's `Type.BigInt` bounds). */
|
|
542
|
+
function bound(value) {
|
|
543
|
+
return typeof value === "number" || typeof value === "bigint" ? value : undefined;
|
|
544
|
+
}
|
|
526
545
|
function number(value) {
|
|
527
546
|
return typeof value === "number" ? value : undefined;
|
|
528
547
|
}
|