@hyperjump/json-schema 0.18.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/LICENSE +21 -0
- package/README.md +176 -0
- package/dist/json-schema-amd.js +4710 -0
- package/dist/json-schema-amd.js.map +1 -0
- package/dist/json-schema-amd.min.js +2 -0
- package/dist/json-schema-amd.min.js.map +1 -0
- package/dist/json-schema-cjs.js +4708 -0
- package/dist/json-schema-cjs.js.map +1 -0
- package/dist/json-schema-cjs.min.js +2 -0
- package/dist/json-schema-cjs.min.js.map +1 -0
- package/dist/json-schema-esm.js +4691 -0
- package/dist/json-schema-esm.js.map +1 -0
- package/dist/json-schema-esm.min.js +2 -0
- package/dist/json-schema-esm.min.js.map +1 -0
- package/dist/json-schema-iife.js +4713 -0
- package/dist/json-schema-iife.js.map +1 -0
- package/dist/json-schema-iife.min.js +2 -0
- package/dist/json-schema-iife.min.js.map +1 -0
- package/dist/json-schema-system.js +4698 -0
- package/dist/json-schema-system.js.map +1 -0
- package/dist/json-schema-system.min.js +2 -0
- package/dist/json-schema-system.min.js.map +1 -0
- package/dist/json-schema-umd.js +4714 -0
- package/dist/json-schema-umd.js.map +1 -0
- package/dist/json-schema-umd.min.js +2 -0
- package/dist/json-schema-umd.min.js.map +1 -0
- package/lib/common.js +13 -0
- package/lib/draft-04.d.ts +40 -0
- package/lib/draft-04.js +94 -0
- package/lib/draft-06.d.ts +44 -0
- package/lib/draft-06.js +51 -0
- package/lib/draft-07.d.ts +52 -0
- package/lib/draft-07.js +55 -0
- package/lib/draft-2019-09.d.ts +62 -0
- package/lib/draft-2019-09.js +92 -0
- package/lib/draft-2020-12.d.ts +62 -0
- package/lib/draft-2020-12.js +103 -0
- package/lib/index.d.ts +28 -0
- package/lib/index.js +26 -0
- package/lib/index.mjs +18 -0
- package/lib/keywords/additionalItems.js +27 -0
- package/lib/keywords/additionalItems6.js +23 -0
- package/lib/keywords/additionalProperties.js +33 -0
- package/lib/keywords/additionalProperties6.js +28 -0
- package/lib/keywords/allOf.js +28 -0
- package/lib/keywords/anyOf.js +29 -0
- package/lib/keywords/const.js +8 -0
- package/lib/keywords/contains-minContains-maxContains.js +33 -0
- package/lib/keywords/contains.js +10 -0
- package/lib/keywords/definitions.js +15 -0
- package/lib/keywords/dependencies.js +29 -0
- package/lib/keywords/dependentRequired.js +19 -0
- package/lib/keywords/dependentSchemas.js +30 -0
- package/lib/keywords/dynamicRef.js +24 -0
- package/lib/keywords/else.js +43 -0
- package/lib/keywords/enum.js +8 -0
- package/lib/keywords/exclusiveMaximum.js +7 -0
- package/lib/keywords/exclusiveMinimum.js +7 -0
- package/lib/keywords/if.js +19 -0
- package/lib/keywords/index.js +55 -0
- package/lib/keywords/items.js +31 -0
- package/lib/keywords/items202012.js +23 -0
- package/lib/keywords/maxItems.js +7 -0
- package/lib/keywords/maxLength.js +7 -0
- package/lib/keywords/maxLength6.js +7 -0
- package/lib/keywords/maxProperties.js +7 -0
- package/lib/keywords/maximum-exclusiveMaximum.js +20 -0
- package/lib/keywords/maximum.js +7 -0
- package/lib/keywords/minItems.js +7 -0
- package/lib/keywords/minLength.js +7 -0
- package/lib/keywords/minLength6.js +7 -0
- package/lib/keywords/minProperties.js +7 -0
- package/lib/keywords/minimum-exclusiveMinimum.js +20 -0
- package/lib/keywords/minimum.js +7 -0
- package/lib/keywords/multipleOf.js +17 -0
- package/lib/keywords/not.js +7 -0
- package/lib/keywords/oneOf.js +48 -0
- package/lib/keywords/pattern.js +7 -0
- package/lib/keywords/patternProperties.js +23 -0
- package/lib/keywords/properties.js +25 -0
- package/lib/keywords/propertyNames.js +11 -0
- package/lib/keywords/ref.js +13 -0
- package/lib/keywords/required.js +10 -0
- package/lib/keywords/then.js +43 -0
- package/lib/keywords/tupleItems.js +24 -0
- package/lib/keywords/type.js +7 -0
- package/lib/keywords/unevaluatedItems.js +23 -0
- package/lib/keywords/unevaluatedProperties.js +24 -0
- package/lib/keywords/uniqueItems.js +16 -0
- package/meta/draft/2019-09/meta/applicator.js +55 -0
- package/meta/draft/2019-09/meta/content.js +17 -0
- package/meta/draft/2019-09/meta/core.js +57 -0
- package/meta/draft/2019-09/meta/format.js +14 -0
- package/meta/draft/2019-09/meta/meta-data.js +37 -0
- package/meta/draft/2019-09/meta/validation.js +98 -0
- package/meta/draft/2019-09/schema.js +42 -0
- package/meta/draft/2020-12/meta/applicator.js +49 -0
- package/meta/draft/2020-12/meta/content.js +17 -0
- package/meta/draft/2020-12/meta/core.js +57 -0
- package/meta/draft/2020-12/meta/format-annotation.js +14 -0
- package/meta/draft/2020-12/meta/format-assertion.js +14 -0
- package/meta/draft/2020-12/meta/meta-data.js +37 -0
- package/meta/draft/2020-12/meta/unevaluated.js +15 -0
- package/meta/draft/2020-12/meta/validation.js +98 -0
- package/meta/draft/2020-12/schema.js +44 -0
- package/meta/draft-04/hyper-schema.js +136 -0
- package/meta/draft-04/schema.js +149 -0
- package/meta/draft-06/schema.js +154 -0
- package/meta/draft-07/schema.js +172 -0
- package/package.json +57 -0
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Core, Schema, Keywords, InvalidSchemaError } from "@hyperjump/json-schema-core";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
export type JsonSchema = {
|
|
5
|
+
add: typeof Schema.add;
|
|
6
|
+
get: typeof Schema.get;
|
|
7
|
+
validate: typeof Core.validate;
|
|
8
|
+
compile: typeof Core.compile;
|
|
9
|
+
interpret: typeof Core.interpret;
|
|
10
|
+
setMetaOutputFormat: typeof Core.setMetaOutputFormat;
|
|
11
|
+
setShouldMetaValidate: typeof Core.setShouldMetaValidate;
|
|
12
|
+
FLAG: typeof Core.FLAG;
|
|
13
|
+
BASIC: typeof Core.BASIC;
|
|
14
|
+
DETAILED: typeof Core.DETAILED;
|
|
15
|
+
VERBOSE: typeof Core.VERBOSE;
|
|
16
|
+
Keywords: typeof Keywords;
|
|
17
|
+
InvalidSchemaError: typeof InvalidSchemaError;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export * from "@hyperjump/json-schema-core";
|
|
21
|
+
export * from "./draft-04";
|
|
22
|
+
export * from "./draft-06";
|
|
23
|
+
export * from "./draft-07";
|
|
24
|
+
export * from "./draft-2019-09";
|
|
25
|
+
export * from "./draft-2020-12";
|
|
26
|
+
|
|
27
|
+
declare const jsonSchema: JsonSchema;
|
|
28
|
+
export default jsonSchema;
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const { Core, Schema, InvalidSchemaError } = require("@hyperjump/json-schema-core");
|
|
2
|
+
const Keywords = require("./keywords");
|
|
3
|
+
|
|
4
|
+
require("./draft-04");
|
|
5
|
+
require("./draft-06");
|
|
6
|
+
require("./draft-07");
|
|
7
|
+
require("./draft-2019-09");
|
|
8
|
+
require("./draft-2020-12");
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
module.exports = {
|
|
12
|
+
add: Core.add,
|
|
13
|
+
get: Schema.get,
|
|
14
|
+
validate: Core.validate,
|
|
15
|
+
compile: Core.compile,
|
|
16
|
+
interpret: Core.interpret,
|
|
17
|
+
setMetaOutputFormat: Core.setMetaOutputFormat,
|
|
18
|
+
setShouldMetaValidate: Core.setShouldMetaValidate,
|
|
19
|
+
FLAG: Core.FLAG,
|
|
20
|
+
BASIC: Core.BASIC,
|
|
21
|
+
DETAILED: Core.DETAILED,
|
|
22
|
+
VERBOSE: Core.VERBOSE,
|
|
23
|
+
Keywords: Keywords,
|
|
24
|
+
InvalidSchemaError: InvalidSchemaError
|
|
25
|
+
};
|
|
26
|
+
|
package/lib/index.mjs
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import JsonSchema from "./index.js";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
export const add = JsonSchema.add;
|
|
5
|
+
export const get = JsonSchema.get;
|
|
6
|
+
export const validate = JsonSchema.validate;
|
|
7
|
+
export const compile = JsonSchema.compile;
|
|
8
|
+
export const interpret = JsonSchema.interpret;
|
|
9
|
+
export const setMetaOutputFormat = JsonSchema.setMetaOutputFormat;
|
|
10
|
+
export const setShouldMetaValidate = JsonSchema.setShouldMetaValidate;
|
|
11
|
+
export const FLAG = JsonSchema.FLAG;
|
|
12
|
+
export const BASIC = JsonSchema.BASIC;
|
|
13
|
+
export const DETAILED = JsonSchema.DETAILED;
|
|
14
|
+
export const VERBOSE = JsonSchema.VERBOSE;
|
|
15
|
+
export const Keywords = JsonSchema.Keywords;
|
|
16
|
+
export const InvalidSchemaError = JsonSchema.InvalidSchemaError;
|
|
17
|
+
|
|
18
|
+
export default JsonSchema;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const { Core, Schema, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const compile = async (schema, ast, parentSchema) => {
|
|
5
|
+
const items = await Schema.step("items", parentSchema);
|
|
6
|
+
const numberOfItems = Schema.typeOf(items, "array") ? Schema.length(items) : Number.MAX_SAFE_INTEGER;
|
|
7
|
+
|
|
8
|
+
if (Schema.typeOf(schema, "boolean")) {
|
|
9
|
+
return [numberOfItems, Schema.value(schema)];
|
|
10
|
+
} else {
|
|
11
|
+
return [numberOfItems, await Core.compileSchema(schema, ast)];
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const interpret = ([numberOfItems, additionalItems], instance, ast, dynamicAnchors) => {
|
|
16
|
+
if (!Instance.typeOf(instance, "array")) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (typeof additionalItems === "string") {
|
|
21
|
+
return Instance.every((item, ndx) => ndx < numberOfItems || Core.interpretSchema(additionalItems, item, ast, dynamicAnchors), instance);
|
|
22
|
+
} else {
|
|
23
|
+
return Instance.every((item, ndx) => ndx < numberOfItems ? true : additionalItems, instance);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
module.exports = { compile, interpret };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const { Core, Schema, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const compile = async (schema, ast, parentSchema) => {
|
|
5
|
+
const items = await Schema.step("items", parentSchema);
|
|
6
|
+
const numberOfItems = Schema.typeOf(items, "array") ? Schema.length(items) : Number.MAX_SAFE_INTEGER;
|
|
7
|
+
|
|
8
|
+
return [numberOfItems, await Core.compileSchema(schema, ast)];
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const interpret = ([numberOfItems, additionalItems], instance, ast, dynamicAnchors) => {
|
|
12
|
+
if (!Instance.typeOf(instance, "array")) {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return Instance.every((item, ndx) => ndx < numberOfItems || Core.interpretSchema(additionalItems, item, ast, dynamicAnchors), instance);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const collectEvaluatedItems = (keywordValue, instance, ast, dynamicAnchors) => {
|
|
20
|
+
return interpret(keywordValue, instance, ast, dynamicAnchors) && new Set(Instance.map((item, ndx) => ndx, instance));
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
module.exports = { compile, interpret, collectEvaluatedItems };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const { Core, Schema, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const compile = async (schema, ast, parentSchema) => {
|
|
5
|
+
const properties = await Schema.step("properties", parentSchema);
|
|
6
|
+
const propertyNames = Schema.typeOf(properties, "object") ? Schema.keys(properties) : [];
|
|
7
|
+
|
|
8
|
+
const patternProperties = await Schema.step("patternProperties", parentSchema);
|
|
9
|
+
const propertyNamePatterns = Schema.typeOf(patternProperties, "object") ? Schema.keys(patternProperties).map((pattern) => new RegExp(pattern)) : [];
|
|
10
|
+
|
|
11
|
+
if (Schema.typeOf(schema, "boolean")) {
|
|
12
|
+
return [propertyNames, propertyNamePatterns, Schema.value(schema)];
|
|
13
|
+
} else {
|
|
14
|
+
return [propertyNames, propertyNamePatterns, await Core.compileSchema(schema, ast)];
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const interpret = ([propertyNames, propertyNamePatterns, additionalProperties], instance, ast, dynamicAnchors) => {
|
|
19
|
+
if (!Instance.typeOf(instance, "object")) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const properties = Instance.entries(instance)
|
|
24
|
+
.filter(([propertyName]) => !propertyNames.includes(propertyName) && !propertyNamePatterns.some((pattern) => pattern.test(propertyName)));
|
|
25
|
+
|
|
26
|
+
if (typeof additionalProperties === "string") {
|
|
27
|
+
return properties.every(([, property]) => Core.interpretSchema(additionalProperties, property, ast, dynamicAnchors));
|
|
28
|
+
} else {
|
|
29
|
+
return properties.length === 0 || additionalProperties;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
module.exports = { compile, interpret };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const { Core, Schema, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const compile = async (schema, ast, parentSchema) => {
|
|
5
|
+
const propertiesSchema = await Schema.step("properties", parentSchema);
|
|
6
|
+
const propertyNames = Schema.typeOf(propertiesSchema, "object") ? Schema.keys(propertiesSchema) : [];
|
|
7
|
+
|
|
8
|
+
const patternProperties = await Schema.step("patternProperties", parentSchema);
|
|
9
|
+
const propertyNamePatterns = Schema.typeOf(patternProperties, "object") ? Schema.keys(patternProperties).map((pattern) => new RegExp(pattern)) : [];
|
|
10
|
+
|
|
11
|
+
return [propertyNames, propertyNamePatterns, await Core.compileSchema(schema, ast)];
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const interpret = ([propertyNames, propertyNamePatterns, additionalProperties], instance, ast, dynamicAnchors) => {
|
|
15
|
+
if (!Instance.typeOf(instance, "object")) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return Instance.entries(instance)
|
|
20
|
+
.filter(([propertyName]) => !propertyNames.includes(propertyName) && !propertyNamePatterns.some((pattern) => pattern.test(propertyName)))
|
|
21
|
+
.every(([, property]) => Core.interpretSchema(additionalProperties, property, ast, dynamicAnchors));
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const collectEvaluatedProperties = (keywordValue, instance, ast, dynamicAnchors) => {
|
|
25
|
+
return interpret(keywordValue, instance, ast, dynamicAnchors) && [new RegExp("")];
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
module.exports = { compile, interpret, collectEvaluatedProperties };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const { Core, Schema } = require("@hyperjump/json-schema-core");
|
|
2
|
+
const Pact = require("@hyperjump/pact");
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const compile = (schema, ast) => Pact.pipeline([
|
|
6
|
+
Schema.map(async (itemSchema) => Core.compileSchema(await itemSchema, ast)),
|
|
7
|
+
Pact.all
|
|
8
|
+
], schema);
|
|
9
|
+
|
|
10
|
+
const interpret = (allOf, instance, ast, dynamicAnchors) => {
|
|
11
|
+
return allOf.every((schemaUrl) => Core.interpretSchema(schemaUrl, instance, ast, dynamicAnchors));
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const collectEvaluatedProperties = (allOf, instance, ast, dynamicAnchors) => {
|
|
15
|
+
return allOf.reduce((acc, schemaUrl) => {
|
|
16
|
+
const propertyNames = acc && Core.collectEvaluatedProperties(schemaUrl, instance, ast, dynamicAnchors);
|
|
17
|
+
return propertyNames !== false && [...acc, ...propertyNames];
|
|
18
|
+
}, []);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const collectEvaluatedItems = (allOf, instance, ast, dynamicAnchors) => {
|
|
22
|
+
return allOf.reduce((acc, schemaUrl) => {
|
|
23
|
+
const itemIndexes = acc !== false && Core.collectEvaluatedItems(schemaUrl, instance, ast, dynamicAnchors);
|
|
24
|
+
return itemIndexes !== false && new Set([...acc, ...itemIndexes]);
|
|
25
|
+
}, new Set());
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
module.exports = { compile, interpret, collectEvaluatedProperties, collectEvaluatedItems };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const { Core, Schema } = require("@hyperjump/json-schema-core");
|
|
2
|
+
const Pact = require("@hyperjump/pact");
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const compile = (schema, ast) => Pact.pipeline([
|
|
6
|
+
Schema.map(async (itemSchema) => Core.compileSchema(await itemSchema, ast)),
|
|
7
|
+
Pact.all
|
|
8
|
+
], schema);
|
|
9
|
+
|
|
10
|
+
const interpret = (anyOf, instance, ast, dynamicAnchors) => {
|
|
11
|
+
const matches = anyOf.filter((schemaUrl) => Core.interpretSchema(schemaUrl, instance, ast, dynamicAnchors));
|
|
12
|
+
return matches.length > 0;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const collectEvaluatedProperties = (anyOf, instance, ast, dynamicAnchors) => {
|
|
16
|
+
return anyOf.reduce((acc, schemaUrl) => {
|
|
17
|
+
const propertyNames = Core.collectEvaluatedProperties(schemaUrl, instance, ast, dynamicAnchors);
|
|
18
|
+
return propertyNames !== false ? [...acc || [], ...propertyNames] : acc;
|
|
19
|
+
}, false);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const collectEvaluatedItems = (anyOf, instance, ast, dynamicAnchors) => {
|
|
23
|
+
return anyOf.reduce((acc, schemaUrl) => {
|
|
24
|
+
const itemIndexes = Core.collectEvaluatedItems(schemaUrl, instance, ast, dynamicAnchors);
|
|
25
|
+
return itemIndexes !== false ? new Set([...acc || [], ...itemIndexes]) : acc;
|
|
26
|
+
}, false);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
module.exports = { compile, interpret, collectEvaluatedProperties, collectEvaluatedItems };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const { Schema, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
const jsonStringify = require("fastest-stable-stringify");
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const compile = (schema) => jsonStringify(Schema.value(schema));
|
|
6
|
+
const interpret = (const_, instance) => jsonStringify(Instance.value(instance)) === const_;
|
|
7
|
+
|
|
8
|
+
module.exports = { compile, interpret };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const { Core, Schema, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const compile = async (schema, ast, parentSchema) => {
|
|
5
|
+
const contains = await Core.compileSchema(schema, ast);
|
|
6
|
+
|
|
7
|
+
const minContainsSchema = await Schema.step("minContains", parentSchema);
|
|
8
|
+
const minContains = Schema.typeOf(minContainsSchema, "number") ? Schema.value(minContainsSchema) : 1;
|
|
9
|
+
|
|
10
|
+
const maxContainsSchema = await Schema.step("maxContains", parentSchema);
|
|
11
|
+
const maxContains = Schema.typeOf(maxContainsSchema, "number") ? Schema.value(maxContainsSchema) : Number.MAX_SAFE_INTEGER;
|
|
12
|
+
|
|
13
|
+
return { contains, minContains, maxContains };
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const interpret = ({ contains, minContains, maxContains }, instance, ast, dynamicAnchors) => {
|
|
17
|
+
if (!Instance.typeOf(instance, "array")) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const matches = Instance.reduce((matches, item) => {
|
|
22
|
+
return Core.interpretSchema(contains, item, ast, dynamicAnchors) ? matches + 1 : matches;
|
|
23
|
+
}, 0, instance);
|
|
24
|
+
return matches >= minContains && matches <= maxContains;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const collectEvaluatedItems = (keywordValue, instance, ast, dynamicAnchors) => {
|
|
28
|
+
return interpret(keywordValue, instance, ast, dynamicAnchors) && Instance.reduce((matchedIndexes, item, itemIndex) => {
|
|
29
|
+
return Core.interpretSchema(keywordValue.contains, item, ast, dynamicAnchors) ? matchedIndexes.add(itemIndex) : matchedIndexes;
|
|
30
|
+
}, new Set(), instance);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
module.exports = { compile, interpret, collectEvaluatedItems };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const { Core, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const compile = (schema, ast) => Core.compileSchema(schema, ast);
|
|
5
|
+
|
|
6
|
+
const interpret = (contains, instance, ast, dynamicAnchors) => {
|
|
7
|
+
return !Instance.typeOf(instance, "array") || Instance.some((item) => Core.interpretSchema(contains, item, ast, dynamicAnchors), instance);
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
module.exports = { compile, interpret };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const { Core, Schema } = require("@hyperjump/json-schema-core");
|
|
2
|
+
const Pact = require("@hyperjump/pact");
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const compile = async (schema, ast) => {
|
|
6
|
+
await Pact.pipeline([
|
|
7
|
+
Schema.entries,
|
|
8
|
+
Pact.map(([, definitionSchema]) => Core.compileSchema(definitionSchema, ast)),
|
|
9
|
+
Pact.all
|
|
10
|
+
], schema);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const interpret = () => true;
|
|
14
|
+
|
|
15
|
+
module.exports = { compile, interpret };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const { Core, Schema, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
const Pact = require("@hyperjump/pact");
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const compile = (schema, ast) => Pact.pipeline([
|
|
6
|
+
Schema.entries,
|
|
7
|
+
Pact.map(async ([key, dependency]) => {
|
|
8
|
+
return [key, Schema.typeOf(dependency, "array") ? Schema.value(dependency) : await Core.compileSchema(dependency, ast)];
|
|
9
|
+
}),
|
|
10
|
+
Pact.all
|
|
11
|
+
], schema);
|
|
12
|
+
|
|
13
|
+
const interpret = (dependencies, instance, ast, dynamicAnchors) => {
|
|
14
|
+
const value = Instance.value(instance);
|
|
15
|
+
|
|
16
|
+
return !Instance.typeOf(instance, "object") || dependencies.every(([propertyName, dependency]) => {
|
|
17
|
+
if (!(propertyName in value)) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (Array.isArray(dependency)) {
|
|
22
|
+
return dependency.every((key) => key in value);
|
|
23
|
+
} else {
|
|
24
|
+
return Core.interpretSchema(dependency, instance, ast, dynamicAnchors);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
module.exports = { compile, interpret };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const { Schema, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
const Pact = require("@hyperjump/pact");
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const compile = (schema) => Pact.pipeline([
|
|
6
|
+
Schema.entries,
|
|
7
|
+
Pact.map(([key, dependentRequired]) => [key, Schema.value(dependentRequired)]),
|
|
8
|
+
Pact.all
|
|
9
|
+
], schema);
|
|
10
|
+
|
|
11
|
+
const interpret = (dependentRequired, instance) => {
|
|
12
|
+
const value = Instance.value(instance);
|
|
13
|
+
|
|
14
|
+
return !Instance.typeOf(instance, "object") || dependentRequired.every(([propertyName, required]) => {
|
|
15
|
+
return !(propertyName in value) || required.every((key) => key in value);
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
module.exports = { compile, interpret };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const { Core, Schema, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
const Pact = require("@hyperjump/pact");
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const compile = (schema, ast) => Pact.pipeline([
|
|
6
|
+
Schema.entries,
|
|
7
|
+
Pact.map(async ([key, dependentSchema]) => [key, await Core.compileSchema(dependentSchema, ast)]),
|
|
8
|
+
Pact.all
|
|
9
|
+
], schema);
|
|
10
|
+
|
|
11
|
+
const interpret = (dependentSchemas, instance, ast, dynamicAnchors) => {
|
|
12
|
+
const value = Instance.value(instance);
|
|
13
|
+
|
|
14
|
+
return !Instance.typeOf(instance, "object") || dependentSchemas.every(([propertyName, dependentSchema]) => {
|
|
15
|
+
return !(propertyName in value) || Core.interpretSchema(dependentSchema, instance, ast, dynamicAnchors);
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const collectEvaluatedProperties = (dependentSchemas, instance, ast, dynamicAnchors) => {
|
|
20
|
+
return dependentSchemas.reduce((acc, [propertyName, dependentSchema]) => {
|
|
21
|
+
if (!acc || !Instance.has(propertyName, instance)) {
|
|
22
|
+
return acc;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const propertyNames = Core.collectEvaluatedProperties(dependentSchema, instance, ast, dynamicAnchors);
|
|
26
|
+
return propertyNames !== false && acc.concat(propertyNames);
|
|
27
|
+
}, []);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
module.exports = { compile, interpret, collectEvaluatedProperties };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const { Core, Schema } = require("@hyperjump/json-schema-core");
|
|
2
|
+
const { splitUrl } = require("../common");
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const compile = async (dynamicRef, ast) => {
|
|
6
|
+
const [, fragment] = splitUrl(Schema.value(dynamicRef));
|
|
7
|
+
const referencedSchema = await Schema.get(Schema.value(dynamicRef), dynamicRef);
|
|
8
|
+
await Core.compileSchema(referencedSchema, ast);
|
|
9
|
+
return [referencedSchema.id, fragment];
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const interpret = ([id, fragment], instance, ast, dynamicAnchors) => {
|
|
13
|
+
if (fragment in ast.metaData[id].dynamicAnchors) {
|
|
14
|
+
return Core.interpretSchema(dynamicAnchors[fragment], instance, ast, dynamicAnchors);
|
|
15
|
+
} else {
|
|
16
|
+
const pointer = Schema.getAnchorPointer(ast.metaData[id], fragment);
|
|
17
|
+
return Core.interpretSchema(`${id}#${encodeURI(pointer)}`, instance, ast, dynamicAnchors);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const collectEvaluatedProperties = Core.collectEvaluatedProperties;
|
|
22
|
+
const collectEvaluatedItems = Core.collectEvaluatedItems;
|
|
23
|
+
|
|
24
|
+
module.exports = { compile, interpret, collectEvaluatedProperties, collectEvaluatedItems };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const { Core, Schema } = require("@hyperjump/json-schema-core");
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const compile = async (schema, ast, parentSchema) => {
|
|
5
|
+
if (Schema.has("if", parentSchema)) {
|
|
6
|
+
const ifSchema = await Schema.step("if", parentSchema);
|
|
7
|
+
return [await Core.compileSchema(ifSchema, ast), await Core.compileSchema(schema, ast)];
|
|
8
|
+
} else {
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const interpret = ([guard, block], instance, ast, dynamicAnchors) => {
|
|
14
|
+
return guard === undefined || quietInterpretSchema(guard, instance, ast, dynamicAnchors) || Core.interpretSchema(block, instance, ast, dynamicAnchors);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// Interpret a schema without events being emitted
|
|
18
|
+
const quietInterpretSchema = (uri, instance, ast, dynamicAnchors) => {
|
|
19
|
+
const nodes = ast[uri][2];
|
|
20
|
+
|
|
21
|
+
return typeof nodes === "boolean" ? nodes : nodes
|
|
22
|
+
.every(([keywordId, , keywordValue]) => {
|
|
23
|
+
return Core.getKeyword(keywordId).interpret(keywordValue, instance, ast, dynamicAnchors);
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const collectEvaluatedProperties = ([guard, block], instance, ast, dynamicAnchors) => {
|
|
28
|
+
if (guard === undefined || quietInterpretSchema(guard, instance, ast, dynamicAnchors)) {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return Core.collectEvaluatedProperties(block, instance, ast, dynamicAnchors);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const collectEvaluatedItems = ([guard, block], instance, ast, dynamicAnchors) => {
|
|
36
|
+
if (guard === undefined || quietInterpretSchema(guard, instance, ast, dynamicAnchors)) {
|
|
37
|
+
return new Set();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return Core.collectEvaluatedItems(block, instance, ast, dynamicAnchors);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
module.exports = { compile, interpret, collectEvaluatedProperties, collectEvaluatedItems };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const { Schema, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
const jsonStringify = require("fastest-stable-stringify");
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const compile = (schema) => Schema.value(schema).map(jsonStringify);
|
|
6
|
+
const interpret = (enum_, instance) => enum_.some((enumValue) => jsonStringify(Instance.value(instance)) === enumValue);
|
|
7
|
+
|
|
8
|
+
module.exports = { compile, interpret };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const { Schema, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const compile = async (schema) => Schema.value(schema);
|
|
5
|
+
const interpret = (exclusiveMaximum, instance) => !Instance.typeOf(instance, "number") || Instance.value(instance) < exclusiveMaximum;
|
|
6
|
+
|
|
7
|
+
module.exports = { compile, interpret };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const { Schema, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const compile = async (schema) => Schema.value(schema);
|
|
5
|
+
const interpret = (exclusiveMinimum, instance) => !Instance.typeOf(instance, "number") || Instance.value(instance) > exclusiveMinimum;
|
|
6
|
+
|
|
7
|
+
module.exports = { compile, interpret };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const { Core } = require("@hyperjump/json-schema-core");
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const compile = (schema, ast) => Core.compileSchema(schema, ast);
|
|
5
|
+
|
|
6
|
+
const interpret = (ifSchema, instance, ast, dynamicAnchors) => {
|
|
7
|
+
Core.interpretSchema(ifSchema, instance, ast, dynamicAnchors);
|
|
8
|
+
return true;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const collectEvaluatedProperties = (ifSchema, instance, ast, dynamicAnchors) => {
|
|
12
|
+
return Core.collectEvaluatedProperties(ifSchema, instance, ast, dynamicAnchors) || [];
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const collectEvaluatedItems = (ifSchema, instance, ast, dynamicAnchors) => {
|
|
16
|
+
return Core.collectEvaluatedItems(ifSchema, instance, ast, dynamicAnchors) || new Set();
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
module.exports = { compile, interpret, collectEvaluatedProperties, collectEvaluatedItems };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
const { Keywords } = require("@hyperjump/json-schema-core");
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
module.exports = {
|
|
5
|
+
additionalItems: require("./additionalItems"),
|
|
6
|
+
additionalItems6: require("./additionalItems6"),
|
|
7
|
+
additionalProperties: require("./additionalProperties"),
|
|
8
|
+
additionalProperties6: require("./additionalProperties6"),
|
|
9
|
+
allOf: require("./allOf"),
|
|
10
|
+
anyOf: require("./anyOf"),
|
|
11
|
+
const: require("./const"),
|
|
12
|
+
contains: require("./contains"),
|
|
13
|
+
containsMinContainsMaxContains: require("./contains-minContains-maxContains"),
|
|
14
|
+
definitions: require("./definitions"),
|
|
15
|
+
dependencies: require("./dependencies"),
|
|
16
|
+
dependentRequired: require("./dependentRequired"),
|
|
17
|
+
dependentSchemas: require("./dependentSchemas"),
|
|
18
|
+
enum: require("./enum"),
|
|
19
|
+
exclusiveMaximum: require("./exclusiveMaximum"),
|
|
20
|
+
exclusiveMinimum: require("./exclusiveMinimum"),
|
|
21
|
+
if: require("./if"),
|
|
22
|
+
then: require("./then"),
|
|
23
|
+
else: require("./else"),
|
|
24
|
+
items: require("./items"),
|
|
25
|
+
items202012: require("./items202012"),
|
|
26
|
+
maxItems: require("./maxItems"),
|
|
27
|
+
maxLength: require("./maxLength"),
|
|
28
|
+
maxLength6: require("./maxLength6"),
|
|
29
|
+
maxProperties: require("./maxProperties"),
|
|
30
|
+
maximumExclusiveMaximum: require("./maximum-exclusiveMaximum"),
|
|
31
|
+
maximum: require("./maximum"),
|
|
32
|
+
metaData: Keywords.metaData,
|
|
33
|
+
minItems: require("./minItems"),
|
|
34
|
+
minLength: require("./minLength"),
|
|
35
|
+
minLength6: require("./minLength6"),
|
|
36
|
+
minProperties: require("./minProperties"),
|
|
37
|
+
minimumExclusiveMinimum: require("./minimum-exclusiveMinimum"),
|
|
38
|
+
minimum: require("./minimum"),
|
|
39
|
+
multipleOf: require("./multipleOf"),
|
|
40
|
+
not: require("./not"),
|
|
41
|
+
oneOf: require("./oneOf"),
|
|
42
|
+
pattern: require("./pattern"),
|
|
43
|
+
patternProperties: require("./patternProperties"),
|
|
44
|
+
properties: require("./properties"),
|
|
45
|
+
propertyNames: require("./propertyNames"),
|
|
46
|
+
dynamicRef: require("./dynamicRef"),
|
|
47
|
+
ref: require("./ref"),
|
|
48
|
+
required: require("./required"),
|
|
49
|
+
tupleItems: require("./tupleItems"),
|
|
50
|
+
type: require("./type"),
|
|
51
|
+
unevaluatedItems: require("./unevaluatedItems"),
|
|
52
|
+
unevaluatedProperties: require("./unevaluatedProperties"),
|
|
53
|
+
uniqueItems: require("./uniqueItems"),
|
|
54
|
+
validate: Keywords.validate
|
|
55
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const { Core, Schema, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const compile = async (schema, ast) => {
|
|
5
|
+
if (Schema.typeOf(schema, "array")) {
|
|
6
|
+
const tupleItems = await Schema.map((itemSchema) => Core.compileSchema(itemSchema, ast), schema);
|
|
7
|
+
return Promise.all(tupleItems);
|
|
8
|
+
} else {
|
|
9
|
+
return Core.compileSchema(schema, ast);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const interpret = (items, instance, ast, dynamicAnchors) => {
|
|
14
|
+
if (!Instance.typeOf(instance, "array")) {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (typeof items === "string") {
|
|
19
|
+
return Instance.every((itemValue) => Core.interpretSchema(items, itemValue, ast, dynamicAnchors), instance);
|
|
20
|
+
} else {
|
|
21
|
+
return Instance.every((item, ndx) => !(ndx in items) || Core.interpretSchema(items[ndx], item, ast, dynamicAnchors), instance);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const collectEvaluatedItems = (items, instance, ast, dynamicAnchors) => {
|
|
26
|
+
return interpret(items, instance, ast, dynamicAnchors) && (typeof items === "string"
|
|
27
|
+
? new Set(Instance.map((item, itemIndex) => itemIndex, instance))
|
|
28
|
+
: new Set(items.map((item, itemIndex) => itemIndex)));
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
module.exports = { compile, interpret, collectEvaluatedItems };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const { Core, Schema, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const compile = async (schema, ast, parentSchema) => {
|
|
5
|
+
const items = await Schema.step("prefixItems", parentSchema);
|
|
6
|
+
const numberOfPrefixItems = Schema.typeOf(items, "array") ? Schema.length(items) : 0;
|
|
7
|
+
|
|
8
|
+
return [numberOfPrefixItems, await Core.compileSchema(schema, ast)];
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const interpret = ([numberOfPrefixItems, items], instance, ast, dynamicAnchors) => {
|
|
12
|
+
if (!Instance.typeOf(instance, "array")) {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return Instance.every((item, ndx) => ndx < numberOfPrefixItems || Core.interpretSchema(items, item, ast, dynamicAnchors), instance);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const collectEvaluatedItems = (keywordValue, instance, ast, dynamicAnchors) => {
|
|
20
|
+
return interpret(keywordValue, instance, ast, dynamicAnchors) && new Set(Instance.map((item, ndx) => ndx, instance));
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
module.exports = { compile, interpret, collectEvaluatedItems };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const { Schema, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const compile = (schema) => Schema.value(schema);
|
|
5
|
+
const interpret = (maxItems, instance) => !Instance.typeOf(instance, "array") || Instance.length(instance) <= maxItems;
|
|
6
|
+
|
|
7
|
+
module.exports = { compile, interpret };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const { Schema, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const compile = (schema) => Schema.value(schema);
|
|
5
|
+
const interpret = (maxLength, instance) => !Instance.typeOf(instance, "string") || Instance.length(instance) <= maxLength;
|
|
6
|
+
|
|
7
|
+
module.exports = { compile, interpret };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const { Schema, Instance } = require("@hyperjump/json-schema-core");
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const compile = (schema) => Schema.value(schema);
|
|
5
|
+
const interpret = (maxLength, instance) => !Instance.typeOf(instance, "string") || [...Instance.value(instance)].length <= maxLength;
|
|
6
|
+
|
|
7
|
+
module.exports = { compile, interpret };
|