Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/hyperjump-json-schema.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import {
unregisterSchema,
validate
} from "@hyperjump/json-schema/draft-2020-12";
import "@hyperjump/json-schema/draft-2019-09";

import "@hyperjump/json-schema/formats";
import { BASIC } from "@hyperjump/json-schema/experimental";
import { jsonSchemaErrors } from "../src/index.js";
Expand Down Expand Up @@ -180,7 +182,7 @@ const getMessage = await (async function () {
}());

runTests("https://json-schema.org/draft/2020-12/schema", 2020);
// runTests("https://json-schema.org/draft/2019-09/schema", 2019);
runTests("https://json-schema.org/draft/2019-09/schema", 2019);
// runTests("http://json-schema.org/draft-07/schema", 7);
// runTests("http://json-schema.org/draft-06/schema", 6);
// runTests("http://json-schema.org/draft-04/schema", 4);
5 changes: 5 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ import unevaluatedPropertiesNormalizationHandler from "./normalization-handlers/
import uniqueItemsNormalizationHandler from "./normalization-handlers/uniqueItems.js";
import unknownNormalizationHandler from "./normalization-handlers/unknown.js";

import itemsDraft04NormalizationHandler from "./normalization-handlers/draft-04/items.js";
import additionalItemsDraft04NormalizationHandler from "./normalization-handlers/draft-04/additionalItems.js";

// Error Handlers
import anyOfErrorHandler from "./error-handlers/anyOf.js";
import booleanSchemaErrorHandler from "./error-handlers/boolean-schema.js";
Expand Down Expand Up @@ -119,6 +122,8 @@ setNormalizationHandler("https://json-schema.org/keyword/unevaluatedItems", unev
setNormalizationHandler("https://json-schema.org/keyword/unevaluatedProperties", unevaluatedPropertiesNormalizationHandler);
setNormalizationHandler("https://json-schema.org/keyword/uniqueItems", uniqueItemsNormalizationHandler);
setNormalizationHandler("https://json-schema.org/keyword/unknown", unknownNormalizationHandler);
setNormalizationHandler("https://json-schema.org/keyword/draft-04/items", itemsDraft04NormalizationHandler);
setNormalizationHandler("https://json-schema.org/keyword/draft-04/additionalItems", additionalItemsDraft04NormalizationHandler);

addErrorHandler(anyOfErrorHandler);
addErrorHandler(booleanSchemaErrorHandler);
Expand Down
29 changes: 29 additions & 0 deletions src/normalization-handlers/draft-04/additionalItems.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { evaluateSchema } from "../../json-schema-errors.js";
import * as Instance from "@hyperjump/json-schema/instance/experimental";
import * as Pact from "@hyperjump/pact";

/**
* @import { NormalizationHandler, NormalizedOutput } from "../../index.d.ts"
*/

/** @type NormalizationHandler<[number, string]> */
const additionalItemsDraft04NormalizationHandler = {
evaluate([numberOfItems, additionalItems], instance, context) {
/** @type NormalizedOutput[] */
const outputs = [];

if (Instance.typeOf(instance) !== "array") {
return outputs;
}

for (const itemNode of Pact.drop(numberOfItems, Instance.iter(instance))) {
outputs.push(evaluateSchema(additionalItems, itemNode, context));
}

return outputs;
},

simpleApplicator: true
};

export default additionalItemsDraft04NormalizationHandler;
37 changes: 37 additions & 0 deletions src/normalization-handlers/draft-04/items.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { evaluateSchema } from "../../json-schema-errors.js";
import * as Instance from "@hyperjump/json-schema/instance/experimental";

/**
* @import { NormalizationHandler, NormalizedOutput } from "../../index.d.ts"
*/

/** @type NormalizationHandler<string | string[]> */
const itemsDraft04NormalizationHandler = {
evaluate(items, instance, context) {
/** @type NormalizedOutput[] */
const outputs = [];

if (Instance.typeOf(instance) !== "array") {
return outputs;
}

if (Array.isArray(items)) {
for (const [index, schemaLocation] of items.entries()) {
const itemNode = Instance.step(String(index), instance);
if (itemNode) {
outputs.push(evaluateSchema(schemaLocation, itemNode, context));
}
}
} else {
for (const itemNode of Instance.iter(instance)) {
outputs.push(evaluateSchema(/** @type {string} */ (items), itemNode, context));
}
}

return outputs;
},

simpleApplicator: true
};

export default itemsDraft04NormalizationHandler;
Loading