@texaryn/schema-json 0.6.2 → 0.7.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/CHANGELOG.md +67 -0
- package/README.md +33 -3
- package/dist/adapter.d.ts +2 -0
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +26 -13
- package/dist/adapter.js.map +1 -1
- package/dist/identity.d.ts +26 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +280 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/normalize.d.ts +3 -0
- package/dist/normalize.d.ts.map +1 -0
- package/dist/normalize.js +118 -0
- package/dist/normalize.js.map +1 -0
- package/dist/projection.d.ts +7 -1
- package/dist/projection.d.ts.map +1 -1
- package/dist/projection.js +197 -20
- package/dist/projection.js.map +1 -1
- package/dist/root-reference.d.ts +4 -0
- package/dist/root-reference.d.ts.map +1 -0
- package/dist/root-reference.js +86 -0
- package/dist/root-reference.js.map +1 -0
- package/dist/schema-graph.d.ts +29 -0
- package/dist/schema-graph.d.ts.map +1 -0
- package/dist/schema-graph.js +365 -0
- package/dist/schema-graph.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root-reference.d.ts","sourceRoot":"","sources":["../src/root-reference.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAClF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAuF3C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAIzE"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { compileSchema, isSchemaNode } from 'json-schema-library';
|
|
2
|
+
const TESTED = 'json-schema-library 11.6.2';
|
|
3
|
+
function registryOf(root) {
|
|
4
|
+
const context = root.context;
|
|
5
|
+
if (typeof context !== 'object' || context === null)
|
|
6
|
+
fail('the compiled root has no "context"');
|
|
7
|
+
const { refs, rootNode } = context;
|
|
8
|
+
if (rootNode !== root)
|
|
9
|
+
fail('"context.rootNode" is not the compiled root');
|
|
10
|
+
if (typeof refs !== 'object' || refs === null || Object.getPrototypeOf(refs) !== Object.prototype) {
|
|
11
|
+
fail('"context.refs" is not a plain object');
|
|
12
|
+
}
|
|
13
|
+
return refs;
|
|
14
|
+
}
|
|
15
|
+
// "$ref": "#" normalises to the root's base URI without its fragment, empty for an anonymous root.
|
|
16
|
+
function rootKey(root) {
|
|
17
|
+
const id = root.$id;
|
|
18
|
+
if (id === undefined)
|
|
19
|
+
return '';
|
|
20
|
+
if (typeof id !== 'string')
|
|
21
|
+
fail('the compiled root has a non-string "$id"');
|
|
22
|
+
return id.replace(/#.*$/, '');
|
|
23
|
+
}
|
|
24
|
+
function fail(reason) {
|
|
25
|
+
throw new Error(`@texaryn/schema-json: json-schema-library's reference registry is not shaped as in ${TESTED} ` +
|
|
26
|
+
`(${reason}). The Draft 7 adapter keeps each registry entry compiled for its own location ` +
|
|
27
|
+
`fixed, because that release overwrites entries during reductions and a "$ref" then resolves ` +
|
|
28
|
+
`to a reduced copy; without the fix Draft 7 validation is wrong, so the adapter refuses to start.`);
|
|
29
|
+
}
|
|
30
|
+
function pin(refs, key, node) {
|
|
31
|
+
Object.defineProperty(refs, key, { get: () => node, set: () => { }, enumerable: true, configurable: true });
|
|
32
|
+
}
|
|
33
|
+
function pinRegistry(root) {
|
|
34
|
+
const refs = registryOf(root);
|
|
35
|
+
const key = rootKey(root);
|
|
36
|
+
const descriptor = Object.getOwnPropertyDescriptor(refs, key);
|
|
37
|
+
if (!descriptor)
|
|
38
|
+
fail(`no entry for the root key ${JSON.stringify(key)}`);
|
|
39
|
+
if (!('value' in descriptor) || !descriptor.writable || !descriptor.configurable) {
|
|
40
|
+
fail(`the entry for ${JSON.stringify(key)} is not a writable data property`);
|
|
41
|
+
}
|
|
42
|
+
if (!isSchemaNode(descriptor.value))
|
|
43
|
+
fail(`the entry for ${JSON.stringify(key)} is not a schema node`);
|
|
44
|
+
pin(refs, key, root);
|
|
45
|
+
// The parser also files a node under its path from an ancestor, and compiling that location later corrects it.
|
|
46
|
+
for (const [other, node] of Object.entries(refs)) {
|
|
47
|
+
if (isSchemaNode(node) && other === `${key}${node.evaluationPath}`)
|
|
48
|
+
pin(refs, other, node);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
let verified = false;
|
|
52
|
+
// A release that keeps the registry's shape but changes what the pin repairs must also fail closed.
|
|
53
|
+
function selfTest() {
|
|
54
|
+
if (verified)
|
|
55
|
+
return;
|
|
56
|
+
const anonymous = compileSchema({ type: 'object', properties: { name: { type: 'string' }, child: { $ref: '#' } } }, { draft: 'draft-07' });
|
|
57
|
+
const child = anonymous.properties?.child;
|
|
58
|
+
if (child?.$ref !== '')
|
|
59
|
+
fail('"$ref": "#" no longer normalises to the empty key');
|
|
60
|
+
pinRegistry(anonymous);
|
|
61
|
+
anonymous.reduceNode({});
|
|
62
|
+
if (anonymous.validate({ child: 'text' }).valid)
|
|
63
|
+
fail('an anonymous "#" does not resolve to the root');
|
|
64
|
+
if (!anonymous.validate({ child: {} }).valid)
|
|
65
|
+
fail('an anonymous "#" rejects a valid instance');
|
|
66
|
+
const identified = compileSchema({
|
|
67
|
+
$id: 'https://texaryn.invalid/probe',
|
|
68
|
+
type: 'object',
|
|
69
|
+
properties: { x: { type: 'number' }, child: { $ref: '#' } },
|
|
70
|
+
if: { required: ['x'] },
|
|
71
|
+
then: { required: ['y'] },
|
|
72
|
+
}, { draft: 'draft-07' });
|
|
73
|
+
pinRegistry(identified);
|
|
74
|
+
identified.reduceNode({});
|
|
75
|
+
if (identified.validate({ child: { x: 1 } }).valid)
|
|
76
|
+
fail('an identified "#" does not resolve to the root');
|
|
77
|
+
verified = true;
|
|
78
|
+
}
|
|
79
|
+
// Draft 7 only: the 2019-09 and 2020-12 parsers register an entry once and never overwrite it.
|
|
80
|
+
export function fixRootReference(root, dialect) {
|
|
81
|
+
if (dialect !== 'draft-07')
|
|
82
|
+
return;
|
|
83
|
+
selfTest();
|
|
84
|
+
pinRegistry(root);
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=root-reference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root-reference.js","sourceRoot":"","sources":["../src/root-reference.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Dialect } from './dialect.js';
|
|
2
|
+
type Edge = {
|
|
3
|
+
readonly to: string;
|
|
4
|
+
readonly via: string;
|
|
5
|
+
readonly inPlace: boolean;
|
|
6
|
+
};
|
|
7
|
+
export interface SchemaGraph {
|
|
8
|
+
readonly edges: ReadonlyMap<string, readonly Edge[]>;
|
|
9
|
+
readonly reachable: ReadonlySet<string>;
|
|
10
|
+
}
|
|
11
|
+
export declare const escape: (segment: string) => string;
|
|
12
|
+
export declare function buildSchemaGraph(document: unknown, dialect: Dialect, remotes?: readonly unknown[]): SchemaGraph;
|
|
13
|
+
export declare const POSITION = "x-texaryn-position";
|
|
14
|
+
export interface MarkedDocuments {
|
|
15
|
+
readonly document: unknown;
|
|
16
|
+
readonly remotes: readonly unknown[];
|
|
17
|
+
readonly at: (position: string) => unknown;
|
|
18
|
+
}
|
|
19
|
+
/** Copies of the documents in which every reachable schema object names its own graph position under `POSITION`. */
|
|
20
|
+
export declare function markPositions(graph: SchemaGraph, document: unknown, remotes?: readonly unknown[]): MarkedDocuments;
|
|
21
|
+
/** Thrown when a schema position applies itself to the instance location it is evaluating. */
|
|
22
|
+
export declare class SameLocationCycleError extends Error {
|
|
23
|
+
readonly positions: readonly (readonly string[])[];
|
|
24
|
+
constructor(positions: readonly (readonly string[])[], cycles: readonly string[]);
|
|
25
|
+
}
|
|
26
|
+
export declare function rejectSameLocationCycles(graph: SchemaGraph): void;
|
|
27
|
+
export declare function cyclicPositions(graph: SchemaGraph): ReadonlySet<string>;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=schema-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-graph.d.ts","sourceRoot":"","sources":["../src/schema-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAE3C,KAAK,IAAI,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAA;AAEpF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC,CAAA;IACpD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CACxC;AA2BD,eAAO,MAAM,MAAM,GAAI,SAAS,MAAM,KAAG,MAA0D,CAAA;AA+JnG,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,SAAS,OAAO,EAAO,GAAG,WAAW,CAmCnH;AAED,eAAO,MAAM,QAAQ,uBAAuB,CAAA;AAW5C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,CAAA;IACpC,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAA;CAC3C;AAED,oHAAoH;AACpH,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAE,SAAS,OAAO,EAAO,GAAG,eAAe,CAoBtH;AAuED,8FAA8F;AAC9F,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAA;gBACtC,SAAS,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE;CAUjF;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAIjE;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAEvE"}
|
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
const ANONYMOUS_BASE = 'https://texaryn.invalid/root';
|
|
2
|
+
const IN_PLACE_LIST = ['allOf', 'anyOf', 'oneOf'];
|
|
3
|
+
const INSTANCE_SINGLE = [
|
|
4
|
+
'additionalProperties',
|
|
5
|
+
'additionalItems',
|
|
6
|
+
'contains',
|
|
7
|
+
'propertyNames',
|
|
8
|
+
'unevaluatedItems',
|
|
9
|
+
'unevaluatedProperties',
|
|
10
|
+
];
|
|
11
|
+
const INSTANCE_MAP = ['properties', 'patternProperties'];
|
|
12
|
+
const CONTAINERS = ['$defs', 'definitions'];
|
|
13
|
+
// The index keeps the last node per $id; json-schema-library compiles $defs first and keeps the first from 2019-09.
|
|
14
|
+
const INDEX_ORDER = { 'draft-07': CONTAINERS, '2019-09': ['definitions', '$defs'], '2020-12': ['definitions', '$defs'] };
|
|
15
|
+
const REFERENCES = {
|
|
16
|
+
'draft-07': ['$ref'],
|
|
17
|
+
'2019-09': ['$ref', '$recursiveRef'],
|
|
18
|
+
'2020-12': ['$ref', '$dynamicRef'],
|
|
19
|
+
};
|
|
20
|
+
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
21
|
+
export const escape = (segment) => segment.replace(/~/g, '~0').replace(/\//g, '~1');
|
|
22
|
+
function documentsOf(document, remotes) {
|
|
23
|
+
const documents = { local: document, remote: new Map() };
|
|
24
|
+
for (const remote of remotes) {
|
|
25
|
+
const id = isRecord(remote) && typeof remote.$id === 'string' ? withoutFragment(remote.$id) : undefined;
|
|
26
|
+
if (id)
|
|
27
|
+
documents.remote.set(id, remote);
|
|
28
|
+
}
|
|
29
|
+
return documents;
|
|
30
|
+
}
|
|
31
|
+
// A position is "#/pointer" in the schema itself and "uri#/pointer" in a remote document.
|
|
32
|
+
function split(position) {
|
|
33
|
+
const hash = position.indexOf('#');
|
|
34
|
+
return { prefix: position.slice(0, hash), pointer: position.slice(hash) };
|
|
35
|
+
}
|
|
36
|
+
function at(documents, position) {
|
|
37
|
+
const { prefix, pointer } = split(position);
|
|
38
|
+
let current = prefix === '' ? documents.local : documents.remote.get(prefix);
|
|
39
|
+
if (pointer === '#')
|
|
40
|
+
return current;
|
|
41
|
+
for (const raw of pointer.slice(2).split('/')) {
|
|
42
|
+
const segment = raw.replace(/~1/g, '/').replace(/~0/g, '~');
|
|
43
|
+
if (Array.isArray(current))
|
|
44
|
+
current = current[Number(segment)];
|
|
45
|
+
else if (isRecord(current) && Object.hasOwn(current, segment))
|
|
46
|
+
current = current[segment];
|
|
47
|
+
else
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
return current;
|
|
51
|
+
}
|
|
52
|
+
function withoutFragment(uri) {
|
|
53
|
+
const index = uri.indexOf('#');
|
|
54
|
+
return index === -1 ? uri : uri.slice(0, index);
|
|
55
|
+
}
|
|
56
|
+
function resolveUri(reference, base) {
|
|
57
|
+
try {
|
|
58
|
+
return new URL(reference, base).href;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function childSchemas(schema, position, dialect, lexical) {
|
|
65
|
+
const found = [];
|
|
66
|
+
const addMap = (keyword, inPlace) => {
|
|
67
|
+
const map = schema[keyword];
|
|
68
|
+
if (!isRecord(map))
|
|
69
|
+
return;
|
|
70
|
+
for (const [key, value] of Object.entries(map)) {
|
|
71
|
+
if (isRecord(value) || typeof value === 'boolean') {
|
|
72
|
+
found.push({ position: `${position}/${keyword}/${escape(key)}`, via: `${keyword}/${key}`, inPlace });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
if (dialect === 'draft-07' && typeof schema.$ref === 'string') {
|
|
77
|
+
if (lexical)
|
|
78
|
+
for (const key of INDEX_ORDER[dialect])
|
|
79
|
+
addMap(key, false);
|
|
80
|
+
return found;
|
|
81
|
+
}
|
|
82
|
+
const hasIf = 'if' in schema;
|
|
83
|
+
if (isRecord(schema.not))
|
|
84
|
+
found.push({ position: `${position}/not`, via: 'not', inPlace: true });
|
|
85
|
+
if (isRecord(schema.if))
|
|
86
|
+
found.push({ position: `${position}/if`, via: 'if', inPlace: true });
|
|
87
|
+
if (isRecord(schema.then) && (lexical || (hasIf && schema.if !== false)))
|
|
88
|
+
found.push({ position: `${position}/then`, via: 'then', inPlace: true });
|
|
89
|
+
if (isRecord(schema.else) && (lexical || (hasIf && schema.if !== true)))
|
|
90
|
+
found.push({ position: `${position}/else`, via: 'else', inPlace: true });
|
|
91
|
+
for (const keyword of IN_PLACE_LIST) {
|
|
92
|
+
const list = schema[keyword];
|
|
93
|
+
if (Array.isArray(list))
|
|
94
|
+
list.forEach((_, index) => found.push({ position: `${position}/${keyword}/${index}`, via: `${keyword}/${index}`, inPlace: true }));
|
|
95
|
+
}
|
|
96
|
+
// json-schema-library keeps evaluating 'dependencies' past draft-07 for backward compatibility.
|
|
97
|
+
addMap('dependencies', true);
|
|
98
|
+
if (dialect !== 'draft-07')
|
|
99
|
+
addMap('dependentSchemas', true);
|
|
100
|
+
for (const keyword of INSTANCE_SINGLE) {
|
|
101
|
+
if (isRecord(schema[keyword]))
|
|
102
|
+
found.push({ position: `${position}/${keyword}`, via: keyword, inPlace: false });
|
|
103
|
+
}
|
|
104
|
+
for (const keyword of INSTANCE_MAP)
|
|
105
|
+
addMap(keyword, false);
|
|
106
|
+
for (const keyword of ['items', 'prefixItems']) {
|
|
107
|
+
const value = schema[keyword];
|
|
108
|
+
if (isRecord(value))
|
|
109
|
+
found.push({ position: `${position}/${keyword}`, via: keyword, inPlace: false });
|
|
110
|
+
else if (Array.isArray(value))
|
|
111
|
+
value.forEach((_, index) => found.push({ position: `${position}/${keyword}/${index}`, via: `${keyword}/${index}`, inPlace: false }));
|
|
112
|
+
}
|
|
113
|
+
if (lexical)
|
|
114
|
+
for (const key of INDEX_ORDER[dialect])
|
|
115
|
+
addMap(key, false);
|
|
116
|
+
return found;
|
|
117
|
+
}
|
|
118
|
+
function indexResources(documents, dialect) {
|
|
119
|
+
const index = { resources: new Map(), anchors: new Map(), dynamicAnchors: new Map(), recursiveAnchors: [], baseAt: new Map() };
|
|
120
|
+
const visit = (position, parentBase) => {
|
|
121
|
+
const schema = at(documents, position);
|
|
122
|
+
if (!isRecord(schema))
|
|
123
|
+
return;
|
|
124
|
+
let base = parentBase;
|
|
125
|
+
const ignoresSiblings = dialect === 'draft-07' && typeof schema.$ref === 'string';
|
|
126
|
+
if (!ignoresSiblings && typeof schema.$id === 'string') {
|
|
127
|
+
if (dialect === 'draft-07' && schema.$id.startsWith('#')) {
|
|
128
|
+
index.anchors.set(`${withoutFragment(base)}${schema.$id}`, position);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
const resolved = resolveUri(schema.$id, parentBase);
|
|
132
|
+
if (resolved) {
|
|
133
|
+
base = withoutFragment(resolved);
|
|
134
|
+
index.resources.set(base, position);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (!ignoresSiblings) {
|
|
139
|
+
if (dialect !== 'draft-07' && typeof schema.$anchor === 'string')
|
|
140
|
+
index.anchors.set(`${base}#${schema.$anchor}`, position);
|
|
141
|
+
if (dialect === '2020-12' && typeof schema.$dynamicAnchor === 'string') {
|
|
142
|
+
index.anchors.set(`${base}#${schema.$dynamicAnchor}`, position);
|
|
143
|
+
const list = index.dynamicAnchors.get(schema.$dynamicAnchor) ?? [];
|
|
144
|
+
list.push(position);
|
|
145
|
+
index.dynamicAnchors.set(schema.$dynamicAnchor, list);
|
|
146
|
+
}
|
|
147
|
+
if (dialect === '2019-09' && schema.$recursiveAnchor === true)
|
|
148
|
+
index.recursiveAnchors.push(position);
|
|
149
|
+
}
|
|
150
|
+
index.baseAt.set(position, base);
|
|
151
|
+
for (const child of childSchemas(schema, position, dialect, true))
|
|
152
|
+
visit(child.position, base);
|
|
153
|
+
};
|
|
154
|
+
index.resources.set(ANONYMOUS_BASE, '#');
|
|
155
|
+
visit('#', ANONYMOUS_BASE);
|
|
156
|
+
for (const prefix of documents.remote.keys()) {
|
|
157
|
+
index.resources.set(prefix, `${prefix}#`);
|
|
158
|
+
visit(`${prefix}#`, prefix);
|
|
159
|
+
}
|
|
160
|
+
return index;
|
|
161
|
+
}
|
|
162
|
+
function decoded(fragment) {
|
|
163
|
+
try {
|
|
164
|
+
return decodeURIComponent(fragment);
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
return fragment;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
function resolveReference(reference, base, index, documents) {
|
|
171
|
+
const uri = resolveUri(reference, base);
|
|
172
|
+
if (!uri)
|
|
173
|
+
return undefined;
|
|
174
|
+
const hash = uri.indexOf('#');
|
|
175
|
+
const resource = index.resources.get(hash === -1 ? uri : uri.slice(0, hash));
|
|
176
|
+
const fragment = hash === -1 ? '' : uri.slice(hash + 1);
|
|
177
|
+
if (resource === undefined)
|
|
178
|
+
return undefined;
|
|
179
|
+
if (fragment === '')
|
|
180
|
+
return resource;
|
|
181
|
+
if (fragment.startsWith('/')) {
|
|
182
|
+
const position = `${resource}${decoded(fragment)}`;
|
|
183
|
+
return at(documents, position) === undefined ? undefined : position;
|
|
184
|
+
}
|
|
185
|
+
return index.anchors.get(uri);
|
|
186
|
+
}
|
|
187
|
+
export function buildSchemaGraph(document, dialect, remotes = []) {
|
|
188
|
+
const documents = documentsOf(document, remotes);
|
|
189
|
+
const index = indexResources(documents, dialect);
|
|
190
|
+
const edges = new Map();
|
|
191
|
+
const reachable = new Set();
|
|
192
|
+
const visit = (position) => {
|
|
193
|
+
if (reachable.has(position))
|
|
194
|
+
return;
|
|
195
|
+
reachable.add(position);
|
|
196
|
+
const schema = at(documents, position);
|
|
197
|
+
const list = [];
|
|
198
|
+
edges.set(position, list);
|
|
199
|
+
if (!isRecord(schema))
|
|
200
|
+
return;
|
|
201
|
+
const base = index.baseAt.get(position) ?? ANONYMOUS_BASE;
|
|
202
|
+
for (const keyword of REFERENCES[dialect]) {
|
|
203
|
+
const reference = schema[keyword];
|
|
204
|
+
if (typeof reference !== 'string')
|
|
205
|
+
continue;
|
|
206
|
+
const target = resolveReference(reference, base, index, documents);
|
|
207
|
+
if (target === undefined)
|
|
208
|
+
continue;
|
|
209
|
+
const targetSchema = at(documents, target);
|
|
210
|
+
const fragment = reference.includes('#') ? reference.slice(reference.indexOf('#') + 1) : '';
|
|
211
|
+
if (keyword === '$dynamicRef' && isRecord(targetSchema) && fragment !== '' && targetSchema.$dynamicAnchor === fragment) {
|
|
212
|
+
for (const anchor of index.dynamicAnchors.get(fragment) ?? [])
|
|
213
|
+
list.push({ to: anchor, via: keyword, inPlace: true });
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
list.push({ to: target, via: keyword, inPlace: true });
|
|
217
|
+
// json-schema-library resolves $recursiveRef dynamically whatever its static target declares.
|
|
218
|
+
if (keyword === '$recursiveRef') {
|
|
219
|
+
for (const anchor of index.recursiveAnchors)
|
|
220
|
+
if (anchor !== target)
|
|
221
|
+
list.push({ to: anchor, via: keyword, inPlace: true });
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
for (const child of childSchemas(schema, position, dialect, false))
|
|
225
|
+
list.push({ to: child.position, via: child.via, inPlace: child.inPlace });
|
|
226
|
+
for (const edge of list)
|
|
227
|
+
visit(edge.to);
|
|
228
|
+
};
|
|
229
|
+
visit('#');
|
|
230
|
+
return { edges, reachable };
|
|
231
|
+
}
|
|
232
|
+
export const POSITION = 'x-texaryn-position';
|
|
233
|
+
const INSTANCE_DATA = ['const', 'default', 'enum', 'examples'];
|
|
234
|
+
const MAPS = ['properties', 'patternProperties', 'dependencies', 'dependentSchemas', ...CONTAINERS];
|
|
235
|
+
const copy = (value) => {
|
|
236
|
+
if (Array.isArray(value))
|
|
237
|
+
return value.map(copy);
|
|
238
|
+
if (!isRecord(value) || ![Object.prototype, null].includes(Object.getPrototypeOf(value)))
|
|
239
|
+
return value;
|
|
240
|
+
return Object.fromEntries(Object.entries(value).map(([key, child]) => [key, copy(child)]));
|
|
241
|
+
};
|
|
242
|
+
/** Copies of the documents in which every reachable schema object names its own graph position under `POSITION`. */
|
|
243
|
+
export function markPositions(graph, document, remotes = []) {
|
|
244
|
+
const copies = remotes.map(copy);
|
|
245
|
+
const documents = documentsOf(copy(document), copies);
|
|
246
|
+
const schemas = [...graph.reachable].flatMap((position) => {
|
|
247
|
+
const schema = at(documents, position);
|
|
248
|
+
return isRecord(schema) ? [[position, schema]] : [];
|
|
249
|
+
});
|
|
250
|
+
// A reference can point into instance data or at a map of subschemas, which a marker would change.
|
|
251
|
+
const held = new Set();
|
|
252
|
+
const hold = (value) => {
|
|
253
|
+
if (typeof value !== 'object' || value === null || held.has(value))
|
|
254
|
+
return;
|
|
255
|
+
held.add(value);
|
|
256
|
+
for (const child of Object.values(value))
|
|
257
|
+
hold(child);
|
|
258
|
+
};
|
|
259
|
+
for (const [, schema] of schemas) {
|
|
260
|
+
for (const keyword of INSTANCE_DATA)
|
|
261
|
+
hold(schema[keyword]);
|
|
262
|
+
for (const keyword of MAPS)
|
|
263
|
+
if (isRecord(schema[keyword]))
|
|
264
|
+
held.add(schema[keyword]);
|
|
265
|
+
}
|
|
266
|
+
for (const [position, schema] of schemas)
|
|
267
|
+
if (!held.has(schema))
|
|
268
|
+
schema[POSITION] = position;
|
|
269
|
+
return { document: documents.local, remotes: copies, at: (position) => at(documents, position) };
|
|
270
|
+
}
|
|
271
|
+
function stronglyConnected(graph, follow) {
|
|
272
|
+
const indexOf = new Map();
|
|
273
|
+
const low = new Map();
|
|
274
|
+
const onStack = new Set();
|
|
275
|
+
const stack = [];
|
|
276
|
+
const components = [];
|
|
277
|
+
let counter = 0;
|
|
278
|
+
const connect = (start) => {
|
|
279
|
+
const frames = [{ node: start, next: 0 }];
|
|
280
|
+
indexOf.set(start, counter);
|
|
281
|
+
low.set(start, counter++);
|
|
282
|
+
stack.push(start);
|
|
283
|
+
onStack.add(start);
|
|
284
|
+
while (frames.length > 0) {
|
|
285
|
+
const frame = frames[frames.length - 1];
|
|
286
|
+
const out = (graph.edges.get(frame.node) ?? []).filter(follow);
|
|
287
|
+
if (frame.next < out.length) {
|
|
288
|
+
const to = out[frame.next++].to;
|
|
289
|
+
if (!indexOf.has(to)) {
|
|
290
|
+
indexOf.set(to, counter);
|
|
291
|
+
low.set(to, counter++);
|
|
292
|
+
stack.push(to);
|
|
293
|
+
onStack.add(to);
|
|
294
|
+
frames.push({ node: to, next: 0 });
|
|
295
|
+
}
|
|
296
|
+
else if (onStack.has(to)) {
|
|
297
|
+
low.set(frame.node, Math.min(low.get(frame.node), indexOf.get(to)));
|
|
298
|
+
}
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
frames.pop();
|
|
302
|
+
const parent = frames[frames.length - 1];
|
|
303
|
+
if (parent)
|
|
304
|
+
low.set(parent.node, Math.min(low.get(parent.node), low.get(frame.node)));
|
|
305
|
+
if (low.get(frame.node) === indexOf.get(frame.node)) {
|
|
306
|
+
const component = [];
|
|
307
|
+
let member;
|
|
308
|
+
do {
|
|
309
|
+
member = stack.pop();
|
|
310
|
+
onStack.delete(member);
|
|
311
|
+
component.push(member);
|
|
312
|
+
} while (member !== frame.node);
|
|
313
|
+
const selfLoop = out.some((edge) => edge.to === frame.node);
|
|
314
|
+
if (component.length > 1 || selfLoop)
|
|
315
|
+
components.push(component.sort());
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
for (const node of graph.reachable)
|
|
320
|
+
if (!indexOf.has(node))
|
|
321
|
+
connect(node);
|
|
322
|
+
return components;
|
|
323
|
+
}
|
|
324
|
+
function describeCycle(graph, component) {
|
|
325
|
+
const members = new Set(component);
|
|
326
|
+
const start = component[0];
|
|
327
|
+
const path = [`"${start}"`];
|
|
328
|
+
const seen = new Set([start]);
|
|
329
|
+
let current = start;
|
|
330
|
+
for (;;) {
|
|
331
|
+
const edges = (graph.edges.get(current) ?? []).filter((edge) => edge.inPlace && members.has(edge.to));
|
|
332
|
+
const back = edges.find((edge) => edge.to === start);
|
|
333
|
+
if (back) {
|
|
334
|
+
path.push(`(${back.via}) "${start}"`);
|
|
335
|
+
return path.join(' ');
|
|
336
|
+
}
|
|
337
|
+
const next = edges.find((edge) => !seen.has(edge.to)) ?? edges[0];
|
|
338
|
+
path.push(`(${next.via}) "${next.to}"`);
|
|
339
|
+
seen.add(next.to);
|
|
340
|
+
current = next.to;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
/** Thrown when a schema position applies itself to the instance location it is evaluating. */
|
|
344
|
+
export class SameLocationCycleError extends Error {
|
|
345
|
+
positions;
|
|
346
|
+
constructor(positions, cycles) {
|
|
347
|
+
super(`Schema position "${positions[0][0]}" applies itself to the instance location it is ` +
|
|
348
|
+
`evaluating, without crossing into a property or item: ${cycles[0]}. The evaluator ` +
|
|
349
|
+
`recurses without end wherever this position is reached, so the schema is rejected.` +
|
|
350
|
+
(positions.length > 1 ? ` ${positions.length - 1} further cycle(s): ${cycles.slice(1).join('; ')}.` : ''));
|
|
351
|
+
this.name = 'SameLocationCycleError';
|
|
352
|
+
this.positions = positions;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
export function rejectSameLocationCycles(graph) {
|
|
356
|
+
const components = stronglyConnected(graph, (edge) => edge.inPlace);
|
|
357
|
+
if (components.length === 0)
|
|
358
|
+
return;
|
|
359
|
+
throw new SameLocationCycleError(components, components.map((component) => describeCycle(graph, component)));
|
|
360
|
+
}
|
|
361
|
+
// Instance edges included: these are the positions that make a projection recursive.
|
|
362
|
+
export function cyclicPositions(graph) {
|
|
363
|
+
return new Set(stronglyConnected(graph, () => true).flat());
|
|
364
|
+
}
|
|
365
|
+
//# sourceMappingURL=schema-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-graph.js","sourceRoot":"","sources":["../src/schema-graph.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@texaryn/schema-json",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "JSON Schema evaluation and validation adapter for Texaryn",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"json-schema",
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
"THIRD-PARTY-NOTICES.md"
|
|
44
44
|
],
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"json-schema-library": "
|
|
47
|
-
"@texaryn/core": "^0.
|
|
46
|
+
"json-schema-library": "~11.6.2",
|
|
47
|
+
"@texaryn/core": "^0.13.0"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"tsx": "^4.23.12",
|