@json-schema-engine/core 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +50 -0
- package/dist/coverage.d.ts +30 -0
- package/dist/coverage.d.ts.map +1 -0
- package/dist/coverage.js +81 -0
- package/dist/coverage.js.map +1 -0
- package/dist/cursor.d.ts +16 -0
- package/dist/cursor.d.ts.map +1 -0
- package/dist/cursor.js +28 -0
- package/dist/cursor.js.map +1 -0
- package/dist/dialect.d.ts +316 -0
- package/dist/dialect.d.ts.map +1 -0
- package/dist/dialect.js +135 -0
- package/dist/dialect.js.map +1 -0
- package/dist/engine.d.ts +203 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +493 -0
- package/dist/engine.js.map +1 -0
- package/dist/index.d.ts +182 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +370 -0
- package/dist/index.js.map +1 -0
- package/dist/json.d.ts +49 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +128 -0
- package/dist/json.js.map +1 -0
- package/dist/keywords/applicator.d.ts +57 -0
- package/dist/keywords/applicator.d.ts.map +1 -0
- package/dist/keywords/applicator.js +789 -0
- package/dist/keywords/applicator.js.map +1 -0
- package/dist/keywords/core.d.ts +42 -0
- package/dist/keywords/core.d.ts.map +1 -0
- package/dist/keywords/core.js +139 -0
- package/dist/keywords/core.js.map +1 -0
- package/dist/keywords/format.d.ts +43 -0
- package/dist/keywords/format.d.ts.map +1 -0
- package/dist/keywords/format.js +101 -0
- package/dist/keywords/format.js.map +1 -0
- package/dist/keywords/metaschemas2019.d.ts +3 -0
- package/dist/keywords/metaschemas2019.d.ts.map +1 -0
- package/dist/keywords/metaschemas2019.js +406 -0
- package/dist/keywords/metaschemas2019.js.map +1 -0
- package/dist/keywords/metaschemas2020.d.ts +3 -0
- package/dist/keywords/metaschemas2020.d.ts.map +1 -0
- package/dist/keywords/metaschemas2020.js +441 -0
- package/dist/keywords/metaschemas2020.js.map +1 -0
- package/dist/keywords/metaschemas6.d.ts +3 -0
- package/dist/keywords/metaschemas6.d.ts.map +1 -0
- package/dist/keywords/metaschemas6.js +221 -0
- package/dist/keywords/metaschemas6.js.map +1 -0
- package/dist/keywords/metaschemas7.d.ts +3 -0
- package/dist/keywords/metaschemas7.d.ts.map +1 -0
- package/dist/keywords/metaschemas7.js +248 -0
- package/dist/keywords/metaschemas7.js.map +1 -0
- package/dist/keywords/unevaluated.d.ts +14 -0
- package/dist/keywords/unevaluated.d.ts.map +1 -0
- package/dist/keywords/unevaluated.js +296 -0
- package/dist/keywords/unevaluated.js.map +1 -0
- package/dist/keywords/validation.d.ts +21 -0
- package/dist/keywords/validation.d.ts.map +1 -0
- package/dist/keywords/validation.js +332 -0
- package/dist/keywords/validation.js.map +1 -0
- package/dist/keywords/vocab2019.d.ts +36 -0
- package/dist/keywords/vocab2019.d.ts.map +1 -0
- package/dist/keywords/vocab2019.js +585 -0
- package/dist/keywords/vocab2019.js.map +1 -0
- package/dist/keywords/vocab2020.d.ts +20 -0
- package/dist/keywords/vocab2020.d.ts.map +1 -0
- package/dist/keywords/vocab2020.js +55 -0
- package/dist/keywords/vocab2020.js.map +1 -0
- package/dist/keywords/vocab7.d.ts +46 -0
- package/dist/keywords/vocab7.d.ts.map +1 -0
- package/dist/keywords/vocab7.js +305 -0
- package/dist/keywords/vocab7.js.map +1 -0
- package/dist/loader.d.ts +41 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +13 -0
- package/dist/loader.js.map +1 -0
- package/dist/lowering.d.ts +371 -0
- package/dist/lowering.d.ts.map +1 -0
- package/dist/lowering.js +59 -0
- package/dist/lowering.js.map +1 -0
- package/dist/output.d.ts +251 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +357 -0
- package/dist/output.js.map +1 -0
- package/dist/records.d.ts +71 -0
- package/dist/records.d.ts.map +1 -0
- package/dist/records.js +150 -0
- package/dist/records.js.map +1 -0
- package/dist/ref.d.ts +10 -0
- package/dist/ref.d.ts.map +1 -0
- package/dist/ref.js +5 -0
- package/dist/ref.js.map +1 -0
- package/dist/regex.d.ts +45 -0
- package/dist/regex.d.ts.map +1 -0
- package/dist/regex.js +163 -0
- package/dist/regex.js.map +1 -0
- package/dist/registry.d.ts +141 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +407 -0
- package/dist/registry.js.map +1 -0
- package/dist/result.d.ts +109 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +112 -0
- package/dist/result.js.map +1 -0
- package/dist/uri.d.ts +18 -0
- package/dist/uri.d.ts.map +1 -0
- package/dist/uri.js +27 -0
- package/dist/uri.js.map +1 -0
- package/dist/walk.d.ts +25 -0
- package/dist/walk.d.ts.map +1 -0
- package/dist/walk.js +65 -0
- package/dist/walk.js.map +1 -0
- package/package.json +32 -0
- package/src/coverage.ts +88 -0
- package/src/cursor.ts +42 -0
- package/src/dialect.ts +428 -0
- package/src/engine.ts +741 -0
- package/src/index.ts +699 -0
- package/src/json.ts +137 -0
- package/src/keywords/applicator.ts +895 -0
- package/src/keywords/core.ts +168 -0
- package/src/keywords/format.ts +143 -0
- package/src/keywords/metaschemas2019.ts +410 -0
- package/src/keywords/metaschemas2020.ts +443 -0
- package/src/keywords/metaschemas6.ts +226 -0
- package/src/keywords/metaschemas7.ts +253 -0
- package/src/keywords/unevaluated.ts +329 -0
- package/src/keywords/validation.ts +627 -0
- package/src/keywords/vocab2019.ts +676 -0
- package/src/keywords/vocab2020.ts +82 -0
- package/src/keywords/vocab7.ts +393 -0
- package/src/loader.ts +60 -0
- package/src/lowering.ts +414 -0
- package/src/output.ts +651 -0
- package/src/records.ts +226 -0
- package/src/ref.ts +14 -0
- package/src/regex.ts +171 -0
- package/src/registry.ts +481 -0
- package/src/result.ts +252 -0
- package/src/uri.ts +35 -0
- package/src/walk.ts +88 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/keywords/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { DialectRegistry, KeywordBehavior } from "../dialect.js";
|
|
2
|
+
/** 2019-09 core vocabulary URI. */
|
|
3
|
+
export declare const VOCAB_CORE_2019_09 = "https://json-schema.org/draft/2019-09/vocab/core";
|
|
4
|
+
/** 2019-09 applicator vocabulary URI. */
|
|
5
|
+
export declare const VOCAB_APPLICATOR_2019 = "https://json-schema.org/draft/2019-09/vocab/applicator";
|
|
6
|
+
/** 2019-09 validation vocabulary URI. */
|
|
7
|
+
export declare const VOCAB_VALIDATION_2019 = "https://json-schema.org/draft/2019-09/vocab/validation";
|
|
8
|
+
/** 2019-09 meta-data vocabulary URI. */
|
|
9
|
+
export declare const VOCAB_META_DATA_2019 = "https://json-schema.org/draft/2019-09/vocab/meta-data";
|
|
10
|
+
/** 2019-09 format vocabulary URI. */
|
|
11
|
+
export declare const VOCAB_FORMAT_2019 = "https://json-schema.org/draft/2019-09/vocab/format";
|
|
12
|
+
/** 2019-09 content vocabulary URI. */
|
|
13
|
+
export declare const VOCAB_CONTENT_2019 = "https://json-schema.org/draft/2019-09/vocab/content";
|
|
14
|
+
/** 2019-09 dialect URI. */
|
|
15
|
+
export declare const DIALECT_2019_09 = "https://json-schema.org/draft/2019-09/schema";
|
|
16
|
+
/**
|
|
17
|
+
* `items` (2019-09 form): a schema value applies to every element (produces
|
|
18
|
+
* `true`, matching 2020-12 `items`' post-`prefixItems` annotation shape); an
|
|
19
|
+
* array value (tuple) applies element-wise to the first N and produces the
|
|
20
|
+
* largest index reached, or `true` when it covers the whole array — this is
|
|
21
|
+
* the pre-2020-12 keyword that `prefixItems`/`items` later split in two, so
|
|
22
|
+
* its annotation shape mirrors 2020-12 `prefixItems`'.
|
|
23
|
+
*/
|
|
24
|
+
export declare const items2019: KeywordBehavior;
|
|
25
|
+
/**
|
|
26
|
+
* `additionalItems`: applies only when the sibling `items` is present *and*
|
|
27
|
+
* an array (tuple form) — a schema-form `items` already covers every
|
|
28
|
+
* element, so `additionalItems` "does nothing" against it (suite: "when
|
|
29
|
+
* items is schema, additionalItems does nothing"). Sibling-read, same
|
|
30
|
+
* pattern as `if`/`then`/`else` and `contains`' `minContains`/`maxContains`
|
|
31
|
+
* siblings.
|
|
32
|
+
*/
|
|
33
|
+
export declare const additionalItems: KeywordBehavior;
|
|
34
|
+
/** Registers the 2019-09 vocabularies and dialect. */
|
|
35
|
+
export declare function registerDialect2019(registry: DialectRegistry, format?: (id: string) => KeywordBehavior): void;
|
|
36
|
+
//# sourceMappingURL=vocab2019.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vocab2019.d.ts","sourceRoot":"","sources":["../../src/keywords/vocab2019.ts"],"names":[],"mappings":"AASA,OAAO,EACL,eAAe,EACf,eAAe,EAIhB,MAAM,eAAe,CAAC;AA2BvB,mCAAmC;AACnC,eAAO,MAAM,kBAAkB,qDAAkB,CAAC;AAClD,yCAAyC;AACzC,eAAO,MAAM,qBAAqB,2DACwB,CAAC;AAC3D,yCAAyC;AACzC,eAAO,MAAM,qBAAqB,2DACwB,CAAC;AAC3D,wCAAwC;AACxC,eAAO,MAAM,oBAAoB,0DACwB,CAAC;AAC1D,qCAAqC;AACrC,eAAO,MAAM,iBAAiB,uDACwB,CAAC;AACvD,sCAAsC;AACtC,eAAO,MAAM,kBAAkB,wDACwB,CAAC;AAExD,2BAA2B;AAC3B,eAAO,MAAM,eAAe,iDAAiD,CAAC;AAqB9E;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,EAAE,eA4HvB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,eA+E7B,CAAC;AA0VF,sDAAsD;AACtD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,MAAM,GAAE,CAAC,EAAE,EAAE,MAAM,KAAK,eAAgC,GACvD,IAAI,CAsBN"}
|
|
@@ -0,0 +1,585 @@
|
|
|
1
|
+
// 2019-09 dialect (DESIGN.md M4-A): assembled from its own vocabulary URIs,
|
|
2
|
+
// reusing 2020-12 behavior objects wherever spec semantics are identical
|
|
3
|
+
// (validation is byte-for-byte the same set; most applicators too) and
|
|
4
|
+
// registering new behaviors only where 2019-09 diverges — no `$dynamicRef`/
|
|
5
|
+
// `$dynamicAnchor` (2019-09 has `$recursiveRef`/`$recursiveAnchor` instead),
|
|
6
|
+
// tuple-form `items` folds what 2020-12 splits into `prefixItems`+`items`,
|
|
7
|
+
// and `additionalItems` (retired in 2020-12) fills the gap that leaves.
|
|
8
|
+
import { isObject } from "../json.js";
|
|
9
|
+
import { identifiers2019, } from "../dialect.js";
|
|
10
|
+
import { childCursor } from "../cursor.js";
|
|
11
|
+
import { lowerIR } from "../lowering.js";
|
|
12
|
+
import { coreVocabulary, VOCAB_CORE_2019, $recursiveRef, $recursiveAnchor, annotationOnly, SELF, } from "./core.js";
|
|
13
|
+
import { allOf, anyOf, oneOf, not, ifKeyword, conditionalBranch, dependentSchemas, properties, patternProperties, propertyNames, additionalProperties, contains, } from "./applicator.js";
|
|
14
|
+
import { validationVocabulary } from "./validation.js";
|
|
15
|
+
/** 2019-09 core vocabulary URI. */
|
|
16
|
+
export const VOCAB_CORE_2019_09 = VOCAB_CORE_2019;
|
|
17
|
+
/** 2019-09 applicator vocabulary URI. */
|
|
18
|
+
export const VOCAB_APPLICATOR_2019 = "https://json-schema.org/draft/2019-09/vocab/applicator";
|
|
19
|
+
/** 2019-09 validation vocabulary URI. */
|
|
20
|
+
export const VOCAB_VALIDATION_2019 = "https://json-schema.org/draft/2019-09/vocab/validation";
|
|
21
|
+
/** 2019-09 meta-data vocabulary URI. */
|
|
22
|
+
export const VOCAB_META_DATA_2019 = "https://json-schema.org/draft/2019-09/vocab/meta-data";
|
|
23
|
+
/** 2019-09 format vocabulary URI. */
|
|
24
|
+
export const VOCAB_FORMAT_2019 = "https://json-schema.org/draft/2019-09/vocab/format";
|
|
25
|
+
/** 2019-09 content vocabulary URI. */
|
|
26
|
+
export const VOCAB_CONTENT_2019 = "https://json-schema.org/draft/2019-09/vocab/content";
|
|
27
|
+
/** 2019-09 dialect URI. */
|
|
28
|
+
export const DIALECT_2019_09 = "https://json-schema.org/draft/2019-09/schema";
|
|
29
|
+
const id = (name) => `${VOCAB_APPLICATOR_2019}#${name}`;
|
|
30
|
+
// 2019-09 core: same keyword set as 2020-12's core minus $dynamicRef/
|
|
31
|
+
// $dynamicAnchor, plus $recursiveRef/$recursiveAnchor. $id/$schema/$anchor/
|
|
32
|
+
// $vocabulary/$comment/$defs behaviors are draft-agnostic (structural or
|
|
33
|
+
// value-is-the-position), so they're shared as-is — the milestone contract
|
|
34
|
+
// allows a shared behavior's id to stay a 2020-12 URI.
|
|
35
|
+
const core2019Vocabulary = {
|
|
36
|
+
$ref: coreVocabulary.$ref,
|
|
37
|
+
$defs: coreVocabulary.$defs,
|
|
38
|
+
$id: coreVocabulary.$id,
|
|
39
|
+
$schema: coreVocabulary.$schema,
|
|
40
|
+
$anchor: coreVocabulary.$anchor,
|
|
41
|
+
$vocabulary: coreVocabulary.$vocabulary,
|
|
42
|
+
$comment: coreVocabulary.$comment,
|
|
43
|
+
$recursiveRef,
|
|
44
|
+
$recursiveAnchor,
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* `items` (2019-09 form): a schema value applies to every element (produces
|
|
48
|
+
* `true`, matching 2020-12 `items`' post-`prefixItems` annotation shape); an
|
|
49
|
+
* array value (tuple) applies element-wise to the first N and produces the
|
|
50
|
+
* largest index reached, or `true` when it covers the whole array — this is
|
|
51
|
+
* the pre-2020-12 keyword that `prefixItems`/`items` later split in two, so
|
|
52
|
+
* its annotation shape mirrors 2020-12 `prefixItems`'.
|
|
53
|
+
*/
|
|
54
|
+
export const items2019 = {
|
|
55
|
+
id: id("items"),
|
|
56
|
+
// evaluatesIndexes mirrors prefixItems (array form: a fixed-count prefix)
|
|
57
|
+
// and items (schema form: every index from 0 — 2019-09 folds prefixItems
|
|
58
|
+
// into this same keyword, so there's no separate sibling to start after)
|
|
59
|
+
// — the coverage facts unevaluatedItems2019 needs for static licensing.
|
|
60
|
+
analyze: (value) => Array.isArray(value)
|
|
61
|
+
? {
|
|
62
|
+
subschemas: value.map((_, i) => [i]),
|
|
63
|
+
applications: value.map((_, i) => ({
|
|
64
|
+
path: [i],
|
|
65
|
+
mode: "childByIndex",
|
|
66
|
+
conditional: false,
|
|
67
|
+
asserts: true,
|
|
68
|
+
})),
|
|
69
|
+
produces: [id("items")],
|
|
70
|
+
evaluatesIndexes: { kind: "prefix", count: value.length },
|
|
71
|
+
}
|
|
72
|
+
: {
|
|
73
|
+
...SELF,
|
|
74
|
+
applications: [
|
|
75
|
+
{ path: [], mode: "childSweep", conditional: false, asserts: true },
|
|
76
|
+
],
|
|
77
|
+
produces: [id("items")],
|
|
78
|
+
evaluatesIndexes: { kind: "allFrom", start: 0 },
|
|
79
|
+
},
|
|
80
|
+
// Two forms, same as evaluate(): tuple (per-index, guarded by the array's
|
|
81
|
+
// length like prefixItems' compiled form) or schema (every element from
|
|
82
|
+
// index 0, like `items`' compiled form but with no sibling prefixItems to
|
|
83
|
+
// start after — 2019-09 has no such keyword). Each form's annotation
|
|
84
|
+
// mirrors evaluate(): tuple produces the largest applied index (or true
|
|
85
|
+
// when it covered the array), schema produces true iff it applied to any
|
|
86
|
+
// element.
|
|
87
|
+
lower: (value, lctx) => {
|
|
88
|
+
if (Array.isArray(value)) {
|
|
89
|
+
value.forEach((_, i) => {
|
|
90
|
+
lctx.emit(lowerIR.when(lowerIR.and(lowerIR.typeIs(lctx.instance, "array"), lowerIR.cmp(">", lowerIR.helper("lengthOf", lctx.instance), lowerIR.constant(i))), [
|
|
91
|
+
{
|
|
92
|
+
kind: "apply",
|
|
93
|
+
apply: {
|
|
94
|
+
path: [i],
|
|
95
|
+
cursor: {
|
|
96
|
+
kind: "child",
|
|
97
|
+
of: { kind: "here" },
|
|
98
|
+
segment: i,
|
|
99
|
+
},
|
|
100
|
+
fold: "allMustPass",
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
]));
|
|
104
|
+
});
|
|
105
|
+
lctx.emit({
|
|
106
|
+
kind: "produce",
|
|
107
|
+
value: { kind: "collectedIndexes", render: "largestOrTrue" },
|
|
108
|
+
});
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const b = lctx.binding();
|
|
112
|
+
lctx.emit(lowerIR.when(lowerIR.typeIs(lctx.instance, "array"), [
|
|
113
|
+
{
|
|
114
|
+
kind: "forEachIndex",
|
|
115
|
+
target: lctx.instance,
|
|
116
|
+
binding: b,
|
|
117
|
+
start: 0,
|
|
118
|
+
body: [
|
|
119
|
+
{
|
|
120
|
+
kind: "apply",
|
|
121
|
+
apply: {
|
|
122
|
+
path: [],
|
|
123
|
+
cursor: {
|
|
124
|
+
kind: "child",
|
|
125
|
+
of: { kind: "here" },
|
|
126
|
+
segment: { kind: "binding", id: b },
|
|
127
|
+
},
|
|
128
|
+
fold: "allMustPass",
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
]));
|
|
134
|
+
lctx.emit({
|
|
135
|
+
kind: "produce",
|
|
136
|
+
value: { kind: "collectedIndexes", render: "appliedTrue" },
|
|
137
|
+
});
|
|
138
|
+
},
|
|
139
|
+
evaluate: (value, cursor, ctx) => {
|
|
140
|
+
if (!Array.isArray(cursor.value))
|
|
141
|
+
return true;
|
|
142
|
+
if (Array.isArray(value)) {
|
|
143
|
+
const n = Math.min(value.length, cursor.value.length);
|
|
144
|
+
let ok = true;
|
|
145
|
+
for (let i = 0; i < n; i++) {
|
|
146
|
+
if (!ctx.apply(["items", i], childCursor(cursor, i, cursor.value[i])))
|
|
147
|
+
ok = false;
|
|
148
|
+
}
|
|
149
|
+
// Dependency data only from an accepting keyword (Appendix D; see
|
|
150
|
+
// applicator.ts properties) — the same rule for every producer here.
|
|
151
|
+
if (n > 0 && ok)
|
|
152
|
+
ctx.produce(n === cursor.value.length ? true : n - 1);
|
|
153
|
+
return ok;
|
|
154
|
+
}
|
|
155
|
+
let ok = true;
|
|
156
|
+
let applied = false;
|
|
157
|
+
for (let i = 0; i < cursor.value.length; i++) {
|
|
158
|
+
applied = true;
|
|
159
|
+
if (!ctx.apply(["items"], childCursor(cursor, i, cursor.value[i])))
|
|
160
|
+
ok = false;
|
|
161
|
+
}
|
|
162
|
+
if (applied && ok)
|
|
163
|
+
ctx.produce(true);
|
|
164
|
+
return ok;
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
/**
|
|
168
|
+
* `additionalItems`: applies only when the sibling `items` is present *and*
|
|
169
|
+
* an array (tuple form) — a schema-form `items` already covers every
|
|
170
|
+
* element, so `additionalItems` "does nothing" against it (suite: "when
|
|
171
|
+
* items is schema, additionalItems does nothing"). Sibling-read, same
|
|
172
|
+
* pattern as `if`/`then`/`else` and `contains`' `minContains`/`maxContains`
|
|
173
|
+
* siblings.
|
|
174
|
+
*/
|
|
175
|
+
export const additionalItems = {
|
|
176
|
+
id: id("additionalItems"),
|
|
177
|
+
// Sibling read at plan time (AnalyzeContext.schema), same as `if`
|
|
178
|
+
// declaring applications for `then`/`else`: no edge at all when `items`
|
|
179
|
+
// isn't an array, so the planner never visits a target this keyword can
|
|
180
|
+
// never reach.
|
|
181
|
+
analyze: (_value, context) => {
|
|
182
|
+
const siblingItems = context?.schema.items;
|
|
183
|
+
if (!Array.isArray(siblingItems)) {
|
|
184
|
+
return { ...SELF, produces: [id("additionalItems")] };
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
...SELF,
|
|
188
|
+
applications: [
|
|
189
|
+
{ path: [], mode: "childSweep", conditional: false, asserts: true },
|
|
190
|
+
],
|
|
191
|
+
produces: [id("additionalItems")],
|
|
192
|
+
evaluatesIndexes: { kind: "allFrom", start: siblingItems.length },
|
|
193
|
+
};
|
|
194
|
+
},
|
|
195
|
+
// Sibling `items` is plan-time data (lctx.schema.items): when it isn't an
|
|
196
|
+
// array, this keyword contributes nothing at all, so the lowering emits
|
|
197
|
+
// no statements — same static-read pattern as `if`/`then`/`else`.
|
|
198
|
+
lower: (_value, lctx) => {
|
|
199
|
+
const siblingItems = lctx.schema.items;
|
|
200
|
+
if (!Array.isArray(siblingItems))
|
|
201
|
+
return;
|
|
202
|
+
const start = siblingItems.length;
|
|
203
|
+
const b = lctx.binding();
|
|
204
|
+
lctx.emit(lowerIR.when(lowerIR.typeIs(lctx.instance, "array"), [
|
|
205
|
+
{
|
|
206
|
+
kind: "forEachIndex",
|
|
207
|
+
target: lctx.instance,
|
|
208
|
+
binding: b,
|
|
209
|
+
start,
|
|
210
|
+
body: [
|
|
211
|
+
{
|
|
212
|
+
kind: "apply",
|
|
213
|
+
apply: {
|
|
214
|
+
path: [],
|
|
215
|
+
cursor: {
|
|
216
|
+
kind: "child",
|
|
217
|
+
of: { kind: "here" },
|
|
218
|
+
segment: { kind: "binding", id: b },
|
|
219
|
+
},
|
|
220
|
+
fold: "allMustPass",
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
],
|
|
224
|
+
},
|
|
225
|
+
]));
|
|
226
|
+
// Annotation: true iff it applied to any element past the tuple prefix.
|
|
227
|
+
lctx.emit({
|
|
228
|
+
kind: "produce",
|
|
229
|
+
value: { kind: "collectedIndexes", render: "appliedTrue" },
|
|
230
|
+
});
|
|
231
|
+
},
|
|
232
|
+
evaluate: (_value, cursor, ctx) => {
|
|
233
|
+
if (!Array.isArray(cursor.value))
|
|
234
|
+
return true;
|
|
235
|
+
const siblingItems = ctx.schema.items;
|
|
236
|
+
if (!Array.isArray(siblingItems))
|
|
237
|
+
return true;
|
|
238
|
+
let ok = true;
|
|
239
|
+
let applied = false;
|
|
240
|
+
for (let i = siblingItems.length; i < cursor.value.length; i++) {
|
|
241
|
+
applied = true;
|
|
242
|
+
if (!ctx.apply(["additionalItems"], childCursor(cursor, i, cursor.value[i])))
|
|
243
|
+
ok = false;
|
|
244
|
+
}
|
|
245
|
+
// Boolean data: additionalItems has no index-range shape of its own,
|
|
246
|
+
// only whether it applied to any element.
|
|
247
|
+
if (applied && ok)
|
|
248
|
+
ctx.produce(true);
|
|
249
|
+
return ok;
|
|
250
|
+
},
|
|
251
|
+
};
|
|
252
|
+
const applicator2019Vocabulary = {
|
|
253
|
+
allOf,
|
|
254
|
+
anyOf,
|
|
255
|
+
oneOf,
|
|
256
|
+
not,
|
|
257
|
+
if: ifKeyword,
|
|
258
|
+
then: conditionalBranch(id("then"), "then", true),
|
|
259
|
+
else: conditionalBranch(id("else"), "else", false),
|
|
260
|
+
dependentSchemas,
|
|
261
|
+
properties,
|
|
262
|
+
patternProperties,
|
|
263
|
+
propertyNames,
|
|
264
|
+
additionalProperties,
|
|
265
|
+
items: items2019,
|
|
266
|
+
additionalItems,
|
|
267
|
+
contains,
|
|
268
|
+
};
|
|
269
|
+
// unevaluatedItems/unevaluatedProperties (2019-09): same consumer pattern as
|
|
270
|
+
// unevaluated.ts, wired to this dialect's producer ids — items2019 folds
|
|
271
|
+
// prefixItems+items into one id, and additionalItems is a genuinely new
|
|
272
|
+
// producer 2020-12 doesn't have. Spec-wise these two live in the applicator
|
|
273
|
+
// vocabulary (2019-09 has no separate unevaluated vocabulary yet).
|
|
274
|
+
const unevaluatedItems2019 = {
|
|
275
|
+
id: `${VOCAB_APPLICATOR_2019}#unevaluatedItems`,
|
|
276
|
+
phase: 1,
|
|
277
|
+
analyze: () => ({
|
|
278
|
+
subschemas: SELF.subschemas,
|
|
279
|
+
consumes: [
|
|
280
|
+
items2019.id,
|
|
281
|
+
additionalItems.id,
|
|
282
|
+
contains.id,
|
|
283
|
+
`${VOCAB_APPLICATOR_2019}#unevaluatedItems`,
|
|
284
|
+
],
|
|
285
|
+
produces: [`${VOCAB_APPLICATOR_2019}#unevaluatedItems`],
|
|
286
|
+
// Self-covering (D9a): once this keyword runs, everything is evaluated —
|
|
287
|
+
// needed both for the planner's own edge (childSweep to its own
|
|
288
|
+
// position) and so an outer scope's coverage computation can fold this
|
|
289
|
+
// node's post-success contribution.
|
|
290
|
+
evaluatesIndexes: { kind: "all" },
|
|
291
|
+
applications: [
|
|
292
|
+
{ path: [], mode: "childSweep", conditional: false, asserts: true },
|
|
293
|
+
],
|
|
294
|
+
}),
|
|
295
|
+
// Static-coverage path only (D9a), same discipline as 2020-12
|
|
296
|
+
// unevaluatedItems (unevaluated.ts): a sibling `contains` always declares
|
|
297
|
+
// evaluatesIndexes: dynamic (applicator.ts), so the planner classifies
|
|
298
|
+
// this node interpreted whenever `contains` is present — lower() is never
|
|
299
|
+
// called with a null/incomplete coverage, and never needs the
|
|
300
|
+
// per-index coveredIdx set evaluate() tracks (that set is populated only
|
|
301
|
+
// from a dynamic `contains` match list, which forces interpretation).
|
|
302
|
+
lower: (_value, lctx) => {
|
|
303
|
+
// Runtime-coverage path (phase B activates it): same shape as 2020-12
|
|
304
|
+
// unevaluatedItems — fold the channel into a coveredPrefix/coveredIdx
|
|
305
|
+
// summary over this array's length and sweep the uncovered indexes.
|
|
306
|
+
if (lctx.runtimeCoverage()) {
|
|
307
|
+
const f = lctx.binding();
|
|
308
|
+
const b = lctx.binding();
|
|
309
|
+
lctx.emit(lowerIR.when(lowerIR.typeIs(lctx.instance, "array"), [
|
|
310
|
+
{ kind: "coverageFold", half: "indexes", binding: f },
|
|
311
|
+
{
|
|
312
|
+
kind: "forEachIndex",
|
|
313
|
+
target: lctx.instance,
|
|
314
|
+
binding: b,
|
|
315
|
+
start: 0,
|
|
316
|
+
body: [
|
|
317
|
+
lowerIR.when(lowerIR.not({
|
|
318
|
+
kind: "coverageCovers",
|
|
319
|
+
fold: f,
|
|
320
|
+
target: { kind: "binding", id: b },
|
|
321
|
+
}), [
|
|
322
|
+
{
|
|
323
|
+
kind: "apply",
|
|
324
|
+
apply: {
|
|
325
|
+
path: [],
|
|
326
|
+
cursor: {
|
|
327
|
+
kind: "child",
|
|
328
|
+
of: { kind: "here" },
|
|
329
|
+
segment: { kind: "binding", id: b },
|
|
330
|
+
},
|
|
331
|
+
fold: "allMustPass",
|
|
332
|
+
},
|
|
333
|
+
},
|
|
334
|
+
]),
|
|
335
|
+
],
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
kind: "produce",
|
|
339
|
+
value: { kind: "collectedIndexes", render: "appliedTrue" },
|
|
340
|
+
},
|
|
341
|
+
]));
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
const coverage = lctx.staticCoverage();
|
|
345
|
+
if (coverage === null) {
|
|
346
|
+
throw new Error("unevaluatedItems2019 lowering requires static coverage (planner bug)");
|
|
347
|
+
}
|
|
348
|
+
if (coverage.coversAllIndexes)
|
|
349
|
+
return; // statically vacuous
|
|
350
|
+
const b = lctx.binding();
|
|
351
|
+
lctx.emit(lowerIR.when(lowerIR.typeIs(lctx.instance, "array"), [
|
|
352
|
+
{
|
|
353
|
+
kind: "forEachIndex",
|
|
354
|
+
target: lctx.instance,
|
|
355
|
+
binding: b,
|
|
356
|
+
start: coverage.prefixCount,
|
|
357
|
+
body: [
|
|
358
|
+
{
|
|
359
|
+
kind: "apply",
|
|
360
|
+
apply: {
|
|
361
|
+
path: [],
|
|
362
|
+
cursor: {
|
|
363
|
+
kind: "child",
|
|
364
|
+
of: { kind: "here" },
|
|
365
|
+
segment: { kind: "binding", id: b },
|
|
366
|
+
},
|
|
367
|
+
fold: "allMustPass",
|
|
368
|
+
},
|
|
369
|
+
},
|
|
370
|
+
],
|
|
371
|
+
},
|
|
372
|
+
]));
|
|
373
|
+
// Annotation: true iff it applied to any unevaluated index.
|
|
374
|
+
lctx.emit({
|
|
375
|
+
kind: "produce",
|
|
376
|
+
value: { kind: "collectedIndexes", render: "appliedTrue" },
|
|
377
|
+
});
|
|
378
|
+
},
|
|
379
|
+
evaluate: (_value, cursor, ctx) => {
|
|
380
|
+
if (!Array.isArray(cursor.value))
|
|
381
|
+
return true;
|
|
382
|
+
const length = cursor.value.length;
|
|
383
|
+
let coveredPrefix = 0;
|
|
384
|
+
const coveredIdx = new Set();
|
|
385
|
+
for (const p of ctx.visible([
|
|
386
|
+
items2019.id,
|
|
387
|
+
additionalItems.id,
|
|
388
|
+
contains.id,
|
|
389
|
+
unevaluatedItems2019.id,
|
|
390
|
+
])) {
|
|
391
|
+
if (p.behaviorId === contains.id) {
|
|
392
|
+
if (p.data === true)
|
|
393
|
+
coveredPrefix = length;
|
|
394
|
+
else
|
|
395
|
+
for (const i of p.data)
|
|
396
|
+
coveredIdx.add(i);
|
|
397
|
+
}
|
|
398
|
+
else if (p.data === true) {
|
|
399
|
+
coveredPrefix = length;
|
|
400
|
+
}
|
|
401
|
+
else if (p.behaviorId === items2019.id) {
|
|
402
|
+
coveredPrefix = Math.max(coveredPrefix, p.data + 1);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
let ok = true;
|
|
406
|
+
let applied = false;
|
|
407
|
+
for (let i = coveredPrefix; i < length; i++) {
|
|
408
|
+
if (coveredIdx.has(i))
|
|
409
|
+
continue;
|
|
410
|
+
applied = true;
|
|
411
|
+
if (!ctx.apply(["unevaluatedItems"], childCursor(cursor, i, cursor.value[i])))
|
|
412
|
+
ok = false;
|
|
413
|
+
}
|
|
414
|
+
if (applied && ok)
|
|
415
|
+
ctx.produce(true);
|
|
416
|
+
return ok;
|
|
417
|
+
},
|
|
418
|
+
};
|
|
419
|
+
const unevaluatedProperties2019 = {
|
|
420
|
+
id: `${VOCAB_APPLICATOR_2019}#unevaluatedProperties`,
|
|
421
|
+
phase: 1,
|
|
422
|
+
analyze: () => ({
|
|
423
|
+
subschemas: SELF.subschemas,
|
|
424
|
+
consumes: [
|
|
425
|
+
properties.id,
|
|
426
|
+
patternProperties.id,
|
|
427
|
+
additionalProperties.id,
|
|
428
|
+
`${VOCAB_APPLICATOR_2019}#unevaluatedProperties`,
|
|
429
|
+
],
|
|
430
|
+
produces: [`${VOCAB_APPLICATOR_2019}#unevaluatedProperties`],
|
|
431
|
+
evaluatesNames: { kind: "all" },
|
|
432
|
+
applications: [
|
|
433
|
+
{ path: [], mode: "childSweep", conditional: false, asserts: true },
|
|
434
|
+
],
|
|
435
|
+
}),
|
|
436
|
+
// Static-coverage path only (D9a) — same discipline as 2020-12
|
|
437
|
+
// unevaluatedProperties (unevaluated.ts). `properties`/`patternProperties`/
|
|
438
|
+
// `additionalProperties` here are the shared 2020-12 behaviors
|
|
439
|
+
// (applicator.ts), so their evaluatesNames facts are identical.
|
|
440
|
+
lower: (_value, lctx) => {
|
|
441
|
+
// Runtime-coverage path (phase B activates it): same shape as 2020-12
|
|
442
|
+
// unevaluatedProperties — fold the channel into an evaluated-name set and
|
|
443
|
+
// sweep the names it does not cover.
|
|
444
|
+
if (lctx.runtimeCoverage()) {
|
|
445
|
+
const f = lctx.binding();
|
|
446
|
+
const b = lctx.binding();
|
|
447
|
+
lctx.emit(lowerIR.when(lowerIR.typeIs(lctx.instance, "object"), [
|
|
448
|
+
{ kind: "coverageFold", half: "names", binding: f },
|
|
449
|
+
{
|
|
450
|
+
kind: "forEachKey",
|
|
451
|
+
target: lctx.instance,
|
|
452
|
+
binding: b,
|
|
453
|
+
body: [
|
|
454
|
+
lowerIR.when(lowerIR.not({
|
|
455
|
+
kind: "coverageCovers",
|
|
456
|
+
fold: f,
|
|
457
|
+
target: { kind: "binding", id: b },
|
|
458
|
+
}), [
|
|
459
|
+
{
|
|
460
|
+
kind: "apply",
|
|
461
|
+
apply: {
|
|
462
|
+
path: [],
|
|
463
|
+
cursor: {
|
|
464
|
+
kind: "child",
|
|
465
|
+
of: { kind: "here" },
|
|
466
|
+
segment: { kind: "binding", id: b },
|
|
467
|
+
},
|
|
468
|
+
fold: "allMustPass",
|
|
469
|
+
},
|
|
470
|
+
},
|
|
471
|
+
]),
|
|
472
|
+
],
|
|
473
|
+
},
|
|
474
|
+
{ kind: "produce", value: { kind: "collectedNames" } },
|
|
475
|
+
]));
|
|
476
|
+
return;
|
|
477
|
+
}
|
|
478
|
+
const coverage = lctx.staticCoverage();
|
|
479
|
+
if (coverage === null) {
|
|
480
|
+
throw new Error("unevaluatedProperties2019 lowering requires static coverage (planner bug)");
|
|
481
|
+
}
|
|
482
|
+
// The sweep is statically vacuous when sibling coverage is total, but the
|
|
483
|
+
// produce is not: evaluate() emits an (empty) names annotation for every
|
|
484
|
+
// object regardless. So the object-type guard always wraps a produce; the
|
|
485
|
+
// sweep is added only when some name can still be unevaluated.
|
|
486
|
+
const body = [];
|
|
487
|
+
if (!coverage.coversAllNames) {
|
|
488
|
+
const b = lctx.binding();
|
|
489
|
+
const covered = [
|
|
490
|
+
...coverage.names.map((n) => lowerIR.cmp("===", { kind: "binding", id: b }, lowerIR.constant(n))),
|
|
491
|
+
...coverage.patterns.map((p) => lowerIR.regexTest(p, { kind: "binding", id: b })),
|
|
492
|
+
];
|
|
493
|
+
body.push({
|
|
494
|
+
kind: "forEachKey",
|
|
495
|
+
target: lctx.instance,
|
|
496
|
+
binding: b,
|
|
497
|
+
body: [
|
|
498
|
+
lowerIR.when(covered.length === 0
|
|
499
|
+
? lowerIR.constant(true)
|
|
500
|
+
: lowerIR.not(lowerIR.or(...covered)), [
|
|
501
|
+
{
|
|
502
|
+
kind: "apply",
|
|
503
|
+
apply: {
|
|
504
|
+
path: [],
|
|
505
|
+
cursor: {
|
|
506
|
+
kind: "child",
|
|
507
|
+
of: { kind: "here" },
|
|
508
|
+
segment: { kind: "binding", id: b },
|
|
509
|
+
},
|
|
510
|
+
fold: "allMustPass",
|
|
511
|
+
},
|
|
512
|
+
},
|
|
513
|
+
]),
|
|
514
|
+
],
|
|
515
|
+
});
|
|
516
|
+
}
|
|
517
|
+
body.push({ kind: "produce", value: { kind: "collectedNames" } });
|
|
518
|
+
// Produce iff the instance is an object (nothing otherwise), matching
|
|
519
|
+
// evaluate()'s object-type guard before ctx.produce.
|
|
520
|
+
lctx.emit(lowerIR.when(lowerIR.typeIs(lctx.instance, "object"), body));
|
|
521
|
+
},
|
|
522
|
+
evaluate: (_value, cursor, ctx) => {
|
|
523
|
+
if (!isObject(cursor.value))
|
|
524
|
+
return true;
|
|
525
|
+
const seen = new Set();
|
|
526
|
+
for (const p of ctx.visible([
|
|
527
|
+
properties.id,
|
|
528
|
+
patternProperties.id,
|
|
529
|
+
additionalProperties.id,
|
|
530
|
+
unevaluatedProperties2019.id,
|
|
531
|
+
])) {
|
|
532
|
+
for (const name of p.data)
|
|
533
|
+
seen.add(name);
|
|
534
|
+
}
|
|
535
|
+
let ok = true;
|
|
536
|
+
const matched = [];
|
|
537
|
+
for (const name of Object.keys(cursor.value)) {
|
|
538
|
+
if (seen.has(name))
|
|
539
|
+
continue;
|
|
540
|
+
matched.push(name);
|
|
541
|
+
if (!ctx.apply(["unevaluatedProperties"], childCursor(cursor, name, cursor.value[name])))
|
|
542
|
+
ok = false;
|
|
543
|
+
}
|
|
544
|
+
if (ok)
|
|
545
|
+
ctx.produce(matched);
|
|
546
|
+
return ok;
|
|
547
|
+
},
|
|
548
|
+
};
|
|
549
|
+
Object.assign(applicator2019Vocabulary, {
|
|
550
|
+
unevaluatedItems: unevaluatedItems2019,
|
|
551
|
+
unevaluatedProperties: unevaluatedProperties2019,
|
|
552
|
+
});
|
|
553
|
+
const metaDataVocabulary2019 = Object.fromEntries([
|
|
554
|
+
"title",
|
|
555
|
+
"description",
|
|
556
|
+
"default",
|
|
557
|
+
"deprecated",
|
|
558
|
+
"readOnly",
|
|
559
|
+
"writeOnly",
|
|
560
|
+
"examples",
|
|
561
|
+
].map((name) => [name, annotationOnly(`${VOCAB_META_DATA_2019}#${name}`)]));
|
|
562
|
+
const contentVocabulary2019 = Object.fromEntries(["contentMediaType", "contentEncoding", "contentSchema"].map((name) => [
|
|
563
|
+
name,
|
|
564
|
+
annotationOnly(`${VOCAB_CONTENT_2019}#${name}`),
|
|
565
|
+
]));
|
|
566
|
+
/** Registers the 2019-09 vocabularies and dialect. */
|
|
567
|
+
export function registerDialect2019(registry, format = annotationOnly) {
|
|
568
|
+
registry.registerVocabulary(VOCAB_CORE_2019_09, core2019Vocabulary);
|
|
569
|
+
registry.registerVocabulary(VOCAB_APPLICATOR_2019, applicator2019Vocabulary);
|
|
570
|
+
registry.registerVocabulary(VOCAB_VALIDATION_2019, validationVocabulary);
|
|
571
|
+
registry.registerVocabulary(VOCAB_META_DATA_2019, metaDataVocabulary2019);
|
|
572
|
+
registry.registerVocabulary(VOCAB_FORMAT_2019, {
|
|
573
|
+
format: format(`${VOCAB_FORMAT_2019}#format`),
|
|
574
|
+
});
|
|
575
|
+
registry.registerVocabulary(VOCAB_CONTENT_2019, contentVocabulary2019);
|
|
576
|
+
registry.registerDialect(DIALECT_2019_09, [
|
|
577
|
+
VOCAB_CORE_2019_09,
|
|
578
|
+
VOCAB_APPLICATOR_2019,
|
|
579
|
+
VOCAB_VALIDATION_2019,
|
|
580
|
+
VOCAB_META_DATA_2019,
|
|
581
|
+
VOCAB_FORMAT_2019,
|
|
582
|
+
VOCAB_CONTENT_2019,
|
|
583
|
+
], { identifiers: identifiers2019 });
|
|
584
|
+
}
|
|
585
|
+
//# sourceMappingURL=vocab2019.js.map
|