Added
- Canonicalization of a recursive schema with no finite witness, which now folds to
false. - Canonicalization of
$dynamicRefand$recursiveRef, which resolve through the dynamic scope and stay symbolic like any other reference. A dangling$dynamicReferrors rather than stayingRaw. - Canonicalization of
minContainsunderuniqueItems, where a demand asking for more matches than its own schema has distinct values now folds tofalse. - Canonicalization of a Draft 4
patternPropertiescoverage closed byadditionalProperties: false, spelled as the closed map it was parsed from. - Canonicalization of a
oneOfwhose branches repeat, where a repeated branch can never contribute exactly one match. - Canonicalization of a
$refwhose target is an empty schema, which now folds tofalse. - Canonicalization of
unevaluatedItemsbesideallOf, where every branch must pass and so the indexes they evaluate are known without the instance. - Canonicalization of
unevaluatedPropertiesbesideallOf, where every branch must pass and so what they evaluate is known without the instance. - Canonicalization of a Draft 4
typelist holdingintegerbeside other types withenum, which previously modeled only when spelled as anallOf. - Canonicalization of
patternPropertiespatterns matching finitely many keys, such as^a$and^(a|b)$. - Canonicalization of
unevaluatedPropertiesandunevaluatedItemswhen no in-place applicator sits beside them.
Fixed
additionalItemsvalues that are not schemas silently ignored beside an array-formitems(they should fail the build likeadditionalProperties).additionalItemsbeside a booleanitemsrejecting every instance, such as{"additionalItems": false, "items": false}.additionalItemsbeside a non-arrayitemsvalue failing schema compilation with an error blamingadditionalItems(the keyword should be ignored).- Draft 4 rejecting a size bound at or past
2^64, such as{"maxItems": 18446744073709551616}. - An integer past the
f64range admitted by a fractional bound it exceeds, such as1e400under{"exclusiveMaximum": 0.1}. - A
$refat the root of an$id-bearing subresource dropped as a self-reference when its pointer matched the one that reached that subresource. - Canonicalization reusing one definition's body for a same-named definition in another resource, when the name spells a canonical URI.
unevaluatedItemscountingprefixItemsas evaluating elements before Draft 2020-12, where it is not a keyword.
Performance
- Up to 70% faster
evaluateby building each location in a single allocation instead of two, reusing the instance location a node already built, and caching evaluation paths across instance nodes.