@huggingface/transformers-structured-output 4.3.0
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/LICENSE +202 -0
- package/README.md +56 -0
- package/dist/index.cjs +2425 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.js +2402 -0
- package/dist/index.js.map +7 -0
- package/package.json +65 -0
- package/src/StructuredOutputProcessor.ts +103 -0
- package/src/engine/constraint.ts +331 -0
- package/src/engine/index.ts +2 -0
- package/src/engine/json.ts +1853 -0
- package/src/engine/regex.ts +419 -0
- package/src/engine/tokenizer.ts +205 -0
- package/src/engine/types.ts +12 -0
- package/src/index.ts +2 -0
- package/src/utils/mask.ts +30 -0
- package/types/StructuredOutputProcessor.d.ts +22 -0
- package/types/StructuredOutputProcessor.d.ts.map +1 -0
- package/types/engine/constraint.d.ts +30 -0
- package/types/engine/constraint.d.ts.map +1 -0
- package/types/engine/index.d.ts +3 -0
- package/types/engine/index.d.ts.map +1 -0
- package/types/engine/json.d.ts +70 -0
- package/types/engine/json.d.ts.map +1 -0
- package/types/engine/regex.d.ts +3 -0
- package/types/engine/regex.d.ts.map +1 -0
- package/types/engine/tokenizer.d.ts +8 -0
- package/types/engine/tokenizer.d.ts.map +1 -0
- package/types/engine/types.d.ts +16 -0
- package/types/engine/types.d.ts.map +1 -0
- package/types/index.d.ts +3 -0
- package/types/index.d.ts.map +1 -0
- package/types/utils/mask.d.ts +3 -0
- package/types/utils/mask.d.ts.map +1 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.ts", "../src/StructuredOutputProcessor.ts", "../src/engine/json.ts", "../src/engine/regex.ts", "../src/engine/tokenizer.ts", "../src/engine/constraint.ts", "../src/utils/mask.ts"],
|
|
4
|
+
"sourcesContent": ["export { StructuredOutputProcessor } from './StructuredOutputProcessor';\nexport type { ResponseFormat } from './StructuredOutputProcessor';\n", "import { LogitsProcessor, LogitsProcessorList, type Tensor } from '@huggingface/transformers';\n\nimport {\n createTokenConstraint,\n prepareTokenizer,\n type JSONSchema,\n type TokenConstraint,\n type TokenizerSource,\n} from './engine';\nimport { applyMask } from './utils/mask';\n\nexport type ResponseFormat =\n | { type: 'json_object' }\n | { type: 'json_schema'; json_schema: JSONSchema }\n | { type: 'regex'; regex: string };\n\ntype GenerationState = {\n constraint: TokenConstraint;\n processedInputLength?: number;\n mask?: Uint32Array;\n};\n\nconst WHITESPACE_REPETITION_PENALTY = 1.2;\nconst MAX_CONSECUTIVE_WHITESPACE_TOKENS = 4;\n\nexport class StructuredOutputProcessor extends LogitsProcessorList {\n /**\n * Precomputes the tokenizer-derived data structures used by every\n * constraint. The first processor per tokenizer otherwise pays this cost\n * (hundreds of milliseconds for large vocabularies) in its constructor;\n * call this once after loading the model to pay it early instead.\n */\n static warmup(tokenizer: TokenizerSource): void {\n prepareTokenizer(tokenizer);\n }\n\n constructor(tokenizer: TokenizerSource, responseFormat: ResponseFormat) {\n super();\n const state: GenerationState = {\n constraint: createTokenConstraint(tokenizer, responseFormat),\n };\n this.push(new ConstraintLogitsProcessor(state));\n }\n}\n\nclass ConstraintLogitsProcessor extends LogitsProcessor {\n constructor(private readonly state: GenerationState) {\n super();\n }\n\n _call(inputIds: bigint[][], logits: Tensor) {\n assertSingleSequence(inputIds.length);\n const input = inputIds[0];\n const start = this.state.processedInputLength ?? input.length;\n for (let i = start; i < input.length; ++i) {\n if (this.state.constraint.commit(Number(input[i]))) {\n throw new Error(\n 'StructuredOutputProcessor observed the tokenizer EOS token after generation continued. Ensure the model generation config uses the same eos_token_id as the tokenizer.',\n );\n }\n }\n this.state.processedInputLength = input.length;\n const logitsVocabSize = logits.dims.at(-1);\n if (logitsVocabSize === undefined || !Number.isInteger(logitsVocabSize) || logitsVocabSize <= 0) {\n throw new Error('StructuredOutputProcessor requires logits with a vocabulary dimension.');\n }\n const words = Math.ceil(logitsVocabSize / 32);\n if (this.state.mask?.length !== words) this.state.mask = new Uint32Array(words);\n if (!this.state.constraint.fillMask(this.state.mask)) {\n throw new Error('The constraint reached a dead end before producing a valid output.');\n }\n applyMask(logits, this.state.mask, this.state.constraint.vocabSize);\n const repeatedWhitespace = this.state.constraint.repeatedWhitespace();\n if (repeatedWhitespace !== undefined) {\n discourageRepeatedWhitespace(logits, repeatedWhitespace.tokenIds, repeatedWhitespace.count);\n }\n return logits;\n }\n}\n\nfunction assertSingleSequence(batchSize: number): void {\n if (batchSize !== 1) {\n throw new Error(`StructuredOutputProcessor currently supports batch size 1; received ${batchSize}.`);\n }\n}\n\nfunction discourageRepeatedWhitespace(logits: Tensor, tokenIds: readonly number[], count: number): void {\n const data = logits.data as Float32Array | Float64Array | number[];\n const stride = logits.dims.at(-1)!;\n const penalty = WHITESPACE_REPETITION_PENALTY ** count;\n for (let offset = 0; offset < data.length; offset += stride) {\n for (const tokenId of tokenIds) {\n const index = offset + tokenId;\n if (count >= MAX_CONSECUTIVE_WHITESPACE_TOKENS) {\n data[index] = -Infinity;\n } else if (data[index] < 0) {\n data[index] *= penalty;\n } else {\n data[index] /= penalty;\n }\n }\n }\n}\n", "import type { ConstraintState, JSONSchema } from './types';\n\ntype Schema = boolean | Record<string, unknown>;\ntype Kind = 'null' | 'boolean' | 'number' | 'integer' | 'string' | 'array' | 'object';\ntype JsonNode =\n | { kind: 'null'; value: null }\n | { kind: 'boolean'; value: boolean }\n | { kind: 'number'; value: number; raw: string }\n | { kind: 'string'; value: string }\n | { kind: 'array'; value: unknown[]; items: JsonNode[] }\n | { kind: 'object'; value: Record<string, unknown>; entries: Array<{ key: string; node: JsonNode }> };\ntype Guidance = {\n itemSeparator: string;\n keySeparator: string;\n itemBytes: Uint8Array;\n keyBytes: Uint8Array;\n whitespaceFlexible: boolean;\n};\ntype Mode =\n | 'value'\n | 'array-value'\n | 'object-key'\n | 'colon'\n | 'item-separator'\n | 'after-value'\n | 'string'\n | 'key-string'\n | 'escape'\n | 'key-escape'\n | 'unicode'\n | 'key-unicode'\n | 'number'\n | 'literal'\n | 'done'\n | 'dead';\n\ntype ObjectFrame = {\n kind: 'object';\n schema: Schema;\n seen: ReadonlySet<string>;\n entries: ReadonlyArray<{ key: string; node: JsonNode }>;\n key?: string;\n childSchema?: Schema;\n};\n\ntype ArrayFrame = {\n kind: 'array';\n schema: Schema;\n length: number;\n items: readonly JsonNode[];\n};\n\ntype Frame = ObjectFrame | ArrayFrame;\n\ntype JsonState = {\n mode: Mode;\n schema: Schema;\n stack: readonly Frame[];\n bytes?: readonly number[];\n // Code points started in the current string and UTF-8 continuation bytes\n // still expected (-1 once the byte sequence can no longer decode). Both are\n // pure functions of `bytes`, maintained incrementally so that length checks\n // do not have to re-decode the prefix on every byte.\n stringLength?: number;\n stringPending?: number;\n text?: string;\n literal?: string;\n literalValue?: null | boolean;\n index?: number;\n highSurrogate?: number;\n guidance: Guidance;\n};\n\nconst DEFAULT_GUIDANCE: Guidance = {\n itemSeparator: ',',\n keySeparator: ':',\n itemBytes: Uint8Array.of(0x2c),\n keyBytes: Uint8Array.of(0x3a),\n whitespaceFlexible: true,\n};\nconst DEAD: JsonState = { mode: 'dead', schema: false, stack: [], guidance: DEFAULT_GUIDANCE };\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder('utf-8', { fatal: true });\nconst schemaIds = new WeakMap<object, number>();\nconst propertyKeyBytes = new WeakMap<object, ReadonlyArray<{ key: string; bytes: Uint8Array }> | null>();\nconst finiteStringCache = new WeakMap<object, ReadonlyArray<{ value: string; bytes: Uint8Array }> | null>();\nlet nextSchemaId = 0;\nconst SIMPLE_ESCAPES: Record<number, string> = {\n 0x22: '\"',\n 0x2f: '/',\n 0x5c: '\\\\',\n 0x62: '\\b',\n 0x66: '\\f',\n 0x6e: '\\n',\n 0x72: '\\r',\n 0x74: '\\t',\n};\nconst ASSERTED_FORMATS = new Set([\n 'date',\n 'time',\n 'date-time',\n 'duration',\n 'email',\n 'hostname',\n 'ipv4',\n 'ipv6',\n 'uuid',\n 'uri',\n 'uri-reference',\n 'regex',\n 'json-pointer',\n 'relative-json-pointer',\n]);\n\nexport function compileJsonSchema(schema: JSONSchema, stringKeyClamp = Infinity): ConstraintState<JsonState> {\n registerSchemaContext(schema, schema);\n checkSchema(schema, '$');\n checkReferences(schema);\n const guidance = guidanceFrom(schema);\n return {\n initial: { mode: 'value', schema, stack: [], guidance },\n transition,\n viable: (state) => state !== DEAD,\n accepting: isAccepting,\n stringCapacity,\n maskKey: (state) => stateMaskKey(state, stringKeyClamp),\n };\n}\n\nfunction stringCapacity(state: JsonState): number | undefined {\n if (state.mode !== 'string' || state.highSurrogate !== undefined || finiteStringValues(state.schema) !== null)\n return undefined;\n if ((state.stringPending ?? 0) !== 0) return undefined;\n const maximum = directStringMaxLength(state.schema);\n if (maximum === undefined) return Infinity;\n return maximum - (state.stringLength ?? 0);\n}\n\nfunction stateMaskKey(state: JsonState, stringKeyClamp: number): string | undefined {\n if (state === DEAD) return undefined;\n const frames = state.stack.map((frame) => {\n if (frame.kind === 'object') {\n const entries = [...frame.entries]\n .sort((left, right) => left.key.localeCompare(right.key))\n .map((entry) => `${JSON.stringify(entry.key)}:${nodeKey(entry.node)}`)\n .join(',');\n return `o${schemaId(frame.schema)}[${entries}]${frame.key === undefined ? '' : `:${JSON.stringify(frame.key)}:${schemaId(frame.childSchema!)}`}`;\n }\n return `a${schemaId(frame.schema)}[${frame.items.map(nodeKey).join(',')}]`;\n });\n const key = [\n state.mode,\n schemaId(state.schema),\n state.bytes === undefined ? '' : (stringLengthKey(state, stringKeyClamp) ?? bytesKey(state.bytes)),\n state.text ?? '',\n state.literal ?? '',\n state.index ?? '',\n state.highSurrogate ?? '',\n ...frames,\n ].join('|');\n return key.length <= 2048 ? key : undefined;\n}\n\n// While inside a plain length-constrained string, the token mask depends only on\n// the remaining capacity (clamped to the longest token) and whether minLength is\n// already satisfied \u2014 not on the actual bytes typed so far. Keying on that makes\n// every string-content step after the first share one cached mask. This is only\n// sound when nothing can inspect the string's content: neither the string schema\n// itself (pattern/format/const/enum or composition keywords) nor any enclosing\n// frame (cross-value keywords such as uniqueItems, contains, or conditionals).\nconst CONTENT_DEPENDENT_STRING_KEYWORDS = [\n 'pattern',\n 'format',\n 'const',\n 'enum',\n '$ref',\n 'allOf',\n 'anyOf',\n 'oneOf',\n 'not',\n 'if',\n];\nconst CONTENT_DEPENDENT_FRAME_KEYWORDS = [\n '$ref',\n 'allOf',\n 'anyOf',\n 'oneOf',\n 'not',\n 'if',\n 'uniqueItems',\n 'contains',\n 'dependentSchemas',\n 'dependencies',\n];\nconst contentIndependentStrings = new WeakMap<object, boolean>();\nconst contentNeutralFrames = new WeakMap<object, boolean>();\n\nfunction isContentIndependent(schema: Schema, keywords: readonly string[], cache: WeakMap<object, boolean>): boolean {\n if (schema === true) return true;\n if (schema === false) return false;\n let result = cache.get(schema);\n if (result === undefined) {\n result = keywords.every((keyword) => schema[keyword] === undefined);\n cache.set(schema, result);\n }\n return result;\n}\n\nfunction stringLengthKey(state: JsonState, clamp: number): string | undefined {\n if (state.mode !== 'string' || state.highSurrogate !== undefined) return undefined;\n if (!isContentIndependent(state.schema, CONTENT_DEPENDENT_STRING_KEYWORDS, contentIndependentStrings)) {\n return undefined;\n }\n for (const frame of state.stack) {\n if (!isContentIndependent(frame.schema, CONTENT_DEPENDENT_FRAME_KEYWORDS, contentNeutralFrames)) {\n return undefined;\n }\n }\n if ((state.stringPending ?? 0) !== 0) return undefined;\n const length = state.stringLength ?? 0;\n const maximum = directStringMaxLength(state.schema);\n const remaining = Math.min(maximum === undefined ? Infinity : maximum - length, clamp);\n const minimum =\n state.schema !== true && state.schema !== false && typeof state.schema.minLength === 'number'\n ? state.schema.minLength\n : 0;\n return `#${remaining === Infinity ? 'inf' : remaining}:${length >= minimum ? '' : length}`;\n}\n\nfunction nodeKey(node: JsonNode): string {\n if (node.kind === 'number') return `n${node.raw}`;\n if (node.kind === 'string') return `s${JSON.stringify(node.value)}`;\n if (node.kind === 'boolean') return node.value ? 't' : 'f';\n if (node.kind === 'null') return 'z';\n if (node.kind === 'array') return `[${node.items.map(nodeKey).join(',')}]`;\n return `{${[...node.entries]\n .sort((left, right) => left.key.localeCompare(right.key))\n .map((entry) => `${JSON.stringify(entry.key)}:${nodeKey(entry.node)}`)\n .join(',')}}`;\n}\n\nfunction bytesKey(bytes: readonly number[]): string {\n let result = '';\n for (const byte of bytes) result += byte.toString(16).padStart(2, '0');\n return result;\n}\n\nfunction schemaId(schema: Schema): string | number {\n if (schema === true) return 't';\n if (schema === false) return 'f';\n let id = schemaIds.get(schema);\n if (id === undefined) {\n id = nextSchemaId++;\n schemaIds.set(schema, id);\n }\n return id;\n}\n\nfunction transition(state: JsonState, byte: number): JsonState {\n if (state === DEAD) return DEAD;\n if (\n state.guidance.whitespaceFlexible &&\n isWhitespace(byte) &&\n allowsWhitespace(state.mode) &&\n !separatorExpects(state, byte)\n )\n return state;\n\n switch (state.mode) {\n case 'value':\n case 'array-value':\n if (state.mode === 'array-value' && byte === 0x5d) return closeArray(state);\n if (state.mode === 'array-value' && exceedsMaxItems(state.stack.at(-1) as ArrayFrame)) return DEAD;\n return startValue(state, byte);\n case 'object-key':\n if (byte === 0x7d) return closeObject(state);\n return byte === 0x22\n ? { ...state, mode: 'key-string', bytes: [], stringLength: 0, stringPending: 0 }\n : DEAD;\n case 'colon':\n return separatorByte(state, byte, state.guidance.keyBytes, 'value');\n case 'item-separator':\n return separatorByte(\n state,\n byte,\n state.guidance.itemBytes,\n state.stack.at(-1)?.kind === 'object' ? 'object-key' : 'array-value',\n );\n case 'after-value':\n return afterValue(state, byte);\n case 'string':\n case 'key-string':\n return stringByte(state, byte);\n case 'escape':\n case 'key-escape':\n return escapeByte(state, byte);\n case 'unicode':\n case 'key-unicode':\n return unicodeByte(state, byte);\n case 'number':\n return numberByte(state, byte);\n case 'literal':\n return literalByte(state, byte);\n case 'done':\n case 'dead':\n return DEAD;\n }\n}\n\nfunction startValue(state: JsonState, byte: number): JsonState {\n const kind = byteKind(byte);\n if (kind === undefined) return DEAD;\n const schema = selectSchema(state.schema, kind);\n if (schema === null) return DEAD;\n\n if (byte === 0x22) return { ...state, mode: 'string', schema, bytes: [], stringLength: 0, stringPending: 0 };\n if (byte === 0x7b) {\n return {\n mode: 'object-key',\n schema,\n stack: [...state.stack, { kind: 'object', schema, seen: new Set<string>(), entries: [] }],\n guidance: state.guidance,\n };\n }\n if (byte === 0x5b) {\n return {\n mode: 'array-value',\n schema: itemSchema(schema, 0),\n stack: [\n ...state.stack,\n {\n kind: 'array',\n schema,\n length: 0,\n items: [],\n },\n ],\n guidance: state.guidance,\n };\n }\n if (byte === 0x74) return { ...state, mode: 'literal', schema, literal: 'true', literalValue: true, index: 1 };\n if (byte === 0x66) return { ...state, mode: 'literal', schema, literal: 'false', literalValue: false, index: 1 };\n if (byte === 0x6e) return { ...state, mode: 'literal', schema, literal: 'null', literalValue: null, index: 1 };\n const text = String.fromCharCode(byte);\n if (!integerPrefixViable(schema, text)) return DEAD;\n return { ...state, mode: 'number', schema, text };\n}\n\nfunction isAccepting(state: JsonState): boolean {\n if (state.mode === 'done') return true;\n return (\n state.mode === 'number' &&\n state.stack.length === 0 &&\n numberComplete(state.text!) &&\n validateNode(state.schema, { kind: 'number', value: Number(state.text), raw: state.text! })\n );\n}\n\nfunction stringByte(state: JsonState, byte: number): JsonState {\n const isKey = state.mode === 'key-string';\n if (state.highSurrogate !== undefined && byte !== 0x5c) return DEAD;\n if (byte === 0x22) {\n const value = decodeString(state.bytes ?? []);\n if (value === null) return DEAD;\n if (isKey) return completeKey(state, value);\n return completeValue(state, { kind: 'string', value });\n }\n if (byte === 0x5c) {\n if (isKey ? !keyEscapeAllowed(state) : !stringEscapeAllowed(state)) return DEAD;\n return { ...state, mode: isKey ? 'key-escape' : 'escape' };\n }\n if (byte < 0x20) return DEAD;\n let length = state.stringLength ?? 0;\n let pending = state.stringPending ?? 0;\n if ((byte & 0xc0) === 0x80) {\n pending = pending > 0 ? pending - 1 : -1;\n } else {\n pending = pending === 0 ? utf8Continuations(byte) : -1;\n length++;\n }\n const bytes = [...(state.bytes ?? []), byte];\n if (isKey && !keyPrefixAllowed(state, bytes)) return DEAD;\n if (!isKey && !stringContentAllowed(state.schema, bytes, length)) return DEAD;\n return { ...state, bytes, stringLength: length, stringPending: pending };\n}\n\nfunction utf8Continuations(lead: number): number {\n if (lead < 0x80) return 0;\n if (lead < 0xc2) return -1;\n if (lead < 0xe0) return 1;\n if (lead < 0xf0) return 2;\n if (lead < 0xf5) return 3;\n return -1;\n}\n\nfunction escapeByte(state: JsonState, byte: number): JsonState {\n const isKey = state.mode === 'key-escape';\n if (state.highSurrogate !== undefined && byte !== 0x75) return DEAD;\n if (byte === 0x75) {\n return { ...state, mode: isKey ? 'key-unicode' : 'unicode', text: '' };\n }\n const escaped = SIMPLE_ESCAPES[byte];\n if (escaped === undefined) return DEAD;\n const bytes = [...(state.bytes ?? []), ...encoder.encode(escaped)];\n const length = (state.stringLength ?? 0) + 1;\n const pending = (state.stringPending ?? 0) === 0 ? 0 : -1;\n if (isKey && !keyPrefixAllowed(state, bytes)) return DEAD;\n if (!isKey && !stringContentAllowed(state.schema, bytes, length)) return DEAD;\n return { ...state, mode: isKey ? 'key-string' : 'string', bytes, stringLength: length, stringPending: pending };\n}\n\nfunction unicodeByte(state: JsonState, byte: number): JsonState {\n if (!isHex(byte)) return DEAD;\n const text = `${state.text ?? ''}${String.fromCharCode(byte)}`;\n if (text.length < 4) {\n if (state.mode === 'key-unicode' && !unicodeKeyPrefixAllowed(state, text)) return DEAD;\n return { ...state, text };\n }\n const codeUnit = Number.parseInt(text, 16);\n const isKey = state.mode === 'key-unicode';\n const mode = isKey ? 'key-string' : 'string';\n if (codeUnit >= 0xd800 && codeUnit <= 0xdbff) {\n if (state.highSurrogate !== undefined) return DEAD;\n return { ...state, mode, text: undefined, highSurrogate: codeUnit };\n }\n let value: string;\n if (codeUnit >= 0xdc00 && codeUnit <= 0xdfff) {\n if (state.highSurrogate === undefined) return DEAD;\n const codePoint = 0x10000 + ((state.highSurrogate - 0xd800) << 10) + (codeUnit - 0xdc00);\n value = String.fromCodePoint(codePoint);\n } else {\n if (state.highSurrogate !== undefined) return DEAD;\n value = String.fromCharCode(codeUnit);\n }\n const bytes = [...(state.bytes ?? []), ...encoder.encode(value)];\n const length = (state.stringLength ?? 0) + 1;\n const pending = (state.stringPending ?? 0) === 0 ? 0 : -1;\n if (isKey && !keyPrefixAllowed(state, bytes)) return DEAD;\n if (!isKey && !stringContentAllowed(state.schema, bytes, length)) return DEAD;\n return {\n ...state,\n mode,\n bytes,\n text: undefined,\n highSurrogate: undefined,\n stringLength: length,\n stringPending: pending,\n };\n}\n\nfunction completeKey(state: JsonState, key: string): JsonState {\n const frame = topObject(state);\n if (frame.seen.has(key)) return DEAD;\n const childSchema = propertySchema(frame.schema, key, frame.entries);\n if (childSchema === null) return DEAD;\n return {\n ...state,\n mode: 'colon',\n bytes: undefined,\n index: 0,\n stack: replaceTop(state.stack, { ...frame, key, childSchema }),\n };\n}\n\nfunction literalByte(state: JsonState, byte: number): JsonState {\n const index = state.index ?? 0;\n const literal = state.literal!;\n if (byte !== literal.charCodeAt(index)) return DEAD;\n if (index + 1 < literal.length) return { ...state, index: index + 1 };\n const node: JsonNode =\n state.literalValue === null ? { kind: 'null', value: null } : { kind: 'boolean', value: state.literalValue! };\n return completeValue(state, node);\n}\n\nfunction numberByte(state: JsonState, byte: number): JsonState {\n if (isNumberByte(byte)) {\n const text = `${state.text}${String.fromCharCode(byte)}`;\n if (numberPrefixValid(text) && integerPrefixViable(state.schema, text)) return { ...state, text };\n }\n const value = finishNumber(state);\n return value === DEAD ? DEAD : transition(value, byte);\n}\n\n// JSON Schema accepts any number encoding for integer fields (\"0.9e1\" is 9),\n// but during generation that freedom creates traps a model cannot escape:\n// after \"0.9\" under {type: \"integer\"} only digits and exponents stay viable,\n// continuations such as \"0.9e-\" can never close the value, and zero-padding\n// like \"0.0e0000\u2026\" stays legal forever, so a stuck model streams digits until\n// it hits the token limit. Integer-only fields therefore use the constrained\n// shape -?(0|[1-9]\\d*)(\\.0+)?([eE]+?\\d+)? \u2014 the value stays\n// \u00B1digits\u00D710^exponent, so every prefix can still close \u2014 with fraction zeros\n// and exponent digits capped (they carry no information beyond two digits), and\n// bytes from which no in-range integer remains reachable are pruned.\nconst SCALE_DIGIT_LIMIT = 3;\nconst integerRestrictions = new WeakMap<object, { lo: number; hi: number } | null>();\n\nfunction integerPrefixViable(schema: Schema, text: string): boolean {\n const restriction = integerRestriction(schema);\n if (restriction === null) return true;\n const { lo, hi } = restriction;\n if (text === '-') return lo <= Math.min(hi, 0);\n const match = /^(-?)(0|[1-9]\\d*)(\\.0{0,3})?(?:[eE]\\+?(\\d{0,3}))?$/.exec(text);\n if (match === null) return false;\n // \"1.e\" can never complete (the fraction needs a digit before the exponent)\n if (match[3] === '.' && match[4] !== undefined) return false;\n const negative = match[1] === '-';\n if (match[3] === undefined && match[4] === undefined) {\n return integerDigitsReachable(lo, hi, negative, match[2]);\n }\n return integerScaleReachable(lo, hi, negative, match[2], match[4] ?? '');\n}\n\nfunction integerRestriction(schema: Schema): { lo: number; hi: number } | null {\n if (schema === true || schema === false) return null;\n let restriction = integerRestrictions.get(schema);\n if (restriction === undefined) {\n restriction = computeIntegerRestriction(schema);\n integerRestrictions.set(schema, restriction);\n }\n return restriction;\n}\n\nfunction computeIntegerRestriction(schema: Record<string, unknown>): { lo: number; hi: number } | null {\n let integerOnly = false;\n if (schema.type !== undefined) {\n const types = Array.isArray(schema.type) ? schema.type.map(String) : [String(schema.type)];\n integerOnly = types.includes('integer') && !types.includes('number');\n } else if (typeof schema.const === 'number') {\n integerOnly = Number.isInteger(schema.const);\n } else if (Array.isArray(schema.enum)) {\n const numbers = schema.enum.filter((value): value is number => typeof value === 'number');\n integerOnly = numbers.length > 0 && numbers.every((value) => Number.isInteger(value));\n }\n if (!integerOnly) return null;\n let lo = -Infinity;\n let hi = Infinity;\n if (typeof schema.minimum === 'number') lo = Math.ceil(schema.minimum);\n if (typeof schema.exclusiveMinimum === 'number') lo = Math.max(lo, Math.floor(schema.exclusiveMinimum) + 1);\n if (typeof schema.maximum === 'number') hi = Math.floor(schema.maximum);\n if (typeof schema.exclusiveMaximum === 'number') hi = Math.min(hi, Math.ceil(schema.exclusiveMaximum) - 1);\n // Pruning must never reject a value the validator would accept; when a\n // bound is beyond exact integer arithmetic, drop it instead of guessing.\n if (!Number.isSafeInteger(lo)) lo = -Infinity;\n if (!Number.isSafeInteger(hi)) hi = Infinity;\n return { lo, hi };\n}\n\n// Whether some integer whose decimal representation starts with `digits`\n// (extended by zero or more digits, or scaled by a later \".0\u2026\"/exponent) lies\n// in [lo, hi]. The reachable values are \u00B1[|P|\u00B710^k, (|P|+1)\u00B710^k - 1] for\n// k \u2265 0, except that \"0\"/\"-0\" cannot take further digits.\nfunction integerDigitsReachable(lo: number, hi: number, negative: boolean, digits: string): boolean {\n if (digits.length > 16) return negative ? lo === -Infinity : hi === Infinity;\n let low = Number(digits);\n let high = low + 1;\n const extensible = low !== 0;\n for (;;) {\n if (negative) {\n if (-(high - 1) <= hi && -low >= lo) return true;\n if (-low < lo) return false;\n } else {\n if (low <= hi && high - 1 >= lo) return true;\n if (low > hi) return false;\n }\n if (!extensible) return false;\n low *= 10;\n high *= 10;\n }\n}\n\n// Once a fraction or exponent starts, the digits are frozen and the value is\n// exactly \u00B1digits\u00D710^E for a still-typeable exponent E \u2265 0. When exponent\n// digits have been typed, reachable exponents are those obtainable by extending\n// the typed prefix within the digit limit (leading zeros allowed).\nfunction integerScaleReachable(\n lo: number,\n hi: number,\n negative: boolean,\n digits: string,\n exponentPrefix: string,\n): boolean {\n if (digits.length > 16) return negative ? lo === -Infinity : hi === Infinity;\n const base = Number(digits);\n if (base === 0) return lo <= 0 && 0 <= hi;\n let magnitude = base;\n // A typeable exponent has at most SCALE_DIGIT_LIMIT digits, so 999 bounds\n // the search; finite bounds exit early via the overshoot check.\n for (let exponent = 0; exponent <= 999; ++exponent) {\n const value = negative ? -magnitude : magnitude;\n const inRange = (lo === -Infinity || value >= lo) && (hi === Infinity || value <= hi);\n if (inRange && exponentTypeable(exponent, exponentPrefix)) return true;\n if (negative ? lo !== -Infinity && value < lo : hi !== Infinity && value > hi) return false;\n magnitude *= 10;\n }\n return false;\n}\n\n// Whether exponent value `exponent` can be written by extending the typed\n// digits `prefix` to a full exponent of at most SCALE_DIGIT_LIMIT digits\n// (at least one digit total; leading zeros allowed).\nfunction exponentTypeable(exponent: number, prefix: string): boolean {\n const typed = prefix === '' ? 0 : Number(prefix);\n for (let extra = Math.max(0, 1 - prefix.length); extra <= SCALE_DIGIT_LIMIT - prefix.length; ++extra) {\n const scale = 10 ** extra;\n if (exponent >= typed * scale && exponent < (typed + 1) * scale) return true;\n }\n return false;\n}\n\nfunction finishNumber(state: JsonState): JsonState {\n const text = state.text!;\n if (!numberComplete(text)) return DEAD;\n return completeValue(state, { kind: 'number', value: Number(text), raw: text });\n}\n\nfunction completeValue(state: JsonState, node: JsonNode): JsonState {\n if (!validateNode(state.schema, node)) return DEAD;\n if (state.stack.length === 0) return { mode: 'done', schema: state.schema, stack: [], guidance: state.guidance };\n const frame = state.stack.at(-1)!;\n if (frame.kind === 'object') {\n if (frame.key === undefined) return DEAD;\n const seen = new Set(frame.seen);\n seen.add(frame.key);\n const entries = [...frame.entries, { key: frame.key, node }];\n if (!partialObjectValid(frame.schema, entries, new Set())) return DEAD;\n return {\n mode: 'after-value',\n schema: frame.schema,\n stack: replaceTop(state.stack, { kind: 'object', schema: frame.schema, seen, entries }),\n guidance: state.guidance,\n };\n }\n return {\n mode: 'after-value',\n schema: frame.schema,\n stack: replaceTop(state.stack, { ...frame, length: frame.length + 1, items: [...frame.items, node] }),\n guidance: state.guidance,\n };\n}\n\nfunction afterValue(state: JsonState, byte: number): JsonState {\n const frame = state.stack.at(-1);\n if (frame === undefined) return DEAD;\n if (frame.kind === 'object') {\n if (byte === 0x7d) return closeObject(state);\n if (!objectCanAddProperty(frame)) return DEAD;\n return separatorByte(\n { ...state, mode: 'item-separator', index: 0 },\n byte,\n state.guidance.itemBytes,\n 'object-key',\n );\n }\n if (byte === 0x5d) return closeArray(state);\n if (exceedsMaxItems(frame)) return DEAD;\n return separatorByte({ ...state, mode: 'item-separator', index: 0 }, byte, state.guidance.itemBytes, 'array-value');\n}\n\nfunction separatorByte(state: JsonState, byte: number, separator: Uint8Array, completedMode: Mode): JsonState {\n const index = state.index ?? 0;\n if (byte !== separator[index]) return DEAD;\n if (index + 1 < separator.length) return { ...state, index: index + 1 };\n const frame = state.stack.at(-1);\n return {\n ...state,\n mode: completedMode,\n schema:\n completedMode === 'value'\n ? topObject(state).childSchema!\n : completedMode === 'array-value' && frame?.kind === 'array'\n ? itemSchema(frame.schema, frame.length)\n : state.schema,\n index: undefined,\n };\n}\n\nfunction separatorExpects(state: JsonState, byte: number): boolean {\n if (state.mode === 'colon') return state.guidance.keyBytes[state.index ?? 0] === byte;\n if (state.mode === 'item-separator') return state.guidance.itemBytes[state.index ?? 0] === byte;\n return false;\n}\n\nfunction closeObject(state: JsonState): JsonState {\n const frame = state.stack.at(-1);\n if (frame?.kind !== 'object') return DEAD;\n const value: Record<string, unknown> = Object.create(null) as Record<string, unknown>;\n for (const entry of frame.entries) value[entry.key] = entry.node.value;\n return completeValue(\n { ...state, schema: frame.schema, stack: state.stack.slice(0, -1) },\n { kind: 'object', value, entries: [...frame.entries] },\n );\n}\n\nfunction closeArray(state: JsonState): JsonState {\n const frame = state.stack.at(-1);\n if (frame?.kind !== 'array') return DEAD;\n return completeValue(\n { ...state, schema: frame.schema, stack: state.stack.slice(0, -1) },\n { kind: 'array', value: frame.items.map((item) => item.value), items: [...frame.items] },\n );\n}\n\nfunction selectSchema(schema: Schema, kind: Kind): Schema | null {\n return schemaMayAcceptKind(schema, kind, new Set()) ? schema : null;\n}\n\nfunction propertySchema(\n schema: Schema,\n key: string,\n entries: ReadonlyArray<{ key: string; node: JsonNode }> = [],\n): Schema | null {\n if (schema === true) return true;\n if (schema === false) return null;\n const schemas: Schema[] = [];\n const direct = directPropertySchema(schema, key);\n if (direct === null) return null;\n if (direct !== true) schemas.push(direct);\n for (const candidate of [schema, ...(Array.isArray(schema.allOf) ? schema.allOf.filter(isSchema) : [])]) {\n if (candidate === true || candidate === false) continue;\n const branch = selectedConditionalBranch(candidate, entries);\n if (branch === undefined || branch === true) continue;\n if (branch === false) return null;\n const branchSchema = directPropertySchema(branch, key);\n if (branchSchema === null) return null;\n if (branchSchema !== true) schemas.push(branchSchema);\n }\n if (schemas.length === 0) return true;\n return schemas.length === 1 ? schemas[0] : { allOf: schemas };\n}\n\nfunction directPropertySchema(schema: Record<string, unknown>, key: string): Schema | null {\n const properties = isRecord(schema.properties) ? schema.properties : {};\n const schemas: Schema[] = [];\n if (isSchema(properties[key])) schemas.push(properties[key]);\n if (isRecord(schema.patternProperties)) {\n for (const [pattern, candidate] of Object.entries(schema.patternProperties)) {\n if (new RegExp(pattern, 'u').test(key) && isSchema(candidate)) schemas.push(candidate);\n }\n }\n if (schemas.length === 0) {\n if (schema.additionalProperties === false) return null;\n return isSchema(schema.additionalProperties) ? schema.additionalProperties : true;\n }\n return schemas.length === 1 ? schemas[0] : { allOf: schemas };\n}\n\nfunction selectedConditionalBranch(\n schema: Record<string, unknown>,\n entries: ReadonlyArray<{ key: string; node: JsonNode }>,\n): Schema | undefined {\n if (!isSchema(schema.if) || schema.if === true || schema.if === false) return undefined;\n const required = Array.isArray(schema.if.required) ? schema.if.required : [];\n if (required.length === 0 || !required.every((key) => entries.some((entry) => entry.key === key))) return undefined;\n const node = objectNode(entries);\n const branch = validateNode(schema.if, node) ? schema.then : schema.else;\n return isSchema(branch) ? branch : undefined;\n}\n\nfunction partialObjectValid(\n schema: Schema,\n entries: ReadonlyArray<{ key: string; node: JsonNode }>,\n seen: Set<object>,\n): boolean {\n if (schema === true) return true;\n if (schema === false) return false;\n if (seen.has(schema)) return true;\n seen.add(schema);\n try {\n for (const entry of entries) {\n const child = directPropertySchema(schema, entry.key);\n if (child === null || (child !== true && !validateNode(child, entry.node))) return false;\n }\n if (\n typeof schema.$ref === 'string' &&\n !partialObjectValid(resolveReference(schema, schema.$ref), entries, seen)\n )\n return false;\n if (\n Array.isArray(schema.allOf) &&\n !schema.allOf.every((child) => !isSchema(child) || partialObjectValid(child, entries, seen))\n )\n return false;\n const branch = selectedConditionalBranch(schema, entries);\n return branch === undefined || partialObjectValid(branch, entries, seen);\n } finally {\n seen.delete(schema);\n }\n}\n\nfunction objectNode(entries: ReadonlyArray<{ key: string; node: JsonNode }>): Extract<JsonNode, { kind: 'object' }> {\n const value: Record<string, unknown> = Object.create(null) as Record<string, unknown>;\n for (const entry of entries) value[entry.key] = entry.node.value;\n return { kind: 'object', value, entries: [...entries] };\n}\n\nfunction itemSchema(schema: Schema, index: number): Schema {\n if (schema === true || schema === false || hasDeferredStructure(schema)) return schema === false ? false : true;\n if (Array.isArray(schema.prefixItems) && isSchema(schema.prefixItems[index])) return schema.prefixItems[index];\n if (Array.isArray(schema.items)) {\n if (isSchema(schema.items[index])) return schema.items[index];\n return isSchema(schema.additionalItems) ? schema.additionalItems : true;\n }\n return isSchema(schema.items) ? schema.items : true;\n}\n\nfunction keyPrefixAllowed(state: JsonState, bytes: readonly number[]): boolean {\n const frame = topObject(state);\n if (frame.schema === true || frame.schema === false) return true;\n const properties = encodedPropertyKeys(frame.schema);\n if (properties === null) return true;\n return properties.some(({ key, bytes: propertyBytes }) => {\n if (frame.seen.has(key) || bytes.length > propertyBytes.length) return false;\n for (let index = 0; index < bytes.length; ++index) {\n if (bytes[index] !== propertyBytes[index]) return false;\n }\n return true;\n });\n}\n\nfunction keyEscapeAllowed(state: JsonState): boolean {\n const frame = topObject(state);\n if (frame.schema === true || frame.schema === false) return true;\n const properties = encodedPropertyKeys(frame.schema);\n if (properties === null) return true;\n if (state.highSurrogate !== undefined) return true;\n const bytes = state.bytes ?? [];\n return properties.some(({ key, bytes: propertyBytes }) => {\n if (frame.seen.has(key) || propertyBytes.length <= bytes.length) return false;\n for (let index = 0; index < bytes.length; ++index) {\n if (bytes[index] !== propertyBytes[index]) return false;\n }\n const next = propertyBytes[bytes.length];\n return next < 0x20 || next === 0x22 || next === 0x5c || next >= 0x80;\n });\n}\n\nfunction objectCanAddProperty(frame: ObjectFrame): boolean {\n if (frame.schema === true || frame.schema === false) return true;\n const properties = encodedPropertyKeys(frame.schema);\n return properties === null || properties.some(({ key }) => !frame.seen.has(key));\n}\n\nfunction stringContentAllowed(schema: Schema, bytes: readonly number[], length: number): boolean {\n const values = finiteStringValues(schema);\n if (\n values !== null &&\n !values.some(({ bytes: valueBytes }) => {\n if (bytes.length > valueBytes.length) return false;\n for (let index = 0; index < bytes.length; ++index) {\n if (bytes[index] !== valueBytes[index]) return false;\n }\n return true;\n })\n )\n return false;\n const maximum = directStringMaxLength(schema);\n return maximum === undefined || length <= maximum;\n}\n\nfunction stringEscapeAllowed(state: JsonState): boolean {\n const values = finiteStringValues(state.schema);\n const maximum = directStringMaxLength(state.schema);\n if (maximum !== undefined && (state.stringLength ?? 0) >= maximum) return false;\n if (values === null) return true;\n if (state.highSurrogate !== undefined) return true;\n const bytes = state.bytes ?? [];\n return values.some(({ bytes: valueBytes }) => {\n if (valueBytes.length <= bytes.length) return false;\n for (let index = 0; index < bytes.length; ++index) {\n if (bytes[index] !== valueBytes[index]) return false;\n }\n const next = valueBytes[bytes.length];\n return next < 0x20 || next === 0x22 || next === 0x5c || next >= 0x80;\n });\n}\n\nfunction directStringMaxLength(schema: Schema): number | undefined {\n return schema !== true && schema !== false && typeof schema.maxLength === 'number' ? schema.maxLength : undefined;\n}\n\nfunction finiteStringValues(schema: Schema): ReadonlyArray<{ value: string; bytes: Uint8Array }> | null {\n if (schema === true || schema === false) return null;\n let values = finiteStringCache.get(schema);\n if (values !== undefined) return values;\n let candidates: string[] | null = null;\n if (typeof schema.const === 'string') candidates = [schema.const];\n else if (Array.isArray(schema.enum))\n candidates = schema.enum.filter((value): value is string => typeof value === 'string');\n values =\n candidates === null\n ? null\n : [...new Set(candidates)]\n .filter((value) => validateNode(schema, { kind: 'string', value }))\n .map((value) => ({ value, bytes: encoder.encode(value) }));\n finiteStringCache.set(schema, values);\n return values;\n}\n\nfunction unicodeKeyPrefixAllowed(state: JsonState, hexPrefix: string): boolean {\n const frame = topObject(state);\n if (frame.schema === true || frame.schema === false) return true;\n const properties = encodedPropertyKeys(frame.schema);\n if (properties === null) return true;\n const prefix = decodeString(state.bytes ?? []);\n if (prefix === null) return true;\n return properties.some(({ key }) => {\n if (frame.seen.has(key) || !key.startsWith(prefix)) return false;\n const offset = prefix.length;\n let codeUnit = key.charCodeAt(offset);\n if (state.highSurrogate !== undefined) {\n if (codeUnit !== state.highSurrogate) return false;\n codeUnit = key.charCodeAt(offset + 1);\n }\n return Number.isInteger(codeUnit) && codeUnit.toString(16).padStart(4, '0').startsWith(hexPrefix.toLowerCase());\n });\n}\n\nfunction encodedPropertyKeys(\n schema: Record<string, unknown>,\n): ReadonlyArray<{ key: string; bytes: Uint8Array }> | null {\n let properties = propertyKeyBytes.get(schema);\n if (properties === undefined) {\n const keys = constrainedPropertyKeys(schema, new Set());\n properties = keys === null ? null : [...keys].map((key) => ({ key, bytes: encoder.encode(key) }));\n propertyKeyBytes.set(schema, properties);\n }\n return properties;\n}\n\nfunction constrainedPropertyKeys(schema: Schema, seen: Set<object>): Set<string> | null {\n if (schema === true || schema === false || seen.has(schema)) return null;\n seen.add(schema);\n try {\n const properties = isRecord(schema.properties) ? schema.properties : {};\n let result =\n schema.additionalProperties === false && !isRecord(schema.patternProperties)\n ? new Set(Object.keys(properties))\n : null;\n if (typeof schema.$ref === 'string') {\n result = intersectKeySets(result, constrainedPropertyKeys(resolveReference(schema, schema.$ref), seen));\n }\n if (Array.isArray(schema.allOf)) {\n for (const child of schema.allOf) {\n if (isSchema(child)) result = intersectKeySets(result, constrainedPropertyKeys(child, seen));\n }\n }\n for (const keyword of ['anyOf', 'oneOf'] as const) {\n if (!Array.isArray(schema[keyword])) continue;\n let union: Set<string> | null = new Set();\n for (const child of schema[keyword]) {\n if (!isSchema(child) || !schemaMayAcceptKind(child, 'object', new Set())) continue;\n const childKeys = constrainedPropertyKeys(child, seen);\n if (childKeys === null) {\n union = null;\n break;\n }\n for (const key of childKeys) union.add(key);\n }\n result = intersectKeySets(result, union);\n }\n return result;\n } finally {\n seen.delete(schema);\n }\n}\n\nfunction intersectKeySets(left: Set<string> | null, right: Set<string> | null): Set<string> | null {\n if (left === null) return right;\n if (right === null) return left;\n return new Set([...left].filter((key) => right.has(key)));\n}\n\nfunction exceedsMaxItems(frame: ArrayFrame): boolean {\n return frame.schema !== true &&\n frame.schema !== false &&\n !hasDeferredStructure(frame.schema) &&\n typeof frame.schema.maxItems === 'number'\n ? frame.length >= frame.schema.maxItems\n : false;\n}\n\nconst schemaContexts = new WeakMap<object, Schema>();\n\nfunction validateNode(schema: Schema, node: JsonNode, active = new Map<object, Set<JsonNode>>()): boolean {\n if (schema === true) return true;\n if (schema === false) return false;\n let nodes = active.get(schema);\n if (nodes?.has(node)) return true;\n if (nodes === undefined) {\n nodes = new Set();\n active.set(schema, nodes);\n }\n nodes.add(node);\n try {\n if (typeof schema.$ref === 'string' && !validateNode(resolveReference(schema, schema.$ref), node, active))\n return false;\n if (schema.type !== undefined) {\n const types = Array.isArray(schema.type) ? schema.type.map(String) : [String(schema.type)];\n if (!types.some((type) => nodeHasType(node, type))) return false;\n }\n if (schema.const !== undefined && !nodeEqualsValue(node, schema.const)) return false;\n if (Array.isArray(schema.enum) && !schema.enum.some((value) => nodeEqualsValue(node, value))) return false;\n if (\n Array.isArray(schema.allOf) &&\n !schema.allOf.every((child) => isSchema(child) && validateNode(child, node, active))\n )\n return false;\n if (\n Array.isArray(schema.anyOf) &&\n !schema.anyOf.some((child) => isSchema(child) && validateNode(child, node, active))\n )\n return false;\n if (\n Array.isArray(schema.oneOf) &&\n schema.oneOf.filter((child) => isSchema(child) && validateNode(child, node, active)).length !== 1\n )\n return false;\n if (isSchema(schema.not) && validateNode(schema.not, node, active)) return false;\n if (isSchema(schema.if)) {\n const branch = validateNode(schema.if, node, active) ? schema.then : schema.else;\n if (isSchema(branch) && !validateNode(branch, node, active)) return false;\n }\n if (node.kind === 'number' && !validateNumericNode(schema, node)) return false;\n if (node.kind === 'string' && !validateStringNode(schema, node.value)) return false;\n if (node.kind === 'array' && !validateArrayNode(schema, node, active)) return false;\n if (node.kind === 'object' && !validateObjectNode(schema, node, active)) return false;\n return true;\n } finally {\n nodes.delete(node);\n }\n}\n\nfunction validateNumericNode(schema: Record<string, unknown>, node: Extract<JsonNode, { kind: 'number' }>): boolean {\n const value = decimal(node.raw);\n if (schema.minimum !== undefined && compareDecimal(value, decimal(String(schema.minimum))) < 0) return false;\n if (schema.maximum !== undefined && compareDecimal(value, decimal(String(schema.maximum))) > 0) return false;\n if (schema.exclusiveMinimum !== undefined && compareDecimal(value, decimal(String(schema.exclusiveMinimum))) <= 0)\n return false;\n if (schema.exclusiveMaximum !== undefined && compareDecimal(value, decimal(String(schema.exclusiveMaximum))) >= 0)\n return false;\n return schema.multipleOf === undefined || decimalMultiple(value, decimal(String(schema.multipleOf)));\n}\n\nfunction validateStringNode(schema: Record<string, unknown>, value: string): boolean {\n const length = [...value].length;\n if (typeof schema.minLength === 'number' && length < schema.minLength) return false;\n if (typeof schema.maxLength === 'number' && length > schema.maxLength) return false;\n if (typeof schema.pattern === 'string' && !new RegExp(schema.pattern, 'u').test(value)) return false;\n return typeof schema.format !== 'string' || formatMatches(schema.format, value);\n}\n\nfunction validateArrayNode(\n schema: Record<string, unknown>,\n node: Extract<JsonNode, { kind: 'array' }>,\n active: Map<object, Set<JsonNode>>,\n): boolean {\n if (typeof schema.minItems === 'number' && node.items.length < schema.minItems) return false;\n if (typeof schema.maxItems === 'number' && node.items.length > schema.maxItems) return false;\n if (schema.uniqueItems === true) {\n for (let index = 0; index < node.items.length; ++index) {\n if (node.items.slice(0, index).some((other) => nodesEqual(other, node.items[index]))) return false;\n }\n }\n const legacyTuple = Array.isArray(schema.items) ? schema.items : undefined;\n const prefix = (Array.isArray(schema.prefixItems) ? schema.prefixItems : legacyTuple) ?? [];\n for (let index = 0; index < Math.min(prefix.length, node.items.length); ++index) {\n if (!isSchema(prefix[index]) || !validateNode(prefix[index], node.items[index], active)) return false;\n }\n const remaining = legacyTuple ? schema.additionalItems : schema.items;\n if (isSchema(remaining)) {\n for (let index = prefix.length; index < node.items.length; ++index) {\n if (!validateNode(remaining, node.items[index], active)) return false;\n }\n }\n if (isSchema(schema.contains)) {\n const matches = node.items.filter((item) => validateNode(schema.contains as Schema, item, active)).length;\n const minimum = typeof schema.minContains === 'number' ? schema.minContains : 1;\n if (matches < minimum || (typeof schema.maxContains === 'number' && matches > schema.maxContains)) return false;\n }\n return true;\n}\n\nfunction validateObjectNode(\n schema: Record<string, unknown>,\n node: Extract<JsonNode, { kind: 'object' }>,\n active: Map<object, Set<JsonNode>>,\n): boolean {\n const entries = new Map(node.entries.map((entry) => [entry.key, entry.node]));\n if (entries.size !== node.entries.length) return false;\n if (typeof schema.minProperties === 'number' && entries.size < schema.minProperties) return false;\n if (typeof schema.maxProperties === 'number' && entries.size > schema.maxProperties) return false;\n const required = Array.isArray(schema.required) ? schema.required : [];\n if (!required.every((key) => typeof key === 'string' && entries.has(key))) return false;\n const properties = isRecord(schema.properties) ? schema.properties : {};\n const patterns = isRecord(schema.patternProperties) ? schema.patternProperties : {};\n for (const [key, child] of entries) {\n if (\n isSchema(schema.propertyNames) &&\n !validateNode(schema.propertyNames, { kind: 'string', value: key }, active)\n )\n return false;\n let matched = false;\n if (isSchema(properties[key])) {\n matched = true;\n if (!validateNode(properties[key], child, active)) return false;\n }\n for (const [pattern, patternSchema] of Object.entries(patterns)) {\n if (new RegExp(pattern, 'u').test(key)) {\n matched = true;\n if (!isSchema(patternSchema) || !validateNode(patternSchema, child, active)) return false;\n }\n }\n if (!matched) {\n if (schema.additionalProperties === false) return false;\n if (isSchema(schema.additionalProperties) && !validateNode(schema.additionalProperties, child, active))\n return false;\n }\n }\n const dependentRequired = isRecord(schema.dependentRequired) ? schema.dependentRequired : {};\n for (const [key, dependencies] of Object.entries(dependentRequired)) {\n if (\n entries.has(key) &&\n Array.isArray(dependencies) &&\n !dependencies.every((dependency) => typeof dependency === 'string' && entries.has(dependency))\n )\n return false;\n }\n const dependentSchemas = isRecord(schema.dependentSchemas) ? schema.dependentSchemas : {};\n for (const [key, dependency] of Object.entries(dependentSchemas)) {\n if (entries.has(key) && (!isSchema(dependency) || !validateNode(dependency, node, active))) return false;\n }\n const dependencies = isRecord(schema.dependencies) ? schema.dependencies : {};\n for (const [key, dependency] of Object.entries(dependencies)) {\n if (!entries.has(key)) continue;\n if (Array.isArray(dependency)) {\n if (!dependency.every((requiredKey) => typeof requiredKey === 'string' && entries.has(requiredKey)))\n return false;\n } else if (!isSchema(dependency) || !validateNode(dependency, node, active)) return false;\n }\n return true;\n}\n\nfunction nodeHasType(node: JsonNode, type: string): boolean {\n if (type === 'integer') return node.kind === 'number' && decimalInteger(decimal(node.raw));\n if (type === 'number') return node.kind === 'number';\n return node.kind === type;\n}\n\nfunction nodeEqualsValue(node: JsonNode, value: unknown): boolean {\n if (node.kind === 'number')\n return typeof value === 'number' && compareDecimal(decimal(node.raw), decimal(String(value))) === 0;\n if (node.kind === 'array')\n return (\n Array.isArray(value) &&\n node.items.length === value.length &&\n node.items.every((item, index) => nodeEqualsValue(item, value[index]))\n );\n if (node.kind === 'object') {\n if (!isRecord(value)) return false;\n const entries = new Map(node.entries.map((entry) => [entry.key, entry.node]));\n return (\n entries.size === Object.keys(value).length &&\n Object.entries(value).every(([key, child]) => entries.has(key) && nodeEqualsValue(entries.get(key)!, child))\n );\n }\n return Object.is(node.value, value);\n}\n\nfunction nodesEqual(left: JsonNode, right: JsonNode): boolean {\n if (left.kind !== right.kind) return false;\n if (left.kind === 'number' && right.kind === 'number')\n return compareDecimal(decimal(left.raw), decimal(right.raw)) === 0;\n if (left.kind === 'array' && right.kind === 'array')\n return (\n left.items.length === right.items.length &&\n left.items.every((item, index) => nodesEqual(item, right.items[index]))\n );\n if (left.kind === 'object' && right.kind === 'object') {\n const rightEntries = new Map(right.entries.map((entry) => [entry.key, entry.node]));\n return (\n left.entries.length === rightEntries.size &&\n left.entries.every(\n (entry) => rightEntries.has(entry.key) && nodesEqual(entry.node, rightEntries.get(entry.key)!),\n )\n );\n }\n return Object.is(left.value, right.value);\n}\n\ntype Decimal = { coefficient: bigint; exponent: bigint };\n\nfunction decimal(raw: string): Decimal {\n const match = /^(-?)(\\d+)(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/.exec(raw)!;\n const fraction = match[3] ?? '';\n let digits = `${match[2]}${fraction}`.replace(/^0+/, '');\n if (digits === '') return { coefficient: 0n, exponent: 0n };\n const trailing = /0+$/.exec(digits)?.[0].length ?? 0;\n if (trailing > 0) digits = digits.slice(0, -trailing);\n return {\n coefficient: BigInt(`${match[1]}${digits}`),\n exponent: BigInt(match[4] ?? '0') - BigInt(fraction.length) + BigInt(trailing),\n };\n}\n\nfunction compareDecimal(left: Decimal, right: Decimal): number {\n if (left.coefficient === right.coefficient && left.exponent === right.exponent) return 0;\n if (left.coefficient === 0n) return right.coefficient < 0n ? 1 : -1;\n if (right.coefficient === 0n) return left.coefficient < 0n ? -1 : 1;\n if (left.coefficient < 0n && right.coefficient >= 0n) return -1;\n if (left.coefficient >= 0n && right.coefficient < 0n) return 1;\n const negative = left.coefficient < 0n;\n const leftAbsolute = left.coefficient < 0n ? -left.coefficient : left.coefficient;\n const rightAbsolute = right.coefficient < 0n ? -right.coefficient : right.coefficient;\n const leftMagnitude = BigInt(leftAbsolute.toString().length) + left.exponent;\n const rightMagnitude = BigInt(rightAbsolute.toString().length) + right.exponent;\n if (leftMagnitude !== rightMagnitude) {\n const comparison = leftMagnitude < rightMagnitude ? -1 : 1;\n return negative ? -comparison : comparison;\n }\n const exponent = left.exponent < right.exponent ? left.exponent : right.exponent;\n const scaledLeft = left.coefficient * 10n ** (left.exponent - exponent);\n const scaledRight = right.coefficient * 10n ** (right.exponent - exponent);\n return scaledLeft < scaledRight ? -1 : scaledLeft > scaledRight ? 1 : 0;\n}\n\nfunction decimalInteger(value: Decimal): boolean {\n return value.coefficient === 0n || value.exponent >= 0n;\n}\n\nfunction decimalMultiple(value: Decimal, divisor: Decimal): boolean {\n if (divisor.coefficient === 0n) return false;\n if (value.coefficient === 0n) return true;\n const numerator = value.coefficient < 0n ? -value.coefficient : value.coefficient;\n const denominator = divisor.coefficient < 0n ? -divisor.coefficient : divisor.coefficient;\n const exponent = value.exponent - divisor.exponent;\n if (exponent >= 0n) {\n return ((numerator % denominator) * modularPower(10n, exponent, denominator)) % denominator === 0n;\n }\n const places = -exponent;\n if (places >= BigInt(numerator.toString().length)) return false;\n return numerator % (denominator * 10n ** places) === 0n;\n}\n\nfunction modularPower(base: bigint, exponent: bigint, modulus: bigint): bigint {\n if (modulus === 1n) return 0n;\n let result = 1n;\n base %= modulus;\n while (exponent > 0n) {\n if (exponent & 1n) result = (result * base) % modulus;\n base = (base * base) % modulus;\n exponent >>= 1n;\n }\n return result;\n}\n\nfunction hasDeferredStructure(schema: Schema): boolean {\n return (\n schema !== true &&\n schema !== false &&\n ['$ref', 'allOf', 'anyOf', 'oneOf', 'not', 'if'].some((key) => schema[key] !== undefined)\n );\n}\n\nfunction schemaMayAcceptKind(schema: Schema, kind: Kind, seen: Set<object>): boolean {\n if (schema === true) return true;\n if (schema === false) return false;\n if (seen.has(schema)) return true;\n seen.add(schema);\n if (typeof schema.$ref === 'string' && !schemaMayAcceptKind(resolveReference(schema, schema.$ref), kind, seen))\n return false;\n if (!allowsKind(schema, kind)) return false;\n if (\n Array.isArray(schema.allOf) &&\n !schema.allOf.every((child) => isSchema(child) && schemaMayAcceptKind(child, kind, seen))\n )\n return false;\n if (\n Array.isArray(schema.anyOf) &&\n !schema.anyOf.some((child) => isSchema(child) && schemaMayAcceptKind(child, kind, seen))\n )\n return false;\n if (\n Array.isArray(schema.oneOf) &&\n !schema.oneOf.some((child) => isSchema(child) && schemaMayAcceptKind(child, kind, seen))\n )\n return false;\n return true;\n}\n\nfunction resolveReference(owner: object, reference: string): Schema {\n if (!reference.startsWith('#'))\n throw new TypeError(`External JSON Schema reference ${JSON.stringify(reference)} is unsupported.`);\n const root = schemaContexts.get(owner);\n if (root === undefined) throw new Error('Missing JSON Schema context.');\n if (reference === '#') return root;\n if (!reference.startsWith('#/')) {\n throw new TypeError(`JSON Schema reference ${JSON.stringify(reference)} must contain a JSON Pointer.`);\n }\n let current: unknown = root;\n for (const encoded of reference.slice(2).split('/')) {\n const key = decodeURIComponent(encoded).replace(/~1/g, '/').replace(/~0/g, '~');\n if (!isRecord(current) || !(key in current))\n throw new TypeError(`JSON Schema reference ${JSON.stringify(reference)} does not resolve.`);\n current = current[key];\n }\n if (!isSchema(current))\n throw new TypeError(`JSON Schema reference ${JSON.stringify(reference)} does not resolve to a schema.`);\n return current;\n}\n\nfunction registerSchemaContext(schema: Schema, root: Schema, seen = new Set<object>()): void {\n if (!isRecord(schema) || seen.has(schema)) return;\n seen.add(schema);\n schemaContexts.set(schema, root);\n for (const child of schemaChildren(schema)) registerSchemaContext(child, root, seen);\n}\n\nfunction schemaChildren(schema: Record<string, unknown>): Schema[] {\n const result: Schema[] = [];\n for (const key of [\n 'not',\n 'if',\n 'then',\n 'else',\n 'contains',\n 'propertyNames',\n 'additionalProperties',\n 'additionalItems',\n ]) {\n if (isSchema(schema[key])) result.push(schema[key] as Schema);\n }\n if (isSchema(schema.items)) result.push(schema.items);\n if (Array.isArray(schema.items)) result.push(...schema.items.filter(isSchema));\n for (const key of ['prefixItems', 'allOf', 'anyOf', 'oneOf']) {\n if (Array.isArray(schema[key])) result.push(...(schema[key] as unknown[]).filter(isSchema));\n }\n for (const key of ['properties', 'patternProperties', 'dependentSchemas', '$defs', 'definitions']) {\n if (isRecord(schema[key]))\n result.push(...Object.values(schema[key] as Record<string, unknown>).filter(isSchema));\n }\n if (isRecord(schema.dependencies)) {\n result.push(...Object.values(schema.dependencies).filter(isSchema));\n }\n return result;\n}\n\nfunction checkReferences(schema: Schema, seen = new Set<object>()): void {\n if (!isRecord(schema) || seen.has(schema)) return;\n seen.add(schema);\n if (typeof schema.$ref === 'string') resolveReference(schema, schema.$ref);\n for (const child of schemaChildren(schema)) checkReferences(child, seen);\n}\n\nfunction assertPattern(value: unknown, path: string): void {\n if (typeof value !== 'string') throw new TypeError(`${path} must be a string.`);\n try {\n new RegExp(value, 'u');\n } catch {\n throw new TypeError(`${path} must be a valid Unicode RegExp.`);\n }\n}\n\nfunction guidanceFrom(schema: Schema): Guidance {\n if (!isRecord(schema) || schema['x-guidance'] === undefined) return DEFAULT_GUIDANCE;\n if (!isRecord(schema['x-guidance'])) throw new TypeError('x-guidance must be an object.');\n const source = schema['x-guidance'];\n for (const key of Object.keys(source)) {\n if (!['item_separator', 'key_separator', 'whitespace_flexible'].includes(key)) {\n throw new TypeError(`Unsupported x-guidance option ${JSON.stringify(key)}.`);\n }\n }\n const itemSeparator = source.item_separator ?? ',';\n const keySeparator = source.key_separator ?? ':';\n const whitespaceFlexible = source.whitespace_flexible ?? true;\n if (typeof itemSeparator !== 'string' || itemSeparator.length === 0) {\n throw new TypeError('x-guidance.item_separator must be a non-empty string.');\n }\n if (typeof keySeparator !== 'string' || keySeparator.length === 0) {\n throw new TypeError('x-guidance.key_separator must be a non-empty string.');\n }\n if (typeof whitespaceFlexible !== 'boolean')\n throw new TypeError('x-guidance.whitespace_flexible must be a boolean.');\n return {\n itemSeparator,\n keySeparator,\n itemBytes: encoder.encode(itemSeparator),\n keyBytes: encoder.encode(keySeparator),\n whitespaceFlexible,\n };\n}\n\nfunction formatMatches(format: string, value: string): boolean {\n switch (format) {\n case 'date':\n return validDate(value);\n case 'time':\n return validTime(value);\n case 'date-time': {\n const separator = value.search(/[Tt]/);\n return separator > 0 && validDate(value.slice(0, separator)) && validTime(value.slice(separator + 1));\n }\n case 'duration':\n return /^(?:P\\d+W|P(?=\\d|T\\d)(?:\\d+Y)?(?:\\d+M)?(?:\\d+D)?(?:T(?=\\d)(?:\\d+H)?(?:\\d+M)?(?:\\d+S)?)?)$/.test(\n value,\n );\n case 'email': {\n const at = value.lastIndexOf('@');\n if (at <= 0 || at === value.length - 1) return false;\n const local = value.slice(0, at);\n const domain = value.slice(at + 1);\n if (\n local.startsWith('.') ||\n local.endsWith('.') ||\n local.includes('..') ||\n !/^[A-Za-z0-9!#$%&'*+\\-/=?^_`{|}~.]+$/.test(local)\n )\n return false;\n return /^\\[(.+)\\]$/.test(domain) ? validIpv4(domain.slice(1, -1)) : validHostname(domain);\n }\n case 'hostname':\n return validHostname(value);\n case 'ipv4':\n return validIpv4(value);\n case 'ipv6':\n return validIpv6(value);\n case 'uuid':\n return /^[\\da-f]{8}(?:-[\\da-f]{4}){3}-[\\da-f]{12}$/i.test(value);\n case 'uri':\n return validUriText(value, true);\n case 'uri-reference':\n return validUriText(value, false);\n case 'regex':\n try {\n new RegExp(value, 'u');\n return true;\n } catch {\n return false;\n }\n case 'json-pointer':\n return /^(?:\\/(?:[^~/]|~[01])*)*$/u.test(value);\n case 'relative-json-pointer':\n return /^(?:0|[1-9]\\d*)(?:#|(?:\\/(?:[^~/]|~[01])*)*)$/u.test(value);\n default:\n return true;\n }\n}\n\nfunction validDate(value: string): boolean {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value);\n if (!match) return false;\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n const days = [\n 31,\n year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28,\n 31,\n 30,\n 31,\n 30,\n 31,\n 31,\n 30,\n 31,\n 30,\n 31,\n ];\n return month >= 1 && month <= 12 && day >= 1 && day <= days[month - 1];\n}\n\nfunction validTime(value: string): boolean {\n const match = /^(\\d{2}):(\\d{2}):(\\d{2})(?:\\.\\d+)?(?:[Zz]|[+-](\\d{2}):(\\d{2}))$/.exec(value);\n if (!match) return false;\n const hour = Number(match[1]);\n const minute = Number(match[2]);\n const second = Number(match[3]);\n if (hour > 23 || minute > 59 || second > 60 || (second === 60 && (hour !== 23 || minute !== 59))) return false;\n return match[4] === undefined || (Number(match[4]) <= 23 && Number(match[5]) <= 59);\n}\n\nfunction validHostname(value: string): boolean {\n return (\n value.length > 0 &&\n value.length <= 253 &&\n !value.endsWith('.') &&\n value.split('.').every((label) => /^[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?$/.test(label))\n );\n}\n\nfunction validIpv4(value: string): boolean {\n const parts = value.split('.');\n return parts.length === 4 && parts.every((part) => /^(?:0|[1-9]\\d{0,2})$/.test(part) && Number(part) <= 255);\n}\n\nfunction validIpv6(value: string): boolean {\n if (value.includes(':::') || value.split('::').length > 2) return false;\n const compressed = value.includes('::');\n const groups = value.split(':').filter(Boolean);\n if (\n !groups.every((group, index) =>\n group.includes('.') ? index === groups.length - 1 && validIpv4(group) : /^[\\da-f]{1,4}$/i.test(group),\n )\n )\n return false;\n const count = groups.reduce((total, group) => total + (group.includes('.') ? 2 : 1), 0);\n return compressed ? count < 8 : count === 8;\n}\n\nfunction validUriText(value: string, absolute: boolean): boolean {\n if (/[\\s\\\\<>^`{|}\\0]/.test(value) || /%(?![\\da-f]{2})/i.test(value)) return false;\n let rest = value;\n const scheme = /^[A-Za-z][A-Za-z0-9+.-]*:/.exec(rest);\n if (absolute && !scheme) return false;\n if (scheme) rest = rest.slice(scheme[0].length);\n const fragment = rest.indexOf('#');\n if (fragment !== -1) {\n if (!uriQuery.test(rest.slice(fragment + 1))) return false;\n rest = rest.slice(0, fragment);\n }\n const query = rest.indexOf('?');\n if (query !== -1) {\n if (!uriQuery.test(rest.slice(query + 1))) return false;\n rest = rest.slice(0, query);\n }\n if (rest.startsWith('//')) {\n const slash = rest.indexOf('/', 2);\n const authority = rest.slice(2, slash === -1 ? undefined : slash);\n const path = slash === -1 ? '' : rest.slice(slash);\n return validAuthority(authority) && uriPath.test(path);\n }\n if (!uriPath.test(rest)) return false;\n if (scheme || rest === '' || rest.startsWith('/')) return true;\n return !rest.slice(0, rest.indexOf('/') === -1 ? undefined : rest.indexOf('/')).includes(':');\n}\n\nconst uriEncoded = '%[\\\\da-fA-F]{2}';\nconst uriPchar = `(?:[A-Za-z0-9._~!$&'()*+,;=:@-]|${uriEncoded})`;\nconst uriPath = new RegExp(`^(?:${uriPchar}|/)*$`);\nconst uriQuery = new RegExp(`^(?:${uriPchar}|[/?])*$`);\nconst uriRegName = new RegExp(`^(?:[A-Za-z0-9._~!$&'()*+,;=-]|${uriEncoded})*$`);\nconst uriUserInfo = new RegExp(`^(?:[A-Za-z0-9._~!$&'()*+,;=:-]|${uriEncoded})*$`);\n\nfunction validAuthority(authority: string): boolean {\n const at = authority.lastIndexOf('@');\n if (at !== -1) {\n if (authority.indexOf('@') !== at || !uriUserInfo.test(authority.slice(0, at))) return false;\n authority = authority.slice(at + 1);\n }\n if (authority.startsWith('[')) {\n const close = authority.indexOf(']');\n if (close === -1) return false;\n const host = authority.slice(1, close);\n const suffix = authority.slice(close + 1);\n return (\n (validIpv6(host) || /^v[\\da-f]+\\.[A-Za-z0-9._~!$&'()*+,;=:-]+$/i.test(host)) &&\n (suffix === '' || /^:\\d*$/.test(suffix))\n );\n }\n const colon = authority.lastIndexOf(':');\n let host = authority;\n if (colon !== -1) {\n if (authority.indexOf(':') !== colon || !/^\\d*$/.test(authority.slice(colon + 1))) return false;\n host = authority.slice(0, colon);\n }\n return uriRegName.test(host);\n}\n\nfunction checkSchema(schema: Schema, path: string): void {\n if (typeof schema === 'boolean') return;\n if (!isRecord(schema)) throw new TypeError(`${path} must be a boolean or object schema.`);\n const supported = new Set([\n 'type',\n 'const',\n 'enum',\n 'properties',\n 'required',\n 'additionalProperties',\n 'minProperties',\n 'maxProperties',\n 'items',\n 'prefixItems',\n 'minItems',\n 'maxItems',\n 'uniqueItems',\n 'minLength',\n 'maxLength',\n 'pattern',\n 'format',\n 'minimum',\n 'maximum',\n 'exclusiveMinimum',\n 'exclusiveMaximum',\n 'multipleOf',\n 'contains',\n 'minContains',\n 'maxContains',\n 'patternProperties',\n 'propertyNames',\n 'dependentRequired',\n 'dependentSchemas',\n 'dependencies',\n 'anyOf',\n 'allOf',\n 'oneOf',\n 'not',\n 'if',\n 'then',\n 'else',\n '$ref',\n '$defs',\n 'definitions',\n 'additionalItems',\n 'x-guidance',\n 'title',\n 'description',\n '$schema',\n '$id',\n '$comment',\n 'default',\n 'examples',\n 'deprecated',\n 'readOnly',\n 'writeOnly',\n 'contentEncoding',\n 'contentMediaType',\n 'contentSchema',\n ]);\n for (const key of Object.keys(schema)) {\n if (!supported.has(key))\n throw new TypeError(`${path}: unsupported JSON Schema keyword ${JSON.stringify(key)}.`);\n }\n const configuredTypes = schema.type === undefined ? [] : Array.isArray(schema.type) ? schema.type : [schema.type];\n if (\n configuredTypes.some(\n (type) => !['null', 'boolean', 'number', 'integer', 'string', 'array', 'object'].includes(String(type)),\n )\n ) {\n throw new TypeError(`${path}.type contains an unsupported JSON type.`);\n }\n for (const keyword of [\n 'not',\n 'if',\n 'then',\n 'else',\n 'contains',\n 'propertyNames',\n 'additionalProperties',\n 'additionalItems',\n ]) {\n if (schema[keyword] !== undefined && !isSchema(schema[keyword])) {\n throw new TypeError(`${path}.${keyword} must be a boolean or object schema.`);\n }\n }\n for (const keyword of ['allOf', 'anyOf', 'oneOf', 'prefixItems']) {\n const value = schema[keyword];\n if (\n value !== undefined &&\n (!Array.isArray(value) ||\n (keyword !== 'prefixItems' && value.length === 0) ||\n value.some((child) => !isSchema(child)))\n ) {\n throw new TypeError(`${path}.${keyword} must be an array of schemas.`);\n }\n }\n for (const keyword of ['properties', 'patternProperties', 'dependentSchemas', '$defs', 'definitions']) {\n const value = schema[keyword];\n if (value !== undefined && (!isRecord(value) || Object.values(value).some((child) => !isSchema(child)))) {\n throw new TypeError(`${path}.${keyword} must be an object containing schemas.`);\n }\n }\n if (\n schema.items !== undefined &&\n !isSchema(schema.items) &&\n !(Array.isArray(schema.items) && schema.items.every(isSchema))\n ) {\n throw new TypeError(`${path}.items must be a schema or array of schemas.`);\n }\n if (\n schema.required !== undefined &&\n (!Array.isArray(schema.required) ||\n schema.required.some((key) => typeof key !== 'string') ||\n new Set(schema.required).size !== schema.required.length)\n ) {\n throw new TypeError(`${path}.required must be an array of unique strings.`);\n }\n if (schema.dependentRequired !== undefined) {\n if (!isRecord(schema.dependentRequired)) throw new TypeError(`${path}.dependentRequired must be an object.`);\n for (const dependency of Object.values(schema.dependentRequired)) {\n if (\n !Array.isArray(dependency) ||\n dependency.some((key) => typeof key !== 'string') ||\n new Set(dependency).size !== dependency.length\n ) {\n throw new TypeError(`${path}.dependentRequired values must be arrays of unique strings.`);\n }\n }\n }\n if (schema.dependencies !== undefined && !isRecord(schema.dependencies)) {\n throw new TypeError(`${path}.dependencies must be an object.`);\n }\n if (schema.$ref !== undefined && typeof schema.$ref !== 'string')\n throw new TypeError(`${path}.$ref must be a string.`);\n if (schema.enum !== undefined && (!Array.isArray(schema.enum) || schema.enum.length === 0)) {\n throw new TypeError(`${path}.enum must be a non-empty array.`);\n }\n for (const keyword of ['minimum', 'maximum', 'exclusiveMinimum', 'exclusiveMaximum', 'multipleOf']) {\n const value = schema[keyword];\n if (\n value !== undefined &&\n (typeof value !== 'number' || !Number.isFinite(value) || (keyword === 'multipleOf' && value <= 0))\n ) {\n throw new TypeError(\n `${path}.${keyword} must be ${keyword === 'multipleOf' ? 'a positive' : 'a finite'} number.`,\n );\n }\n }\n if (schema.pattern !== undefined) {\n assertPattern(schema.pattern, `${path}.pattern`);\n throw new TypeError(`${path}.pattern cannot be enforced incrementally and is unsupported.`);\n }\n if (schema.format !== undefined && typeof schema.format !== 'string') {\n throw new TypeError(`${path}.format must be a string.`);\n }\n if (typeof schema.format === 'string' && ASSERTED_FORMATS.has(schema.format)) {\n throw new TypeError(\n `${path}.format ${JSON.stringify(schema.format)} cannot be enforced incrementally and is unsupported.`,\n );\n }\n if (isRecord(schema.patternProperties)) {\n for (const pattern of Object.keys(schema.patternProperties))\n assertPattern(pattern, `${path}.patternProperties`);\n }\n if (schema.uniqueItems !== undefined && typeof schema.uniqueItems !== 'boolean') {\n throw new TypeError(`${path}.uniqueItems must be a boolean.`);\n }\n for (const keyword of [\n 'minItems',\n 'maxItems',\n 'minContains',\n 'maxContains',\n 'minProperties',\n 'maxProperties',\n 'minLength',\n 'maxLength',\n ]) {\n const value = schema[keyword];\n if (value !== undefined && (!Number.isInteger(value) || (value as number) < 0)) {\n throw new TypeError(`${path}.${keyword} must be a non-negative integer.`);\n }\n }\n if (schema['x-guidance'] !== undefined && path !== '$') {\n throw new TypeError('x-guidance is only supported on the root schema.');\n }\n schemaChildren(schema).forEach((child, index) => checkSchema(child, `${path}.schema[${index}]`));\n}\n\nfunction allowsKind(schema: Record<string, unknown>, kind: Kind): boolean {\n if (\n schema.const !== undefined &&\n valueKind(schema.const) !== kind &&\n !(kind === 'number' && valueKind(schema.const) === 'integer')\n )\n return false;\n if (\n Array.isArray(schema.enum) &&\n !schema.enum.some((value) => valueKind(value) === kind || (kind === 'number' && valueKind(value) === 'integer'))\n )\n return false;\n if (schema.type === undefined) return true;\n const types = Array.isArray(schema.type) ? schema.type : [schema.type];\n return (\n types.includes(kind) ||\n (kind === 'number' && types.includes('integer')) ||\n (kind === 'integer' && types.includes('number'))\n );\n}\n\nfunction valueKind(value: unknown): Kind | undefined {\n if (value === null) return 'null';\n if (Array.isArray(value)) return 'array';\n if (isRecord(value)) return 'object';\n if (typeof value === 'number') return Number.isInteger(value) ? 'integer' : 'number';\n if (['boolean', 'string'].includes(typeof value)) return typeof value as Kind;\n return undefined;\n}\n\nfunction byteKind(byte: number): Kind | undefined {\n if (byte === 0x22) return 'string';\n if (byte === 0x7b) return 'object';\n if (byte === 0x5b) return 'array';\n if (byte === 0x74 || byte === 0x66) return 'boolean';\n if (byte === 0x6e) return 'null';\n if (byte === 0x2d || isDigit(byte)) return 'number';\n return undefined;\n}\n\nfunction numberPrefixValid(value: string): boolean {\n // The exponent may only start after at least one fraction digit \u2014 \"1.e\"\n // would be a syntactically extendable prefix that can never complete.\n return (\n /^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d*)?$/.test(value) ||\n /^-?(?:0|[1-9]\\d*)\\.$/.test(value) ||\n value === '-'\n );\n}\n\nfunction numberComplete(value: string): boolean {\n return /^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$/.test(value);\n}\n\nfunction isNumberByte(byte: number): boolean {\n return isDigit(byte) || byte === 0x2e || byte === 0x45 || byte === 0x65 || byte === 0x2b || byte === 0x2d;\n}\n\nfunction decodeString(bytes: readonly number[]): string | null {\n try {\n return decoder.decode(Uint8Array.from(bytes));\n } catch {\n return null;\n }\n}\n\nfunction topObject(state: JsonState): ObjectFrame {\n return state.stack.at(-1) as ObjectFrame;\n}\n\nfunction replaceTop(stack: readonly Frame[], frame: Frame): Frame[] {\n return [...stack.slice(0, -1), frame];\n}\n\nfunction allowsWhitespace(mode: Mode): boolean {\n return ['value', 'array-value', 'object-key', 'colon', 'item-separator', 'after-value', 'done'].includes(mode);\n}\n\nfunction isWhitespace(byte: number): boolean {\n return byte === 0x09 || byte === 0x0a || byte === 0x0d || byte === 0x20;\n}\n\nfunction isDigit(byte: number): boolean {\n return byte >= 0x30 && byte <= 0x39;\n}\n\nfunction isHex(byte: number): boolean {\n return isDigit(byte) || (byte >= 0x41 && byte <= 0x46) || (byte >= 0x61 && byte <= 0x66);\n}\n\nfunction isSchema(value: unknown): value is Schema {\n return typeof value === 'boolean' || isRecord(value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n", "import type { ConstraintState } from './types';\n\ntype Expression =\n | { kind: 'empty' }\n | { kind: 'set'; bytes: Uint32Array }\n | { kind: 'choice'; choices: Expression[] }\n | { kind: 'sequence'; parts: Expression[] }\n | { kind: 'star'; child: Expression };\n\nconst EMPTY: Expression = { kind: 'empty' };\nconst encoder = new TextEncoder();\n\nexport function compileRegex(source: string): ConstraintState<number> {\n const machine = new RegexMachine(new RegexParser(source).parse());\n return {\n initial: machine.initial,\n transition: (state, byte) => machine.transition(state, byte),\n viable: (state) => state >= 0,\n accepting: (state) => machine.accepting(state),\n maskKey: (state) => machine.stateKey(state),\n };\n}\n\nclass RegexParser {\n private index = 0;\n\n constructor(private readonly source: string) {}\n\n parse(): Expression {\n if (this.source.startsWith('^')) this.index++;\n const expression = this.alternation();\n if (this.peek() === '$' && this.index === this.source.length - 1) this.index++;\n if (this.index !== this.source.length) this.fail(`unexpected ${JSON.stringify(this.peek())}`);\n return expression;\n }\n\n private alternation(): Expression {\n const choices = [this.concatenation()];\n while (this.peek() === '|') {\n this.index++;\n choices.push(this.concatenation());\n }\n return choice(choices);\n }\n\n private concatenation(): Expression {\n const parts: Expression[] = [];\n while (this.index < this.source.length && this.peek() !== ')' && this.peek() !== '|') {\n if (this.peek() === '$' && this.index === this.source.length - 1) break;\n parts.push(this.quantified());\n }\n return sequence(parts);\n }\n\n private quantified(): Expression {\n const atom = this.atom();\n const quantifier = this.peek();\n if (!['*', '+', '?', '{'].includes(quantifier ?? '')) return atom;\n let minimum: number;\n let maximum: number | null;\n if (quantifier === '*') {\n this.index++;\n [minimum, maximum] = [0, null];\n } else if (quantifier === '+') {\n this.index++;\n [minimum, maximum] = [1, null];\n } else if (quantifier === '?') {\n this.index++;\n [minimum, maximum] = [0, 1];\n } else {\n [minimum, maximum] = this.bounds();\n }\n if (this.peek() === '?' || this.peek() === '+') this.fail('lazy and possessive quantifiers are unsupported');\n const parts = Array.from({ length: minimum }, () => atom);\n if (maximum === null) parts.push(star(atom));\n else for (let count = minimum; count < maximum; ++count) parts.push(choice([EMPTY, atom]));\n return sequence(parts);\n }\n\n private atom(): Expression {\n const character = this.peek();\n if (character === undefined) this.fail('expected an expression');\n if (character === '(') {\n this.index++;\n if (this.source.startsWith('?:', this.index)) this.index += 2;\n else if (this.peek() === '?') this.fail('only non-capturing special groups are supported');\n const result = this.alternation();\n if (this.peek() !== ')') this.fail('unterminated group');\n this.index++;\n return result;\n }\n if (character === '[') return this.characterClass();\n if (character === '.') {\n this.index++;\n return byteSet(range(0, 255));\n }\n if (character === '\\\\') return this.escape(false).expression;\n if ('*+?{})'.includes(character)) this.fail(`unexpected ${JSON.stringify(character)}`);\n this.index += character.length;\n return literal(character);\n }\n\n private characterClass(): Expression {\n this.index++;\n const negated = this.peek() === '^';\n if (negated) this.index++;\n const bytes = new Uint32Array(8);\n let hasValue = false;\n while (this.peek() !== ']') {\n if (this.peek() === undefined) this.fail('unterminated character class');\n const first = this.classValue();\n if (this.peek() === '-' && this.source[this.index + 1] !== ']') {\n this.index++;\n const last = this.classValue();\n if (first.single === undefined || last.single === undefined || first.single > last.single) {\n this.fail('invalid character class range');\n }\n addRange(bytes, first.single, last.single);\n } else {\n union(bytes, first.bytes);\n }\n hasValue = true;\n }\n this.index++;\n if (!hasValue) this.fail('empty character class');\n if (negated) for (let word = 0; word < bytes.length; ++word) bytes[word] = ~bytes[word];\n return byteSet(bytes);\n }\n\n private classValue(): { bytes: Uint32Array; single?: number } {\n if (this.peek() === '\\\\') {\n const escaped = this.escape(true);\n if (escaped.bytes === undefined) this.fail('multi-byte escapes are unsupported in character classes');\n return { bytes: escaped.bytes, single: escaped.single };\n }\n const character = this.peek()!;\n this.index += character.length;\n const encoded = encoder.encode(character);\n if (encoded.length !== 1) this.fail('non-ASCII character classes are unsupported');\n return { bytes: singleton(encoded[0]), single: encoded[0] };\n }\n\n private escape(inClass: boolean): { expression: Expression; bytes?: Uint32Array; single?: number } {\n this.index++;\n const code = this.peek();\n if (code === undefined) this.fail('trailing escape');\n this.index++;\n if ('dDsSwW'.includes(code)) {\n const bytes = shorthand(code.toLowerCase());\n if (code === code.toUpperCase()) for (let word = 0; word < bytes.length; ++word) bytes[word] = ~bytes[word];\n return { expression: byteSet(bytes), bytes };\n }\n if (code === 'b' && !inClass) this.fail('word boundaries are unsupported');\n let value: number;\n if (code === 'x') value = this.hex(2);\n else if (code === 'u') value = this.hex(4);\n else\n value =\n ({ n: 10, r: 13, t: 9, f: 12, v: 11, b: 8 } as Record<string, number>)[code] ?? code.codePointAt(0)!;\n const text = String.fromCodePoint(value);\n const encoded = encoder.encode(text);\n const bytes = encoded.length === 1 ? singleton(encoded[0]) : undefined;\n return { expression: literal(text), bytes, single: encoded.length === 1 ? encoded[0] : undefined };\n }\n\n private bounds(): [number, number | null] {\n this.index++;\n const minimum = this.decimal();\n let maximum: number | null = minimum;\n if (this.peek() === ',') {\n this.index++;\n maximum = this.peek() === '}' ? null : this.decimal();\n }\n if (this.peek() !== '}') this.fail('unterminated repetition');\n this.index++;\n if (minimum > 1000 || (maximum !== null && (maximum < minimum || maximum > 1000))) {\n this.fail('invalid or excessive repetition');\n }\n return [minimum, maximum];\n }\n\n private decimal(): number {\n const start = this.index;\n while (/\\d/.test(this.peek() ?? '')) this.index++;\n if (start === this.index) this.fail('expected a repetition count');\n return Number(this.source.slice(start, this.index));\n }\n\n private hex(length: number): number {\n const value = this.source.slice(this.index, this.index + length);\n if (!new RegExp(`^[\\\\da-f]{${length}}$`, 'i').test(value)) this.fail('invalid hexadecimal escape');\n this.index += length;\n return Number.parseInt(value, 16);\n }\n\n private peek(): string | undefined {\n return this.source[this.index];\n }\n\n private fail(message: string): never {\n throw new SyntaxError(`Invalid regex at index ${this.index}: ${message}.`);\n }\n}\n\nconst OP_SET = 0;\nconst OP_SPLIT = 1;\nconst OP_JUMP = 2;\nconst OP_MATCH = 3;\nconst UNKNOWN = -2;\n\ntype Fragment = { start: number; outs: number[] };\n\nclass NfaBuilder {\n readonly ops: number[] = [];\n readonly out1: number[] = [];\n readonly out2: number[] = [];\n readonly sets: Uint32Array[] = [];\n\n compile(expression: Expression): Fragment {\n switch (expression.kind) {\n case 'empty': {\n const state = this.emit(OP_JUMP);\n return { start: state, outs: [state << 1] };\n }\n case 'set': {\n const state = this.emit(OP_SET, -1, -1, expression.bytes);\n return { start: state, outs: [state << 1] };\n }\n case 'sequence': {\n let result = this.compile(expression.parts[0]);\n for (let index = 1; index < expression.parts.length; ++index) {\n const next = this.compile(expression.parts[index]);\n this.patch(result.outs, next.start);\n result = { start: result.start, outs: next.outs };\n }\n return result;\n }\n case 'choice': {\n let result = this.compile(expression.choices[0]);\n for (let index = 1; index < expression.choices.length; ++index) {\n const right = this.compile(expression.choices[index]);\n result = {\n start: this.emit(OP_SPLIT, result.start, right.start),\n outs: [...result.outs, ...right.outs],\n };\n }\n return result;\n }\n case 'star': {\n const child = this.compile(expression.child);\n const split = this.emit(OP_SPLIT, child.start);\n this.patch(child.outs, split);\n return { start: split, outs: [(split << 1) | 1] };\n }\n }\n }\n\n emit(op: number, first = -1, second = -1, set?: Uint32Array): number {\n const state = this.ops.length;\n this.ops.push(op);\n this.out1.push(first);\n this.out2.push(second);\n this.sets.push(set ?? new Uint32Array(0));\n return state;\n }\n\n patch(outs: number[], target: number): void {\n for (const output of outs) {\n if (output & 1) this.out2[output >>> 1] = target;\n else this.out1[output >>> 1] = target;\n }\n }\n}\n\nclass RegexMachine {\n readonly initial: number;\n private readonly builder = new NfaBuilder();\n private readonly states: number[][] = [];\n private readonly acceptingStates: boolean[] = [];\n private readonly transitionTables: Int32Array[] = [];\n private readonly stateIds = new Map<string, number>();\n private readonly stateKeys: string[] = [];\n\n constructor(expression: Expression) {\n const fragment = this.builder.compile(expression);\n const match = this.builder.emit(OP_MATCH);\n this.builder.patch(fragment.outs, match);\n this.initial = this.intern(this.closure([fragment.start]));\n }\n\n transition(state: number, byte: number): number {\n if (state < 0) return -1;\n const table = this.transitionTables[state];\n const cached = table[byte];\n if (cached !== UNKNOWN) return cached;\n const seeds: number[] = [];\n for (const pc of this.states[state]) {\n if (this.builder.ops[pc] !== OP_SET) continue;\n const set = this.builder.sets[pc];\n if (set[byte >>> 5] & (1 << (byte & 31))) seeds.push(this.builder.out1[pc]);\n }\n const next = seeds.length === 0 ? -1 : this.intern(this.closure(seeds));\n table[byte] = next;\n return next;\n }\n\n accepting(state: number): boolean {\n return state >= 0 && this.acceptingStates[state];\n }\n\n // The interned NFA state set is intrinsic to the regex (unlike the interned\n // ids, which depend on discovery order), so it is a stable mask-cache key\n // across constraint instances compiled from the same source.\n stateKey(state: number): string | undefined {\n return state >= 0 ? this.stateKeys[state] : undefined;\n }\n\n private closure(seeds: number[]): number[] {\n const result: number[] = [];\n const stack = [...seeds];\n const seen = new Set<number>();\n while (stack.length > 0) {\n const state = stack.pop()!;\n if (state < 0 || seen.has(state)) continue;\n seen.add(state);\n const op = this.builder.ops[state];\n if (op === OP_SPLIT) {\n stack.push(this.builder.out1[state], this.builder.out2[state]);\n } else if (op === OP_JUMP) {\n stack.push(this.builder.out1[state]);\n } else {\n result.push(state);\n }\n }\n result.sort((left, right) => left - right);\n return result;\n }\n\n private intern(active: number[]): number {\n const key = active.join(',');\n const existing = this.stateIds.get(key);\n if (existing !== undefined) return existing;\n if (this.states.length >= 4096) throw new Error('Regex produced too many runtime states.');\n const id = this.states.length;\n const transitions = new Int32Array(256);\n transitions.fill(UNKNOWN);\n this.states.push(active);\n this.acceptingStates.push(active.some((state) => this.builder.ops[state] === OP_MATCH));\n this.transitionTables.push(transitions);\n this.stateIds.set(key, id);\n this.stateKeys.push(key);\n return id;\n }\n}\n\nfunction choice(items: Expression[]): Expression {\n const flattened = items.flatMap((item) => (item.kind === 'choice' ? item.choices : [item]));\n if (flattened.length === 1) return flattened[0];\n return { kind: 'choice', choices: flattened };\n}\n\nfunction sequence(items: Expression[]): Expression {\n const flattened = items\n .flatMap((item) => (item.kind === 'sequence' ? item.parts : [item]))\n .filter((item) => item !== EMPTY);\n if (flattened.length === 0) return EMPTY;\n if (flattened.length === 1) return flattened[0];\n return { kind: 'sequence', parts: flattened };\n}\n\nfunction star(child: Expression): Expression {\n if (child === EMPTY) return EMPTY;\n if (child.kind === 'star') return child;\n return { kind: 'star', child };\n}\n\nfunction literal(value: string): Expression {\n return sequence([...encoder.encode(value)].map((byte) => byteSet(singleton(byte))));\n}\n\nfunction byteSet(bytes: Uint32Array): Expression {\n return { kind: 'set', bytes };\n}\n\nfunction shorthand(code: string): Uint32Array {\n const bytes = new Uint32Array(8);\n if (code === 'd' || code === 'w') addRange(bytes, 48, 57);\n if (code === 'w') {\n addRange(bytes, 65, 90);\n addRange(bytes, 97, 122);\n add(bytes, 95);\n }\n if (code === 's') for (const byte of [9, 10, 11, 12, 13, 32]) add(bytes, byte);\n return bytes;\n}\n\nfunction singleton(byte: number): Uint32Array {\n const bytes = new Uint32Array(8);\n add(bytes, byte);\n return bytes;\n}\n\nfunction range(first: number, last: number): Uint32Array {\n const bytes = new Uint32Array(8);\n addRange(bytes, first, last);\n return bytes;\n}\n\nfunction addRange(bytes: Uint32Array, first: number, last: number): void {\n for (let byte = first; byte <= last; ++byte) add(bytes, byte);\n}\n\nfunction add(bytes: Uint32Array, byte: number): void {\n bytes[byte >>> 5] |= 1 << (byte & 31);\n}\n\nfunction union(target: Uint32Array, source: Uint32Array): void {\n for (let word = 0; word < target.length; ++word) target[word] |= source[word];\n}\n", "import type { TokenizerSource } from './types';\n\ntype RecordLike = Record<string, unknown>;\n\nexport type TokenizerData = {\n tokens: Uint8Array[];\n eosTokenId: number;\n specialTokenIds: Set<number>;\n};\n\nconst encoder = new TextEncoder();\nlet byteLevelMap: Map<string, number> | undefined;\n\nexport function extractTokenizer(tokenizer: TokenizerSource): TokenizerData {\n const source = asRecord(tokenizer, 'tokenizer');\n if (Array.isArray(source.tokens)) {\n return normalizeDirectTokenizer(source);\n }\n\n const tokenizerJson = getTokenizerJson(source);\n const vocabulary = getVocabulary(source, tokenizerJson);\n if (vocabulary === undefined) {\n throw new TypeError('Could not extract the tokenizer vocabulary.');\n }\n\n const vocabularyTokens = Object.keys(vocabulary);\n let size = 0;\n for (const token of vocabularyTokens) {\n const id = Number(vocabulary[token]);\n if (!Number.isInteger(id) || id < 0) throw new TypeError(`Tokenizer has an invalid token ID for ${token}.`);\n if (id + 1 > size) size = id + 1;\n }\n const tokenBytes = tokenBytesConverter(source, tokenizerJson);\n const tokens = new Array<Uint8Array | undefined>(size);\n for (const token of vocabularyTokens) {\n const id = Number(vocabulary[token]);\n tokens[id] = tokenBytes(token, id);\n }\n\n const addedTokens = field(tokenizerJson, 'added_tokens');\n if (Array.isArray(addedTokens)) {\n for (const added of addedTokens) {\n if (!isRecord(added) || !Number.isInteger(added.id)) continue;\n while (tokens.length <= Number(added.id)) tokens.push(undefined);\n const id = Number(added.id);\n tokens[id] = tokenBytes(typeof added.content === 'string' ? added.content : '', id);\n }\n }\n for (let id = 0; id < tokens.length; ++id) {\n if (tokens[id] === undefined) throw new Error(`Tokenizer vocabulary is missing token ID ${id}.`);\n }\n\n const eosTokenId = tokenId(source, tokenizerJson, ['eos_token_id', 'eosTokenId', 'eos_token', 'eosToken']);\n if (eosTokenId === undefined) throw new TypeError('Tokenizer does not expose an EOS token ID.');\n const specialTokenIds = new Set<number>([eosTokenId]);\n for (const value of [\n source.special_token_ids,\n source.specialTokenIds,\n source.all_special_ids,\n source.allSpecialIds,\n ]) {\n if (Array.isArray(value)) for (const id of value) if (Number.isInteger(id)) specialTokenIds.add(Number(id));\n }\n if (Array.isArray(addedTokens)) {\n for (const added of addedTokens) {\n if (isRecord(added) && added.special === true && Number.isInteger(added.id))\n specialTokenIds.add(Number(added.id));\n }\n }\n return { tokens: tokens as Uint8Array[], eosTokenId, specialTokenIds };\n}\n\nfunction normalizeDirectTokenizer(source: RecordLike): TokenizerData {\n const configuredTokens = source.tokens as unknown[];\n const tokens = configuredTokens.map((token, id) => {\n if (!(token instanceof Uint8Array) && !Array.isArray(token)) {\n throw new TypeError(`Tokenizer token ${id} must be a byte array.`);\n }\n const values = Array.from(token as ArrayLike<number>);\n if (values.some((byte) => !Number.isInteger(byte) || byte < 0 || byte > 255))\n throw new TypeError(`Tokenizer token ${id} is invalid.`);\n return Uint8Array.from(values);\n });\n const eosTokenId = Number(source.eosTokenId ?? source.eos_token_id);\n if (!Number.isInteger(eosTokenId) || eosTokenId < 0 || eosTokenId >= tokens.length) {\n throw new TypeError('A valid eos_token_id is required with tokenizer tokens.');\n }\n const configured = source.specialTokenIds ?? source.special_token_ids;\n const specialTokenIds = new Set<number>([eosTokenId]);\n if (Array.isArray(configured)) for (const id of configured) specialTokenIds.add(Number(id));\n return { tokens, eosTokenId, specialTokenIds };\n}\n\nfunction getTokenizerJson(source: RecordLike): unknown {\n const value = source._tokenizerJSON ?? source.tokenizerJSON ?? source.tokenizer_json;\n return typeof value === 'string' ? JSON.parse(value) : value;\n}\n\nfunction getVocabulary(source: RecordLike, tokenizerJson: unknown): RecordLike | undefined {\n const modelVocabulary = field(field(tokenizerJson, 'model'), 'vocab');\n if (isRecord(modelVocabulary)) return modelVocabulary;\n for (const name of ['get_vocab', 'getVocab']) {\n const method = source[name];\n if (typeof method !== 'function') continue;\n const value = method.call(source, true);\n if (value instanceof Map) return Object.fromEntries(value);\n if (isRecord(value)) return value;\n }\n return isRecord(source.vocab) ? source.vocab : undefined;\n}\n\nfunction tokenBytesConverter(source: RecordLike, tokenizerJson: unknown): (token: string, id: number) => Uint8Array {\n const decoder = field(tokenizerJson, 'decoder');\n if (field(decoder, 'type') === 'ByteLevel') return byteLevelTokenBytes;\n\n const decode = source.decode;\n if (typeof decode === 'function') {\n const byteFallback = hasComponent(decoder, 'ByteFallback');\n return (token, id) => {\n const fallback = byteFallback ? /^<0x([\\da-f]{2})>$/i.exec(token) : null;\n if (fallback) return Uint8Array.of(Number.parseInt(fallback[1], 16));\n const decoded = decode.call(source, [id], {\n skip_special_tokens: false,\n clean_up_tokenization_spaces: false,\n });\n if (typeof decoded !== 'string') throw new TypeError(`Tokenizer.decode([${id}]) must return a string.`);\n return encoder.encode(decoded);\n };\n }\n\n if (decoder !== undefined && decoder !== null && field(decoder, 'type') !== 'ByteLevel') {\n throw new TypeError('Tokenizer decoder semantics require a tokenizer with a decode() method.');\n }\n if (hasComponent(decoder, 'ByteLevel') || hasComponent(field(tokenizerJson, 'pre_tokenizer'), 'ByteLevel')) {\n return byteLevelTokenBytes;\n }\n const modelType = field(field(tokenizerJson, 'model'), 'type');\n const sentencePiece = modelType === 'Unigram' || modelType === 'SentencePiece';\n const prefix = field(field(tokenizerJson, 'model'), 'continuing_subword_prefix');\n return (token) => {\n const fallback = /^<0x([\\da-f]{2})>$/i.exec(token);\n if (fallback) return Uint8Array.of(Number.parseInt(fallback[1], 16));\n if (sentencePiece || token.includes('\u2581')) return encoder.encode(token.replaceAll('\u2581', ' '));\n return encoder.encode(\n typeof prefix === 'string' && token.startsWith(prefix) ? token.slice(prefix.length) : token,\n );\n };\n}\n\nfunction byteLevelTokenBytes(token: string): Uint8Array {\n const fallback = /^<0x([\\da-f]{2})>$/i.exec(token);\n if (fallback) return Uint8Array.of(Number.parseInt(fallback[1], 16));\n const map = getByteLevelMap();\n const bytes: number[] = [];\n for (const character of token) {\n const byte = map.get(character);\n if (byte === undefined) bytes.push(...encoder.encode(character));\n else bytes.push(byte);\n }\n return Uint8Array.from(bytes);\n}\n\nfunction getByteLevelMap(): Map<string, number> {\n if (byteLevelMap !== undefined) return byteLevelMap;\n const visible = new Set<number>();\n for (let code = 33; code <= 126; ++code) visible.add(code);\n for (let code = 161; code <= 172; ++code) visible.add(code);\n for (let code = 174; code <= 255; ++code) visible.add(code);\n let extra = 0;\n byteLevelMap = new Map();\n for (let byte = 0; byte < 256; ++byte) {\n byteLevelMap.set(String.fromCharCode(visible.has(byte) ? byte : 256 + extra++), byte);\n }\n return byteLevelMap;\n}\n\nfunction tokenId(source: RecordLike, tokenizerJson: unknown, keys: string[]): number | undefined {\n const vocabulary = getVocabulary(source, tokenizerJson);\n for (const key of keys) {\n const value = source[key] ?? field(tokenizerJson, key);\n if (Number.isInteger(value)) return Number(value);\n if (typeof value === 'string' && Number.isInteger(vocabulary?.[value])) return Number(vocabulary![value]);\n }\n return undefined;\n}\n\nfunction hasComponent(value: unknown, type: string): boolean {\n if (Array.isArray(value)) return value.some((item) => hasComponent(item, type));\n return isRecord(value) && (value.type === type || Object.values(value).some((item) => hasComponent(item, type)));\n}\n\nfunction field(value: unknown, key: string): unknown {\n return isRecord(value) ? value[key] : undefined;\n}\n\nfunction asRecord(value: unknown, name: string): RecordLike {\n if ((typeof value !== 'object' && typeof value !== 'function') || value === null) {\n throw new TypeError(`${name} must be an object.`);\n }\n return value as RecordLike;\n}\n\nfunction isRecord(value: unknown): value is RecordLike {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n", "import { compileJsonSchema } from './json';\nimport { compileRegex } from './regex';\nimport { extractTokenizer, type TokenizerData } from './tokenizer';\nimport type { ConstraintState, JSONSchema, TokenizerSource } from './types';\n\ntype TrieNode = { childBytes: number[]; childNodes: TrieNode[]; tokenIds: number[] };\ntype CachedTokenizer = {\n data: TokenizerData;\n trie: TrieNode;\n whitespaceTokenIds: number[];\n stringExceptionalTrie: TrieNode;\n stringSafeMask: Uint32Array;\n stringSafeCount: number;\n stringSafeLengths: Uint32Array;\n maxStringSafeLength: number;\n maxTokenByteLength: number;\n boundedStringMasks: Map<number, { mask: Uint32Array; count: number }>;\n schemaMaskCaches: WeakMap<object, MaskCache>;\n booleanSchemaMaskCaches: [MaskCache, MaskCache];\n jsonObjectMaskCache: MaskCache;\n regexMaskCaches: Map<string, MaskCache>;\n};\ntype ResponseFormat =\n | { type: 'json_object' }\n | { type: 'json_schema'; json_schema: JSONSchema }\n | { type: 'regex'; regex: string };\n\nexport type TokenConstraint = {\n vocabSize: number;\n fillMask(target: Uint32Array): boolean;\n commit(tokenId: number): boolean;\n repeatedWhitespace(): { tokenIds: readonly number[]; count: number } | undefined;\n};\n\nconst tokenizerCache = new WeakMap<object, CachedTokenizer>();\nconst JSON_OBJECT_SCHEMA: JSONSchema = { type: 'object' };\n\n/**\n * Builds and caches the tokenizer-derived data structures (token tries, string\n * masks) ahead of time. This is the expensive part of creating the first\n * constraint for a tokenizer (hundreds of milliseconds for a 256k vocabulary),\n * so calling this right after loading a model moves that cost off the first\n * generation. Subsequent calls with the same tokenizer are free.\n */\nexport function prepareTokenizer(tokenizerSource: TokenizerSource): void {\n cachedTokenizer(tokenizerSource);\n}\n\nexport function createTokenConstraint(\n tokenizerSource: TokenizerSource,\n responseFormat: ResponseFormat,\n): TokenConstraint {\n const tokenizer = cachedTokenizer(tokenizerSource);\n const machine = createMachine(responseFormat, tokenizer);\n const maskCache = cacheFor(tokenizer, responseFormat);\n let state = machine.initial;\n // Post-transition states discovered during the trie walk, so commit() can\n // reuse them. Entries are only valid when their stamp matches the current\n // fillMask() generation; bumping the stamp invalidates all of them at once\n // without refilling the vocabulary-sized array on every step.\n const tokenStates: Array<unknown> = new Array(tokenizer.data.tokens.length);\n const tokenStamps = new Int32Array(tokenizer.data.tokens.length);\n let stamp = 0;\n let consecutiveWhitespace = 0;\n const tracksJsonWhitespace = responseFormat.type !== 'regex';\n\n return {\n vocabSize: tokenizer.data.tokens.length,\n fillMask(target) {\n const words = Math.ceil(tokenizer.data.tokens.length / 32);\n if (target.length < words) throw new RangeError(`Mask target requires at least ${words} words.`);\n target.fill(0);\n stamp++;\n const cacheKey = machine.maskKey?.(state);\n const cachedMask = cacheKey === undefined ? undefined : maskCache?.get(cacheKey);\n if (cachedMask !== undefined) {\n target.set(cachedMask);\n return true;\n }\n let allowed = 0;\n if (machine.accepting(state)) {\n setBit(target, tokenizer.data.eosTokenId);\n allowed++;\n }\n const stringCapacity = machine.stringCapacity?.(state);\n if (stringCapacity !== undefined) {\n const safe = boundedStringMask(tokenizer, stringCapacity);\n target.set(safe.mask);\n allowed += safe.count;\n }\n const nodes: TrieNode[] = [stringCapacity === undefined ? tokenizer.trie : tokenizer.stringExceptionalTrie];\n const states: unknown[] = [state];\n while (nodes.length > 0) {\n const node = nodes.pop()!;\n const current = states.pop()!;\n for (const tokenId of node.tokenIds) {\n if (tokenizer.data.specialTokenIds.has(tokenId)) continue;\n setBit(target, tokenId);\n tokenStates[tokenId] = current;\n tokenStamps[tokenId] = stamp;\n allowed++;\n }\n for (let index = 0; index < node.childNodes.length; ++index) {\n const next = machine.transition(current, node.childBytes[index]);\n if (!machine.viable(next)) continue;\n nodes.push(node.childNodes[index]);\n states.push(next);\n }\n }\n if (allowed > 0 && cacheKey !== undefined) {\n maskCache?.set(cacheKey, target.subarray(0, words));\n }\n return allowed > 0;\n },\n commit(tokenId) {\n if (!Number.isInteger(tokenId) || tokenId < 0 || tokenId >= tokenizer.data.tokens.length) {\n throw new RangeError(`Token ${tokenId} is outside the tokenizer vocabulary.`);\n }\n if (tokenId === tokenizer.data.eosTokenId) {\n if (!machine.accepting(state)) throw new Error(`Token ${tokenId} does not satisfy the constraint.`);\n return true;\n }\n if (tokenizer.data.specialTokenIds.has(tokenId)) {\n throw new Error(`Token ${tokenId} does not satisfy the constraint.`);\n }\n let next: unknown;\n if (tokenStamps[tokenId] === stamp && stamp > 0) {\n next = tokenStates[tokenId];\n } else {\n next = state;\n for (const byte of tokenizer.data.tokens[tokenId]) next = machine.transition(next, byte);\n }\n stamp++;\n if (!machine.viable(next)) throw new Error(`Token ${tokenId} does not satisfy the constraint.`);\n consecutiveWhitespace =\n tracksJsonWhitespace && next === state && isJsonWhitespace(tokenizer.data.tokens[tokenId])\n ? consecutiveWhitespace + 1\n : 0;\n state = next;\n return false;\n },\n repeatedWhitespace() {\n if (consecutiveWhitespace === 0) return undefined;\n return { tokenIds: tokenizer.whitespaceTokenIds, count: consecutiveWhitespace };\n },\n };\n}\n\nfunction createMachine(responseFormat: ResponseFormat, tokenizer: CachedTokenizer): ConstraintState<unknown> {\n if (responseFormat?.type === 'regex') {\n if (typeof responseFormat.regex !== 'string') throw new TypeError('response_format.regex must be a string.');\n return compileRegex(responseFormat.regex) as ConstraintState<unknown>;\n }\n if (responseFormat?.type === 'json_schema') {\n return compileJsonSchema(responseFormat.json_schema, tokenizer.maxTokenByteLength) as ConstraintState<unknown>;\n }\n if (responseFormat?.type === 'json_object') {\n return compileJsonSchema(JSON_OBJECT_SCHEMA, tokenizer.maxTokenByteLength) as ConstraintState<unknown>;\n }\n throw new TypeError(`Unsupported response format: ${String((responseFormat as { type?: unknown })?.type)}.`);\n}\n\nfunction cachedTokenizer(source: TokenizerSource): CachedTokenizer {\n let cached = tokenizerCache.get(source as object);\n if (cached === undefined) {\n const data = extractTokenizer(source);\n const stringExceptionalTokenIds: number[] = [];\n const whitespaceTokenIds: number[] = [];\n const stringSafeMask = new Uint32Array(Math.ceil(data.tokens.length / 32));\n const stringSafeLengths = new Uint32Array(data.tokens.length);\n let stringSafeCount = 0;\n let maxStringSafeLength = 0;\n let maxTokenByteLength = 0;\n for (let tokenId = 0; tokenId < data.tokens.length; ++tokenId) {\n const special = data.specialTokenIds.has(tokenId);\n if (!special && isJsonWhitespace(data.tokens[tokenId])) whitespaceTokenIds.push(tokenId);\n if (!special && data.tokens[tokenId].length > maxTokenByteLength) {\n maxTokenByteLength = data.tokens[tokenId].length;\n }\n const length = special ? undefined : safeStringTokenLength(data.tokens[tokenId]);\n if (length !== undefined) {\n stringSafeCount++;\n stringSafeLengths[tokenId] = length;\n if (length > maxStringSafeLength) maxStringSafeLength = length;\n setBit(stringSafeMask, tokenId);\n } else {\n stringExceptionalTokenIds.push(tokenId);\n }\n }\n cached = {\n data,\n trie: createTrie(data.tokens),\n whitespaceTokenIds,\n stringExceptionalTrie: createTrie(data.tokens, stringExceptionalTokenIds),\n stringSafeMask,\n stringSafeCount,\n stringSafeLengths,\n maxStringSafeLength,\n maxTokenByteLength,\n boundedStringMasks: new Map(),\n schemaMaskCaches: new WeakMap(),\n booleanSchemaMaskCaches: [new MaskCache(), new MaskCache()],\n jsonObjectMaskCache: new MaskCache(),\n regexMaskCaches: new Map(),\n };\n tokenizerCache.set(source as object, cached);\n }\n return cached;\n}\n\nfunction cacheFor(tokenizer: CachedTokenizer, responseFormat: ResponseFormat): MaskCache | undefined {\n if (responseFormat.type === 'regex') {\n let cache = tokenizer.regexMaskCaches.get(responseFormat.regex);\n if (cache === undefined) {\n cache = new MaskCache();\n if (tokenizer.regexMaskCaches.size >= 16) {\n tokenizer.regexMaskCaches.delete(tokenizer.regexMaskCaches.keys().next().value!);\n }\n tokenizer.regexMaskCaches.set(responseFormat.regex, cache);\n }\n return cache;\n }\n if (responseFormat.type === 'json_object') return tokenizer.jsonObjectMaskCache;\n const schema = responseFormat.json_schema;\n if (typeof schema === 'boolean') return tokenizer.booleanSchemaMaskCaches[schema ? 1 : 0];\n let cache = tokenizer.schemaMaskCaches.get(schema);\n if (cache === undefined) {\n cache = new MaskCache();\n tokenizer.schemaMaskCaches.set(schema, cache);\n }\n return cache;\n}\n\nclass MaskCache {\n private readonly masks = new Map<string, Uint32Array>();\n private words = 0;\n\n get(key: string): Uint32Array | undefined {\n const mask = this.masks.get(key);\n if (mask === undefined) return undefined;\n this.masks.delete(key);\n this.masks.set(key, mask);\n return mask;\n }\n\n set(key: string, source: Uint32Array): void {\n const mask = source.slice();\n const previous = this.masks.get(key);\n if (previous !== undefined) {\n this.words -= previous.length;\n this.masks.delete(key);\n }\n this.masks.set(key, mask);\n this.words += mask.length;\n while (this.masks.size > 256 || this.words > 1_048_576) {\n const oldestKey = this.masks.keys().next().value!;\n const oldest = this.masks.get(oldestKey)!;\n this.masks.delete(oldestKey);\n this.words -= oldest.length;\n }\n }\n}\n\nfunction createTrie(tokens: Uint8Array[], tokenIds?: number[]): TrieNode {\n const root: TrieNode = { childBytes: [], childNodes: [], tokenIds: [] };\n const size = tokenIds === undefined ? tokens.length : tokenIds.length;\n for (let index = 0; index < size; ++index) {\n const tokenId = tokenIds === undefined ? index : tokenIds[index];\n const bytes = tokens[tokenId];\n let node = root;\n for (let position = 0; position < bytes.length; ++position) {\n const byte = bytes[position];\n const childIndex = node.childBytes.indexOf(byte);\n if (childIndex === -1) {\n const child: TrieNode = { childBytes: [], childNodes: [], tokenIds: [] };\n node.childBytes.push(byte);\n node.childNodes.push(child);\n node = child;\n } else {\n node = node.childNodes[childIndex];\n }\n }\n node.tokenIds.push(tokenId);\n }\n return root;\n}\n\nconst safeStringDecoder = new TextDecoder('utf-8', { fatal: true });\n\nfunction safeStringTokenLength(bytes: Uint8Array): number | undefined {\n if (bytes.length === 0) return undefined;\n let length = 0;\n for (const byte of bytes) {\n if (byte < 0x20 || byte === 0x22 || byte === 0x5c) return undefined;\n // Code points equal non-continuation bytes in valid UTF-8.\n if ((byte & 0xc0) !== 0x80) length++;\n }\n try {\n safeStringDecoder.decode(bytes);\n } catch {\n return undefined;\n }\n return length;\n}\n\nfunction boundedStringMask(tokenizer: CachedTokenizer, capacity: number): { mask: Uint32Array; count: number } {\n if (capacity >= tokenizer.maxStringSafeLength) {\n return { mask: tokenizer.stringSafeMask, count: tokenizer.stringSafeCount };\n }\n let cached = tokenizer.boundedStringMasks.get(capacity);\n if (cached !== undefined) return cached;\n const mask = new Uint32Array(Math.ceil(tokenizer.data.tokens.length / 32));\n let count = 0;\n for (let tokenId = 0; tokenId < tokenizer.stringSafeLengths.length; ++tokenId) {\n const length = tokenizer.stringSafeLengths[tokenId];\n if (length === 0 || length > capacity) continue;\n setBit(mask, tokenId);\n count++;\n }\n cached = { mask, count };\n tokenizer.boundedStringMasks.set(capacity, cached);\n return cached;\n}\n\nfunction isJsonWhitespace(bytes: Uint8Array): boolean {\n return bytes.length > 0 && bytes.every((byte) => byte === 0x09 || byte === 0x0a || byte === 0x0d || byte === 0x20);\n}\n\nfunction setBit(mask: Uint32Array, tokenId: number): void {\n mask[tokenId >>> 5] |= 1 << (tokenId & 31);\n}\n", "import { type Tensor } from '@huggingface/transformers';\n\ntype LogitsData = Float32Array | Float64Array | number[];\n\nexport function applyMask(logits: Tensor, mask: Uint32Array, vocabSize: number): void {\n const data = logits.data as LogitsData;\n const stride = logits.dims.at(-1)!;\n if (vocabSize > stride) {\n throw new Error(`Constraint vocabulary size ${vocabSize} exceeds logits vocabulary size ${stride}.`);\n }\n for (let offset = 0; offset < data.length; offset += stride) {\n const fullWords = vocabSize >>> 5;\n for (let word = 0; word < fullWords; ++word) {\n const bits = mask[word] | 0;\n if (bits === -1) continue;\n const start = offset + (word << 5);\n if (bits === 0) {\n data.fill(-Infinity, start, start + 32);\n } else {\n for (let bit = 0; bit < 32; ++bit) {\n if (!(bits & (1 << bit))) data[start + bit] = -Infinity;\n }\n }\n }\n for (let tokenId = fullWords << 5; tokenId < vocabSize; ++tokenId) {\n if (!(mask[tokenId >>> 5] & (1 << (tokenId & 31)))) data[offset + tokenId] = -Infinity;\n }\n data.fill(-Infinity, offset + vocabSize, offset + stride);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["literal", "union", "dependencies", "host", "encoder", "bytes", "encoder", "isRecord", "decoder", "stringCapacity", "tokenId", "cache", "tokenId", "tokenId"]
|
|
7
|
+
}
|