@texaryn/schema-json 0.6.3 → 0.7.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.
Files changed (43) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/README.md +34 -2
  3. package/dist/adapter.d.ts +2 -0
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js +42 -25
  6. package/dist/adapter.js.map +1 -1
  7. package/dist/bare-maps.d.ts +3 -0
  8. package/dist/bare-maps.d.ts.map +1 -0
  9. package/dist/bare-maps.js +44 -0
  10. package/dist/bare-maps.js.map +1 -0
  11. package/dist/identity.d.ts +26 -0
  12. package/dist/identity.d.ts.map +1 -0
  13. package/dist/identity.js +280 -0
  14. package/dist/identity.js.map +1 -0
  15. package/dist/index.d.ts +1 -0
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +1 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/instance-pointer.d.ts +9 -0
  20. package/dist/instance-pointer.d.ts.map +1 -0
  21. package/dist/instance-pointer.js +115 -0
  22. package/dist/instance-pointer.js.map +1 -0
  23. package/dist/normalize.d.ts +3 -0
  24. package/dist/normalize.d.ts.map +1 -0
  25. package/dist/normalize.js +118 -0
  26. package/dist/normalize.js.map +1 -0
  27. package/dist/projection-shape.d.ts +25 -0
  28. package/dist/projection-shape.d.ts.map +1 -0
  29. package/dist/projection-shape.js +74 -0
  30. package/dist/projection-shape.js.map +1 -0
  31. package/dist/projection.d.ts +7 -1
  32. package/dist/projection.d.ts.map +1 -1
  33. package/dist/projection.js +202 -111
  34. package/dist/projection.js.map +1 -1
  35. package/dist/root-reference.d.ts +4 -0
  36. package/dist/root-reference.d.ts.map +1 -0
  37. package/dist/root-reference.js +86 -0
  38. package/dist/root-reference.js.map +1 -0
  39. package/dist/schema-graph.d.ts +29 -0
  40. package/dist/schema-graph.d.ts.map +1 -0
  41. package/dist/schema-graph.js +365 -0
  42. package/dist/schema-graph.js.map +1 -0
  43. package/package.json +3 -3
@@ -0,0 +1,280 @@
1
+ import { isSchemaNode, settings } from 'json-schema-library';
2
+ import { POSITION, escape } from './schema-graph.js';
3
+ export function newProjectionCache(dialect, cyclic, schemaAt) {
4
+ return { dialect, schemaAt, closure: new Map(), info: new Map(), cyclic };
5
+ }
6
+ const IN_PLACE_BRANCHES = ['if', 'then', 'else'];
7
+ const UNLOCATED_CHILDREN = [...IN_PLACE_BRANCHES, 'contains'];
8
+ const NON_APPLYING = new Set([
9
+ '$ref',
10
+ '$schema',
11
+ '$id',
12
+ '$anchor',
13
+ '$dynamicAnchor',
14
+ '$recursiveAnchor',
15
+ '$vocabulary',
16
+ '$comment',
17
+ '$defs',
18
+ 'definitions',
19
+ POSITION,
20
+ ]);
21
+ // Draft 7 ignores a $ref's siblings, and the library copies the annotations to merge onto the target.
22
+ export function onlyPoints(node) {
23
+ if (node.getDraftVersion() === 'draft-07')
24
+ return true;
25
+ return Object.keys(node.schema).every((keyword) => NON_APPLYING.has(keyword) || settings.PROPERTIES_TO_MERGE.includes(keyword));
26
+ }
27
+ function markerOf(node) {
28
+ const schema = node.schema;
29
+ const marker = typeof schema === 'object' && schema !== null && Object.hasOwn(schema, POSITION) ? schema[POSITION] : undefined;
30
+ return typeof marker === 'string' ? marker : undefined;
31
+ }
32
+ // A boolean carries no marker, nor does an if, then or else json-schema-library parses beside a draft-07 $ref.
33
+ // The library locates an if, then, else or contains by its parent's location plus the whole evaluation path, and reduceNode strips if, then and else.
34
+ function unmarkedPosition(node) {
35
+ const own = typeof node.schemaLocation === 'string' ? node.schemaLocation : '#';
36
+ const parent = node.parent;
37
+ if (!parent || parent === node)
38
+ return own;
39
+ const branch = UNLOCATED_CHILDREN.find((keyword) => parent[keyword] === node || node.evaluationPath === `${parent.evaluationPath}/${keyword}`);
40
+ if (branch)
41
+ return `${positionOf(parent)}/${branch}`;
42
+ const parentOwn = parent.schemaLocation;
43
+ if (typeof parentOwn === 'string' && (own === parentOwn || own.startsWith(`${parentOwn}/`))) {
44
+ const suffix = own.slice(parentOwn.length);
45
+ const keyword = suffix.split('/')[1] ?? '';
46
+ const key = memberKey(parent, keyword, node) ?? strippedMemberKey(parent, keyword, node, suffix);
47
+ return key === undefined ? `${positionOf(parent)}${suffix}` : `${positionOf(parent)}/${keyword}/${escape(key)}`;
48
+ }
49
+ return own;
50
+ }
51
+ const memberKeys = new WeakMap();
52
+ function keyIn(map, entries, node) {
53
+ let keys = memberKeys.get(map);
54
+ if (!keys) {
55
+ const index = new Map();
56
+ for (const [key, child] of entries())
57
+ if (isSchemaNode(child) && !index.has(child))
58
+ index.set(child, key);
59
+ memberKeys.set(map, index);
60
+ keys = index;
61
+ }
62
+ return keys.get(node);
63
+ }
64
+ function memberKey(parent, keyword, node) {
65
+ const map = keyword === 'properties' ? parent.properties
66
+ : keyword === '$defs' || keyword === 'definitions' ? parent.$defs
67
+ : keyword === 'dependencies' || keyword === 'dependentSchemas' ? parent.dependentSchemas
68
+ : undefined;
69
+ if (map)
70
+ return keyIn(map, () => Object.entries(map), node);
71
+ const patterns = parent.patternProperties;
72
+ if (keyword === 'patternProperties' && patterns) {
73
+ return keyIn(patterns, () => patterns.map(({ name, node: child }) => [name, child]), node);
74
+ }
75
+ return undefined;
76
+ }
77
+ const STRIPPED_MAPS = new Set(['$defs', 'definitions', 'dependencies', 'dependentSchemas', 'patternProperties']);
78
+ function strippedMemberKey(parent, keyword, node, suffix) {
79
+ if (!STRIPPED_MAPS.has(keyword) || !node.evaluationPath.startsWith(`${parent.evaluationPath}/${keyword}/`))
80
+ return undefined;
81
+ const spelled = suffix.slice(keyword.length + 2);
82
+ return keyword === 'definitions' ? decodeURIComponent(spelled).replace(/~1/g, '/').replace(/~0/g, '~') : spelled;
83
+ }
84
+ export function positionOf(node) {
85
+ return markerOf(node) ?? unmarkedPosition(node);
86
+ }
87
+ // resolveRef() compiles a fresh copy of the target on every call; one copy per
88
+ // static reference site and compiled document is enough.
89
+ const resolvedReferences = new WeakMap();
90
+ function resolveFresh(node) {
91
+ const next = node.resolveRef();
92
+ return isSchemaNode(next) ? next : undefined;
93
+ }
94
+ export function followRef(node) {
95
+ if (node.$ref === '') {
96
+ const root = node.context?.rootNode;
97
+ if (root)
98
+ return root;
99
+ }
100
+ const context = node.context;
101
+ const raw = node.schema;
102
+ const dynamic = typeof raw === 'object' && raw !== null && ('$dynamicRef' in raw || '$recursiveRef' in raw);
103
+ if (!context || dynamic)
104
+ return resolveFresh(node);
105
+ let cache = resolvedReferences.get(context);
106
+ if (!cache) {
107
+ cache = new Map();
108
+ resolvedReferences.set(context, cache);
109
+ }
110
+ // The target is compiled with these keywords of the referring node copied onto it.
111
+ const copied = JSON.stringify(Object.fromEntries(settings.PROPERTIES_TO_MERGE.filter((keyword) => raw?.[keyword] !== undefined).map((keyword) => [
112
+ keyword,
113
+ raw[keyword],
114
+ ])));
115
+ // A copy keeps the referring site's library location, which default sources read.
116
+ const key = `${positionOf(node)}|${String(node.schemaLocation)}|${node.$ref}|${copied}`;
117
+ if (cache.has(key))
118
+ return cache.get(key);
119
+ const resolved = resolveFresh(node);
120
+ cache.set(key, resolved);
121
+ return resolved;
122
+ }
123
+ // Read from the document rather than the node: a node reached through `$ref`
124
+ // carries the referring site's merged annotations.
125
+ function authoredSchema(node, cache) {
126
+ const marker = markerOf(node);
127
+ return (marker === undefined ? undefined : cache.schemaAt(marker)) ?? node.schema;
128
+ }
129
+ function closureOf(node, cache, stack) {
130
+ const position = positionOf(node);
131
+ const cached = cache.closure.get(position);
132
+ if (cached)
133
+ return cached;
134
+ if (stack.has(position))
135
+ return [];
136
+ stack.add(position);
137
+ const out = new Set();
138
+ const addAllOf = () => {
139
+ for (const branch of node.allOf ?? [])
140
+ for (const p of closureOf(branch, cache, stack))
141
+ out.add(p);
142
+ };
143
+ if (typeof node.$ref === 'string') {
144
+ if (cache.dialect !== 'draft-07') {
145
+ const raw = authoredSchema(node, cache);
146
+ if (typeof raw === 'object' && raw !== null && Object.keys(raw).some((keyword) => !NON_APPLYING.has(keyword))) {
147
+ out.add(position);
148
+ }
149
+ addAllOf();
150
+ }
151
+ const target = followRef(node);
152
+ if (target)
153
+ for (const p of closureOf(target, cache, stack))
154
+ out.add(p);
155
+ }
156
+ else {
157
+ out.add(position);
158
+ addAllOf();
159
+ }
160
+ stack.delete(position);
161
+ const result = [...out];
162
+ cache.closure.set(position, result);
163
+ return result;
164
+ }
165
+ // A member of a branch that never applies declares its location, but its references do not extend live identity.
166
+ const deadMembers = new WeakMap();
167
+ export function locationInfo(declaring, cache) {
168
+ const members = deadMembers.get(declaring);
169
+ const memoKey = declaring.map((node) => `${positionOf(node)}${members?.has(node) ? '|dead' : ''}`).sort().join('\n');
170
+ const cached = cache.info.get(memoKey);
171
+ if (cached)
172
+ return cached;
173
+ const identity = new Set();
174
+ for (const node of declaring) {
175
+ if (members?.has(node))
176
+ identity.add(positionOf(node));
177
+ else
178
+ for (const p of closureOf(node, cache, new Set()))
179
+ identity.add(p);
180
+ }
181
+ let cycle = false;
182
+ const expanded = [];
183
+ const deadNodes = new Set();
184
+ const seen = new Map();
185
+ const visitAll = (node, stack, dead = false) => {
186
+ const position = positionOf(node);
187
+ if (stack.has(position)) {
188
+ if (!dead)
189
+ cycle = true;
190
+ return;
191
+ }
192
+ const first = seen.get(position);
193
+ if (first && (dead || !deadNodes.has(first)))
194
+ return;
195
+ if (first)
196
+ deadNodes.delete(first);
197
+ else {
198
+ seen.set(position, node);
199
+ expanded.push(node);
200
+ if (dead)
201
+ deadNodes.add(node);
202
+ }
203
+ stack.add(position);
204
+ if (typeof node.$ref === 'string') {
205
+ const target = followRef(node);
206
+ if (target)
207
+ visitAll(target, stack, dead);
208
+ if (cache.dialect === 'draft-07') {
209
+ stack.delete(position);
210
+ return;
211
+ }
212
+ }
213
+ const raw = authoredSchema(node, cache);
214
+ const condition = typeof raw === 'object' && raw !== null && 'if' in raw ? raw.if : undefined;
215
+ for (const keyword of IN_PLACE_BRANCHES) {
216
+ const branch = node[keyword];
217
+ const never = (keyword === 'then' && (condition === undefined || condition === false)) ||
218
+ (keyword === 'else' && (condition === undefined || condition === true));
219
+ if (branch && isSchemaNode(branch))
220
+ visitAll(branch, stack, dead || never);
221
+ }
222
+ for (const branches of [node.allOf, node.anyOf, node.oneOf]) {
223
+ for (const branch of branches ?? [])
224
+ visitAll(branch, stack, dead);
225
+ }
226
+ for (const dependency of Object.values(node.dependentSchemas ?? {})) {
227
+ if (dependency && isSchemaNode(dependency))
228
+ visitAll(dependency, stack, dead);
229
+ }
230
+ stack.delete(position);
231
+ };
232
+ for (const node of declaring)
233
+ visitAll(node, new Set());
234
+ const info = {
235
+ key: [...identity].sort().join('\n'),
236
+ cycle,
237
+ cyclic: [...identity].some((position) => cache.cyclic.has(position)),
238
+ expanded,
239
+ dead: deadNodes,
240
+ children: new Map(),
241
+ };
242
+ cache.info.set(memoKey, info);
243
+ return info;
244
+ }
245
+ function declaredBelow(info, member) {
246
+ const found = [];
247
+ const dead = new Set();
248
+ const seen = new Set();
249
+ for (const node of info.expanded) {
250
+ const child = member(node);
251
+ if (!child)
252
+ continue;
253
+ const position = positionOf(child);
254
+ if (seen.has(position))
255
+ continue;
256
+ seen.add(position);
257
+ found.push(child);
258
+ if (info.dead.has(node))
259
+ dead.add(child);
260
+ }
261
+ if (dead.size > 0)
262
+ deadMembers.set(found, dead);
263
+ return found;
264
+ }
265
+ export function childDeclaring(info, key) {
266
+ const cached = info.children.get(key);
267
+ if (cached)
268
+ return cached;
269
+ const found = declaredBelow(info, (node) => node.properties?.[key]);
270
+ info.children.set(key, found);
271
+ return found;
272
+ }
273
+ export function itemDeclaring(info) {
274
+ info.items ??= declaredBelow(info, (node) => {
275
+ const items = node.items;
276
+ return items && isSchemaNode(items) ? items : undefined;
277
+ });
278
+ return info.items;
279
+ }
280
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { createJsonSchemaAdapter } from './adapter.js';
2
2
  export type { AdapterConfig } from './types.js';
3
3
  export type { Dialect } from './dialect.js';
4
+ export { SameLocationCycleError } from './schema-graph.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA"}
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export { createJsonSchemaAdapter } from './adapter.js';
2
+ export { SameLocationCycleError } from './schema-graph.js';
2
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAGtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,9 @@
1
+ export interface ReportedError {
2
+ code: string;
3
+ value: unknown;
4
+ missingKey?: string;
5
+ lastKey?: string;
6
+ }
7
+ export type PointerResolver = (jslPointer: string, reported: ReportedError) => string;
8
+ export declare function pointerResolver(data: unknown): PointerResolver;
9
+ //# sourceMappingURL=instance-pointer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-pointer.d.ts","sourceRoot":"","sources":["../src/instance-pointer.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,KAAK,MAAM,CAAA;AAqFrF,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,CA0B9D"}
@@ -0,0 +1,115 @@
1
+ import { escape as escapeSegment } from './schema-graph.js';
2
+ const MAX_NODES = 2_000_000;
3
+ const MAX_CHARS = 4_000_000;
4
+ const MAX_STRINGIFIED = 64;
5
+ function childrenOf(node) {
6
+ if (Array.isArray(node))
7
+ return Array.from(node, (item, index) => [String(index), item]);
8
+ return Object.keys(node).map((key) => [key, node[key]]);
9
+ }
10
+ function hasSlashKey(data) {
11
+ const stack = [data];
12
+ for (let visited = 0; stack.length > 0 && visited < MAX_NODES; visited += 1) {
13
+ const node = stack.pop();
14
+ if (typeof node !== 'object' || node === null)
15
+ continue;
16
+ for (const [key, child] of childrenOf(node)) {
17
+ if (key.includes('/'))
18
+ return true;
19
+ stack.push(child);
20
+ }
21
+ }
22
+ return false;
23
+ }
24
+ function indexOf(data) {
25
+ if (!hasSlashKey(data))
26
+ return undefined;
27
+ const index = new Map();
28
+ const stack = [];
29
+ let chars = 0;
30
+ let id = 0;
31
+ const open = (node, joined, pointer) => {
32
+ if (typeof node !== 'object' || node === null)
33
+ return true;
34
+ const frames = [];
35
+ for (const [key, value] of childrenOf(node)) {
36
+ const path = `${joined}/${key}`;
37
+ const entry = { id: 0, pointer: `${pointer}/${escapeSegment(key)}`, key, value, parent: node };
38
+ chars += path.length + entry.pointer.length;
39
+ if (chars > MAX_CHARS)
40
+ return false;
41
+ frames.push({ entry, path });
42
+ }
43
+ for (let i = frames.length - 1; i >= 0; i -= 1)
44
+ stack.push(frames[i]);
45
+ return true;
46
+ };
47
+ if (!open(data, '', ''))
48
+ return undefined;
49
+ while (stack.length > 0) {
50
+ const { entry, path } = stack.pop();
51
+ entry.id = id++;
52
+ const known = index.get(path);
53
+ if (known)
54
+ known.push(entry);
55
+ else
56
+ index.set(path, [entry]);
57
+ if (!open(entry.value, path, entry.pointer))
58
+ return undefined;
59
+ }
60
+ return index;
61
+ }
62
+ function narrow(candidates, reported) {
63
+ let current = candidates;
64
+ const keep = (test) => {
65
+ const next = current.filter(test);
66
+ if (next.length > 0)
67
+ current = next;
68
+ };
69
+ if (reported.lastKey !== undefined)
70
+ keep((entry) => entry.key === reported.lastKey);
71
+ if (current.length > 1)
72
+ keep((entry) => Object.is(entry.value, reported.value));
73
+ if (current.length > 1)
74
+ keep((entry) => Object.is(entry.parent, reported.value));
75
+ if (current.length > 1 && current.length <= MAX_STRINGIFIED && typeof reported.value === 'string') {
76
+ const text = reported.value;
77
+ keep((entry) => {
78
+ try {
79
+ return JSON.stringify(entry.value) === text;
80
+ }
81
+ catch {
82
+ return false;
83
+ }
84
+ });
85
+ }
86
+ return current;
87
+ }
88
+ export function pointerResolver(data) {
89
+ let index;
90
+ let indexed = false;
91
+ const taken = new Map();
92
+ const locate = (raw, reported) => {
93
+ const escaped = raw.includes('~') ? `/${raw.slice(1).split('/').map(escapeSegment).join('/')}` : raw;
94
+ if (!indexed) {
95
+ index = indexOf(data);
96
+ indexed = true;
97
+ }
98
+ const candidates = index?.get(raw);
99
+ if (!candidates)
100
+ return escaped;
101
+ const current = candidates.length > 1 ? narrow(candidates, reported) : candidates;
102
+ if (current.length === 1)
103
+ return current[0].pointer;
104
+ const group = `${reported.code}\0${raw}\0${current.map((entry) => entry.id).join(',')}`;
105
+ const used = taken.get(group) ?? 0;
106
+ taken.set(group, used + 1);
107
+ return current[used % current.length].pointer;
108
+ };
109
+ return (jslPointer, reported) => {
110
+ const raw = jslPointer.replace(/^#/, '');
111
+ const base = raw === '' || !raw.startsWith('/') ? raw : locate(raw, reported);
112
+ return reported.missingKey === undefined ? base : `${base}/${escapeSegment(reported.missingKey)}`;
113
+ };
114
+ }
115
+ //# sourceMappingURL=instance-pointer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-pointer.js","sourceRoot":"","sources":["../src/instance-pointer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Keeps a branch the specification never evaluates when a reference or an identifier could reach it. */
2
+ export declare function withoutUnreachableBranches(document: unknown): unknown;
3
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAyFA,yGAAyG;AACzG,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAmCrE"}
@@ -0,0 +1,118 @@
1
+ const SINGLE = new Set([
2
+ 'additionalItems',
3
+ 'additionalProperties',
4
+ 'contains',
5
+ 'contentSchema',
6
+ 'else',
7
+ 'if',
8
+ 'items',
9
+ 'not',
10
+ 'propertyNames',
11
+ 'then',
12
+ 'unevaluatedItems',
13
+ 'unevaluatedProperties',
14
+ ]);
15
+ const LIST = new Set(['allOf', 'anyOf', 'items', 'oneOf', 'prefixItems']);
16
+ const MAP = new Set(['$defs', 'definitions', 'dependencies', 'dependentSchemas', 'patternProperties', 'properties']);
17
+ const REFERENCES = new Set(['$ref', '$dynamicRef', '$recursiveRef']);
18
+ const IDENTIFIERS = new Set(['$id', '$anchor', '$dynamicAnchor']);
19
+ const ALIASES = { definitions: '$defs', dependentSchemas: 'dependencies', prefixItems: 'items', additionalItems: 'items' };
20
+ const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
21
+ const escape = (segment) => segment.replace(/~/g, '~0').replace(/\//g, '~1');
22
+ const unescape = (segment) => segment.replace(/~1/g, '/').replace(/~0/g, '~');
23
+ const alias = (segment) => (Object.hasOwn(ALIASES, segment) ? ALIASES[segment] : segment);
24
+ const below = (p, key, member = false) => ({
25
+ escaped: `${p.escaped}/${escape(key)}`,
26
+ raw: `${p.raw}/${key}`,
27
+ registry: `${p.registry}/${member ? encodeURIComponent(escape(key)) : key}`,
28
+ keys: [...p.keys, key],
29
+ });
30
+ function decode(fragment) {
31
+ try {
32
+ return decodeURIComponent(fragment);
33
+ }
34
+ catch {
35
+ return fragment;
36
+ }
37
+ }
38
+ function copy(value) {
39
+ if (Array.isArray(value))
40
+ return value.map(copy);
41
+ if (!isRecord(value) || ![Object.prototype, null].includes(Object.getPrototypeOf(value)))
42
+ return value;
43
+ return Object.fromEntries(Object.entries(value).map(([key, child]) => [key, copy(child)]));
44
+ }
45
+ const aliased = (pointer) => pointer.split('/').map(alias).join('/');
46
+ function spellings(reference) {
47
+ const trimmed = reference.replace(/#+$/, '');
48
+ const first = trimmed.indexOf('#');
49
+ if (first < 0 && !trimmed.startsWith('/'))
50
+ return [];
51
+ const fragments = first < 0 ? [trimmed] : [...new Set([trimmed.slice(first + 1), trimmed.slice(trimmed.lastIndexOf('#') + 1)])];
52
+ return fragments.map((fragment) => {
53
+ const pointer = fragment === '' || fragment.startsWith('/') ? fragment : `/${fragment}`;
54
+ const segments = pointer === '' ? [] : pointer.slice(1).split('/').map((s) => alias(unescape(decode(s))));
55
+ return { strings: [pointer, decode(pointer)].map(aliased), segments };
56
+ });
57
+ }
58
+ function referencePointers(value, found) {
59
+ if (Array.isArray(value))
60
+ for (const item of value)
61
+ referencePointers(item, found);
62
+ else if (isRecord(value)) {
63
+ for (const [key, child] of Object.entries(value)) {
64
+ if (REFERENCES.has(key) && typeof child === 'string')
65
+ found.push(...spellings(child));
66
+ referencePointers(child, found);
67
+ }
68
+ }
69
+ return found;
70
+ }
71
+ function declaresIdentifier(value) {
72
+ if (Array.isArray(value))
73
+ return value.some(declaresIdentifier);
74
+ if (!isRecord(value))
75
+ return false;
76
+ return Object.entries(value).some(([key, child]) => (IDENTIFIERS.has(key) && typeof child === 'string') || declaresIdentifier(child));
77
+ }
78
+ const unreachable = (schema, keyword) => (keyword === 'then' && (schema.if === undefined || schema.if === false)) ||
79
+ (keyword === 'else' && (schema.if === undefined || schema.if === true));
80
+ const startsWith = (a, b) => b.length <= a.length && b.every((s, i) => a[i] === s);
81
+ /** Keeps a branch the specification never evaluates when a reference or an identifier could reach it. */
82
+ export function withoutUnreachableBranches(document) {
83
+ const references = referencePointers(document, []);
84
+ const reached = (at, bases) => bases.some((base) => {
85
+ const relative = [at.escaped.slice(base.escaped.length), at.raw.slice(base.raw.length), at.registry.slice(base.registry.length)].map(aliased);
86
+ const keys = at.keys.slice(base.keys.length).map(alias);
87
+ return references.some((reference) => reference.strings.some((s) => relative.some((pointer) => s === pointer || s.startsWith(`${pointer}/`))) ||
88
+ startsWith(reference.segments, keys));
89
+ });
90
+ const schemaAt = (schema, position, bases) => {
91
+ if (!isRecord(schema))
92
+ return copy(schema);
93
+ const within = typeof schema.$id === 'string' && position.keys.length > 0 ? [...bases, position] : bases;
94
+ const dropped = (key) => unreachable(schema, key) && !reached(below(position, key), within) && !declaresIdentifier(schema[key]);
95
+ const branches = ['then', 'else'].filter((key) => key in schema);
96
+ const bare = typeof schema.if === 'boolean' && branches.length > 0 && branches.every(dropped) && !reached(below(position, 'if'), within);
97
+ const entries = [];
98
+ for (const [key, value] of Object.entries(schema)) {
99
+ const at = below(position, key);
100
+ if (dropped(key) || (key === 'if' && bare))
101
+ continue;
102
+ if (SINGLE.has(key) && (isRecord(value) || typeof value === 'boolean'))
103
+ entries.push([key, schemaAt(value, at, within)]);
104
+ else if (LIST.has(key) && Array.isArray(value))
105
+ entries.push([key, value.map((item, i) => schemaAt(item, below(at, String(i)), within))]);
106
+ else if (MAP.has(key) && isRecord(value)) {
107
+ const member = key === '$defs' || key === 'definitions';
108
+ entries.push([key, Object.fromEntries(Object.entries(value).map(([name, m]) => [name, schemaAt(m, below(at, name, member), within)]))]);
109
+ }
110
+ else
111
+ entries.push([key, copy(value)]);
112
+ }
113
+ return Object.fromEntries(entries);
114
+ };
115
+ const root = { escaped: '', raw: '', registry: '', keys: [] };
116
+ return schemaAt(document, root, [root]);
117
+ }
118
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { JsonPointer, JsonSchemaType, ProjectionDiagnostic } from '@texaryn/core';
2
+ declare const KEYWORD_FAMILIES: {
3
+ readonly object: readonly ["properties", "patternProperties", "additionalProperties", "propertyNames", "required", "minProperties", "maxProperties", "dependentSchemas", "dependentRequired", "dependencies", "unevaluatedProperties"];
4
+ readonly array: readonly ["items", "prefixItems", "additionalItems", "contains", "minItems", "maxItems", "uniqueItems", "minContains", "maxContains", "unevaluatedItems"];
5
+ readonly string: readonly ["minLength", "maxLength", "pattern"];
6
+ readonly number: readonly ["minimum", "maximum", "exclusiveMinimum", "exclusiveMaximum", "multipleOf"];
7
+ };
8
+ export type KeywordFamily = keyof typeof KEYWORD_FAMILIES;
9
+ export type ProjectionShape = {
10
+ kind: 'resolved';
11
+ type: JsonSchemaType;
12
+ } | {
13
+ kind: 'ambiguous';
14
+ families: KeywordFamily[];
15
+ } | {
16
+ kind: 'none';
17
+ };
18
+ export declare function projectionTypeFamilies(schema: Record<string, unknown>): Set<KeywordFamily>;
19
+ export declare function shapeOfFamilies(families: ReadonlySet<KeywordFamily>): ProjectionShape;
20
+ export declare function inferProjectionShape(schema: Record<string, unknown>): ProjectionShape;
21
+ export declare function shapeDiagnostic(pointer: JsonPointer, shape: Exclude<ProjectionShape, {
22
+ kind: 'resolved';
23
+ }>, enumDeclared: boolean): ProjectionDiagnostic;
24
+ export {};
25
+ //# sourceMappingURL=projection-shape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection-shape.d.ts","sourceRoot":"","sources":["../src/projection-shape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAItF,QAAA,MAAM,gBAAgB;;;;;CA4BgC,CAAA;AAEtD,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,gBAAgB,CAAA;AAEzD,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpB,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,CAQ1F;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,WAAW,CAAC,aAAa,CAAC,GAAG,eAAe,CAQrF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAErF;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,OAAO,CAAC,eAAe,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,EACrD,YAAY,EAAE,OAAO,GACpB,oBAAoB,CAqBtB"}