Skip to content

Commit 961708e

Browse files
committed
dist: update
1 parent 2cc34ea commit 961708e

38 files changed

+194
-158
lines changed

dist/index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export { compileSchema } from "./src/compileSchema";
22
export type { CompileOptions } from "./src/compileSchema";
3-
export type { Context, SchemaNode, GetNodeOptions } from "./src/SchemaNode";
3+
export type { Context, SchemaNode, GetNodeOptions, ValidateReturnType } from "./src/SchemaNode";
44
export type { DataNode } from "./src/methods/toDataNodes";
55
export type { Draft, DraftVersion } from "./src/Draft";
66
export type { JsonError, JsonPointer, JsonSchema, OptionalNodeOrError, NodeOrError } from "./src/types";

dist/jsonSchemaLibrary.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/module/src/SchemaNode.js

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ export function isReduceable(node) {
3030
}
3131
function getDraft(drafts, $schema) {
3232
var _a;
33+
if (!Array.isArray(drafts) || drafts.length === 0) {
34+
throw new Error(`Missing drafts in 'compileSchema({ $schema: "${$schema}" })'`);
35+
}
36+
if (drafts.length === 1) {
37+
return drafts[0];
38+
}
3339
return (_a = drafts.find((d) => new RegExp(d.$schemaRegEx).test($schema))) !== null && _a !== void 0 ? _a : drafts[drafts.length - 1];
3440
}
3541
export function joinDynamicId(a, b) {
@@ -52,16 +58,16 @@ export const SchemaNodeMethods = {
5258
* Compiles a child-schema of this node to its context
5359
* @returns SchemaNode representing the passed JSON Schema
5460
*/
55-
compileSchema(schema, spointer = this.spointer, schemaId, dynamicId) {
56-
const nextFragment = spointer.split("/$ref")[0];
61+
compileSchema(schema, evaluationPath = this.evaluationPath, schemaLocation, dynamicId) {
62+
const nextFragment = evaluationPath.split("/$ref")[0];
5763
const parentNode = this;
5864
const node = {
5965
lastIdPointer: parentNode.lastIdPointer, // ref helper
6066
context: parentNode.context,
6167
parent: parentNode,
62-
spointer,
68+
evaluationPath,
6369
dynamicId: joinDynamicId(parentNode.dynamicId, dynamicId),
64-
schemaId: schemaId !== null && schemaId !== void 0 ? schemaId : join(parentNode.schemaId, nextFragment),
70+
schemaLocation: schemaLocation !== null && schemaLocation !== void 0 ? schemaLocation : join(parentNode.schemaLocation, nextFragment),
6571
reducers: [],
6672
resolvers: [],
6773
validators: [],
@@ -131,14 +137,14 @@ export const SchemaNodeMethods = {
131137
// @ts-expect-error bool schema
132138
}
133139
else if (node.schema === true) {
134-
const nextNode = node.compileSchema(createSchema(data), node.spointer, node.schemaId);
140+
const nextNode = node.compileSchema(createSchema(data), node.evaluationPath, node.schemaLocation);
135141
path === null || path === void 0 ? void 0 : path.push({ pointer, node });
136142
return { node: nextNode, error: undefined };
137143
}
138144
let schema;
139145
// we need to copy node to prevent modification of source
140146
// @todo does mergeNode break immutability?
141-
let workingNode = node.compileSchema(node.schema, node.spointer, node.schemaId);
147+
let workingNode = node.compileSchema(node.schema, node.evaluationPath, node.schemaLocation);
142148
const reducers = node.reducers;
143149
for (let i = 0; i < reducers.length; i += 1) {
144150
const result = reducers[i]({ data, key, node, pointer, path });
@@ -204,9 +210,9 @@ export const SchemaNodeMethods = {
204210
const { context } = this;
205211
const draft = getDraft(context.drafts, (_a = schema === null || schema === void 0 ? void 0 : schema.$schema) !== null && _a !== void 0 ? _a : this.context.rootNode.$schema);
206212
const node = {
207-
spointer: "#",
213+
evaluationPath: "#",
208214
lastIdPointer: "#",
209-
schemaId: "#",
215+
schemaLocation: "#",
210216
dynamicId: "",
211217
reducers: [],
212218
resolvers: [],
@@ -240,7 +246,7 @@ export const SchemaNodeMethods = {
240246
},
241247
toJSON() {
242248
var _a;
243-
return { ...this, context: undefined, errors: undefined, parent: (_a = this.parent) === null || _a === void 0 ? void 0 : _a.spointer };
249+
return { ...this, context: undefined, errors: undefined, parent: (_a = this.parent) === null || _a === void 0 ? void 0 : _a.evaluationPath };
244250
}
245251
};
246252
const whitelist = ["$ref", "if", "$defs"];

dist/module/src/compileSchema.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ export function compileSchema(schema, options = {}) {
2424
const drafts = (_b = options.drafts) !== null && _b !== void 0 ? _b : defaultDrafts;
2525
const draft = getDraft(drafts, schema === null || schema === void 0 ? void 0 : schema.$schema);
2626
const node = {
27-
spointer: "#",
27+
evaluationPath: "#",
2828
lastIdPointer: "#",
29-
schemaId: "#",
29+
schemaLocation: "#",
3030
dynamicId: "",
3131
reducers: [],
3232
resolvers: [],

dist/module/src/compileSchema.reduceSchema.test.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ describe("compileSchema : reduceNode", () => {
106106
required: ["one", "two", "three"],
107107
properties: { one: { type: "string" }, two: { type: "string" }, three: { type: "number" } }
108108
});
109+
assert.deepEqual(reduced.dynamicId, "#/$defs/schema(dependencies/one,dependencies/two)");
109110
});
110111
it("should NOT merge dependency when it is not defined", () => {
111112
const node = compileSchema({
@@ -118,6 +119,7 @@ describe("compileSchema : reduceNode", () => {
118119
type: "object",
119120
properties: { one: { type: "string" } }
120121
});
122+
assert.deepEqual(node.dynamicId, "");
121123
});
122124
it("should NOT add dynamic schema if no data matches dependency", () => {
123125
const { node } = compileSchema({
@@ -136,6 +138,7 @@ describe("compileSchema : reduceNode", () => {
136138
required: [],
137139
properties: { one: { type: "string" }, two: { type: "string" } }
138140
});
141+
assert.deepEqual(node.dynamicId, "");
139142
});
140143
it("should resolve nested dependencies schema", () => {
141144
const { node } = compileSchema({
@@ -164,6 +167,7 @@ describe("compileSchema : reduceNode", () => {
164167
four: { type: "boolean" }
165168
}
166169
});
170+
assert.deepEqual(node.dynamicId, "#/$defs/two(dependencies/two)+#/$defs/schema(dependencies/one,#/$defs/two(dependencies/two))");
167171
});
168172
});
169173
describe("if-then-else", () => {
@@ -747,7 +751,7 @@ describe("compileSchema : reduceNode", () => {
747751
}).reduceNode({ one: true });
748752
assert.deepEqual(node.dynamicId, "#(dependencies/one,dependencies/two)");
749753
});
750-
it("should prefix with schemaId", () => {
754+
it("should prefix with schemaLocation", () => {
751755
var _a, _b;
752756
const { node } = (_b = (_a = compileSchema({
753757
properties: {

dist/module/src/compileSchema.test.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -112,36 +112,36 @@ describe("compileSchema getDataDefaultOptions", () => {
112112
});
113113
});
114114
});
115-
describe("compileSchema `schemaId`", () => {
116-
it("should store path from rootSchema as schemaId", () => {
115+
describe("compileSchema `schemaLocation`", () => {
116+
it("should store path from rootSchema as schemaLocation", () => {
117117
const node = compileSchema({
118118
if: { type: "string" },
119119
then: { type: "string" },
120120
properties: { title: { type: "string" } },
121121
$defs: { asset: { type: "string" } }
122122
});
123-
assert.deepEqual(node.schemaId, "#");
124-
assert.deepEqual(node.if.schemaId, "#/if");
125-
assert.deepEqual(node.then.schemaId, "#/then");
126-
assert.deepEqual(node.properties.title.schemaId, "#/properties/title");
127-
assert.deepEqual(node.$defs.asset.schemaId, "#/$defs/asset");
123+
assert.deepEqual(node.schemaLocation, "#");
124+
assert.deepEqual(node.if.schemaLocation, "#/if");
125+
assert.deepEqual(node.then.schemaLocation, "#/then");
126+
assert.deepEqual(node.properties.title.schemaLocation, "#/properties/title");
127+
assert.deepEqual(node.$defs.asset.schemaLocation, "#/$defs/asset");
128128
});
129-
it("should maintain schemaId when resolved by ref", () => {
129+
it("should maintain schemaLocation when resolved by ref", () => {
130130
const { node } = compileSchema({
131131
properties: { title: { $ref: "#/$defs/asset" } },
132132
$defs: { asset: { type: "string" } }
133133
}).getNodeChild("title");
134134
// @todo should have returned already resolved node?
135135
const result = node.resolveRef();
136-
assert.deepEqual(result.schemaId, "#/$defs/asset");
136+
assert.deepEqual(result.schemaLocation, "#/$defs/asset");
137137
});
138-
it("should maintain schemaId when resolved by root-ref", () => {
138+
it("should maintain schemaLocation when resolved by root-ref", () => {
139139
const { node } = compileSchema({
140140
properties: { title: { $ref: "#" } }
141141
}).getNodeChild("title");
142142
// @todo should have returned already resolved node?
143143
const result = node.resolveRef();
144-
assert.deepEqual(result.schemaId, "#");
144+
assert.deepEqual(result.schemaLocation, "#");
145145
});
146146
});
147147
describe("compileSchema `errors`", () => {

dist/module/src/draft04/keywords/$ref.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ function parseRef(node) {
2121
let currentId = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.$id;
2222
if (((_b = node.schema) === null || _b === void 0 ? void 0 : _b.$ref) == null && ((_c = node.schema) === null || _c === void 0 ? void 0 : _c.id)) {
2323
currentId = joinId((_d = node.parent) === null || _d === void 0 ? void 0 : _d.$id, node.schema.id);
24-
// console.log("create id", node.spointer, ":", node.parent?.$id, node.schema?.id, "=>", currentId);
24+
// console.log("create id", node.evaluationPath, ":", node.parent?.$id, node.schema?.id, "=>", currentId);
2525
}
2626
node.$id = currentId;
2727
node.lastIdPointer = (_f = (_e = node.parent) === null || _e === void 0 ? void 0 : _e.lastIdPointer) !== null && _f !== void 0 ? _f : "#";
@@ -33,17 +33,17 @@ function parseRef(node) {
3333
}
3434
const idChanged = currentId !== ((_g = node.parent) === null || _g === void 0 ? void 0 : _g.$id);
3535
if (idChanged) {
36-
node.lastIdPointer = node.spointer;
36+
node.lastIdPointer = node.evaluationPath;
3737
}
3838
// store this node for retrieval by id + json-pointer from id
39-
if (node.lastIdPointer !== "#" && node.spointer.startsWith(node.lastIdPointer)) {
40-
const localPointer = `#${node.spointer.replace(node.lastIdPointer, "")}`;
39+
if (node.lastIdPointer !== "#" && node.evaluationPath.startsWith(node.lastIdPointer)) {
40+
const localPointer = `#${node.evaluationPath.replace(node.lastIdPointer, "")}`;
4141
register(node, joinId(currentId, localPointer));
4242
}
4343
else {
44-
register(node, joinId(currentId, node.spointer));
44+
register(node, joinId(currentId, node.evaluationPath));
4545
}
46-
register(node, joinId(node.context.rootNode.$id, node.spointer));
46+
register(node, joinId(node.context.rootNode.$id, node.evaluationPath));
4747
// precompile reference
4848
if (node.schema.$ref) {
4949
node.$ref = joinId(currentId, node.schema.$ref);
@@ -66,25 +66,25 @@ function resolveRef({ pointer, path } = {}) {
6666
}
6767
return resolvedNode;
6868
}
69-
function compileNext(referencedNode, spointer = referencedNode.spointer) {
69+
function compileNext(referencedNode, evaluationPath = referencedNode.evaluationPath) {
7070
const referencedSchema = isObject(referencedNode.schema)
7171
? omit(referencedNode.schema, "id")
7272
: referencedNode.schema;
73-
return referencedNode.compileSchema(referencedSchema, `${spointer}/$ref`, referencedSchema.schemaId);
73+
return referencedNode.compileSchema(referencedSchema, `${evaluationPath}/$ref`, referencedSchema.schemaLocation);
7474
}
7575
function getRef(node, $ref = node === null || node === void 0 ? void 0 : node.$ref) {
7676
var _a;
7777
if ($ref == null) {
7878
return node;
7979
}
80-
// resolve $ref by json-spointer
80+
// resolve $ref by json-evaluationPath
8181
if (node.context.refs[$ref]) {
8282
// console.log(`ref resolve ${$ref} from refs`, node.context.refs[$ref].ref);
83-
return compileNext(node.context.refs[$ref], node.spointer);
83+
return compileNext(node.context.refs[$ref], node.evaluationPath);
8484
}
8585
if (node.context.anchors[$ref]) {
8686
// console.log(`ref resolve ${$ref} from anchors`, node.context.anchors[$ref].ref);
87-
return compileNext(node.context.anchors[$ref], node.spointer);
87+
return compileNext(node.context.anchors[$ref], node.evaluationPath);
8888
}
8989
// check for remote-host + pointer pair to switch rootSchema
9090
const fragments = splitRef($ref);
@@ -97,7 +97,7 @@ function getRef(node, $ref = node === null || node === void 0 ? void 0 : node.$r
9797
const $ref = fragments[0];
9898
// this is a reference to remote-host root node
9999
if (node.context.remotes[$ref]) {
100-
return compileNext(node.context.remotes[$ref], node.spointer);
100+
return compileNext(node.context.remotes[$ref], node.evaluationPath);
101101
}
102102
// console.error("REF: UNFOUND 1", $ref, Object.keys(node.context.remotes));
103103
return undefined;

dist/module/src/draft06/keywords/$ref.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,17 @@ function parseRef(node) {
2525
}
2626
const idChanged = currentId !== ((_g = node.parent) === null || _g === void 0 ? void 0 : _g.$id);
2727
if (idChanged) {
28-
node.lastIdPointer = node.spointer;
28+
node.lastIdPointer = node.evaluationPath;
2929
}
3030
// store this node for retrieval by $id + json-pointer from $id
31-
if (node.lastIdPointer !== "#" && node.spointer.startsWith(node.lastIdPointer)) {
32-
const localPointer = `#${node.spointer.replace(node.lastIdPointer, "")}`;
31+
if (node.lastIdPointer !== "#" && node.evaluationPath.startsWith(node.lastIdPointer)) {
32+
const localPointer = `#${node.evaluationPath.replace(node.lastIdPointer, "")}`;
3333
node.context.refs[joinId(currentId, localPointer)] = node;
3434
}
3535
else {
36-
node.context.refs[joinId(currentId, node.spointer)] = node;
36+
node.context.refs[joinId(currentId, node.evaluationPath)] = node;
3737
}
38-
node.context.refs[joinId(node.context.rootNode.$id, node.spointer)] = node;
38+
node.context.refs[joinId(node.context.rootNode.$id, node.evaluationPath)] = node;
3939
// precompile reference
4040
if (node.schema.$ref) {
4141
node.$ref = joinId(currentId, node.schema.$ref);

dist/module/src/draft2019-09/keywords/$ref.js

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,16 @@ export function parseRef(node) {
2727
const currentId = joinId((_a = node.parent) === null || _a === void 0 ? void 0 : _a.$id, (_b = node.schema) === null || _b === void 0 ? void 0 : _b.$id);
2828
node.$id = currentId;
2929
node.lastIdPointer = (_d = (_c = node.parent) === null || _c === void 0 ? void 0 : _c.lastIdPointer) !== null && _d !== void 0 ? _d : "#";
30-
if (currentId !== ((_e = node.parent) === null || _e === void 0 ? void 0 : _e.$id) && node.spointer !== "#") {
31-
node.lastIdPointer = node.spointer;
30+
if (currentId !== ((_e = node.parent) === null || _e === void 0 ? void 0 : _e.$id) && node.evaluationPath !== "#") {
31+
node.lastIdPointer = node.evaluationPath;
3232
}
3333
// store this node for retrieval by $id + json-pointer from $id
34-
if (node.lastIdPointer !== "#" && node.spointer.startsWith(node.lastIdPointer)) {
35-
const localPointer = `#${node.spointer.replace(node.lastIdPointer, "")}`;
34+
if (node.lastIdPointer !== "#" && node.evaluationPath.startsWith(node.lastIdPointer)) {
35+
const localPointer = `#${node.evaluationPath.replace(node.lastIdPointer, "")}`;
3636
register(node, joinId(currentId, localPointer));
3737
}
3838
// store $rootId + json-pointer to this node
39-
register(node, joinId(node.context.rootNode.$id, node.spointer));
39+
register(node, joinId(node.context.rootNode.$id, node.evaluationPath));
4040
// store this node for retrieval by $id + anchor
4141
if (node.schema.$anchor) {
4242
node.context.anchors[`${currentId.replace(/#$/, "")}#${node.schema.$anchor}`] = node;
@@ -51,7 +51,7 @@ export function parseRef(node) {
5151
}
5252
// export function reduceRef({ node, data, key, pointer, path }: JsonSchemaReducerParams) {
5353
// const resolvedNode = node.resolveRef({ pointer, path });
54-
// if (resolvedNode.schemaId === node.schemaId) {
54+
// if (resolvedNode.schemaLocation === node.schemaLocation) {
5555
// return resolvedNode;
5656
// }
5757
// const result = resolvedNode.reduceNode(data, { key, pointer, path });
@@ -113,24 +113,24 @@ function resolveRecursiveRef(node, path) {
113113
const nextNode = getRef(node, joinId(node.$id, node.schema.$recursiveRef));
114114
return nextNode;
115115
}
116-
function compileNext(referencedNode, spointer = referencedNode.spointer) {
116+
function compileNext(referencedNode, evaluationPath = referencedNode.evaluationPath) {
117117
const referencedSchema = isObject(referencedNode.schema)
118118
? omit(referencedNode.schema, "$id")
119119
: referencedNode.schema;
120-
return referencedNode.compileSchema(referencedSchema, `${spointer}/$ref`, referencedNode.schemaId);
120+
return referencedNode.compileSchema(referencedSchema, `${evaluationPath}/$ref`, referencedNode.schemaLocation);
121121
}
122122
export default function getRef(node, $ref = node === null || node === void 0 ? void 0 : node.$ref) {
123123
var _a;
124124
if ($ref == null) {
125125
return node;
126126
}
127-
// resolve $ref by json-spointer
127+
// resolve $ref by json-evaluationPath
128128
if (node.context.refs[$ref]) {
129-
return compileNext(node.context.refs[$ref], node.spointer);
129+
return compileNext(node.context.refs[$ref], node.evaluationPath);
130130
}
131131
// resolve $ref from $anchor
132132
if (node.context.anchors[$ref]) {
133-
return compileNext(node.context.anchors[$ref], node.spointer);
133+
return compileNext(node.context.anchors[$ref], node.evaluationPath);
134134
}
135135
// check for remote-host + pointer pair to switch rootSchema
136136
const fragments = splitRef($ref);
@@ -143,7 +143,7 @@ export default function getRef(node, $ref = node === null || node === void 0 ? v
143143
const $ref = fragments[0];
144144
// this is a reference to remote-host root node
145145
if (node.context.remotes[$ref]) {
146-
return compileNext(node.context.remotes[$ref], node.spointer);
146+
return compileNext(node.context.remotes[$ref], node.evaluationPath);
147147
}
148148
if ($ref[0] === "#") {
149149
// @todo there is a bug joining multiple fragments to e.g. #/base#/examples/0
@@ -153,7 +153,7 @@ export default function getRef(node, $ref = node === null || node === void 0 ? v
153153
const rootSchema = node.context.rootNode.schema;
154154
const targetSchema = get(rootSchema, ref);
155155
if (targetSchema) {
156-
return node.compileSchema(targetSchema, `${node.spointer}/$ref`, ref);
156+
return node.compileSchema(targetSchema, `${node.evaluationPath}/$ref`, ref);
157157
}
158158
}
159159
// console.error("REF: UNFOUND 1", $ref);

dist/module/src/draft2019-09/keywords/additionalItems.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ export const additionalItemsKeyword = {
1616
};
1717
// must come as last resolver
1818
export function parseAdditionalItems(node) {
19-
const { schema, spointer, schemaId } = node;
19+
const { schema, evaluationPath, schemaLocation } = node;
2020
if (isObject(schema.additionalItems) || schema.additionalItems === true) {
21-
node.additionalItems = node.compileSchema(schema.additionalItems, `${spointer}/additionalItems`, `${schemaId}/additionalItems`);
21+
node.additionalItems = node.compileSchema(schema.additionalItems, `${evaluationPath}/additionalItems`, `${schemaLocation}/additionalItems`);
2222
}
2323
}
2424
function additionalItemsResolver({ node, key, data }) {

0 commit comments

Comments
 (0)