diff --git a/src/json-schema-errors.js b/src/json-schema-errors.js index 6040616..165ffaa 100644 --- a/src/json-schema-errors.js +++ b/src/json-schema-errors.js @@ -92,7 +92,7 @@ export const evaluateSchema = (schemaLocation, instance, context) => { let valid = true; /** @type API.NormalizedOutput */ - const output = { [instanceLocation]: {} }; + const output = {}; for (const plugin of context.plugins) { plugin.beforeSchema?.(schemaLocation, instance, context); @@ -101,6 +101,7 @@ export const evaluateSchema = (schemaLocation, instance, context) => { const schemaNode = context.ast[schemaLocation]; if (typeof schemaNode === "boolean") { if (context.errorIndex[schemaLocation]?.[instanceLocation]) { + output[instanceLocation] ??= {}; output[instanceLocation] = { "https://json-schema.org/validation": { [schemaLocation]: schemaNode @@ -139,6 +140,7 @@ export const evaluateSchema = (schemaLocation, instance, context) => { mergeOutput(output, suboutput); } } else { + output[instanceLocation] ??= {}; output[instanceLocation][normalizedKeywordUri] ??= {}; output[instanceLocation][normalizedKeywordUri][keywordLocation] = isKeywordValid || (keywordOutput ?? false); } diff --git a/src/normalization-handlers/if.js b/src/normalization-handlers/if.js index 117ec30..875d27b 100644 --- a/src/normalization-handlers/if.js +++ b/src/normalization-handlers/if.js @@ -1,13 +1,11 @@ -import { evaluateSchema } from "../json-schema-errors.js"; - /** * @import { NormalizationHandler } from "../index.d.ts" */ /** @type NormalizationHandler */ const ifNormalizationHandler = { - evaluate(ifLocation, instance, context) { - return [evaluateSchema(ifLocation, instance, context)]; + evaluate() { + return []; }, simpleApplicator: true }; diff --git a/src/normalization-handlers/properties.js b/src/normalization-handlers/properties.js index c7d30ae..6c443c6 100644 --- a/src/normalization-handlers/properties.js +++ b/src/normalization-handlers/properties.js @@ -1,6 +1,5 @@ import { evaluateSchema } from "../json-schema-errors.js"; import * as Instance from "@hyperjump/json-schema/instance/experimental"; -import * as JsonPointer from "@hyperjump/json-pointer"; /** * @import { NormalizationHandler, NormalizedOutput } from "../index.d.ts" @@ -16,13 +15,10 @@ const propertiesNormalizationHandler = { return outputs; } - for (const propertyName in properties) { - const propertyNode = Instance.step(propertyName, instance); - if (!propertyNode) { - outputs.push({ - [JsonPointer.append(propertyName, Instance.uri(instance))]: {} - }); - } else { + for (const [propertyNameNode, propertyNode] of Instance.entries(instance)) { + const propertyName = Instance.value(propertyNameNode); + + if (properties[propertyName]) { outputs.push(evaluateSchema(properties[propertyName], propertyNode, context)); } }