@texaryn/schema-json 0.7.1 → 0.8.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.
Files changed (50) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +28 -0
  3. package/THIRD-PARTY-NOTICES.md +7 -0
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js +464 -13
  6. package/dist/adapter.js.map +1 -1
  7. package/dist/bare-maps.js +1 -1
  8. package/dist/identity.d.ts +11 -2
  9. package/dist/identity.d.ts.map +1 -1
  10. package/dist/identity.js +103 -22
  11. package/dist/identity.js.map +1 -1
  12. package/dist/index.d.ts +4 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +3 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/local-pointer-aliases.d.ts +4 -0
  17. package/dist/local-pointer-aliases.d.ts.map +1 -0
  18. package/dist/local-pointer-aliases.js +345 -0
  19. package/dist/local-pointer-aliases.js.map +1 -0
  20. package/dist/normalize.d.ts +1 -1
  21. package/dist/normalize.d.ts.map +1 -1
  22. package/dist/normalize.js +3 -1
  23. package/dist/normalize.js.map +1 -1
  24. package/dist/projection-validation-coherence.d.ts +11 -0
  25. package/dist/projection-validation-coherence.d.ts.map +1 -0
  26. package/dist/projection-validation-coherence.js +213 -0
  27. package/dist/projection-validation-coherence.js.map +1 -0
  28. package/dist/projection.d.ts +2 -2
  29. package/dist/projection.d.ts.map +1 -1
  30. package/dist/projection.js +917 -152
  31. package/dist/projection.js.map +1 -1
  32. package/dist/resources.d.ts +19 -0
  33. package/dist/resources.d.ts.map +1 -0
  34. package/dist/resources.js +730 -0
  35. package/dist/resources.js.map +1 -0
  36. package/dist/root-reference.js +1 -1
  37. package/dist/schema-graph.d.ts +7 -0
  38. package/dist/schema-graph.d.ts.map +1 -1
  39. package/dist/schema-graph.js +79 -20
  40. package/dist/schema-graph.js.map +1 -1
  41. package/dist/submission-projection.d.ts +5 -0
  42. package/dist/submission-projection.d.ts.map +1 -0
  43. package/dist/submission-projection.js +233 -0
  44. package/dist/submission-projection.js.map +1 -0
  45. package/dist/types.d.ts +6 -1
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/vendor/json-schema-library/LICENSE.md +9 -0
  48. package/dist/vendor/json-schema-library/index.mjs +2 -0
  49. package/dist/vendor/json-schema-library/index.mjs.map +1 -0
  50. package/package.json +8 -3
@@ -0,0 +1,213 @@
1
+ import { isSchemaNode } from './vendor/json-schema-library/index.mjs';
2
+ import { withoutUnreachableBranches } from './normalize.js';
3
+ export class ProjectionValidationDivergenceError extends Error {
4
+ reference;
5
+ sourcePosition;
6
+ validationPosition;
7
+ projectionPosition;
8
+ constructor(reference, sourcePosition, validationPosition, projectionPosition) {
9
+ super(`Reference "${reference}" at "${sourcePosition}" resolves to different validation assertions in validation ` +
10
+ `("${validationPosition}") and projection ("${projectionPosition}"). The adapter cannot compile this schema safely.`);
11
+ this.name = 'ProjectionValidationDivergenceError';
12
+ this.reference = reference;
13
+ this.sourcePosition = sourcePosition;
14
+ this.validationPosition = validationPosition;
15
+ this.projectionPosition = projectionPosition;
16
+ }
17
+ }
18
+ function referenceSites(root) {
19
+ const refs = root.context?.refs;
20
+ const sites = new Map();
21
+ if (!refs)
22
+ return sites;
23
+ for (const node of new Set(Object.values(refs))) {
24
+ if (!isSchemaNode(node) || typeof node.$ref !== 'string')
25
+ continue;
26
+ sites.set(`${node.schemaLocation}\n${node.evaluationPath}`, node);
27
+ }
28
+ return sites;
29
+ }
30
+ const ASSERTION_KEYWORDS = [
31
+ 'type',
32
+ 'enum',
33
+ 'const',
34
+ 'multipleOf',
35
+ 'maximum',
36
+ 'exclusiveMaximum',
37
+ 'minimum',
38
+ 'exclusiveMinimum',
39
+ 'maxLength',
40
+ 'minLength',
41
+ 'pattern',
42
+ 'format',
43
+ 'maxItems',
44
+ 'minItems',
45
+ 'uniqueItems',
46
+ 'maxContains',
47
+ 'minContains',
48
+ 'maxProperties',
49
+ 'minProperties',
50
+ 'required',
51
+ 'dependencies',
52
+ 'dependentRequired',
53
+ 'additionalProperties',
54
+ 'additionalItems',
55
+ 'unevaluatedProperties',
56
+ 'unevaluatedItems',
57
+ '$ref',
58
+ '$dynamicRef',
59
+ '$recursiveRef',
60
+ ];
61
+ function isRecord(value) {
62
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
63
+ }
64
+ function escape(segment) {
65
+ return segment.replace(/~/g, '~0').replace(/\//g, '~1');
66
+ }
67
+ function createContractNode() {
68
+ return { profiles: [], children: new Map() };
69
+ }
70
+ function contractNodeAt(root, path) {
71
+ let node = root;
72
+ for (const segment of path) {
73
+ const key = JSON.stringify(segment);
74
+ let child = node.children.get(key);
75
+ if (!child) {
76
+ child = { segment, node: createContractNode() };
77
+ node.children.set(key, child);
78
+ }
79
+ node = child.node;
80
+ }
81
+ return node;
82
+ }
83
+ function serializeContract(node) {
84
+ const profiles = [...node.profiles].sort();
85
+ const children = [];
86
+ const applicators = new Map();
87
+ for (const { segment, node: child } of node.children.values()) {
88
+ const contract = serializeContract(child);
89
+ if (typeof segment === 'string') {
90
+ children.push([segment, contract]);
91
+ continue;
92
+ }
93
+ const branches = applicators.get(segment.keyword) ?? [];
94
+ branches.push(contract);
95
+ applicators.set(segment.keyword, branches);
96
+ }
97
+ children.sort(([left], [right]) => left.localeCompare(right));
98
+ const branchGroups = [...applicators]
99
+ .map(([keyword, branches]) => [keyword, branches.sort()])
100
+ .sort(([left], [right]) => left.localeCompare(right));
101
+ return JSON.stringify({ profiles, children, branchGroups });
102
+ }
103
+ function validationContracts(schema, dialect) {
104
+ const root = createContractNode();
105
+ const seenOnPath = new WeakMap();
106
+ const visit = (value, path) => {
107
+ const node = contractNodeAt(root, path);
108
+ if (typeof value === 'boolean') {
109
+ node.profiles.push(JSON.stringify({ schema: value }));
110
+ return;
111
+ }
112
+ if (!isRecord(value))
113
+ return;
114
+ const paths = seenOnPath.get(value) ?? new Set();
115
+ const pathKey = JSON.stringify(path);
116
+ if (paths.has(pathKey))
117
+ return;
118
+ paths.add(pathKey);
119
+ seenOnPath.set(value, paths);
120
+ const profile = Object.fromEntries(ASSERTION_KEYWORDS
121
+ .filter((key) => Object.hasOwn(value, key))
122
+ .filter((key) => key !== 'format' || dialect === 'draft-07')
123
+ .filter((key) => (key !== 'minContains' && key !== 'maxContains') || dialect !== 'draft-07')
124
+ .filter((key) => (key !== 'unevaluatedProperties' && key !== 'unevaluatedItems') || dialect !== 'draft-07')
125
+ .filter((key) => key !== 'additionalItems' || dialect !== '2020-12')
126
+ .filter((key) => key !== 'additionalItems' || Array.isArray(value.items))
127
+ .map((key) => [key, value[key]]));
128
+ if (Object.keys(profile).length > 0)
129
+ node.profiles.push(JSON.stringify(profile));
130
+ for (const keyword of ['allOf', 'anyOf', 'oneOf']) {
131
+ const branches = value[keyword];
132
+ if (!Array.isArray(branches))
133
+ continue;
134
+ node.profiles.push(JSON.stringify({ applicator: keyword, branchCount: branches.length }));
135
+ branches.forEach((branch, index) => visit(branch, [...path, { kind: 'applicator', keyword, index }]));
136
+ }
137
+ for (const keyword of ['if', 'then', 'else', 'not'])
138
+ visit(value[keyword], [...path, keyword]);
139
+ for (const keyword of ['properties', 'patternProperties']) {
140
+ const members = value[keyword];
141
+ if (!isRecord(members))
142
+ continue;
143
+ for (const [key, child] of Object.entries(members))
144
+ visit(child, [...path, keyword, escape(key)]);
145
+ }
146
+ for (const keyword of ['additionalProperties', 'propertyNames', 'contains']) {
147
+ visit(value[keyword], [...path, keyword]);
148
+ }
149
+ if (dialect !== 'draft-07') {
150
+ visit(value.unevaluatedProperties, [...path, 'unevaluatedProperties']);
151
+ visit(value.unevaluatedItems, [...path, 'unevaluatedItems']);
152
+ for (const keyword of ['dependentSchemas', 'dependencies']) {
153
+ const members = value[keyword];
154
+ if (isRecord(members)) {
155
+ for (const [key, child] of Object.entries(members))
156
+ visit(child, [...path, keyword, escape(key)]);
157
+ }
158
+ }
159
+ }
160
+ else {
161
+ const members = value.dependencies;
162
+ if (isRecord(members)) {
163
+ for (const [key, child] of Object.entries(members))
164
+ visit(child, [...path, 'dependencies', escape(key)]);
165
+ }
166
+ }
167
+ const items = value.items;
168
+ if (isRecord(items) || typeof items === 'boolean')
169
+ visit(items, [...path, 'items']);
170
+ else if (Array.isArray(items) && dialect !== '2020-12') {
171
+ items.forEach((child, index) => visit(child, [...path, 'items', String(index)]));
172
+ }
173
+ if (dialect === '2020-12' && Array.isArray(value.prefixItems)) {
174
+ value.prefixItems.forEach((child, index) => visit(child, [...path, 'prefixItems', String(index)]));
175
+ }
176
+ if (dialect !== '2020-12' && Array.isArray(items))
177
+ visit(value.additionalItems, [...path, 'additionalItems']);
178
+ };
179
+ visit(withoutUnreachableBranches(schema), []);
180
+ return serializeContract(root);
181
+ }
182
+ function sameValidationContracts(left, right, dialect) {
183
+ return validationContracts(left, dialect) === validationContracts(right, dialect);
184
+ }
185
+ function resolveTarget(site) {
186
+ try {
187
+ const target = site.resolveRef();
188
+ return isSchemaNode(target) ? target : undefined;
189
+ }
190
+ catch {
191
+ return undefined;
192
+ }
193
+ }
194
+ export function assertProjectionValidationCoherence(validation, projection, dialect) {
195
+ const validationSites = referenceSites(validation);
196
+ const projectionSites = referenceSites(projection);
197
+ for (const [siteKey, projectionSite] of projectionSites) {
198
+ const validationSite = validationSites.get(siteKey);
199
+ if (!validationSite || validationSite.$ref !== projectionSite.$ref)
200
+ continue;
201
+ const validationTarget = resolveTarget(validationSite);
202
+ const projectionTarget = resolveTarget(projectionSite);
203
+ // Normalization may change a declaration in place; this guard targets scope collisions between declarations.
204
+ if (validationTarget && projectionTarget && validationTarget.schemaLocation === projectionTarget.schemaLocation)
205
+ continue;
206
+ if (validationTarget && projectionTarget && sameValidationContracts(validationTarget.schema, projectionTarget.schema, dialect))
207
+ continue;
208
+ if (!validationTarget && !projectionTarget)
209
+ continue;
210
+ throw new ProjectionValidationDivergenceError(projectionSite.$ref, projectionSite.schemaLocation, validationTarget?.schemaLocation ?? '<unresolved>', projectionTarget?.schemaLocation ?? '<unresolved>');
211
+ }
212
+ }
213
+ //# sourceMappingURL=projection-validation-coherence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection-validation-coherence.js","sourceRoot":"","sources":["../src/projection-validation-coherence.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { type SchemaNode } from 'json-schema-library';
2
- import type { SchemaProjection } from '@texaryn/core';
2
+ import type { SchemaProjection, ProjectionOptions } from '@texaryn/core';
3
3
  import { type ProjectionCache } from './identity.js';
4
4
  export interface ProjectionLimits {
5
5
  readonly objects: number;
@@ -16,5 +16,5 @@ export declare const DEFAULT_LIMITS: ProjectionLimits;
16
16
  * contract), while array items are walked from `data` (an array's length is a data-time
17
17
  * fact, not a schema-time one). $ref is resolved transparently via node.resolveRef().
18
18
  */
19
- export declare function buildProjection(root: SchemaNode, data: unknown, cache: ProjectionCache, limits?: ProjectionLimits): SchemaProjection;
19
+ export declare function buildProjection(root: SchemaNode, data: unknown, cache: ProjectionCache, limits?: ProjectionLimits, options?: ProjectionOptions): SchemaProjection;
20
20
  //# sourceMappingURL=projection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC9E,OAAO,KAAK,EACV,gBAAgB,EAUjB,MAAM,eAAe,CAAA;AACtB,OAAO,EAQL,KAAK,eAAe,EACrB,MAAM,eAAe,CAAA;AAwJtB,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED,eAAO,MAAM,cAAc,EAAE,gBAA8C,CAAA;AAqiC3E;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,eAAe,EACtB,MAAM,GAAE,gBAAiC,GACxC,gBAAgB,CAiDlB"}
1
+ {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,UAAU,EAAuB,MAAM,qBAAqB,CAAA;AACnG,OAAO,KAAK,EACV,gBAAgB,EAWhB,iBAAiB,EAClB,MAAM,eAAe,CAAA;AACtB,OAAO,EAYL,KAAK,eAAe,EACrB,MAAM,eAAe,CAAA;AAuftB,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED,eAAO,MAAM,cAAc,EAAE,gBAA8C,CAAA;AA+lD3E;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,eAAe,EACtB,MAAM,GAAE,gBAAiC,EACzC,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB,CA4DlB"}