From 1046bd0ba7d00c7783d19ab3d9709cfad8bbb1ea Mon Sep 17 00:00:00 2001 From: Diya Date: Thu, 23 Apr 2026 00:25:27 +0530 Subject: [PATCH] add optional id to plugins --- README.md | 3 +++ draft-2020-12/dynamicRef.js | 1 + lib/evaluation-plugins/annotations.js | 2 ++ lib/evaluation-plugins/basic-output.js | 2 ++ lib/evaluation-plugins/detailed-output.js | 2 ++ lib/experimental.d.ts | 4 ++++ lib/keywords/dynamicRef.js | 1 + lib/keywords/unevaluatedItems.js | 1 + lib/keywords/unevaluatedProperties.js | 1 + 9 files changed, 17 insertions(+) diff --git a/README.md b/README.md index ffb81958..2ceab41f 100644 --- a/README.md +++ b/README.md @@ -591,6 +591,8 @@ import { registerSchema, validate } from "@hyperjump/json-schema/draft-2020-12"; import { BASIC } from "@hyperjump/json-schema/experimental.js"; class EvaluatedKeywordsPlugin { + id = "https://example.com/plugins/evaluated-keywords"; + constructor() { this.schemaLocations = new Set(); } @@ -772,6 +774,7 @@ These are available from the `@hyperjump/json-schema/experimental` export. processed to create human readable error messages as needed. * **EvaluationPlugin**: object + * id?: string * beforeSchema?(url: string, instance: JsonNode, context: Context): void * beforeKeyword?(keywordNode: CompiledSchemaNode, instance: JsonNode, context: Context, schemaContext: Context, keyword: Keyword): void * afterKeyword?(keywordNode: CompiledSchemaNode, instance: JsonNode, context: Context, valid: boolean, schemaContext: Context, keyword: Keyword): void diff --git a/draft-2020-12/dynamicRef.js b/draft-2020-12/dynamicRef.js index a5f2581b..d221c7b5 100644 --- a/draft-2020-12/dynamicRef.js +++ b/draft-2020-12/dynamicRef.js @@ -24,6 +24,7 @@ const interpret = ([id, fragment, ref], instance, context) => { const simpleApplicator = true; const plugin = { + id: `${id}#plugin`, beforeSchema(url, _instance, context) { context.dynamicAnchors = { ...context.ast.metaData[toAbsoluteUri(url)].dynamicAnchors, diff --git a/lib/evaluation-plugins/annotations.js b/lib/evaluation-plugins/annotations.js index 1575181b..369fa1f0 100644 --- a/lib/evaluation-plugins/annotations.js +++ b/lib/evaluation-plugins/annotations.js @@ -2,6 +2,8 @@ import * as Instance from "../instance.js"; export class AnnotationsPlugin { + id = "https://json-schema.hyperjump.io/plugins/annotations"; + beforeSchema(_url, _instance, context) { context.annotations ??= []; context.schemaAnnotations = []; diff --git a/lib/evaluation-plugins/basic-output.js b/lib/evaluation-plugins/basic-output.js index 8a82e653..98144bb1 100644 --- a/lib/evaluation-plugins/basic-output.js +++ b/lib/evaluation-plugins/basic-output.js @@ -3,6 +3,8 @@ import * as Instance from "../instance.js"; export class BasicOutputPlugin { + id = "https://json-schema.hyperjump.io/plugins/basic-output"; + beforeSchema(_url, _intance, context) { context.errors ??= []; } diff --git a/lib/evaluation-plugins/detailed-output.js b/lib/evaluation-plugins/detailed-output.js index 84f5593a..eac4eb4c 100644 --- a/lib/evaluation-plugins/detailed-output.js +++ b/lib/evaluation-plugins/detailed-output.js @@ -3,6 +3,8 @@ import * as Instance from "../instance.js"; export class DetailedOutputPlugin { + id = "https://json-schema.hyperjump.io/plugins/detailed-output"; + beforeSchema(_url, _instance, context) { context.errors ??= []; } diff --git a/lib/experimental.d.ts b/lib/experimental.d.ts index 969ef138..1718cf98 100644 --- a/lib/experimental.d.ts +++ b/lib/experimental.d.ts @@ -88,6 +88,7 @@ export type ValidationContext = { // Evaluation Plugins export type EvaluationPlugin = { + id?: string; beforeSchema?(url: string, instance: JsonNode, context: Context): void; beforeKeyword?(keywordNode: Node, instance: JsonNode, context: Context, schemaContext: Context, keyword: Keyword): void; afterKeyword?(keywordNode: Node, instance: JsonNode, context: Context, valid: boolean, schemaContext: Context, keyword: Keyword): void; @@ -95,6 +96,7 @@ export type EvaluationPlugin { + id: string; errors: OutputUnit[]; beforeSchema(url: string, instance: JsonNode, context: ErrorsContext): void; @@ -104,6 +106,7 @@ export class BasicOutputPlugin implements EvaluationPlugin { } export class DetailedOutputPlugin implements EvaluationPlugin { + id: string; errors: OutputUnit[]; beforeSchema(url: string, instance: JsonNode, context: ErrorsContext): void; @@ -117,6 +120,7 @@ export type ErrorsContext = ValidationContext & { }; export class AnnotationsPlugin implements EvaluationPlugin { + id: string; annotations: OutputUnit[]; beforeSchema(url: string, instance: JsonNode, context: AnnotationsContext): void; diff --git a/lib/keywords/dynamicRef.js b/lib/keywords/dynamicRef.js index 458c9234..4cd4f04b 100644 --- a/lib/keywords/dynamicRef.js +++ b/lib/keywords/dynamicRef.js @@ -23,6 +23,7 @@ const interpret = (fragment, instance, context) => { const simpleApplicator = true; const plugin = { + id: `${id}#plugin`, beforeSchema(url, _instance, context) { context.dynamicAnchors = { ...context.ast.metaData[toAbsoluteUri(url)].dynamicAnchors, diff --git a/lib/keywords/unevaluatedItems.js b/lib/keywords/unevaluatedItems.js index 81fdc233..3a2390d2 100644 --- a/lib/keywords/unevaluatedItems.js +++ b/lib/keywords/unevaluatedItems.js @@ -33,6 +33,7 @@ const interpret = (unevaluatedItems, instance, context) => { const simpleApplicator = true; const plugin = { + id: `${id}#plugin`, beforeSchema(_url, instance, context) { context.evaluatedItems ??= new Set(); context.schemaEvaluatedItems = new Set(); diff --git a/lib/keywords/unevaluatedProperties.js b/lib/keywords/unevaluatedProperties.js index 49fffe61..3f17b365 100644 --- a/lib/keywords/unevaluatedProperties.js +++ b/lib/keywords/unevaluatedProperties.js @@ -33,6 +33,7 @@ const interpret = (unevaluatedProperties, instance, context) => { const simpleApplicator = true; const plugin = { + id: `${id}#plugin`, beforeSchema(_url, instance, context) { context.evaluatedProperties ??= new Set(); context.schemaEvaluatedProperties = new Set();